📄 can.s
字号:
.module CAN.C
.area text(rom, con, rel)
.dbfile D:\CANBUS\数据帧\查询\单向通讯\结点2\CAN.C
.area data(ram, con, rel)
.dbfile D:\CANBUS\数据帧\查询\单向通讯\结点2\CAN.C
_send_Buf::
.blkb 2
.area idata
.byte 49,50
.area data(ram, con, rel)
.dbfile D:\CANBUS\数据帧\查询\单向通讯\结点2\CAN.C
.blkb 2
.area idata
.byte 51,52
.area data(ram, con, rel)
.dbfile D:\CANBUS\数据帧\查询\单向通讯\结点2\CAN.C
.blkb 2
.area idata
.byte 53,54
.area data(ram, con, rel)
.dbfile D:\CANBUS\数据帧\查询\单向通讯\结点2\CAN.C
.blkb 2
.area idata
.byte 55,56
.area data(ram, con, rel)
.dbfile D:\CANBUS\数据帧\查询\单向通讯\结点2\CAN.C
.dbsym e send_Buf _send_Buf A[8:8]c
.area text(rom, con, rel)
.dbfile D:\CANBUS\数据帧\查询\单向通讯\结点2\CAN.C
.dbfunc e CAN_ClrMailBox _CAN_ClrMailBox fV
; mob_channel -> R16
; mob_data -> R18
.even
_CAN_ClrMailBox::
.dbline -1
.dbline 34
; //////////////////////////////////////////////////////////
; //单向查询
; //说明:
; // 本程序是结点2,只负责发送
; //////////////////////////////////////////////////////////
;
;
; //-------------------------------------------------------------------
; // 查询发送方式1总结:
; //检测上次发送完成(TXOK)
; //前提条件:CAN_Init()子程序中,必须事先将CANPAGE对象的TXOK位置位
; //-------------------------------------------------------------------
; // IF 上次发送完成(TXOK) THEN
; // (1)、清除TXOK
; // (2)、填写发送数据
; // (3)、启动发送
;
; //-------------------------------------------------------------------
; // 查询发送方式2总结:
; //while (当前发送完成)
; //-------------------------------------------------------------------
; // (1)、填写发送数据
; // (2)、启动发送
; // (3)、while (TXOK)
; // (4)、清除TXOK
;
; #define _CAN_H
; #include "AT90CAN128.H"
;
; uint8 send_Buf[8] = {0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38};
;
;
; void CAN_ClrMailBox(void)
; {
.dbline 38
; uint8 mob_channel;
; uint8 mob_data;
;
; for (mob_channel = 0 ; mob_channel < 15 ; mob_channel++)
clr R16
xjmp L7
L4:
.dbline 39
; {
.dbline 40
; CANPAGE = (mob_channel << 4);
mov R24,R16
andi R24,#0x0F
swap R24
sts 237,R24
.dbline 41
; CANIDT4 = 0;
clr R2
sts 240,R2
.dbline 42
; CANIDT3 = 0;
sts 241,R2
.dbline 43
; CANIDT2 = 0;
sts 242,R2
.dbline 44
; CANIDT1 = 0;
sts 243,R2
.dbline 45
; CANIDM4 = 0;
sts 244,R2
.dbline 46
; CANIDM3 = 0;
sts 245,R2
.dbline 47
; CANIDM2 = 0;
sts 246,R2
.dbline 48
; CANIDM1 = 0;
sts 247,R2
.dbline 49
; CANSTMOB = 0;
sts 238,R2
.dbline 50
; CANCDMOB = 0;
sts 239,R2
.dbline 51
; for (mob_data = 0; mob_data < 8; mob_data++)
clr R18
xjmp L11
L8:
.dbline 52
; CANMSG = 0;
clr R2
sts 250,R2
L9:
.dbline 51
inc R18
L11:
.dbline 51
cpi R18,8
brlo L8
X0:
.dbline 53
; }
L5:
.dbline 38
inc R16
L7:
.dbline 38
cpi R16,15
brlo L4
X1:
.dbline -2
L3:
.dbline 0 ; func end
ret
.dbsym r mob_channel 16 c
.dbsym r mob_data 18 c
.dbend
.dbfunc e CAN_Init _CAN_Init fV
.even
_CAN_Init::
.dbline -1
.dbline 58
; }
;
;
; void CAN_Init(void)
; {
.dbline 59
; CAN_SOFT_RESET();
ldi R24,1
sts 216,R24
L13:
.dbline 60
; while (CANGSTA & (1 << ENFG));
L14:
.dbline 60
lds R2,217
sbrc R2,2
rjmp L13
X2:
.dbline 61
; CAN_ClrMailBox();
xcall _CAN_ClrMailBox
.dbline 62
; CANBT1 = 0x02;
ldi R24,2
sts 226,R24
.dbline 63
; CANBT2 = 0x04;
ldi R24,4
sts 227,R24
.dbline 64
; CANBT3 = 0x13;
ldi R24,19
sts 228,R24
.dbline 65
; CANTCON = 0xFF;
ldi R24,255
sts 229,R24
.dbline 66
; CANPAGE = 0x00;
clr R2
sts 237,R2
.dbline 67
; CANSTMOB = 0x00;
sts 238,R2
.dbline 68
; CANIDT4 = 0x00;
sts 240,R2
.dbline 69
; CANIDT3 = 0x00;
sts 241,R2
.dbline 70
; CANIDT2 = 0x40;
ldi R24,64
sts 242,R24
.dbline 71
; CANIDT1 = 0x02;
ldi R24,2
sts 243,R24
.dbline 72
; CANSTMOB = BIT(TXOK);
ldi R24,64
sts 238,R24
.dbline 73
; CAN_START();
lds R24,216
ori R24,2
sts 216,R24
L16:
.dbline 74
; while (!(CANGSTA & (1 << ENFG)));
L17:
.dbline 74
lds R2,217
sbrs R2,2
rjmp L16
X3:
.dbline -2
L12:
.dbline 0 ; func end
ret
.dbend
; }
;
;
; /*
; #pragma interrupt_handler AT90CAN128_ISR:iv_CANIT
; void AT90CAN128_ISR(void)
; {
; uint8 i;
; uint8 save_canpage;
;
; save_canpage = CANPAGE;
; // echo receive data on channel 0 reception
;
; CANPAGE = (0 << 4); // CHNB=0x00; select channel 0
; if (CANSTMOB & (1 << RXOK))
; {
; CHA_Init();
; USART1_send_buffer[0] = CANIDT1;
; USART1_send_buffer[1] = CANIDT2;
; for (i = 0 ; i < 8 ; i++)
; USART1_send_buffer[2+i] = CANMSG; // save receive data
; USART1_Begin_Send();
;
;
; CANPAGE = (1 << 4); // CHNB=0x00; select channel 1
; // Channel 1 configuration
; CANCDMOB = 0x00; // reset channel 1 configuration
; for (i = 0 ; i < 8 ; i++)
; CANMSG = i; // load saved data
; CANCDMOB |= 0x08; // DLC_MAX; /* transmit 8 bytes
; CANCDMOB |= 0x40; // CH_TxENA; /* emission enabled
; CANEN2 |= (1 << 1); // channel 1 enable
; CANSTMOB=0x00; // reset channel 1 status
;
;
; }
; CANPAGE = (0 << 4); // CHNB=0x00; select channel 0
; CANCDMOB = 0x00; // CH_DISABLE; reset channel 0 configuration
; CANCDMOB |= 0x08; // DLC_MAX; receive 8 bytes
; CANCDMOB |= 0x80; //CH_RxENA; reception enable
; CANEN2 |= (1 << 0); // channel 0 enable
; CANSTMOB=0x00; // reset channel 0 status
; CANPAGE= save_canpage; // restore saved context
; CANGIT = 0x00; // reset all flags
; }
; */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -