91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 21KB
    文件類型: .rar
    金幣: 2
    下載: 0 次
    發(fā)布日期: 2021-05-21
  • 語(yǔ)言: 其他
  • 標(biāo)簽: CAN總線??

資源簡(jiǎn)介

基于CAN總線的簡(jiǎn)單發(fā)送和接收程序,由此程序可以了解CAN的基本工作原理。對(duì)初學(xué)者很有幫助,并且可以以此做為模板進(jìn)行CAN總線收發(fā)的編寫(xiě)。

資源截圖

代碼片段和文件信息

#include?
#define?byte?unsigned?char
#define?word?unsigned?int
#define?TIM0??-50000
#define?MyAddr??1
#define?PtAddr??2
#define?READ???‘R‘
#define?WRIT???‘W‘
#define?CAN_PORT?P0
sbit?CAN_RST?=?P2^7;
bit?TMS;
#define?CAN_CR???0????//控制
#define?CAN_CMR??1????//命令
#define?CAN_SR???2????//狀態(tài)
#define?CAN_IR???3????//中斷
#define?CAN_ACR??4????//驗(yàn)收
#define?CAN_AMR??5????//屏蔽
#define?CAN_BTR0?6????//時(shí)序0
#define?CAN_BTR1?7????//時(shí)序1
#define?CAN_OCR??8????//輸出
#define?CAN_TXB??10???//發(fā)送緩沖
#define?CAN_RXB??20???//接收緩沖
#define?CAN_CDR??31???//分頻
byte?pdata?CAN[32]?_at_(0);
sbit?LED1????=?P2^0;
sbit?LED2????=?P2^1;
sbit?KEY1????=?P2^2;
sbit?KEY2????=?P2^3;
sfr??AUX??=?0x8E; //輔助/附加接口
sfr??WDT??=?0xA6; //看門(mén)狗
void?WDTRST()
{
??EA=0; //關(guān)中斷
??WDT=0x1e; //看門(mén)狗
??WDT=0xe1;
??EA=1; //開(kāi)中斷
}

bit?CANBUS;
byte?idata?TXB[10];//idata表示外部地址
byte?idata?RXB[10];

//1、data?的數(shù)據(jù)類型是直接訪問(wèn);idata的數(shù)據(jù)類型是間接訪問(wèn)。
//2、data?的類型數(shù)據(jù)只能存儲(chǔ)在低128個(gè)字節(jié)中,而idata的類型的數(shù)據(jù)可以
//???存儲(chǔ)在256個(gè)字節(jié)中(低128個(gè)字節(jié)和高128個(gè)字節(jié));idata類型的數(shù)據(jù)具體
//???的存儲(chǔ)位置(低128個(gè)字節(jié)或高128個(gè)字節(jié))編譯器會(huì)自動(dòng)分配。


void?delay(word?p)
{
??while(p--);
}

void?CAN_SEND()?/*發(fā)送數(shù)據(jù)部分*/
{
?byte?ip;
?p=CAN[CAN_SR]; //狀態(tài)寄存器的內(nèi)容給p
?if?(p&0x04) //檢查第三位即發(fā)送緩沖器的狀態(tài),為1?CPU可以向發(fā)送緩沖器寫(xiě)報(bào)文
?{
??p=CAN_TXB;????????/*p指向發(fā)送緩存首址*/
??for(i=0;i<10;i++)?CAN[p++]=TXB[i];
??CAN[CAN_CMR]=0x01;?????/*請(qǐng)求發(fā)送*/
?}
}

void?CAN_INT()?interrupt?0?using?1/*接收中斷*/
{
??byte?ip;
??p=CAN[CAN_IR];
??if(p&0x01)?//中斷寄存器的低一位為一:RXFIFO不空且中斷寄存器的RIE(接收中斷使能)位置1
??{
????p=CAN_RXB;//接收數(shù)據(jù)的首地址給p
????for(i=0;i<10;i++)
????{
?????RXB[i]=CAN[p++];//讀接收的數(shù)據(jù)
????}
????CAN[CAN_CMR]=0x04;?????/*釋放接收緩存*/
????CANBUS=1;
??}
}

void?CAN_INI()??/*初始化部分*/
{
??CAN[CAN_CR]=0x01;??? //進(jìn)入復(fù)位模式,允許訪問(wèn)各個(gè)寄存器
??CAN[CAN_ACR]=MyAddr; //驗(yàn)收,表示接收的數(shù)據(jù)中第一位為1。
??CAN[CAN_AMR]=0x00;????//屏蔽;00表示不屏蔽,8位全有效。
??CAN[CAN_BTR0]=0x07;???//總線時(shí)序0
??CAN[CAN_BTR1]=0xff; //總線時(shí)序1
??CAN[CAN_OCR]=0x1A;???//0xaa0xd20xfa?輸出控制
??CAN[CAN_CR]=0x02;?????//接收中斷使能,否則不能接收??
??
}

void?Timer1()?interrupt?1?using?1
{
??TH0=TIM0&0XFF;?TL0=TIM0>>8;??TR0=1;
??TM=1;
}

void?main()?
{
?byte?CMD;?AUX=2;//???AUX=2??,實(shí)際單片機(jī)晶振和原理圖不同
?IE=0x83;?//打開(kāi)外部中斷0x82為關(guān)閉外部中斷
?IT0=1;//外中斷請(qǐng)求信號(hào)方式控制位:1?脈沖方式(后沿負(fù)跳有效)0?電平方式(低電平有效)
?TH0=TIM0&0XFF;?TL0=TIM0>>8;??TR0=1; //啟動(dòng)0號(hào)計(jì)數(shù)器-50000equsFFFF3CB0;TH0==B0TL0==3C
?KEY1=1;KEY2=1;LED1=0;LED2=0;
?delay(15000);LED1=1;LED2=1;
?CAN_INI();
?while(1)
?{
???if(TM)
???{
?????S=!S;?TM=0;
?????TXB[0]=PtAddr;
?????TXB[1]=8;
?????TXB[2]=MyAddr;?
?if(S)//判斷按鍵按下?然后發(fā)送數(shù)據(jù)
?{
???????TXB[3]=WRIT;
???????if(KEY1==0)?TXB[4]=0;?else?TXB[4]=1;
???????if(KEY2==0)?TXB[5]=0;?else?TXB[5]=1;
???????CAN_SEND();
???}
?else
?{
???????TXB[3]=READ;
???????CAN_SEND();
?}
??}
???if(CANBUS)
???{
?????CANBUS=0;
?? ?CMD=RXB[3];?
?if(CMD==WRIT)????????//WRIT
?{
???if(RXB[4]==0)?LED1=0;?else?LED1=1;
???if(RXB[5]==0)?LED2=0;?else?LED2=1;
?}
?else?if(CMD==READ)???//READ
?{
TXB[0]=RXB[2];
??? TXB[1]=8;
??? TXB[2]

?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----

?????文件???????2771??2010-06-09?10:48??can程序\CAN總線實(shí)驗(yàn)板A--2號(hào).C

?????文件???????3641??2010-06-09?10:48??can程序\CAN總線實(shí)驗(yàn)板A--1號(hào).c

?????文件????1797366??2010-03-30?23:08??can程序\CAN總線系統(tǒng)大板A2圖.bmp

?????目錄??????????0??2010-06-09?10:49??can程序

-----------?---------??----------?-----??----

??????????????1803778????????????????????4


評(píng)論

共有 條評(píng)論

相關(guān)資源