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

📄 结点2.lst

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

⌨️ 快捷键说明

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