📄 can.lis
字号:
.module CAN.C
.area text(rom, con, rel)
0000 .dbfile D:\CANBUS\数据帧\查询\单向通讯\结点2\CAN.C
.area data(ram, con, rel)
0000 .dbfile D:\CANBUS\数据帧\查询\单向通讯\结点2\CAN.C
0000 _send_Buf::
0000 .blkb 2
.area idata
0000 3132 .byte 49,50
.area data(ram, con, rel)
0002 .dbfile D:\CANBUS\数据帧\查询\单向通讯\结点2\CAN.C
0002 .blkb 2
.area idata
0002 3334 .byte 51,52
.area data(ram, con, rel)
0004 .dbfile D:\CANBUS\数据帧\查询\单向通讯\结点2\CAN.C
0004 .blkb 2
.area idata
0004 3536 .byte 53,54
.area data(ram, con, rel)
0006 .dbfile D:\CANBUS\数据帧\查询\单向通讯\结点2\CAN.C
0006 .blkb 2
.area idata
0006 3738 .byte 55,56
.area data(ram, con, rel)
0008 .dbfile D:\CANBUS\数据帧\查询\单向通讯\结点2\CAN.C
0008 .dbsym e send_Buf _send_Buf A[8:8]c
.area text(rom, con, rel)
0000 .dbfile D:\CANBUS\数据帧\查询\单向通讯\结点2\CAN.C
0000 .dbfunc e CAN_ClrMailBox _CAN_ClrMailBox fV
0000 ; mob_channel -> R16
0000 ; mob_data -> R18
.even
0000 _CAN_ClrMailBox::
0000 .dbline -1
0000 .dbline 34
0000 ; //////////////////////////////////////////////////////////
0000 ; //单向查询
0000 ; //说明:
0000 ; // 本程序是结点2,只负责发送
0000 ; //////////////////////////////////////////////////////////
0000 ;
0000 ;
0000 ; //-------------------------------------------------------------------
0000 ; // 查询发送方式1总结:
0000 ; //检测上次发送完成(TXOK)
0000 ; //前提条件:CAN_Init()子程序中,必须事先将CANPAGE对象的TXOK位置位
0000 ; //-------------------------------------------------------------------
0000 ; // IF 上次发送完成(TXOK) THEN
0000 ; // (1)、清除TXOK
0000 ; // (2)、填写发送数据
0000 ; // (3)、启动发送
0000 ;
0000 ; //-------------------------------------------------------------------
0000 ; // 查询发送方式2总结:
0000 ; //while (当前发送完成)
0000 ; //-------------------------------------------------------------------
0000 ; // (1)、填写发送数据
0000 ; // (2)、启动发送
0000 ; // (3)、while (TXOK)
0000 ; // (4)、清除TXOK
0000 ;
0000 ; #define _CAN_H
0000 ; #include "AT90CAN128.H"
0000 ;
0000 ; uint8 send_Buf[8] = {0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38};
0000 ;
0000 ;
0000 ; void CAN_ClrMailBox(void)
0000 ; {
0000 .dbline 38
0000 ; uint8 mob_channel;
0000 ; uint8 mob_data;
0000 ;
0000 ; for (mob_channel = 0 ; mob_channel < 15 ; mob_channel++)
0000 0027 clr R16
0002 23C0 xjmp L7
0004 L4:
0004 .dbline 39
0004 ; {
0004 .dbline 40
0004 ; CANPAGE = (mob_channel << 4);
0004 802F mov R24,R16
0006 8F70 andi R24,#0x0F
0008 8295 swap R24
000A 8093ED00 sts 237,R24
000E .dbline 41
000E ; CANIDT4 = 0;
000E 2224 clr R2
0010 2092F000 sts 240,R2
0014 .dbline 42
0014 ; CANIDT3 = 0;
0014 2092F100 sts 241,R2
0018 .dbline 43
0018 ; CANIDT2 = 0;
0018 2092F200 sts 242,R2
001C .dbline 44
001C ; CANIDT1 = 0;
001C 2092F300 sts 243,R2
0020 .dbline 45
0020 ; CANIDM4 = 0;
0020 2092F400 sts 244,R2
0024 .dbline 46
0024 ; CANIDM3 = 0;
0024 2092F500 sts 245,R2
0028 .dbline 47
0028 ; CANIDM2 = 0;
0028 2092F600 sts 246,R2
002C .dbline 48
002C ; CANIDM1 = 0;
002C 2092F700 sts 247,R2
0030 .dbline 49
0030 ; CANSTMOB = 0;
0030 2092EE00 sts 238,R2
0034 .dbline 50
0034 ; CANCDMOB = 0;
0034 2092EF00 sts 239,R2
0038 .dbline 51
0038 ; for (mob_data = 0; mob_data < 8; mob_data++)
0038 2227 clr R18
003A 04C0 xjmp L11
003C L8:
003C .dbline 52
003C ; CANMSG = 0;
003C 2224 clr R2
003E 2092FA00 sts 250,R2
0042 L9:
0042 .dbline 51
0042 2395 inc R18
0044 L11:
0044 .dbline 51
0044 2830 cpi R18,8
0046 D0F3 brlo L8
0048 X0:
0048 .dbline 53
0048 ; }
0048 L5:
0048 .dbline 38
0048 0395 inc R16
004A L7:
004A .dbline 38
004A 0F30 cpi R16,15
004C D8F2 brlo L4
004E X1:
004E .dbline -2
004E L3:
004E .dbline 0 ; func end
004E 0895 ret
0050 .dbsym r mob_channel 16 c
0050 .dbsym r mob_data 18 c
0050 .dbend
0050 .dbfunc e CAN_Init _CAN_Init fV
.even
0050 _CAN_Init::
0050 .dbline -1
0050 .dbline 58
0050 ; }
0050 ;
0050 ;
0050 ; void CAN_Init(void)
0050 ; {
0050 .dbline 59
0050 ; CAN_SOFT_RESET();
0050 81E0 ldi R24,1
0052 8093D800 sts 216,R24
0056 L13:
0056 .dbline 60
0056 ; while (CANGSTA & (1 << ENFG));
0056 L14:
0056 .dbline 60
0056 2090D900 lds R2,217
005A 22FC sbrc R2,2
005C FCCF rjmp L13
005E X2:
005E .dbline 61
005E ; CAN_ClrMailBox();
005E D0DF xcall _CAN_ClrMailBox
0060 .dbline 62
0060 ; CANBT1 = 0x02;
0060 82E0 ldi R24,2
0062 8093E200 sts 226,R24
0066 .dbline 63
0066 ; CANBT2 = 0x04;
0066 84E0 ldi R24,4
0068 8093E300 sts 227,R24
006C .dbline 64
006C ; CANBT3 = 0x13;
006C 83E1 ldi R24,19
006E 8093E400 sts 228,R24
0072 .dbline 65
0072 ; CANTCON = 0xFF;
0072 8FEF ldi R24,255
0074 8093E500 sts 229,R24
0078 .dbline 66
0078 ; CANPAGE = 0x00;
0078 2224 clr R2
007A 2092ED00 sts 237,R2
007E .dbline 67
007E ; CANSTMOB = 0x00;
007E 2092EE00 sts 238,R2
0082 .dbline 68
0082 ; CANIDT4 = 0x00;
0082 2092F000 sts 240,R2
0086 .dbline 69
0086 ; CANIDT3 = 0x00;
0086 2092F100 sts 241,R2
008A .dbline 70
008A ; CANIDT2 = 0x40;
008A 80E4 ldi R24,64
008C 8093F200 sts 242,R24
0090 .dbline 71
0090 ; CANIDT1 = 0x02;
0090 82E0 ldi R24,2
0092 8093F300 sts 243,R24
0096 .dbline 72
0096 ; CANSTMOB = BIT(TXOK);
0096 80E4 ldi R24,64
0098 8093EE00 sts 238,R24
009C .dbline 73
009C ; CAN_START();
009C 8091D800 lds R24,216
00A0 8260 ori R24,2
00A2 8093D800 sts 216,R24
00A6 L16:
00A6 .dbline 74
00A6 ; while (!(CANGSTA & (1 << ENFG)));
00A6 L17:
00A6 .dbline 74
00A6 2090D900 lds R2,217
00AA 22FE sbrs R2,2
00AC FCCF rjmp L16
00AE X3:
00AE .dbline -2
00AE L12:
00AE .dbline 0 ; func end
00AE 0895 ret
00B0 .dbend
00B0 ; }
00B0 ;
00B0 ;
00B0 ; /*
00B0 ; #pragma interrupt_handler AT90CAN128_ISR:iv_CANIT
00B0 ; void AT90CAN128_ISR(void)
00B0 ; {
00B0 ; uint8 i;
00B0 ; uint8 save_canpage;
00B0 ;
00B0 ; save_canpage = CANPAGE;
00B0 ; // echo receive data on channel 0 reception
00B0 ;
00B0 ; CANPAGE = (0 << 4); // CHNB=0x00; select channel 0
00B0 ; if (CANSTMOB & (1 << RXOK))
00B0 ; {
00B0 ; CHA_Init();
00B0 ; USART1_send_buffer[0] = CANIDT1;
00B0 ; USART1_send_buffer[1] = CANIDT2;
00B0 ; for (i = 0 ; i < 8 ; i++)
00B0 ; USART1_send_buffer[2+i] = CANMSG; // save receive data
00B0 ; USART1_Begin_Send();
00B0 ;
00B0 ;
00B0 ; CANPAGE = (1 << 4); // CHNB=0x00; select channel 1
00B0 ; // Channel 1 configuration
00B0 ; CANCDMOB = 0x00; // reset channel 1 configuration
00B0 ; for (i = 0 ; i < 8 ; i++)
00B0 ; CANMSG = i; // load saved data
00B0 ; CANCDMOB |= 0x08; // DLC_MAX; /* transmit 8 bytes
00B0 ; CANCDMOB |= 0x40; // CH_TxENA; /* emission enabled
00B0 ; CANEN2 |= (1 << 1); // channel 1 enable
00B0 ; CANSTMOB=0x00; // reset channel 1 status
00B0 ;
00B0 ;
00B0 ; }
00B0 ; CANPAGE = (0 << 4); // CHNB=0x00; select channel 0
00B0 ; CANCDMOB = 0x00; // CH_DISABLE; reset channel 0 configuration
00B0 ; CANCDMOB |= 0x08; // DLC_MAX; receive 8 bytes
00B0 ; CANCDMOB |= 0x80; //CH_RxENA; reception enable
00B0 ; CANEN2 |= (1 << 0); // channel 0 enable
00B0 ; CANSTMOB=0x00; // reset channel 0 status
00B0 ; CANPAGE= save_canpage; // restore saved context
00B0 ; CANGIT = 0x00; // reset all flags
00B0 ; }
00B0 ; */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -