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

📄 结点1.lst

📁 不可多得的atmel公司canbus通讯程序(at90can128)
💻 LST
📖 第 1 页 / 共 3 页
字号:
__text_start:
__start:
      56 EFCF      LDI	R28,0xFF
      57 E1D0      LDI	R29,0x10
      58 BFCD      OUT	0x3D,R28
      59 BFDE      OUT	0x3E,R29
      5A 51C8      SUBI	R28,0x18
      5B 40D0      SBCI	R29,0
      5C EA0A      LDI	R16,0xAA
      5D 8308      STD	Y+0,R16
      5E 2400      CLR	R0
      5F E0ED      LDI	R30,0xD
      60 E0F1      LDI	R31,1
      61 E011      LDI	R17,1
      62 31EF      CPI	R30,0x1F
      63 07F1      CPC	R31,R17
      64 F011      BEQ	0x0067
      65 9201      ST	R0,Z+
      66 CFFB      RJMP	0x0062
      67 8300      STD	Z+0,R16
      68 E9EE      LDI	R30,0x9E
      69 E0F0      LDI	R31,0
      6A E0A0      LDI	R26,0
      6B E0B1      LDI	R27,1
      6C E010      LDI	R17,0
      6D E000      LDI	R16,0
      6E BF0B      OUT	0x3B,R16
      6F 3AEB      CPI	R30,0xAB
      70 07F1      CPC	R31,R17
      71 F021      BEQ	0x0076
      72 95C8      LPM
      73 9631      ADIW	R30,1
      74 920D      ST	R0,X+
      75 CFF9      RJMP	0x006F
      76 940E 018C CALL	_main
_exit:
      78 CFFF      RJMP	_exit
FILE: D:\CANBUS\数据帧\查询\单向通讯\结点1-串口\AT90CAN128.C
(0001) #define _MAIN_H
(0002) #include "AT90CAN128.H"
(0003) 
(0004) uint8 CS = 0;
(0005) uint8 volatile CHA = 0;
(0006) 
(0007) BOOL LED[5] = {FALSE,FALSE,FALSE,FALSE,FALSE};
(0008) BOOL volatile send_mark = TRUE;
(0009) BOOL volatile display_mark = TRUE;
(0010) uint8 send_time = 0;
(0011) uint8 display_time = 0;
(0012) 
(0013) 
(0014) void PORT_Init(void)
(0015) {
(0016) 	PORTA = 0xFF;
_PORT_Init:
      79 EF8F      LDI	R24,0xFF
      7A B982      OUT	0x02,R24
(0017) 	DDRA  = 0xFF;	//数码管
      7B B981      OUT	0x01,R24
(0018)    
(0019) 	PORTB = 0xFF;
      7C B985      OUT	0x05,R24
(0020) 	DDRB  = 0x00;
      7D 2422      CLR	R2
      7E B824      OUT	0x04,R2
(0021)    
(0022) 	PORTC = 0xFF; //m103 output only
      7F B988      OUT	0x08,R24
(0023) 	DDRC  = 0xFF;
      80 B987      OUT	0x07,R24
(0024)    
(0025) 	PORTD = 0xFF;//PD4
      81 B98B      OUT	0x0B,R24
(0026) 	DDRD  = 0x10;
      82 E180      LDI	R24,0x10
      83 B98A      OUT	0x0A,R24
(0027)    
(0028) 	PORTE = 0xFF;
      84 EF8F      LDI	R24,0xFF
      85 B98E      OUT	0x0E,R24
(0029) 	DDRE  = 0x00;
      86 B82D      OUT	0x0D,R2
(0030)    
(0031) 	PORTF = 0xFF;	
      87 BB81      OUT	0x11,R24
(0032)    DDRF  = 0x00;
      88 BA20      OUT	0x10,R2
(0033)    
(0034) 	PORTG = 0xFF;
      89 BB84      OUT	0x14,R24
(0035) 	DDRG  = 0x00;
      8A BA23      OUT	0x13,R2
(0036) //=======================================================================
(0037) //ADEN置位即启动ADC,否则ADC功能关闭。在转换过程中关闭ADC将立即中止正在进
(0038) //行的转换。
(0039) //=======================================================================
(0040) 	ADCSRA = (0 << ADEN);				//	关闭数/模转换器
      8B 9220 007A STS	0x007A,R2
(0041) //=======================================================================
(0042) //ACD 置位时,模拟比较器的电源被切断。可以在任何时候设置此位来关掉模拟比较器。这
(0043) //可以减少器件工作模式及空闲模式下的功耗。改变ACD 位时,必须清零ACSR 寄存器的
(0044) //ACIE 位来禁止模拟比较器中断。否则ACD 改变时可能会产生中断。
(0045) //当ACIE 位被置"1” 且状态寄存器中的全局中断标志I 也被置位时,模拟比较器中断被激
(0046) //活。否则中断被禁止。
(0047) //=======================================================================
(0048) 	ACSR = (1 << ACD) | (0 << ACIE);	//	关闭模拟比较器
      8D E880      LDI	R24,0x80
      8E BF80      OUT	0x30,R24
(0049) //=======================================================================
(0050) //	EEWE复位值不定
(0051) //=======================================================================
(0052) 	EECR = 0;
      8F BA2F      OUT	0x1F,R2
      90 9508      RET
(0053) }
(0054) 
(0055) 
(0056) //////////////////////////////////////////////////////////////////////
(0057) //TIMER0 initialize - prescale:1024
(0058) // WGM: CTC
(0059) // desired value: 1mSec
(0060) // actual value:  1.019mSec (-1.9%)
(0061) // 定时器0=2毫秒=寄存器比较值11059200*2/1024/1000-1=21.6-1=20.6=0x35
(0062) //--------------------------------------------------------------------
(0063) //FOC0A WGM00 COM0A1 COM0A0 WGM01 CS02 CS01 CS00
(0064) //        0                   1    1    0    1 
(0065) //////////////////////////////////////////////////////////////////////
(0066) void TIMER0_Init(void)
(0067) {
(0068) 	TCCR0 = 0x00; //stop
_TIMER0_Init:
      91 2422      CLR	R2
      92 BC24      OUT	0x24,R2
(0069)  	ASSR  = 0x00; //set async mode
      93 9220 00B6 STS	0x00B6,R2
(0070)  	TCNT0 = 0xF9; //set count
      95 EF89      LDI	R24,0xF9
      96 BD86      OUT	0x26,R24
(0071)  	OCR0  = 0x07;
      97 E087      LDI	R24,7
      98 BD87      OUT	0x27,R24
(0072)  	TCCR0 = 0x0D; //start timer	
      99 E08D      LDI	R24,0xD
      9A BD84      OUT	0x24,R24
(0073) 	TIMSK0 = (1 << OCIE0);					//	使能T0=自动重装中断(1<<TOIE0)|
      9B E082      LDI	R24,2
      9C 9380 006E STS	0x006E,R24
      9E 9508      RET
(0074) }
(0075) 
(0076) 
(0077) //////////////////////////////////////////////////////////////////////
(0078) //TIMER2 initialize - prescale:1024
(0079) // WGM: CTC
(0080) // desired value: 5mSec
(0081) // actual value:  5.000mSec (0.0%)
(0082) // 256-11059200*5/1024/1000/10=256-54=202=0xCA(5毫秒)
(0083) // 定时器2=10毫秒=寄存器比较值11059200*10/1024/1000-1=108-1=107=0x6B
(0084) //--------------------------------------------------------------------
(0085) //FOC2A WGM20 COM2A1 COM2A0 WGM21 CS22 CS21 CS20
(0086) //        0                   1     1    1    1
(0087) //////////////////////////////////////////////////////////////////////
(0088) void TIMER2_Init(void)
(0089) {
(0090) 	TCCR2 = 0x00; //stop
_TIMER2_Init:
      9F 2422      CLR	R2
      A0 9220 00B0 STS	0x00B0,R2
(0091)  	TCNT2 = 0xD9; //setup
      A2 ED89      LDI	R24,0xD9
      A3 9380 00B2 STS	0x00B2,R24
(0092)  	OCR2  = 0x27;
      A5 E287      LDI	R24,0x27
      A6 9380 00B3 STS	0x00B3,R24
(0093)  	TCCR2 = 0x0F; //start	
      A8 E08F      LDI	R24,0xF
      A9 9380 00B0 STS	0x00B0,R24
(0094) 	TIMSK2 = (1 << OCIE2);					//	使能T2=自动重装中断(1<<TOIE0)|
      AB E082      LDI	R24,2
      AC 9380 0070 STS	0x0070,R24
      AE 9508      RET
(0095) }
(0096) 
(0097) 
(0098) void Watchdog_Init(void)
(0099) {
(0100) 	WDR();				//	看门狗计数清零
_Watchdog_Init:
      AF 95A8      WDR
(0101) 	WDTCR = (1 << WDE) | (1 << WDP2) | (1 << WDP1) | (0 << WDP0);  //	使能watchdog,并且,采用128K分频,典型溢出时间5V时1S
      B0 E08E      LDI	R24,0xE
      B1 9380 0060 STS	0x0060,R24
      B3 9508      RET
_ExChange:
  K                    --> R10
  K_Lo                 --> R20
  K_Hi                 --> R22
  KK2                  --> R12
  KK1                  --> R14
  i                    --> R10
  num                  --> R16
      B4 940E 0335 CALL	push_xgsetF0FC
(0102) } 
(0103) 
(0104) 
(0105) //////////////////////////////////////////////////////////////////////
(0106) // a = PA7(pa0)			 
(0107) // b = PA6(pa1)
(0108) // c = PA5(pa2)
(0109) // d = PA4(pa3)
(0110) // e = PA3(pa4)
(0111) // f = PA2(pa5)
(0112) // g = PA1(pa6);
(0113) // h = PA0(pa7)		
(0114) //////////////////////////////////////////////////////////////////////
(0115) uint8 ExChange(uint8 num)
(0116) {
(0117)    uint8 i;
(0118)    uint8 KK1 = num;
      B6 2EE0      MOV	R14,R16
(0119)    uint8 KK2 = num;
      B7 2EC0      MOV	R12,R16
(0120)    uint8 K_Hi = 0;
      B8 2766      CLR	R22
(0121)    uint8 K_Lo = 0;
      B9 2744      CLR	R20
(0122)    uint8 K;
(0123) 	
(0124) //----------------------------------------------------------------- 
(0125) //bit0-->bit7   //bit1-->bit6   //bit2-->bit5   //bit3-->bit4     
(0126) //----------------------------------------------------------------- 
(0127) 	for (i=0;i<4;i++)
      BA 24AA      CLR	R10
      BB C006      RJMP	0x00C2
(0128) 	{
(0129) 			K_Hi <<= 1;
      BC 0F66      LSL	R22
(0130) 			if (KK1 & 0x01)
      BD FEE0      SBRS	R14,0
      BE C001      RJMP	0x00C0
(0131) 				K_Hi |= 0x01;
      BF 6061      ORI	R22,1
(0132) 			KK1 >>= 1; 
      C0 94E6      LSR	R14
      C1 94A3      INC	R10
      C2 2D8A      MOV	R24,R10
      C3 3084      CPI	R24,4
      C4 F3B8      BCS	0x00BC
(0133) 	} 
(0134) //----------------------------------------------------------------- 
(0135) //bit7-->bit0   //bit6-->bit1   //bit5-->bit2   //bit4-->bit3     
(0136) //----------------------------------------------------------------- 
(0137) 	for (i=0;i<4;i++)
      C5 24AA      CLR	R10
      C6 C006      RJMP	0x00CD
(0138) 	{
(0139) 			K_Lo <<= 1;
      C7 0F44      LSL	R20
(0140) 			if (KK2 & 0x10)
      C8 FEC4      SBRS	R12,4
      C9 C001      RJMP	0x00CB
(0141) 				K_Lo |= 0x01;
      CA 6041      ORI	R20,1
(0142) 			KK2 >>= 1; 
      CB 94C6      LSR	R12
      CC 94A3      INC	R10
      CD 2D8A      MOV	R24,R10
      CE 3084      CPI	R24,4
      CF F3B8      BCS	0x00C7
(0143) 	}
(0144) 	K = ((K_Hi << 4) | K_Lo);
      D0 2F86      MOV	R24,R22
      D1 708F      ANDI	R24,0xF
      D2 9582      SWAP	R24
      D3 2EA8      MOV	R10,R24
      D4 2AA4      OR	R10,R20
(0145) 	return (K);
      D5 2D0A      MOV	R16,R10
      D6 940C 032A JMP	pop_xgsetF0FC
(0146) }
(0147)    
(0148) 
(0149) void DISPLAY_LED(void)
(0150) {
(0151) 	if (LED[0])
_DISPLAY_LED:
      D8 9020 0102 LDS	R2,LED
      DA 2022      TST	R2
      DB F011      BEQ	0x00DE
(0152) 		LED1_ON();
      DC 9844      CBI	0x08,4
      DD C001      RJMP	0x00DF
(0153) 	else
(0154) 		LED1_OFF();
      DE 9A44      SBI	0x08,4
(0155) 
(0156) 	if (LED[1])
      DF 9020 0103 LDS	R2,LED+1
      E1 2022      TST	R2
      E2 F011      BEQ	0x00E5
(0157) 		LED2_ON();
      E3 9843      CBI	0x08,3
      E4 C001      RJMP	0x00E6
(0158) 	else
(0159) 		LED2_OFF();
      E5 9A43      SBI	0x08,3
(0160) 
(0161) 	if (LED[2])
      E6 9020 0104 LDS	R2,LED+2
      E8 2022      TST	R2
      E9 F011      BEQ	0x00EC
(0162) 		LED3_ON();
      EA 9842      CBI	0x08,2
      EB C001      RJMP	0x00ED
(0163) 	else
(0164) 		LED3_OFF();
      EC 9A42      SBI	0x08,2
(0165) 
(0166) 	if (LED[3])
      ED 9020 0105 LDS	R2,LED+3
      EF 2022      TST	R2
      F0 F011      BEQ	0x00F3
(0167) 		LED4_ON();
      F1 9841      CBI	0x08,1
      F2 C001      RJMP	0x00F4
(0168) 	else
(0169) 		LED4_OFF();
      F3 9A41      SBI	0x08,1
(0170) 
(0171) 	if (LED[4])
      F4 9020 0106 LDS	R2,0x0106
      F6 2022      TST	R2
      F7 F011      BEQ	0x00FA
(0172) 		LED5_ON();
      F8 9840      CBI	0x08,0
      F9 C001      RJMP	0x00FB
(0173) 	else
(0174) 		LED5_OFF();
      FA 9A40      SBI	0x08,0
      FB 9508      RET
_TIMER0_COMP_ISR:
      FC 920A      ST	R0,-Y
      FD 921A      ST	R1,-Y
      FE 922A      ST	R2,-Y
      FF 923A      ST	R3,-Y
     100 924A      ST	R4,-Y
     101 925A      ST	R5,-Y
     102 926A      ST	R6,-Y
     103 927A      ST	R7,-Y
     104 928A      ST	R8,-Y
     105 929A      ST	R9,-Y
     106 930A      ST	R16,-Y
     107 931A      ST	R17,-Y
     108 932A      ST	R18,-Y
     109 933A      ST	R19,-Y
     10A 938A      ST	R24,-Y
     10B 939A      ST	R25,-Y
     10C 93AA      ST	R26,-Y
     10D 93BA      ST	R27,-Y
     10E 93EA      ST	R30,-Y
     10F 93FA      ST	R31,-Y
     110 B60F      IN	R0,0x3F
     111 920A      ST	R0,-Y
     112 934A      ST	R20,-Y
     113 935A      ST	R21,-Y
(0175) }
(0176) 
(0177) 
(0178) #pragma interrupt_handler TIMER0_COMP_ISR:iv_TIMER0_COMP
(0179) void TIMER0_COMP_ISR(void)
(0180) {
(0181) 	CS++;
     114 9180 0100 LDS	R24,CS
     116 5F8F      SUBI	R24,0xFF
     117 9380 0100 STS	CS,R24
(0182) 	if (CS > 1)
     119 E081      LDI	R24,1
     11A 9020 0100 LDS	R2,CS
     11C 1582      CP	R24,R2
     11D F418      BCC	0x0121
(0183) 		CS = 0;

⌨️ 快捷键说明

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