xxxx18一60岁hd中国/日韩女同互慰一区二区/西西人体扒开双腿无遮挡/日韩欧美黄色一级片 - 色护士精品影院www

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

資源簡介

基于CAN總線的簡單發送和接收程序,由此程序可以了解CAN的基本工作原理。對初學者很有幫助,并且可以以此做為模板進行CAN總線收發的編寫。

資源截圖

代碼片段和文件信息

#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????//狀態
#define?CAN_IR???3????//中斷
#define?CAN_ACR??4????//驗收
#define?CAN_AMR??5????//屏蔽
#define?CAN_BTR0?6????//時序0
#define?CAN_BTR1?7????//時序1
#define?CAN_OCR??8????//輸出
#define?CAN_TXB??10???//發送緩沖
#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; //看門狗
void?WDTRST()
{
??EA=0; //關中斷
??WDT=0x1e; //看門狗
??WDT=0xe1;
??EA=1; //開中斷
}

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

//1、data?的數據類型是直接訪問;idata的數據類型是間接訪問。
//2、data?的類型數據只能存儲在低128個字節中,而idata的類型的數據可以
//???存儲在256個字節中(低128個字節和高128個字節);idata類型的數據具體
//???的存儲位置(低128個字節或高128個字節)編譯器會自動分配。


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

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

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

void?CAN_INI()??/*初始化部分*/
{
??CAN[CAN_CR]=0x01;??? //進入復位模式,允許訪問各個寄存器
??CAN[CAN_ACR]=MyAddr; //驗收,表示接收的數據中第一位為1。
??CAN[CAN_AMR]=0x00;????//屏蔽;00表示不屏蔽,8位全有效。
??CAN[CAN_BTR0]=0x07;???//總線時序0
??CAN[CAN_BTR1]=0xff; //總線時序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??,實際單片機晶振和原理圖不同
?IE=0x83;?//打開外部中斷0x82為關閉外部中斷
?IT0=1;//外中斷請求信號方式控制位:1?脈沖方式(后沿負跳有效)0?電平方式(低電平有效)
?TH0=TIM0&0XFF;?TL0=TIM0>>8;??TR0=1; //啟動0號計數器-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)//判斷按鍵按下?然后發送數據
?{
???????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]

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件???????2771??2010-06-09?10:48??can程序\CAN總線實驗板A--2號.C

?????文件???????3641??2010-06-09?10:48??can程序\CAN總線實驗板A--1號.c

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

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

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

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


評論

共有 條評論