📄 can.s
字号:
.module CAN.C
.area text(rom, con, rel)
.dbfile D:\CANBUS\数据帧\查询\单向通讯\结点1-串口\CAN.C
.dbfunc e CAN_ClrMailBox _CAN_ClrMailBox fV
; mob_channel -> R16
; mob_data -> R18
.even
_CAN_ClrMailBox::
.dbline -1
.dbline 19
; //////////////////////////////////////////////////////////
; //单向查询
; //说明:
; // 本程序是结点1,只负责接收
; //////////////////////////////////////////////////////////
; #define _CAN_H
; #include "AT90CAN128.H"
;
; #define SIT0 0
; #define SIT1 1
; #define SIT2 2
; #define SIT3 3
; #define SIT4 4
; #define SIT5 5
; #define SIT6 6
; #define SIT7 7
;
; void CAN_ClrMailBox(void)
; {
.dbline 23
; uint8 mob_channel;
; uint8 mob_data;
;
; for (mob_channel = 0 ; mob_channel < 15 ; mob_channel++)
clr R16
xjmp L7
L4:
.dbline 24
; {
.dbline 25
; CANPAGE = (mob_channel << 4);
mov R24,R16
andi R24,#0x0F
swap R24
sts 237,R24
.dbline 26
; CANIDT4 = 0;
clr R2
sts 240,R2
.dbline 27
; CANIDT3 = 0;
sts 241,R2
.dbline 28
; CANIDT2 = 0;
sts 242,R2
.dbline 29
; CANIDT1 = 0;
sts 243,R2
.dbline 30
; CANIDM4 = 0;
sts 244,R2
.dbline 31
; CANIDM3 = 0;
sts 245,R2
.dbline 32
; CANIDM2 = 0;
sts 246,R2
.dbline 33
; CANIDM1 = 0;
sts 247,R2
.dbline 34
; CANSTMOB = 0;
sts 238,R2
.dbline 35
; CANCDMOB = 0;
sts 239,R2
.dbline 36
; for (mob_data = 0; mob_data < 8; mob_data++)
clr R18
xjmp L11
L8:
.dbline 37
; CANMSG = 0;
clr R2
sts 250,R2
L9:
.dbline 36
inc R18
L11:
.dbline 36
cpi R18,8
brlo L8
X0:
.dbline 38
; }
L5:
.dbline 23
inc R16
L7:
.dbline 23
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
; i -> <dead>
.even
_CAN_Init::
.dbline -1
.dbline 42
; }
;
; void CAN_Init(void)
; {
.dbline 45
; uint8 i;
;
; CANGCON = BIT(SWRES);
ldi R24,1
sts 216,R24
L13:
.dbline 46
; while (CANGSTA & BIT(ENFG));
L14:
.dbline 46
lds R2,217
sbrc R2,2
rjmp L13
X2:
.dbline 47
; CAN_ClrMailBox();
xcall _CAN_ClrMailBox
.dbline 48
; CANBT1 = 0x02;
ldi R24,2
sts 226,R24
.dbline 49
; CANBT2 = 0x04;
ldi R24,4
sts 227,R24
.dbline 50
; CANBT3 = 0x13;
ldi R24,19
sts 228,R24
.dbline 51
; CANTCON = 0xFF;
ldi R24,255
sts 229,R24
.dbline 53
;
; CANPAGE = 0x00;
clr R2
sts 237,R2
.dbline 54
; CANSTMOB = 0x00;
sts 238,R2
.dbline 55
; CANIDT4 = 0x00;
sts 240,R2
.dbline 56
; CANIDT3 = 0x00;
sts 241,R2
.dbline 57
; CANIDT2 = 0x40;
ldi R24,64
sts 242,R24
.dbline 58
; CANIDT1 = 0x02;
ldi R24,2
sts 243,R24
.dbline 60
;
; CANIDM4 = 0xFF;
ldi R24,255
sts 244,R24
.dbline 61
; CANIDM3 = 0xFF;
sts 245,R24
.dbline 62
; CANIDM2 = 0xFF;
sts 246,R24
.dbline 63
; CANIDM1 = 0xFF;
sts 247,R24
.dbline 64
; CANCDMOB = 0x88;
ldi R24,136
sts 239,R24
.dbline 66
;
; CANGCON = 0x02;
ldi R24,2
sts 216,R24
L16:
.dbline 67
; while (!(CANGSTA & BIT(ENFG)));
L17:
.dbline 67
lds R2,217
sbrs R2,2
rjmp L16
X3:
.dbline -2
L12:
.dbline 0 ; func end
ret
.dbsym l i 1 c
.dbend
; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -