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

📄 can_test.lst

📁 MCU:ATMEGA8515 Frequence: 16M 描述:利用已有CAN TEST V1.0电路板进行调试, 可靠性测试已通过
💻 LST
📖 第 1 页 / 共 3 页
字号:
(0244) 			}
(0245) 		}
(0246) 	}
(0247) 	return result;
    01D8 2F06      MOV	R16,R22
    01D9 962D      ADIW	R28,0xD
    01DA D085      RCALL	pop_gset4
    01DB 9508      RET
FILE: E:\罗鹏\工作资料\工作记录\CAN\程序\完成版本\IO.c
(0001) #include "iom8515v.h"
(0002) #include "macros.h"
(0003) #include "MAIN.h"
(0004) 
(0005) 
(0006) /*****************************************
(0007)            IO初始化子程序
(0008) ******************************************/
(0009) void IOIni(void)
(0010) {
(0011)    DDRA = 0xFF ; 		   //IO口初始化
_IOIni:
    01DC EF8F      LDI	R24,0xFF
    01DD BB8A      OUT	0x1A,R24
(0012)    PORTA = 0xFF ; 
    01DE BB8B      OUT	0x1B,R24
(0013)    DDRB = 0x00 ;
    01DF 2422      CLR	R2
    01E0 BA27      OUT	0x17,R2
(0014)    PORTB = 0xFF ;
    01E1 BB88      OUT	0x18,R24
(0015)    DDRC = 0xFF ;
    01E2 BB84      OUT	0x14,R24
(0016)    PORTC = 0xFF ;
    01E3 BB85      OUT	0x15,R24
(0017)    DDRD = 0xF0 ;
    01E4 EF80      LDI	R24,0xF0
    01E5 BB81      OUT	0x11,R24
(0018)    PORTD= 0x00 ;
    01E6 BA22      OUT	0x12,R2
(0019)    MCUCR = 0x82;           //允许外部并行扩展接口,设置外部中断为下降沿触发
    01E7 E882      LDI	R24,0x82
    01E8 BF85      OUT	0x35,R24
(0020)    GICR = 0x40;			   //外部中断0使能
    01E9 E480      LDI	R24,0x40
    01EA BF8B      OUT	0x3B,R24
    01EB 9508      RET
_Inter0:
  can_status           --> R22
  reg                  --> R20
  CompCount            --> R22
    01EC D094      RCALL	push_lset
    01ED D07A      RCALL	push_gset2
FILE: E:\罗鹏\工作资料\工作记录\CAN\程序\完成版本\MAIN.c
(0001) /*****************************************
(0002)                 测试版本
(0003) MCU:ATMEGA8515
(0004) Frequence: 16M
(0005) 描述:利用已有CAN TEST V1.0电路板进行调试,
(0006) 可靠性测试已通过,并发现8515外部中断不稳定
(0007) 的原因是没有在INT0脚加上拉电阻,加上后已能
(0008) 够稳定地运行
(0009) 调试过程中发现SJA1000的首地址设置有误,改过
(0010) 后,当CAN发送数据时,程序能进入中断了,但发现
(0011) 中断是由出错报警中断引起的,估计与波特率设置
(0012) 有关。
(0013) 通过修改CDR的参数,以及更换16M晶振,现在已能
(0014) 正常地收发送数据了!!!!!!!!!!!!!
(0015) 日期:2006.3.11
(0016) *****************************************/
(0017) #include "iom8515v.h"
(0018) #include "macros.h"
(0019) #include "MAIN.h"
(0020) #include "Timer.h"
(0021) #include "IO.h"
(0022) #include "CAN.h"
(0023) #pragma interrupt_handler Inter0:2
(0024) void Inter0(void)
(0025) {
(0026)    uchar reg;
(0027)    uchar CompCount;
(0028)    uchar can_status;
(0029)    CLI();						 //关CPU中断
    01EE 94F8      BCLR	7
(0030)    RevFlag=1;
    01EF E081      LDI	R24,1
    01F0 93800077  STS	RevFlag,R24
(0031)    reg=read_sja(4);				 //保存SJA1000的中断允许状态
    01F2 E004      LDI	R16,4
    01F3 DEAC      RCALL	_read_sja
    01F4 2F40      MOV	R20,R16
(0032)    write_sja(4,0x00);			 //重设中断允许状态为不允许任何中断
    01F5 2722      CLR	R18
    01F6 E004      LDI	R16,4
    01F7 DEB9      RCALL	_write_sja
(0033)    can_status=Receive();		 //接收消息
    01F8 DF90      RCALL	_Receive
    01F9 2F60      MOV	R22,R16
(0034)    if(can_status == 0x01)
    01FA 3001      CPI	R16,1
    01FB F4C9      BNE	0x0215
(0035)    {
(0036) 	  for(CompCount=5;CompCount<13;CompCount++)				//检查接收到的数据是否正确
    01FC E065      LDI	R22,5
    01FD C014      RJMP	0x0212
(0037) 	  {
(0038) 	     if(RxBuffer[CompCount] != TransBuffer[CompCount])
    01FE E788      LDI	R24,0x78
    01FF E090      LDI	R25,0
    0200 2FE6      MOV	R30,R22
    0201 27FF      CLR	R31
    0202 0FE8      ADD	R30,R24
    0203 1FF9      ADC	R31,R25
    0204 8020      LDD	R2,Z+0
    0205 E885      LDI	R24,0x85
    0206 E090      LDI	R25,0
    0207 2FE6      MOV	R30,R22
    0208 27FF      CLR	R31
    0209 0FE8      ADD	R30,R24
    020A 1FF9      ADC	R31,R25
    020B 8030      LDD	R3,Z+0
    020C 1432      CP	R3,R2
    020D F019      BEQ	0x0211
(0039)          {
(0040) 		    RevFlag &= 0x00;	   						  	//发现有不一致时,则清0标志位 
    020E 2422      CLR	R2
    020F 92200077  STS	RevFlag,R2
    0211 9563      INC	R22
    0212 306D      CPI	R22,0xD
    0213 F350      BCS	0x01FE
(0041) 	     } 
(0042)       } 
(0043)    }
    0214 C001      RJMP	0x0216
(0044)    else
(0045)    Init_CAN();		 	 	 	 //如果不是正确接收,则重新初始化
    0215 DEAC      RCALL	_Init_CAN
(0046)    write_sja(4,reg);			 //重新写回中断允许模式
    0216 2F24      MOV	R18,R20
    0217 E004      LDI	R16,4
    0218 DE98      RCALL	_write_sja
(0047)    SEI();
    0219 9478      BSET	7
    021A D043      RCALL	pop_gset2
    021B D07C      RCALL	pop_lset
    021C 9518      RETI
(0048) }     
(0049) //////////////////////////////////////////////////////////////////////////
(0050) 
(0051) void Status_lighting(uchar status)
(0052) {
(0053)    if(status == 1)
_Status_lighting:
  status               --> R16
    021D 3001      CPI	R16,1
    021E F411      BNE	0x0221
(0054)    PORTD |= BIT(5);
    021F 9A95      SBI	0x12,5
    0220 C003      RJMP	0x0224
(0055)    else if(status == 0)
    0221 2300      TST	R16
    0222 F409      BNE	0x0224
(0056)    PORTD &=~ BIT(5);
    0223 9895      CBI	0x12,5
    0224 9508      RET
(0057) }
(0058) 
(0059) void delay_1ms( void ) 
(0060) {
(0061)  uint k ; 
(0062)  for ( k = 0 ; k < ( 8*142-2 ) ; k++ ) // 定时1ms公式:xtal*142-2
_delay_1ms:
  k                    --> R16
    0225 2700      CLR	R16
    0226 2711      CLR	R17
    0227 C002      RJMP	0x022A
    0228 5F0F      SUBI	R16,0xFF
    0229 4F1F      SBCI	R17,0xFF
    022A 360E      CPI	R16,0x6E
    022B E0E4      LDI	R30,4
    022C 071E      CPC	R17,R30
    022D F3D0      BCS	0x0228
    022E 9508      RET
_Delay:
  p                    --> R20
  n                    --> R22
    022F D038      RCALL	push_gset2
    0230 01B8      MOVW	R22,R16
(0063)  	 ;  
(0064) }
(0065) void Delay (uint n)
(0066) {
(0067)  uint p ; 
(0068)  for( p = 0 ; p < n ;p++ ) 
    0231 2744      CLR	R20
    0232 2755      CLR	R21
    0233 C003      RJMP	0x0237
(0069)  	  {
(0070) 	   delay_1ms() ;
    0234 DFF0      RCALL	_delay_1ms
    0235 5F4F      SUBI	R20,0xFF
    0236 4F5F      SBCI	R21,0xFF
    0237 1746      CP	R20,R22
    0238 0757      CPC	R21,R23
    0239 F3D0      BCS	0x0234
    023A D023      RCALL	pop_gset2
    023B 9508      RET
(0071) 	  }
(0072) }
(0073) 
(0074) void main(void)
(0075) {  
(0076)    uchar lp_count;
(0077)    CLI();					 //关中断
_main:
  lp_count             --> Y+1
    023C 94F8      BCLR	7
(0078)    IOIni();					 //IO口初始化
    023D DF9E      RCALL	_IOIni
(0079)    Timer0Ini();
    023E DE05      RCALL	_Timer0Ini
(0080)    Delay(1000);
    023F EE08      LDI	R16,0xE8
    0240 E013      LDI	R17,3
    0241 DFED      RCALL	_Delay
(0081)    Init_CAN();			     //CAN初始化	
    0242 DE7F      RCALL	_Init_CAN
(0082)    SEI();
    0243 9478      BSET	7
    0244 C017      RJMP	0x025C
(0083)    while(1)
(0084)    {
(0085) 	  Key3=KeyInput(3);
    0245 E003      LDI	R16,3
    0246 DDED      RCALL	_KeyInput
    0247 93000066  STS	Key3,R16
(0086) 	  if(KeyStatus == 1)	 //按键按下
    0249 91800063  LDS	R24,KeyStatus
    024B 3081      CPI	R24,1
    024C F421      BNE	0x0251
(0087) 	  {
(0088) 	     KeyStatus=0;
    024D 2422      CLR	R2
    024E 92200063  STS	KeyStatus,R2
(0089) 		 CanTransmit(); 	 //发送数据
    0250 DED2      RCALL	_CanTransmit
(0090) 	  }
(0091) 	 
(0092) 	  if(RevFlag == 1)		 //如果正确接收到数据
    0251 91800077  LDS	R24,RevFlag
    0253 3081      CPI	R24,1
    0254 F439      BNE	0x025C
(0093) 	  {
(0094) 	     RevFlag=0;
    0255 2422      CLR	R2
    0256 92200077  STS	RevFlag,R2
(0095) 		 PORTD ^= BIT(5); 
FILE: <library>
    0258 E280      LDI	R24,0x20
    0259 B222      IN	R2,0x12
    025A 2628      EOR	R2,R24
    025B BA22      OUT	0x12,R2
    025C CFE8      RJMP	0x0245
    025D 9508      RET
pop_gset2:
    025E E0E2      LDI	R30,2
    025F C00E      RJMP	pop
pop_gset4:
    0260 E0E8      LDI	R30,0x8
    0261 C00C      RJMP	pop
push_gset5:
    0262 92FA      ST	R15,-Y
    0263 92EA      ST	R14,-Y
push_gset4:
    0264 92DA      ST	R13,-Y
    0265 92CA      ST	R12,-Y
push_gset3:
    0266 92BA      ST	R11,-Y
    0267 92AA      ST	R10,-Y
push_gset2:
    0268 937A      ST	R23,-Y
    0269 936A      ST	R22,-Y
push_gset1:
    026A 935A      ST	R21,-Y
    026B 934A      ST	R20,-Y
    026C 9508      RET
pop_gset1:
    026D E0E1      LDI	R30,1
pop:
    026E 9149      LD	R20,Y+
    026F 9159      LD	R21,Y+
    0270 FDE0      SBRC	R30,0
    0271 9508      RET
    0272 9169      LD	R22,Y+
    0273 9179      LD	R23,Y+
    0274 FDE1      SBRC	R30,1
    0275 9508      RET
    0276 90A9      LD	R10,Y+
    0277 90B9      LD	R11,Y+
    0278 FDE2      SBRC	R30,2
    0279 9508      RET
    027A 90C9      LD	R12,Y+
    027B 90D9      LD	R13,Y+
    027C FDE3      SBRC	R30,3
    027D 9508      RET
    027E 90E9      LD	R14,Y+
    027F 90F9      LD	R15,Y+
    0280 9508      RET
push_lset:
    0281 93FA      ST	R31,-Y
    0282 93EA      ST	R30,-Y
    0283 93BA      ST	R27,-Y
    0284 93AA      ST	R26,-Y
    0285 939A      ST	R25,-Y
    0286 938A      ST	R24,-Y
    0287 933A      ST	R19,-Y
    0288 932A      ST	R18,-Y
    0289 931A      ST	R17,-Y
    028A 930A      ST	R16,-Y
    028B 929A      ST	R9,-Y
    028C 928A      ST	R8,-Y
    028D 927A      ST	R7,-Y
    028E 926A      ST	R6,-Y
    028F 925A      ST	R5,-Y
    0290 924A      ST	R4,-Y
    0291 923A      ST	R3,-Y
    0292 922A      ST	R2,-Y
    0293 921A      ST	R1,-Y
    0294 920A      ST	R0,-Y
    0295 B60F      IN	R0,0x3F
    0296 920A      ST	R0,-Y
    0297 9508      RET
pop_lset:
    0298 9009      LD	R0,Y+
    0299 BE0F      OUT	0x3F,R0
    029A 9009      LD	R0,Y+
    029B 9019      LD	R1,Y+
    029C 9029      LD	R2,Y+
    029D 9039      LD	R3,Y+
    029E 9049      LD	R4,Y+
    029F 9059      LD	R5,Y+
    02A0 9069      LD	R6,Y+
    02A1 9079      LD	R7,Y+
    02A2 9089      LD	R8,Y+
    02A3 9099      LD	R9,Y+
    02A4 9109      LD	R16,Y+
    02A5 9119      LD	R17,Y+
    02A6 9129      LD	R18,Y+
    02A7 9139      LD	R19,Y+
    02A8 9189      LD	R24,Y+
    02A9 9199      LD	R25,Y+
    02AA 91A9      LD	R26,Y+
    02AB 91B9      LD	R27,Y+
    02AC 91E9      LD	R30,Y+
    02AD 91F9      LD	R31,Y+
    02AE 9508      RET
lsl8:
    02AF 2311      TST	R17
    02B0 F019      BEQ	0x02B4
    02B1 0F00      LSL	R16
    02B2 951A      DEC	R17
    02B3 CFFB      RJMP	lsl8
    02B4 9508      RET

⌨️ 快捷键说明

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