⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.lis

📁 本软件实现了232到CAN的具体转换的代码,对232和CAN都进行了很好的说明,编程环境是IAR
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 01CA 80930300          sts _RESID+1,R24
 01CE                   .dbline 157
 01CE 282E              mov R2,R24
 01D0 200E              add R2,R16
 01D2 20920300          sts _RESID+1,R2
 01D6                   .dbline 158
 01D6 00910200          lds R16,_RESID
 01DA                   .dbline 159
 01DA 000F              lsl R16
 01DC 000F              lsl R16
 01DE 000F              lsl R16
 01E0 000F              lsl R16
 01E2 000F              lsl R16
 01E4                   .dbline 160
 01E4 200E              add R2,R16
 01E6 20920300          sts _RESID+1,R2
 01EA                   .dbline 161
 01EA 20900200          lds R2,_RESID
 01EE 2694              lsr R2
 01F0 2694              lsr R2
 01F2 2694              lsr R2
 01F4 20920200          sts _RESID,R2
 01F8                   .dbline 162
 01F8           L53:
 01F8                   .dbline -2
 01F8           L50:
 01F8                   .dbline 0 ; func end
 01F8 0895              ret
 01FA                   .dbsym r k 16 c
 01FA                   .dbend
 01FA                   .dbfunc e usart_init _usart_init fV
                        .even
 01FA           _usart_init::
 01FA 0E940000          xcall push_gset2
 01FE                   .dbline -1
 01FE                   .dbline 167
 01FE           ;  else
 01FE           ;     {//扩展帧处理方法,RESID[3]、RESID[4]不变
 01FE           ;        k=k>>5;
 01FE           ;        k=k<<2;
 01FE           ;        RESID[1]=RESID[1]&0x03;
 01FE           ;        RESID[1]=RESID[1]+k;
 01FE           ;        k=RESID[0];
 01FE           ;        k=k<<5;
 01FE           ;        RESID[1]=RESID[1]+k;
 01FE           ;        RESID[0]=RESID[0]>>3;//将RXB0SIDH,RXB0SIDL转化
 01FE           ;       }                
 01FE           ; }
 01FE           ; //##############################################################################
 01FE           ; //##############################USART初始化程序###########################//
 01FE           ; void usart_init(void)
 01FE           ; {
 01FE                   .dbline 168
 01FE           ;  UCSRB=(1<<RXEN)|(1<<TXEN);//允许发送和接收
 01FE 88E1              ldi R24,24
 0200 8AB9              out 0xa,R24
 0202                   .dbline 169
 0202           ;  UBRRL=(fosc/16/(bps+1))%256;
 0202 80910100          lds R24,_bps
 0206 90910200          lds R25,_bps+1
 020A 0196              adiw R24,1
 020C 1C01              movw R2,R24
 020E 4424              clr R4
 0210 5524              clr R5
 0212 40E0              ldi R20,0
 0214 58E0              ldi R21,8
 0216 67E0              ldi R22,7
 0218 70E0              ldi R23,0
 021A 5A92              st -y,R5
 021C 4A92              st -y,R4
 021E 3A92              st -y,R3
 0220 2A92              st -y,R2
 0222 8A01              movw R16,R20
 0224 9B01              movw R18,R22
 0226 0E940000          xcall div32s
 022A 40E0              ldi R20,0
 022C 51E0              ldi R21,1
 022E 60E0              ldi R22,0
 0230 70E0              ldi R23,0
 0232 7A93              st -y,R23
 0234 6A93              st -y,R22
 0236 5A93              st -y,R21
 0238 4A93              st -y,R20
 023A 0E940000          xcall mod32s
 023E 09B9              out 0x9,R16
 0240                   .dbline 170
 0240           ;  UBRRH=(fosc/16/(bps+1))/256;
 0240 80910100          lds R24,_bps
 0244 90910200          lds R25,_bps+1
 0248 0196              adiw R24,1
 024A 1C01              movw R2,R24
 024C 4424              clr R4
 024E 5524              clr R5
 0250 40E0              ldi R20,0
 0252 58E0              ldi R21,8
 0254 67E0              ldi R22,7
 0256 70E0              ldi R23,0
 0258 5A92              st -y,R5
 025A 4A92              st -y,R4
 025C 3A92              st -y,R3
 025E 2A92              st -y,R2
 0260 8A01              movw R16,R20
 0262 9B01              movw R18,R22
 0264 0E940000          xcall div32s
 0268 40E0              ldi R20,0
 026A 51E0              ldi R21,1
 026C 60E0              ldi R22,0
 026E 70E0              ldi R23,0
 0270 7A93              st -y,R23
 0272 6A93              st -y,R22
 0274 5A93              st -y,R21
 0276 4A93              st -y,R20
 0278 0E940000          xcall div32s
 027C 00BD              out 0x20,R16
 027E                   .dbline 171
 027E           ;  UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP位
 027E 86E8              ldi R24,134
 0280 80BD              out 0x20,R24
 0282                   .dbline 172
 0282           ;  bytetime=215983/bps;//215983=1000000*20/92.6,92.6=1024/11.0592,定时器分频为1024
 0282 20900100          lds R2,_bps
 0286 30900200          lds R3,_bps+1
 028A 4424              clr R4
 028C 5524              clr R5
 028E 4FEA              ldi R20,175
 0290 5BE4              ldi R21,75
 0292 63E0              ldi R22,3
 0294 70E0              ldi R23,0
 0296 5A92              st -y,R5
 0298 4A92              st -y,R4
 029A 3A92              st -y,R3
 029C 2A92              st -y,R2
 029E 8A01              movw R16,R20
 02A0 9B01              movw R18,R22
 02A2 0E940000          xcall div32s
 02A6 00930100          sts _bytetime,R16
 02AA                   .dbline 173
 02AA           ;  bytetime=255-bytetime;//计算不同的波特率所要延时的初值,要附值给TCNT0,实现透明转换中用到
 02AA 202E              mov R2,R16
 02AC 3324              clr R3
 02AE 8FEF              ldi R24,255
 02B0 90E0              ldi R25,0
 02B2 8219              sub R24,R2
 02B4 9309              sbc R25,R3
 02B6 80930100          sts _bytetime,R24
 02BA                   .dbline -2
 02BA           L64:
 02BA 0E940000          xcall pop_gset2
 02BE                   .dbline 0 ; func end
 02BE 0895              ret
 02C0                   .dbend
 02C0                   .dbfunc e putchar _putchar fV
 02C0           ;              c -> R16
                        .even
 02C0           _putchar::
 02C0                   .dbline -1
 02C0                   .dbline 178
 02C0           L66:
 02C0                   .dbline 178
 02C0           L67:
 02C0                   .dbline 178
 02C0           ; } 
 02C0           ; 
 02C0           ; //##########################串行通信##########################//
 02C0           ; void putchar(uchar c)
 02C0           ; {while(!(UCSRA&(1<<UDRE)));//判断上次发送有没有完成
 02C0 5D9B              sbis 0xb,5
 02C2 FECF              rjmp L66
 02C4                   .dbline 179
 02C4           ;  UDR=c;}
 02C4 0CB9              out 0xc,R16
 02C6                   .dbline -2
 02C6           L65:
 02C6                   .dbline 0 ; func end
 02C6 0895              ret
 02C8                   .dbsym r c 16 c
 02C8                   .dbend
 02C8                   .dbfunc e INT1_17 _INT1_17 fV
 02C8           ;              j -> <dead>
 02C8           ;              k -> R20
 02C8           ;             R0 -> R22
 02C8           ;              i -> R20
                        .even
 02C8           _INT1_17::
 02C8 0E940000          xcall push_lset
 02CC 0E940000          xcall push_gset2
 02D0                   .dbline -1
 02D0                   .dbline 182
 02D0           ; //##############################中断服务程序##################################//
 02D0           ; void INT1_17(void)
 02D0           ; {
 02D0                   .dbline 183
 02D0           ; uchar i,j,k,R0=0x66;
 02D0 66E6              ldi R22,102
 02D2                   .dbline 184
 02D2           ; GICR &=0x7f;
 02D2 8BB7              in R24,0x3b
 02D4 8F77              andi R24,127
 02D6 8BBF              out 0x3b,R24
 02D8                   .dbline 185
 02D8           ; state=Read_state(0xa0);
 02D8 00EA              ldi R16,160
 02DA BFDE              xcall _Read_state
 02DC 00930000          sts _state,R16
 02E0                   .dbline 187
 02E0           ; //WriteSPI(0xa0);//读取2515状态指令,状态值附值给state
 02E0           ; if((state&0x01)!=0)
 02E0 00FF              sbrs R16,0
 02E2 5FC0              rjmp L70
 02E4                   .dbline 188
 02E4           ;    {//判断是不是接收缓冲器0满产生的中断
 02E4                   .dbline 189
 02E4           ;     k=Read_Byte(RXB0SIDL);//为了判断是标准帧还是扩展帧
 02E4 02E6              ldi R16,98
 02E6 CFDE              xcall _Read_Byte
 02E8 402F              mov R20,R16
 02EA                   .dbline 190
 02EA           ;       if((k&0x08)==0)eflag=0;//置标准帧标志
 02EA 03FD              sbrc R16,3
 02EC 04C0              rjmp L72
 02EE                   .dbline 190
 02EE 2224              clr R2
 02F0 20920300          sts _eflag,R2
 02F4 03C0              xjmp L73
 02F6           L72:
 02F6                   .dbline 191
 02F6           ;        else eflag=1;//置扩展帧标志
 02F6 81E0              ldi R24,1
 02F8 80930300          sts _eflag,R24
 02FC           L73:
 02FC                   .dbline 192
 02FC           ;       DLC=Read_Byte(RXB0DLC);
 02FC 05E6              ldi R16,101
 02FE C3DE              xcall _Read_Byte
 0300 00931A00          sts _DLC,R16
 0304                   .dbline 193
 0304           ;       DLC &=0x0f;
 0304 802F              mov R24,R16
 0306 8F70              andi R24,15
 0308 80931A00          sts _DLC,R24
 030C                   .dbline 194
 030C           ;       RESID[0]=Read_Byte(RXB0SIDH);
 030C 01E6              ldi R16,97
 030E BBDE              xcall _Read_Byte
 0310 00930200          sts _RESID,R16
 0314                   .dbline 195
 0314           ;       RESID[1]=Read_Byte(RXB0SIDL);
 0314 02E6              ldi R16,98
 0316 B7DE              xcall _Read_Byte
 0318 00930300          sts _RESID+1,R16
 031C                   .dbline 196
 031C           ;       RESID[2]=Read_Byte(RXB0EID8);
 031C 03E6              ldi R16,99
 031E B3DE              xcall _Read_Byte
 0320 00930400          sts _RESID+2,R16
 0324                   .dbline 197
 0324           ;       RESID[3]=Read_Byte(RXB0EID0);//先读取所有ID
 0324 04E6              ldi R16,100
 0326 AFDE              xcall _Read_Byte
 0328 00930500          sts _RESID+3,R16
 032C                   .dbline 198
 032C           ;       Receive_all_ID_process();//处理RESID
 032C 25DF              xcall _Receive_all_ID_process
 032E                   .dbline 199
 032E 4427              clr R20
 0330 0BC0              xjmp L80
 0332           L77:
 0332                   .dbline 199
 0332 062F              mov R16,R22
 0334 A8DE              xcall _Read_Byte
 0336 80E0              ldi R24,<_Rdate
 0338 90E0              ldi R25,>_Rdate
 033A E42F              mov R30,R20
 033C FF27              clr R31
 033E E80F              add R30,R24
 0340 F91F              adc R31,R25
 0342 0083              std z+0,R16
 0344           L78:
 0344                   .dbline 199
 0344 4395              inc R20
 0346 6395              inc R22
 0348           L80:
 0348                   .dbline 199
 0348           ;       for(i=0;i<DLC;i++,R0++)Rdate[i]=Read_Byte(R0);//从2515缓冲区内读取收到的数据部分
 0348 20901A00          lds R2,_DLC
 034C 4215              cp R20,R2
 034E 88F3              brlo L77
 0350                   .dbline 200
 0350           ;       if(eflag==0)
 0350 20900300          lds R2,_eflag
 0354 2220              tst R2
 0356 39F4              brne L81
 0358                   .dbline 201
 0358           ;         {//如果是标准帧
 0358                   .dbline 202
 0358           ;          putchar(RESID[0]);
 0358 00910200          lds R16,_RESID
 035C B1DF              xcall _putchar
 035E                   .dbline 203
 035E           ;          putchar(RESID[1]);//先送标准帧ID号
 035E 00910300          lds R16,_RESID+1
 0362 AEDF              xcall _putchar
 0364                   .dbline 204
 0364           ;          }
 0364 0CC0              xjmp L82
 0366           L81:
 0366                   .dbline 206
 0366           ;       else 
 0366           ;         {//如果是扩展帧
 0366                   .dbline 207
 0366           ;          putchar(RESID[0]);
 0366 00910200          lds R16,_RESID
 036A AADF              xcall _putchar
 036C                   .dbline 208
 036C           ;          putchar(RESID[1]);
 036C 00910300          lds R16,_RESID+1
 0370 A7DF              xcall _putchar
 0372                   .dbline 209
 0372           ;          putchar(RESID[2]);
 0372 00910400          lds R16,_RESID+2
 0376 A4DF              xcall _putchar
 0378                   .dbline 210
 0378           ;          putchar(RESID[3]);//先送扩展帧ID号    
 0378 00910500          lds R16,_RESID+3
 037C A1DF              xcall _putchar
 037E                   .dbline 211
 037E           ;         }
 037E           L82:
 037E                   .dbline 212
 037E           ;       putchar(DLC);
 037E 00911A00          lds R16,_DLC
 0382 9EDF              xcall _putchar
 0384                   .dbline 213

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -