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

📄 canmonitor.lst

📁 AT90CAN128的CAN通信源码测试成功
💻 LST
📖 第 1 页 / 共 5 页
字号:
     3D3 C005      RJMP	0x03D9
(0322)          {
(0323) #ifdef DEBUG
(0324)     rprintfStr("****bus shut off****");
(0325) 	rprintfCRLF();
(0326) #endif
(0327)          sja_read_data(IR);              //读取中断寄存器,清除中断位
     3D4 E003      LDI	R16,3
     3D5 DE93      RCALL	_sja_read_data
(0328)          sja_write_data(MODE,0x08); 
     3D6 E028      LDI	R18,0x8
     3D7 2700      CLR	R16
     3D8 DE80      RCALL	_sja_write_data
(0329)          }
(0330)       if(SearchStatus&0x02)//如果有数据溢出
     3D9 FEA1      SBRS	R10,1
     3DA C003      RJMP	0x03DE
(0331) 		 {
(0332) #ifdef DEBUG
(0333)     rprintfStr("****data overflow****");
(0334) 	rprintfCRLF();
(0335) #endif
(0336)          sja_write_data(CMR,0x0c);          //在命令寄存器中清除数据溢出和释放接收缓冲区
     3DB E02C      LDI	R18,0xC
     3DC E001      LDI	R16,1
     3DD DE7B      RCALL	_sja_write_data
(0337) 		 }
(0338)        if(sja_read_data(IR) & 0x01)//IR.0=1,接收缓冲区有数据
     3DE E003      LDI	R16,3
     3DF DE89      RCALL	_sja_read_data
     3E0 FF00      SBRS	R16,0
     3E1 C001      RJMP	0x03E3
(0339)          {
(0340)                 led_on;
     3E2 9897      CBI	0x12,7
(0341) #ifdef DEBUG
(0342)     rprintfStr("****receive buffer have data****");
(0343) 	rprintfCRLF();
(0344) #endif
(0345)          }
     3E3 90A9      LD	R10,Y+
     3E4 9508      RET
_play_buffer:
  i                    --> R10
  ptr                  --> R12
     3E5 940E 0671 CALL	push_xgset003C
     3E7 0168      MOVW	R12,R16
(0346) //   }
(0347) }
(0348) 
(0349) //=============================================================================
(0350) //显示缓冲区内容
(0351) void play_buffer(unsigned char *ptr)
(0352) {
(0353)  unsigned char i;
(0354)  for (i=0;i<13;i++)
     3E8 24AA      CLR	R10
     3E9 C007      RJMP	0x03F1
(0355)   {
(0356)     rprintfu08(*ptr);
     3EA 01F6      MOVW	R30,R12
     3EB 8100      LDD	R16,Z+0
     3EC DD39      RCALL	_rprintfu08
(0357) //	rprintfStr("--");
(0358) 	ptr++;
     3ED 01C6      MOVW	R24,R12
     3EE 9601      ADIW	R24,1
     3EF 016C      MOVW	R12,R24
     3F0 94A3      INC	R10
     3F1 2D8A      MOV	R24,R10
     3F2 308D      CPI	R24,0xD
     3F3 F3B0      BCS	0x03EA
(0359)   }
(0360)    rprintfCRLF();
     3F4 DD1E      RCALL	_rprintfCRLF
     3F5 940C 065F JMP	pop_xgset003C
(0361) }
(0362) 
(0363) //=============================================================================
(0364) //初始化换冲区,在此监控卡上只有模拟管理系统降低充电电压的情况
(0365) void buffer_init(void)
(0366) {
(0367)     TransmitMessage[0]=0x88;		   //扩展贞,8个数据字节
_buffer_init:
     3F7 E888      LDI	R24,0x88
     3F8 9380 00B9 STS	TransmitMessage,R24
(0368) 	
(0369)     TransmitMessage[1]=0xe7;	       //管理系统优先级7:    ID.28--ID.21=111-00-111
     3FA EE87      LDI	R24,0xE7
     3FB 9380 00BA STS	TransmitMessage+1,R24
(0370)     TransmitMessage[2]=0x58;	       //PF=255- 235         ID.20--ID.13=01011-000 
     3FD E588      LDI	R24,0x58
     3FE 9380 00BB STS	TransmitMessage+2,R24
(0371)     TransmitMessage[3]=0xb0;	       //PS=252- 22          ID.12--ID.5 =10110-000    
     400 EB80      LDI	R24,0xB0
     401 9380 00BC STS	TransmitMessage+3,R24
(0372)     TransmitMessage[4]=0x88;	       //As=0x11             ID.4--ID.0  =10001-000
     403 E888      LDI	R24,0x88
     404 9380 00BD STS	0x00BD,R24
(0373) 	
(0374)     TransmitMessage[5]=0xFF;	      //桢编号
     406 EF8F      LDI	R24,0xFF
     407 9380 00BE STS	0x00BE,R24
(0375) 	
(0376)     TransmitMessage[6]=0x00;	
     409 2422      CLR	R2
     40A 9220 00BF STS	0x00BF,R2
(0377)     TransmitMessage[7]=0xff;	
     40C 9380 00C0 STS	0x00C0,R24
(0378)     TransmitMessage[8]=0xff;	
     40E 9380 00C1 STS	0x00C1,R24
(0379)     TransmitMessage[9]=0xff;	
     410 9380 00C2 STS	0x00C2,R24
(0380)     TransmitMessage[10]=0xff;	
     412 9380 00C3 STS	0x00C3,R24
(0381)     TransmitMessage[11]=0xff;	
     414 9380 00C4 STS	0x00C4,R24
(0382)     TransmitMessage[12]=0xff; 
     416 9380 00C5 STS	0x00C5,R24
     418 9508      RET
(0383) }
(0384) 
(0385) void test_can(void)
(0386) {
(0387)       rprintfCRLF(); 
_test_can:
     419 DCF9      RCALL	_rprintfCRLF
(0388) 	  rprintfStr("***CAN BUS DEBUG:***"); 
     41A E905      LDI	R16,0x95
     41B E010      LDI	R17,0
     41C DCA0      RCALL	_rprintfStr
(0389) 	  rprintfCRLF(); 
     41D DCF5      RCALL	_rprintfCRLF
(0390) 	  
(0391) 	  rprintfStr("content of transmit buffer ");
     41E E709      LDI	R16,0x79
     41F E010      LDI	R17,0
     420 DC9C      RCALL	_rprintfStr
(0392) 	  rprintfCRLF();
     421 DCF1      RCALL	_rprintfCRLF
(0393) 	  play_buffer(TransmitMessage);
     422 EB09      LDI	R16,0xB9
     423 E010      LDI	R17,0
     424 DFC0      RCALL	_play_buffer
(0394) 	  
(0395) 	  CLI();
     425 94F8      BCLR	7
(0396)       sja_tx(TransmitMessage);
     426 EB09      LDI	R16,0xB9
     427 E010      LDI	R17,0
     428 DF03      RCALL	_sja_tx
(0397) 	  SEI();
     429 9478      BSET	7
(0398) 	  rprintfCRLF();
     42A DCE8      RCALL	_rprintfCRLF
     42B 9508      RET
_RX_ISR:
  i                    --> Y,+1
  sreg                 --> R10
  comm_tempRec         --> R12
     42C 920A      ST	R0,-Y
     42D 921A      ST	R1,-Y
     42E 922A      ST	R2,-Y
     42F 923A      ST	R3,-Y
     430 924A      ST	R4,-Y
     431 925A      ST	R5,-Y
     432 926A      ST	R6,-Y
     433 927A      ST	R7,-Y
     434 928A      ST	R8,-Y
     435 929A      ST	R9,-Y
     436 930A      ST	R16,-Y
     437 931A      ST	R17,-Y
     438 932A      ST	R18,-Y
     439 933A      ST	R19,-Y
     43A 938A      ST	R24,-Y
     43B 939A      ST	R25,-Y
     43C 93AA      ST	R26,-Y
     43D 93BA      ST	R27,-Y
     43E 93EA      ST	R30,-Y
     43F 93FA      ST	R31,-Y
     440 B60F      IN	R0,0x3F
     441 920A      ST	R0,-Y
     442 92AA      ST	R10,-Y
     443 92CA      ST	R12,-Y
FILE: E:\li\liliang\can-232\CAN-232\uart.c
(0001) /******************************************************************** 
(0002) *  函数库说明:RS232总线驱动函数库                                  * 
(0003) *  版本说明:  1.0 Bate                                             * 
(0004) *  作者:      andylee                                              * 
(0005) *  日期:      2006年7月                                            * 
(0006) *  平台:      mega16  16M                                          * 
(0007) *  说明:      为上层提供RS232的基本读写函数                        * 
(0008) ********************************************************************/ 
(0009) #include "uart.h"
(0010) #include "can.h"
(0011) 
(0012) unsigned char uart_b0_flag=0;                  //降压标志
(0013) unsigned char uart_b8_flag=0;                  //停止充电标志
(0014) unsigned char uart_normal_flag=0;                  //正常
(0015) unsigned char uart_alarm_flag=0;                  //报警
(0016) 
(0017) /************************************* 
(0018) *  函数说明:串口接收中断            *
(0019) *  输入:无                          * 
(0020) *  输出:无                          * 
(0021) ************************************/
(0022) #pragma interrupt_handler RX_ISR:12
(0023) void RX_ISR(void)      
(0024) {
(0025)      unsigned char sreg;
(0026) 	 unsigned char comm_tempRec;
(0027) 	 unsigned int i;
(0028) 	
(0029)    	 sreg=SREG;                               //保存全局中断标志
     444 B6AF      IN	R10,0x3F
(0030)    	 CLI();
     445 94F8      BCLR	7
(0031) 	 
(0032) 	 comm_tempRec=UDR;
     446 B0CC      IN	R12,0x0C
(0033) 	   
(0034) 	 if(comm_tempRec==0xb0)//表示降电压
     447 2D8C      MOV	R24,R12
     448 3B80      CPI	R24,0xB0
     449 F429      BNE	0x044F
(0035) 	 {  
(0036)          uart_b0_flag=1;
     44A E081      LDI	R24,1
     44B 9380 0072 STS	uart_b0_flag,R24
(0037) 		 uartSendByte(comm_tempRec);
     44D 2D0C      MOV	R16,R12
     44E D070      RCALL	_uartSendByte
(0038) 	 }
(0039) 	 if(comm_tempRec==0xb8)//表示停止充电
     44F 2D8C      MOV	R24,R12
     450 3B88      CPI	R24,0xB8
     451 F429      BNE	0x0457
(0040) 	 {
(0041) 	  	 uart_b8_flag=1;
     452 E081      LDI	R24,1
     453 9380 0073 STS	uart_b8_flag,R24
(0042) 		 uartSendByte(0xb8);
     455 EB08      LDI	R16,0xB8
     456 D068      RCALL	_uartSendByte
(0043) 	 }
(0044) 	 
(0045) 	 if(comm_tempRec==0xf0)//正常
     457 2D8C      MOV	R24,R12
     458 3F80      CPI	R24,0xF0
     459 F429      BNE	0x045F
(0046) 	 {  
(0047)          uart_normal_flag=1;
     45A E081      LDI	R24,1
     45B 9380 0074 STS	uart_normal_flag,R24
(0048) 		 uartSendByte(comm_tempRec);
     45D 2D0C      MOV	R16,R12
     45E D060      RCALL	_uartSendByte
(0049) 	 }
(0050) 	 if(comm_tempRec==0xa0)//报警
     45F 2D8C      MOV	R24,R12
     460 3A80      CPI	R24,0xA0
     461 F429      BNE	0x0467
(0051) 	 {
(0052) 	  	 uart_alarm_flag=1;
     462 E081      LDI	R24,1
     463 9380 0075 STS	uart_alarm_flag,R24
(0053) 		 uartSendByte(comm_tempRec);
     465 2D0C      MOV	R16,R12
     466 D058      RCALL	_uartSendByte
(0054) 	 }
(0055) 	 
(0056) 	 SREG=sreg;                
     467 BEAF      OUT	0x3F,R10
(0057)    	 SEI();
     468 9478      BSET	7
     469 90C9      LD	R12,Y+
     46A 90A9      LD	R10,Y+
     46B 9009      LD	R0,Y+
     46C BE0F      OUT	0x3F,R0
     46D 91F9      LD	R31,Y+
     46E 91E9      LD	R30,Y+
     46F 91B9      LD	R27,Y+
     470 91A9      LD	R26,Y+
     471 9199      LD	R25,Y+
     472 9189      LD	R24,Y+
     473 9139      LD	R19,Y+
     474 9129      LD	R18,Y+
     475 9119      LD	R17,Y+
     476 9109      LD	R16,Y+
     477 9099      LD	R9,Y+
     478 9089      LD	R8,Y+
     479 9079      LD	R7,Y+
     47A 9069      LD	R6,Y+
     47B 9059      LD	R5,Y+
     47C 9049      LD	R4,Y+
     47D 9039      LD	R3,Y+
     47E 9029      LD	R2,Y+
     47F 9019      LD	R1,Y+
     480 9009      LD	R0,Y+
     481 9518      RETI
_uartSetBaudRate:
  baudratDiv           --> R10
  baudrate             --> Y,+2
     482 940E 05BC CALL	push_arg4
     484 92AA      ST	R10,-Y
     485 92BA      ST	R11,-Y
(0058) }
(0059) 
(0060) /************************************* 
(0061) *  函数说明:波特率设置函数          *
(0062) *  输入:波特率                      * 
(0063) *  输出:无                          * 
(0064) *************************************/
(0065) void uartSetBaudRate(unsigned long  baudrate)
(0066) {
(0067)     unsigned int baudratDiv;
(0068) 	
(0069)     baudratDiv = (F_CPU/(baudrate*16L)-1);
     486 802A      LDD	R2,Y+2
     487 803B      LDD	R3,Y+3
     488 804C      LDD	R4,Y+4
     489 805D      LDD	R5,Y+5
     48A E180      LDI	R24,0x10
     48B E090      LDI	R25,0
     48C E0A0      LDI	R26,0
     48D E0B0      LDI	R27,0
     48E 925A      ST	R5,-Y
     48F 924A      ST	R4,-Y
     490 923A      ST	R3,-Y
     491 922A      ST	R2,-Y
     492 018C      MOVW	R16,R24
     493 019D      MOVW	R18,R26
     494 940E 062B CALL	empy32s
     496 E080      LDI	R24,0
     497 E294      LDI	R25,0x24
     498 EFA4      LDI	R26,0xF4
     499 E0B0      LDI	R27,0
     49A 933A      ST	R19,-Y
     49B 932A      ST	R18,-Y
     49C 931A      ST	R17,-Y
     49D 930A      ST	R16,-Y
     49E 018C      MOVW	R16,R24
     49F 019D      MOVW	R18,R26
     4A0 940E 05C1 CALL	div32u
     4A2 0118      MOVW	R2,R16
     4A3 0129      MOVW	R4,R18
     4A4 E081      LDI	R24,1
     4A5 E090      LDI	R25,0
     4A6 E0A0      LDI	R26,0
     4A7 E0B0      LDI	R27,0
     4A8 1A28      SUB	R2,R24
     4A9 0A39      SBC	R3,R25
     4AA 0A4A      SBC	R4,R26
     4AB 0A5B      SBC	R5,R27
     4AC 0151      MOVW	R10,R2
(0070) 
(0071)     UBRRH=(unsigned char)(baudratDiv>>8);
     4AD 2C23      MOV	R2,R3
     4AE 2433      CLR	R3
     4AF BC20      OUT	0x20,R2
(0072)     UBRRL=(unsigned char)baudratDiv;
     4B0 B8A9      OUT	0x09,R10
     4B1 90B9      LD	R11,Y+
     4B2 90A9      LD	R10,Y+
     4B3 9624      ADIW	R28,4
     4B4 9508      RET
(0073) }
(0074) 
(0075) /************************************* 
(0076) *  函数说明

⌨️ 快捷键说明

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