📄 can232.lst
字号:
025D 940E035F CALL push_lset
(0225) }
(0226) //##############定时器中断0,串行数据流控制
(0227) void Timer0(void)
(0228) {TIMSK=0x00;//关T0中断屏蔽
025F 2422 CLR R2
0260 BE29 OUT 0x39,R2
(0229) TCNT0=0x00;//
0261 BE22 OUT 0x32,R2
(0230) TCCR0=0x00;//T0停止计数
0262 BE23 OUT 0x33,R2
(0231) if((usart_number>2)&&(usart_number<11))
0263 E082 LDI R24,2
0264 E090 LDI R25,0
0265 90200078 LDS R2,usart_number
0267 90300079 LDS R3,usart_number+1
0269 1582 CP R24,R2
026A 0593 CPC R25,R3
026B F4E8 BCC 0x0289
026C 01C1 MOVW R24,R2
026D 308B CPI R24,0xB
026E E0E0 LDI R30,0
026F 079E CPC R25,R30
0270 F4C0 BCC 0x0289
(0232) {
(0233) TID[0]=Tdate[0];TID[1]=Tdate[1];
0271 90200064 LDS R2,Tdate
0273 9220006E STS TID,R2
0275 90200065 LDS R2,Tdate+1
0277 9220006F STS TID+1,R2
(0234) load_Standard_ID_dates(usart_number-2);//对2515发送缓冲器0和ID寄存器进行数据装载
0279 2F08 MOV R16,R24
027A 5002 SUBI R16,2
027B 4010 SBCI R17,0
027C DE57 RCALL _load_Standard_ID_dates
(0235) usart_number=0;
027D 2422 CLR R2
027E 2433 CLR R3
027F 92300079 STS usart_number+1,R3
0281 92200078 STS usart_number,R2
(0236) Write_Byte(CANCTRL,0x00);//选定工作模式
0283 2722 CLR R18
0284 E00F LDI R16,0xF
0285 DE33 RCALL _Write_Byte
(0237) WriteSPI(CAN_RTS_TXB0);//发送缓冲器0请求发送
0286 E801 LDI R16,0x81
0287 DDEF RCALL _WriteSPI
(0238) }
0288 C006 RJMP 0x028F
(0239) else usart_number=0;
0289 2422 CLR R2
028A 2433 CLR R3
028B 92300079 STS usart_number+1,R3
028D 92200078 STS usart_number,R2
028F 940E0376 CALL pop_lset
0291 9518 RETI
(0240) }
(0241) //##############################CAN(2515)初始化程序###########################//
(0242) void CAN_Initialize(void)
(0243) {
(0244) WriteSPI(CAN_RESET);
_CAN_Initialize:
0292 EC00 LDI R16,0xC0
0293 DDE3 RCALL _WriteSPI
(0245) delay(20);
0294 E104 LDI R16,0x14
0295 DDC3 RCALL _delay
(0246) Write_Byte(CANCTRL,0x80);//CAN工作在配置模式
0296 E820 LDI R18,0x80
0297 E00F LDI R16,0xF
0298 DE20 RCALL _Write_Byte
(0247) Write_Byte(CNF1,can_boud);
0299 91200060 LDS R18,can_boud
029B E20A LDI R16,0x2A
029C DE1C RCALL _Write_Byte
(0248) Write_Byte(CNF2,0x80 | PHSEG1_3TQ | PRSEG_1TQ);//Set CNF2
029D E920 LDI R18,0x90
029E E209 LDI R16,0x29
029F DE19 RCALL _Write_Byte
(0249) Write_Byte(CNF3,PHSEG2_3TQ);
02A0 E022 LDI R18,2
02A1 E208 LDI R16,0x28
02A2 DE16 RCALL _Write_Byte
(0250) //0x80+0x10+0x00,相位缓冲段2由CNF3确定,相位缓冲段1为3TQ,传播段为1TQ
(0251) Write_Byte(RXB0CTRL,0xf0);//接收类型选择,接收所有报文
02A3 EF20 LDI R18,0xF0
02A4 E600 LDI R16,0x60
02A5 DE13 RCALL _Write_Byte
(0252) Write_Byte(CANINTF,0x00);//接收完一次必须对中断标志位清0
02A6 2722 CLR R18
02A7 E20C LDI R16,0x2C
02A8 DE10 RCALL _Write_Byte
(0253) Write_Byte(CANINTE,0x01);//接收缓冲器0满中断使能
02A9 E021 LDI R18,1
02AA E20B LDI R16,0x2B
02AB DE0D RCALL _Write_Byte
(0254) Write_Byte(CANCTRL,0x00);//选定正常工作模式
02AC 2722 CLR R18
02AD E00F LDI R16,0xF
02AE DE0A RCALL _Write_Byte
02AF 9508 RET
(0255) }
(0256) //##############################系统初始化程序################################//
(0257) void AVR_Initialize(void) //初始化
(0258) {
(0259) DDRB=0xff; //SPI口
_AVR_Initialize:
02B0 EF8F LDI R24,0xFF
02B1 BB87 OUT 0x17,R24
(0260) PORTB=0xff;
02B2 BB88 OUT 0x18,R24
(0261) DDRD=0xf0;//将外部中断引脚设定为输入
02B3 EF80 LDI R24,0xF0
02B4 BB81 OUT 0x11,R24
(0262) PORTD=0x7f;
02B5 E78F LDI R24,0x7F
02B6 BB82 OUT 0x12,R24
(0263) SPCR=0b01011100;//关中断(SPIE=0),使能SPI(SPE=1),MSB首先发送(DORD=0)
02B7 E58C LDI R24,0x5C
02B8 B98D OUT 0x0D,R24
(0264) //选择微机为主机模式(MSTR=1)
(0265) //空闲时SCK 为高电平(CPOL=1)
(0266) //在SCK 的结束沿采样(CPHA=1)以保证数据稳定
(0267) //SPR1=0和SPR0=0,SCK=fosc/4
(0268) SPSR |=0x01;//SPI的速度加倍
02B9 9A70 SBI 0x0E,0
(0269) MCUCR=0x0a;//设置外部中断的中断触发方式为下降沿触发
02BA E08A LDI R24,0xA
02BB BF85 OUT 0x35,R24
(0270) GICR=0xc0;//通用中断控制寄存器设置,打开中断INT0和INT1
02BC EC80 LDI R24,0xC0
02BD BF8B OUT 0x3B,R24
(0271) SREG=0x80;//开全局中断
02BE E880 LDI R24,0x80
02BF BF8F OUT 0x3F,R24
02C0 9508 RET
(0272) }
(0273) //##################################主程序####################################//
(0274) void main()
(0275) {
(0276) AVR_Initialize(); //I/O口及中断初始化
_main:
02C1 DFEE RCALL _AVR_Initialize
(0277) CAN_Initialize();
02C2 DFCF RCALL _CAN_Initialize
(0278) usart_init();
02C3 DE92 RCALL _usart_init
(0279) UCSRB |=0x80;//接收中断使能
FILE: <library>
02C4 9A57 SBI 0x0A,7
02C5 9508 RET
div32u:
02C6 94E8 BCLR 6
02C7 C001 RJMP 0x02C9
mod32u:
02C8 9468 BSET 6
02C9 D02F RCALL long_div_prolog
02CA 24CC CLR R12
02CB C008 RJMP 0x02D4
div32s:
02CC 94E8 BCLR 6
02CD C001 RJMP 0x02CF
mod32s:
02CE 9468 BSET 6
02CF D029 RCALL long_div_prolog
02D0 FD37 SBRC R19,7
02D1 D053 RCALL neg_R16_R19
02D2 FDB7 SBRC R27,7
02D3 D05A RCALL neg_R24_R27
02D4 2477 CLR R7
02D5 2488 CLR R8
02D6 2499 CLR R9
02D7 24AA CLR R10
02D8 24BB CLR R11
02D9 D041 RCALL tst_R16_R19
02DA F0C1 BEQ 0x02F3
02DB D044 RCALL tst_R24_R27
02DC F0B1 BEQ 0x02F3
02DD E2E8 LDI R30,0x28
02DE 0F00 LSL R16
02DF 1F11 ROL R17
02E0 1F22 ROL R18
02E1 1F33 ROL R19
02E2 1C77 ROL R7
02E3 1C88 ROL R8
02E4 1C99 ROL R9
02E5 1CAA ROL R10
02E6 1CBB ROL R11
02E7 1688 CP R8,R24
02E8 0699 CPC R9,R25
02E9 06AA CPC R10,R26
02EA 06BB CPC R11,R27
02EB F028 BCS 0x02F1
02EC 1A88 SUB R8,R24
02ED 0A99 SBC R9,R25
02EE 0AAA SBC R10,R26
02EF 0ABB SBC R11,R27
02F0 9503 INC R16
02F1 95EA DEC R30
02F2 F759 BNE 0x02DE
02F3 F426 BRTC 0x02F8
02F4 2D08 MOV R16,R8
02F5 2D19 MOV R17,R9
02F6 2D2A MOV R18,R10
02F7 2D3B MOV R19,R11
02F8 C013 RJMP long_div_epilog
long_div_prolog:
02F9 927A ST R7,-Y
02FA 928A ST R8,-Y
02FB 929A ST R9,-Y
02FC 92AA ST R10,-Y
02FD 92BA ST R11,-Y
02FE 92CA ST R12,-Y
02FF 93EA ST R30,-Y
0300 938A ST R24,-Y
0301 939A ST R25,-Y
0302 93AA ST R26,-Y
0303 93BA ST R27,-Y
0304 858B LDD R24,Y+11
0305 859C LDD R25,Y+12
0306 85AD LDD R26,Y+13
0307 85BE LDD R27,Y+14
0308 2EC3 MOV R12,R19
0309 F00E BRTS 0x030B
030A 26CB EOR R12,R27
030B 9508 RET
long_div_epilog:
030C FCC7 SBRC R12,7
030D D017 RCALL neg_R16_R19
030E 91B9 LD R27,Y+
030F 91A9 LD R26,Y+
0310 9199 LD R25,Y+
0311 9189 LD R24,Y+
0312 91E9 LD R30,Y+
0313 90C9 LD R12,Y+
0314 90B9 LD R11,Y+
0315 90A9 LD R10,Y+
0316 9099 LD R9,Y+
0317 9089 LD R8,Y+
0318 9079 LD R7,Y+
0319 9624 ADIW R28,4
031A 9508 RET
tst_R16_R19:
031B 2FE0 MOV R30,R16
031C 2BE1 OR R30,R17
031D 2BE2 OR R30,R18
031E 2BE3 OR R30,R19
031F 9508 RET
tst_R24_R27:
0320 2FE8 MOV R30,R24
0321 2BE9 OR R30,R25
0322 2BEA OR R30,R26
0323 2BEB OR R30,R27
0324 9508 RET
neg_R16_R19:
0325 9500 COM R16
0326 9510 COM R17
0327 9520 COM R18
0328 9530 COM R19
0329 5F0F SUBI R16,0xFF
032A 4F1F SBCI R17,0xFF
032B 4F2F SBCI R18,0xFF
032C 4F3F SBCI R19,0xFF
032D 9508 RET
neg_R24_R27:
032E 9580 COM R24
032F 9590 COM R25
0330 95A0 COM R26
0331 95B0 COM R27
0332 5F8F SUBI R24,0xFF
0333 4F9F SBCI R25,0xFF
0334 4FAF SBCI R26,0xFF
0335 4FBF SBCI R27,0xFF
0336 9508 RET
pop_gset2:
0337 E0E2 LDI R30,2
0338 940C034C JMP pop
pop_gset3:
033A E0E4 LDI R30,4
033B 940C034C JMP pop
pop_gset5:
033D 27EE CLR R30
033E 940C034C JMP pop
push_gset5:
0340 92FA ST R15,-Y
0341 92EA ST R14,-Y
push_gset4:
0342 92DA ST R13,-Y
0343 92CA ST R12,-Y
push_gset3:
0344 92BA ST R11,-Y
0345 92AA ST R10,-Y
push_gset2:
0346 937A ST R23,-Y
0347 936A ST R22,-Y
push_gset1:
0348 935A ST R21,-Y
0349 934A ST R20,-Y
034A 9508 RET
pop_gset1:
034B E0E1 LDI R30,1
pop:
034C 9149 LD R20,Y+
034D 9159 LD R21,Y+
034E FDE0 SBRC R30,0
034F 9508 RET
0350 9169 LD R22,Y+
0351 9179 LD R23,Y+
0352 FDE1 SBRC R30,1
0353 9508 RET
0354 90A9 LD R10,Y+
0355 90B9 LD R11,Y+
0356 FDE2 SBRC R30,2
0357 9508 RET
0358 90C9 LD R12,Y+
0359 90D9 LD R13,Y+
035A FDE3 SBRC R30,3
035B 9508 RET
035C 90E9 LD R14,Y+
035D 90F9 LD R15,Y+
035E 9508 RET
push_lset:
035F 93FA ST R31,-Y
0360 93EA ST R30,-Y
0361 93BA ST R27,-Y
0362 93AA ST R26,-Y
0363 939A ST R25,-Y
0364 938A ST R24,-Y
0365 933A ST R19,-Y
0366 932A ST R18,-Y
0367 931A ST R17,-Y
0368 930A ST R16,-Y
0369 929A ST R9,-Y
036A 928A ST R8,-Y
036B 927A ST R7,-Y
036C 926A ST R6,-Y
036D 925A ST R5,-Y
036E 924A ST R4,-Y
036F 923A ST R3,-Y
0370 922A ST R2,-Y
0371 921A ST R1,-Y
0372 920A ST R0,-Y
0373 B60F IN R0,0x3F
0374 920A ST R0,-Y
0375 9508 RET
pop_lset:
0376 9009 LD R0,Y+
0377 BE0F OUT 0x3F,R0
0378 9009 LD R0,Y+
0379 9019 LD R1,Y+
037A 9029 LD R2,Y+
037B 9039 LD R3,Y+
037C 9049 LD R4,Y+
037D 9059 LD R5,Y+
037E 9069 LD R6,Y+
037F 9079 LD R7,Y+
0380 9089 LD R8,Y+
0381 9099 LD R9,Y+
0382 9109 LD R16,Y+
0383 9119 LD R17,Y+
0384 9129 LD R18,Y+
0385 9139 LD R19,Y+
0386 9189 LD R24,Y+
0387 9199 LD R25,Y+
0388 91A9 LD R26,Y+
0389 91B9 LD R27,Y+
038A 91E9 LD R30,Y+
038B 91F9 LD R31,Y+
038C 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -