淺談Small RTOS51 下CAN總線數(shù)據(jù)收發(fā)實(shí)現(xiàn)
void main(void)
{
CpuInit(); //微控制器初始化
UserTickTimer(void);//系統(tǒng)時(shí)鐘節(jié)拍的初始化
OSStart();//啟動small rtos操作系統(tǒng)
SendData();//發(fā)送數(shù)據(jù)任務(wù)
{ unsigned char data status;
unsigned char i;
unsigned char xdata *p =CAN1_SJA_BaseAdr+REG_CAN_SR ;
unsigned char xdata *p1;
status=SJAInit();//初始化can控制器
if(status!=0){
OSSendSignal(2); //喚醒錯誤處理任務(wù)
}
P_SJAFrameStructApp =(P_SJAFrameStruct )BufCan2[0];
IT0 =0;//電平觸發(fā)模式
EX0=1;//使能CAN中斷
BufCan2[0]=0x88;
P_SJAFrameStructApp->FrameID=0x11111111;
while(1)
{
OSWait(K_TMO,2);//系統(tǒng)等待函數(shù),每兩個(gè)時(shí)鐘周期發(fā)送一次數(shù)據(jù)
P_SJAFrameStructApp->FrameID++;
p1=(unsigned char xdata *)P_SJAFrameStructApp->FrameID;
for(i=0;i4;i++) //發(fā)送測試數(shù)據(jù)
BufCan2[1+i] =*(p1+i);// 0x55;
for(i=0;i4;i++)
BufCan2[5+i] =*(p1+i);// 0x55;
for(i=0;i4;i++)
BufCan2[9+i] =*(p1+i);// 0x55;
status=SJASendData(BufCan2,0x10);//向CAN總線發(fā)送數(shù)據(jù),所發(fā)送數(shù)據(jù)的首地址是BufCan2
if(status!=0) //表示發(fā)送數(shù)據(jù)錯誤
OSSendSignal(2);喚醒錯誤處理任務(wù)
}
}
void DisPlay(void)
{
while(1){
OSWait(K_TMO,1);
ShowLED(); // led顯示處理
}
}
Error();// 錯誤信息處理任務(wù)
}
?。?) 測試結(jié)果:
如果運(yùn)行正確:數(shù)碼管會顯示依次加1的數(shù)值,否則:數(shù)碼管會顯示E-xx的錯誤代碼
5 結(jié)束語
CAN總線的產(chǎn)生與發(fā)展控制器局部網(wǎng)(CAN-CONTROLLER AREA NETWORK)是BOSCH公司為現(xiàn)代汽車應(yīng)用領(lǐng)先推出的一種多主機(jī)局部網(wǎng),由于其高性能、高可靠性、實(shí)時(shí)性等優(yōu)點(diǎn)現(xiàn)已廣泛應(yīng)用于工業(yè)自動化、多種控制設(shè)備、交通工具、醫(yī)療儀器以及建筑、環(huán)境控制等眾多部門??刂破骶植烤W(wǎng)將在我國迅速普及推廣。
隨著計(jì)算機(jī)硬件、軟件技術(shù)及集成電路技術(shù)的迅速發(fā)展,工業(yè)控制系統(tǒng)已成為計(jì)算機(jī)技術(shù)應(yīng)用領(lǐng)域中最具活力的一個(gè)分支,并取得了巨大進(jìn)步。由于對系統(tǒng)可靠性和靈活性的高要求,工業(yè)控制系統(tǒng)的發(fā)展主要表現(xiàn)為:控制面向多元化,系統(tǒng)面向分散化,即負(fù)載分散、功能分散、危險(xiǎn)分散和地域分散。
本文作者創(chuàng)新點(diǎn)是實(shí)現(xiàn)了在實(shí)時(shí)操作系統(tǒng)Small RTOS51下CAN總線上數(shù)據(jù)的接收與發(fā)送,用一個(gè)簡單的實(shí)例來說明了CAN總線的接收、發(fā)送原理。
評論