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

📄 can232.lst

📁 本软件实现了232到CAN的具体转换的代码,对232和CAN都进行了很好的说明,编程环境是IAR
💻 LST
📖 第 1 页 / 共 3 页
字号:
    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 + -