📄 can.s
字号:
.module can.c
.area text(rom, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\CAN网可配置型报警灯板程序\can.c
.area lit(rom, con, rel)
_CanBaud::
.byte 2,4
.byte 19
.byte 6,4
.byte 19
.byte 14,4
.byte 19
.byte 18,4
.byte 19
.byte 30,4
.byte 19
.byte 38,4
.byte 19
.dbsym e CanBaud _CanBaud A[18:6:3]kc
.area data(ram, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\CAN网可配置型报警灯板程序\can.c
_CANMOBID::
.blkb 4
.area idata
.word 0,4096
.area data(ram, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\CAN网可配置型报警灯板程序\can.c
.blkb 4
.area idata
.word 0,8192
.area data(ram, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\CAN网可配置型报警灯板程序\can.c
.blkb 4
.area idata
.word 0,12288
.area data(ram, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\CAN网可配置型报警灯板程序\can.c
.blkb 4
.area idata
.word 0,16384
.area data(ram, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\CAN网可配置型报警灯板程序\can.c
.blkb 4
.area idata
.word 0,20480
.area data(ram, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\CAN网可配置型报警灯板程序\can.c
.blkb 4
.area idata
.word 0,24576
.area data(ram, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\CAN网可配置型报警灯板程序\can.c
.blkb 4
.area idata
.word 0,256
.area data(ram, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\CAN网可配置型报警灯板程序\can.c
.blkb 4
.area idata
.word 1,256
.area data(ram, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\CAN网可配置型报警灯板程序\can.c
.blkb 4
.area idata
.word 65280,512
.area data(ram, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\CAN网可配置型报警灯板程序\can.c
.blkb 4
.area idata
.word 1,4608
.area data(ram, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\CAN网可配置型报警灯板程序\can.c
.blkb 4
.area idata
.word 2,256
.area data(ram, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\CAN网可配置型报警灯板程序\can.c
.blkb 4
.area idata
.word 3,256
.area data(ram, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\CAN网可配置型报警灯板程序\can.c
.blkb 4
.area idata
.word 4,256
.area data(ram, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\CAN网可配置型报警灯板程序\can.c
.blkb 4
.area idata
.word 5,256
.area data(ram, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\CAN网可配置型报警灯板程序\can.c
.blkb 4
.area idata
.word 65281,4864
.area data(ram, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\CAN网可配置型报警灯板程序\can.c
.dbsym e CANMOBID _CANMOBID A[60:15]l
_CANMOBMD::
.blkb 4
.area idata
.word 15,255
.area data(ram, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\CAN网可配置型报警灯板程序\can.c
.blkb 4
.area idata
.word 15,255
.area data(ram, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\CAN网可配置型报警灯板程序\can.c
.blkb 4
.area idata
.word 15,255
.area data(ram, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\CAN网可配置型报警灯板程序\can.c
.blkb 4
.area idata
.word 65535,8191
.area data(ram, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\CAN网可配置型报警灯板程序\can.c
.blkb 4
.area idata
.word 65535,8191
.area data(ram, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\CAN网可配置型报警灯板程序\can.c
.blkb 4
.area idata
.word 65535,8191
.area data(ram, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\CAN网可配置型报警灯板程序\can.c
.blkb 4
.area idata
.word 65535,8191
.area data(ram, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\CAN网可配置型报警灯板程序\can.c
.blkb 4
.area idata
.word 65535,8191
.area data(ram, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\CAN网可配置型报警灯板程序\can.c
.blkb 4
.area idata
.word 65535,8191
.area data(ram, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\CAN网可配置型报警灯板程序\can.c
.blkb 4
.area idata
.word 65535,8191
.area data(ram, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\CAN网可配置型报警灯板程序\can.c
.blkb 4
.area idata
.word 65535,8191
.area data(ram, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\CAN网可配置型报警灯板程序\can.c
.blkb 4
.area idata
.word 65535,8191
.area data(ram, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\CAN网可配置型报警灯板程序\can.c
.blkb 4
.area idata
.word 65535,8191
.area data(ram, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\CAN网可配置型报警灯板程序\can.c
.blkb 4
.area idata
.word 65535,8191
.area data(ram, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\CAN网可配置型报警灯板程序\can.c
.blkb 4
.area idata
.word 65535,8191
.area data(ram, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\CAN网可配置型报警灯板程序\can.c
.dbsym e CANMOBMD _CANMOBMD A[60:15]l
_CANIDT::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\CAN网可配置型报警灯板程序\can.c
.blkb 3
.area idata
.byte 0,0,0
.area data(ram, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\CAN网可配置型报警灯板程序\can.c
.blkb 56
.area idata
.word 0,0,0,0,0
.word 0,0,0,0,0
.word 0,0,0,0,0
.word 0,0,0,0,0
.word 0,0,0,0,0
.byte 0,0,0,0,0,0
.area data(ram, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\CAN网可配置型报警灯板程序\can.c
.dbsym e CANIDT _CANIDT A[60:15:4]c
_CANIDM::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\CAN网可配置型报警灯板程序\can.c
.blkb 3
.area idata
.byte 0,0,0
.area data(ram, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\CAN网可配置型报警灯板程序\can.c
.blkb 56
.area idata
.word 0,0,0,0,0
.word 0,0,0,0,0
.word 0,0,0,0,0
.word 0,0,0,0,0
.word 0,0,0,0,0
.byte 0,0,0,0,0,0
.area data(ram, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\CAN网可配置型报警灯板程序\can.c
.dbsym e CANIDM _CANIDM A[60:15:4]c
.area text(rom, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\CAN网可配置型报警灯板程序\can.c
.dbfunc e can_init _can_init fV
.even
_can_init::
.dbline -1
.dbline 33
; #include "main.h"
;
; //#pragma interrupt_handler can_ReceiveData:19
;
; /*******************************************************************
; CAN initialization:
; Mailbox 0: Receive --> interrupt
; Mailbox 1: Transmit --> polling
; *******************************************************************/
; #define TYP_RESET 5
; #define TYP_BAUD 10
;
; #define SELFID 2
;
; extern unsigned char sysrst,Pass_Flag;
; unsigned char canbaud;
; extern VCI_CAN_OBJ rece_data[49];
; extern unsigned char soundoff_flag,ack_flag,alarm_flag;
;
; const unsigned char CanBaud[6][3]={{0x02,0x04,0x13},{0x06,0x04,0x13},{0x0E,0x04,0x13},{0x12,0x04,0x13},{0x1E,0x04,0x13},{0x26,0x04,0x13}};
; //波特率数组
;
; //15个MOB的ID和MID
; unsigned long CANMOBID[15]={0x10000000,0x20000000,0x30000000,0x40000000,0x50000000,0x60000000,0x01000000,0x01000001,0x0200ff00,0x12000001,0x01000002,0x01000003,0x01000004,0x01000005,0x1300ff01};
; unsigned long CANMOBMD[15]={0x00ff000f,0x00ff000f,0x00ff000f,0x1fffffff,0x1fffffff,0x1fffffff,0x1fffffff,0x1fffffff,0x1fffffff,0x1fffffff,0x1fffffff,0x1fffffff,0x1fffffff,0x1fffffff,0x1fffffff};
; unsigned char CANIDT[15][4]={0};
; unsigned char CANIDM[15][4]={0};
; unsigned char counterTemp;
; extern SHD_LED pannel_led[48];
; extern unsigned char id_table[49];
;
; void can_init (void) //CAN初始化函数
; {
.dbline 34
; canMob_init();
xcall _canMob_init
.dbline -2
L2:
.dbline 0 ; func end
ret
.dbend
.dbfunc e canMob_init _canMob_init fV
; temp2 -> R10,R11
; temp1 -> R22,R23
; temp -> y+0
; j -> R22
; i -> R20
.even
_canMob_init::
xcall push_gset3
sbiw R28,4
.dbline -1
.dbline 39
; }
;
;
; void canMob_init (void) //MOB初始化函数
; {
.dbline 44
; unsigned char i,j;
; unsigned long temp;
; unsigned int temp1,temp2;
;
; CLI(); //关中断
cli
.dbline 46
; //DDRD=(1<<PD5)|(0<<PD6); //TXCAN, RXCNA
; DDRD|=0x20; //CAN管脚初始化
sbi 0xa,5
.dbline 47
; DDRD&=0xBF;
in R24,0xa
andi R24,191
out 0xa,R24
.dbline 48
; CANGCON |= (1<<SWRES); //reset CAN interface
lds R24,216
ori R24,1
sts 216,R24
.dbline 50
;
; Pass_Flag = 0x00;
clr R2
sts _Pass_Flag,R2
.dbline 52
; //CANMOBID[2]=(unsigned long)(SELFID<<8)|CANMOBID[2];
; for(i=0;i<6;i++) //15个邮箱初始化
clr R20
xjmp L7
L4:
.dbline 53
.dbline 54
ldi R24,4
mul R24,R20
movw R30,R0
ldi R24,<_CANMOBID
ldi R25,>_CANMOBID
add R30,R24
adc R31,R25
ldd R16,z+0
ldd R17,z+1
ldd R18,z+2
ldd R19,z+3
ldi R24,3
ldi R25,0
st -y,R24
xcall lsl32
std y+0,R16
std y+1,R17
std y+2,R18
std y+3,R19
.dbline 55
ldd R22,y+0
ldd R23,y+1
.dbline 56
ldd R2,y+0
ldd R3,y+1
ldd R4,y+2
ldd R5,y+3
movw R10,R4
.dbline 57
ldi R24,4
mul R24,R20
movw R30,R0
ldi R24,<_CANIDT+3
ldi R25,>_CANIDT+3
add R30,R24
adc R31,R25
std z+0,R22
.dbline 58
ldi R24,4
mul R24,R20
movw R30,R0
ldi R24,<_CANIDT+2
ldi R25,>_CANIDT+2
add R30,R24
adc R31,R25
movw R2,R22
mov R2,R3
clr R3
std z+0,R2
.dbline 59
ldi R24,4
mul R24,R20
movw R30,R0
ldi R24,<_CANIDT+1
ldi R25,>_CANIDT+1
add R30,R24
adc R31,R25
std z+0,R10
.dbline 60
ldi R24,4
mul R24,R20
movw R30,R0
ldi R24,<_CANIDT
ldi R25,>_CANIDT
add R30,R24
adc R31,R25
movw R2,R10
mov R2,R3
clr R3
std z+0,R2
.dbline 61
lds R24,_Pass_Flag
subi R24,255 ; addi 1
sts _Pass_Flag,R24
.dbline 62
nop
.dbline 63
L5:
.dbline 52
inc R20
L7:
.dbline 52
cpi R20,6
brsh X0
xjmp L4
X0:
.dbline 64
; {
; temp=CANMOBID[i]<<3; //ID初始化
; temp1=(unsigned int)temp;
; temp2=(unsigned int)(temp/0x00010000);
; CANIDT[i][3]=(unsigned char)temp1;
; CANIDT[i][2]=(unsigned char)(temp1>>8);
; CANIDT[i][1]=(unsigned char)temp2;
; CANIDT[i][0]=(unsigned char)(temp2>>8);
; Pass_Flag = Pass_Flag + 1;
; NOP();
; }
; if(Pass_Flag!=0x06)
lds R24,_Pass_Flag
cpi R24,6
breq L11
.dbline 65
; RESET;
jmp 0x000
L11:
.dbline 66
; WDR();
wdr
.dbline 68
;
; Pass_Flag = 0x00;
clr R2
sts _Pass_Flag,R2
.dbline 69
; for(i=0;i<6;i++)
clr R20
xjmp L16
L13:
.dbline 70
.dbline 71
ldi R24,4
mul R24,R20
movw R30,R0
ldi R24,<_CANMOBMD
ldi R25,>_CANMOBMD
add R30,R24
adc R31,R25
ldd R16,z+0
ldd R17,z+1
ldd R18,z+2
ldd R19,z+3
ldi R24,3
ldi R25,0
st -y,R24
xcall lsl32
std y+0,R16
std y+1,R17
std y+2,R18
std y+3,R19
.dbline 72
ldd R22,y+0
ldd R23,y+1
.dbline 73
ldd R2,y+0
ldd R3,y+1
ldd R4,y+2
ldd R5,y+3
movw R10,R4
.dbline 74
ldi R24,4
mul R24,R20
movw R30,R0
ldi R24,<_CANIDM+3
ldi R25,>_CANIDM+3
add R30,R24
adc R31,R25
std z+0,R22
.dbline 75
ldi R24,4
mul R24,R20
movw R30,R0
ldi R24,<_CANIDM+2
ldi R25,>_CANIDM+2
add R30,R24
adc R31,R25
movw R2,R22
mov R2,R3
clr R3
std z+0,R2
.dbline 76
ldi R24,4
mul R24,R20
movw R30,R0
ldi R24,<_CANIDM+1
ldi R25,>_CANIDM+1
add R30,R24
adc R31,R25
std z+0,R10
.dbline 77
ldi R24,4
mul R24,R20
movw R30,R0
ldi R24,<_CANIDM
ldi R25,>_CANIDM
add R30,R24
adc R31,R25
movw R2,R10
mov R2,R3
clr R3
std z+0,R2
.dbline 78
lds R24,_Pass_Flag
subi R24,255 ; addi 1
sts _Pass_Flag,R24
.dbline 79
nop
.dbline 80
L14:
.dbline 69
inc R20
L16:
.dbline 69
cpi R20,6
brsh X1
xjmp L13
X1:
.dbline 81
; {
; temp=CANMOBMD[i]<<3;
; temp1=(unsigned int)temp; //低16位
; temp2=(unsigned int)(temp/0x00010000); //高16位
; CANIDM[i][3]=(unsigned char)temp1;
; CANIDM[i][2]=(unsigned char)(temp1>>8);
; CANIDM[i][1]=(unsigned char)temp2;
; CANIDM[i][0]=(unsigned char)(temp2>>8);
; Pass_Flag = Pass_Flag + 1;
; NOP();
; }
; if(Pass_Flag!=0x06)
lds R24,_Pass_Flag
cpi R24,6
breq L20
.dbline 82
; RESET;
jmp 0x000
L20:
.dbline 85
; //reset all MObs
;
; Pass_Flag = 0x00;
clr R2
sts _Pass_Flag,R2
.dbline 86
; for (i=0; i<15; i++)
clr R20
xjmp L25
L22:
.dbline 87
; {
.dbline 88
; CANPAGE = (i<<4); //select MOb
mov R24,R20
andi R24,#0x0F
swap R24
ldi R30,237
ldi R31,0
std z+0,R24
.dbline 89
; CANCDMOB = 0; //disable MOb
clr R2
ldi R30,239
std z+0,R2
.dbline 90
; CANSTMOB = 0; //clear status
ldi R30,238
std z+0,R2
.dbline 91
; CANIDT1 = 0; //clear ID
ldi R30,243
std z+0,R2
.dbline 92
; CANIDT2 = 0;
ldi R30,242
std z+0,R2
.dbline 93
; CANIDT3 = 0;
ldi R30,241
std z+0,R2
.dbline 94
; CANIDT4 = 0;
ldi R30,240
std z+0,R2
.dbline 95
; CANIDM1 = 0; //clear mask
ldi R30,247
std z+0,R2
.dbline 96
; CANIDM2 = 0;
ldi R30,246
std z+0,R2
.dbline 97
; CANIDM3 = 0;
ldi R30,245
std z+0,R2
.dbline 98
; CANIDM4 = 0;
ldi R30,244
std z+0,R2
.dbline 99
; for (j=0; j<8; j++)
clr R22
xjmp L29
L26:
.dbline 100
clr R2
ldi R30,250
ldi R31,0
std z+0,R2
L27:
.dbline 99
inc R22
L29:
.dbline 99
cpi R22,8
brlo L26
.dbline 102
lds R24,_Pass_Flag
subi R24,255 ; addi 1
sts _Pass_Flag,R24
.dbline 103
L23:
.dbline 86
inc R20
L25:
.dbline 86
cpi R20,15
brsh X2
xjmp L22
X2:
.dbline 104
; CANMSG = 0; //clear data
;
; Pass_Flag = Pass_Flag + 1;
; }
; if(Pass_Flag!=0x0f)
lds R24,_Pass_Flag
cpi R24,15
breq L30
.dbline 105
; RESET;
jmp 0x000
L30:
.dbline 107
;
; WDR();
wdr
.dbline 108
; CANBT1 = CanBaud[2][0];
ldi R30,<_CanBaud+6
ldi R31,>_CanBaud+6
lpm R30,Z
ldi R26,226
ldi R27,0
st x,R30
.dbline 109
; CANBT2 = CanBaud[2][1];
ldi R30,<_CanBaud+6+1
ldi R31,>_CanBaud+6+1
lpm R30,Z
ldi R26,227
st x,R30
.dbline 110
; CANBT3 = CanBaud[2][2];
ldi R30,<_CanBaud+6+2
ldi R31,>_CanBaud+6+2
lpm R30,Z
ldi R26,228
st x,R30
.dbline 115
;
; //configure MObi
; /******************************************************************/
;
; Pass_Flag = 0x00;
clr R2
sts _Pass_Flag,R2
.dbline 116
; for (i=0; i<3; i++)
clr R20
xjmp L40
L37:
.dbline 117
.dbline 118
mov R24,R20
andi R24,#0x0F
swap R24
ldi R30,237
ldi R31,0
std z+0,R24
.dbline 119
ldi R24,4
mul R24,R20
movw R30,R0
ldi R24,<_CANIDT
ldi R25,>_CANIDT
add R30,R24
adc R31,R25
ldd R2,z+0
ldi R30,243
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -