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

📄 mega16.lst

📁 电动车控制器
💻 LST
📖 第 1 页 / 共 3 页
字号:
__text_start:
__start:
    0037 E5CF      LDI	R28,0x5F
    0038 E0D4      LDI	R29,4
    0039 BFCD      OUT	0x3D,R28
    003A BFDE      OUT	0x3E,R29
    003B 51C0      SUBI	R28,0x10
    003C 40D0      SBCI	R29,0
    003D EA0A      LDI	R16,0xAA
    003E 8308      STD	Y+0,R16
    003F 2400      CLR	R0
    0040 E7E9      LDI	R30,0x79
    0041 E0F0      LDI	R31,0
    0042 E010      LDI	R17,0
    0043 38EB      CPI	R30,0x8B
    0044 07F1      CPC	R31,R17
    0045 F011      BEQ	0x0048
    0046 9201      ST	R0,Z+
    0047 CFFB      RJMP	0x0043
    0048 8300      STD	Z+0,R16
    0049 E5E4      LDI	R30,0x54
    004A E0F0      LDI	R31,0
    004B E6A0      LDI	R26,0x60
    004C E0B0      LDI	R27,0
    004D E010      LDI	R17,0
    004E 36ED      CPI	R30,0x6D
    004F 07F1      CPC	R31,R17
    0050 F021      BEQ	0x0055
    0051 95C8      LPM
    0052 9631      ADIW	R30,1
    0053 920D      ST	R0,X+
    0054 CFF9      RJMP	0x004E
    0055 940E0245  CALL	_main
_exit:
    0057 CFFF      RJMP	_exit
FILE: D:\EBIKE\eb_pro\M16PWM_led\m16pwm-led.c
(0001) ////////////////////////////////////////////////////////////////////////////////
(0002) //ICC-AVR application builder : 2006-8-1 上午 08:05:37
(0003) // Target : M16
(0004) // Crystal: 16.0000Mhz
(0005) // ADc2采集转把信号
(0006) ////////////////////////////////////////////////////////////////////////////////
(0007) #include <iom16v.h>
(0008) #include <macros.h>
(0009) 
(0010) #define fre 125
(0011) #define uchar     unsigned char
(0012) #define uint      unsigned int
(0013) unsigned char  kk;
(0014) int k;
(0015) uchar temp_data,hour_data,minut_data,second_data,second_flag;
(0016) uchar AdResult=0;
(0017) uchar SpeedMode=0;//SpeedMode=0 手动模式;SpeedMode=0x55 巡航模式
(0018) uchar SpeedVal=0;//保存当前速度参数,用于巡航模式
(0019) uchar M8Mode=0x0;//M8控制字=Rev,Rev,Rev,RevMode,Rev,Rev,LEFT_LED,RIGHT_LED
(0020) uchar LedTab[16]={0xEB,0x41,0xB3,0xBA,0x78,0xDA,0xDB,0xA8,0xFB,0xFA,
(0021)                              0xF9,0xFB,0xC3,0xEB,0xD3,0xD1};
(0022) uchar LedBuf[2]={0,0};	
(0023) uchar LedDp=0;
(0024) uchar UartBuf[10],UartBufCount=0;
(0025) uchar LRledReg=0;						 
(0026) 
(0027) 
(0028) ////////////////////////////////////////////////////////////////////////////////
(0029) //function declare
(0030) void port_init(void);
(0031) void uart0_init(void);
(0032) void uart0_rx_isr(void);
(0033) void uart0_tx(uchar tdata);
(0034) void tx_pack(void);
(0035) void timer1_init(void);
(0036) void timer1_comp_isr(void);
(0037) void led_display(uchar delay);
(0038) void HexToDec(uchar hex,uchar dec);
(0039) void ms_delay(uint delay);
(0040) void init_devices(void);
(0041) void adc_init(void);   
(0042) ////////////////////////////////////////////////////////////////////////////////
(0043) void port_init(void)
(0044) {
(0045)  PORTA = 0xFF;
_port_init:
    0058 EF8F      LDI	R24,0xFF
    0059 BB8B      OUT	0x1B,R24
(0046)  DDRA  = 0xFB; //PA2=ADC2,输入
    005A EF8B      LDI	R24,0xFB
    005B BB8A      OUT	0x1A,R24
(0047)  PORTB = 0xFF;
    005C EF8F      LDI	R24,0xFF
    005D BB88      OUT	0x18,R24
(0048)  DDRB  = 0x1F; //数码管片选信号,低有效,常态为高,PB4=LED-dp
    005E E18F      LDI	R24,0x1F
    005F BB87      OUT	0x17,R24
(0049)  PORTC = 0xFF; //m103 output only
    0060 EF8F      LDI	R24,0xFF
    0061 BB85      OUT	0x15,R24
(0050)  DDRC  = 0x00; //PC0,1=RL_in
    0062 2422      CLR	R2
    0063 BA24      OUT	0x14,R2
(0051)  PORTD = 0x9F;
    0064 E98F      LDI	R24,0x9F
    0065 BB82      OUT	0x12,R24
(0052)  DDRD  = 0x78;
    0066 E788      LDI	R24,0x78
    0067 BB81      OUT	0x11,R24
    0068 9508      RET
(0053) }
(0054) 
(0055) 
(0056) //TIMER1 initialisation - prescale:1
(0057) // WGM: 0) Normal, TOP=0xFFFF
(0058) // desired value: 1Sec
(0059) // actual value:  1.000Sec (0.0%)
(0060) void timer1_init(void)
(0061) {
(0062)  TCCR1B = 0x00; //stop
_timer1_init:
    0069 2422      CLR	R2
    006A BC2E      OUT	0x2E,R2
(0063)  TCNT1H = 0xC2; //setup
    006B EC82      LDI	R24,0xC2
    006C BD8D      OUT	0x2D,R24
(0064)  TCNT1L = 0xF7;
    006D EF87      LDI	R24,0xF7
    006E BD8C      OUT	0x2C,R24
(0065)  OCR1AH = 0x3D;
    006F E38D      LDI	R24,0x3D
    0070 BD8B      OUT	0x2B,R24
(0066)  OCR1AL = 0x09;
    0071 E089      LDI	R24,0x9
    0072 BD8A      OUT	0x2A,R24
(0067)  OCR1BH = 0x3D;
    0073 E38D      LDI	R24,0x3D
    0074 BD89      OUT	0x29,R24
(0068)  OCR1BL = 0x09;
    0075 E089      LDI	R24,0x9
    0076 BD88      OUT	0x28,R24
(0069)  //OCR1CH = $OCR1CH$;
(0070)  //OCR1CL = $OCR1CL$;
(0071)  ICR1H  = 0x3D;
    0077 E38D      LDI	R24,0x3D
    0078 BD87      OUT	0x27,R24
(0072)  ICR1L  = 0x09;
    0079 E089      LDI	R24,0x9
    007A BD86      OUT	0x26,R24
(0073)  TCCR1A = 0x00;
    007B BC2F      OUT	0x2F,R2
(0074)  TCCR1B = 0x05; //start Timer
    007C E085      LDI	R24,5
    007D BD8E      OUT	0x2E,R24
    007E 9508      RET
(0075) }
(0076) /*************************************************************************** 
(0077)                                                   
(0078) ****************************************************************************/ 
(0079) //UART0 initialize
(0080) // desired baud rate: 9600
(0081) // actual: baud rate:9615 (0.2%)
(0082) // char size: 8 bit
(0083) // parity: Disabled
(0084) void uart0_init(void)
(0085) {
(0086)  UCSRB = 0x00; //disable while setting baud rate
_uart0_init:
    007F 2422      CLR	R2
    0080 B82A      OUT	0x0A,R2
(0087)  UCSRA = 0x00;
    0081 B82B      OUT	0x0B,R2
(0088)  UCSRC = BIT(URSEL) | 0x06;
    0082 E886      LDI	R24,0x86
    0083 BD80      OUT	0x20,R24
(0089)  UBRRL = 0x67; //set baud rate lo
    0084 E687      LDI	R24,0x67
    0085 B989      OUT	0x09,R24
(0090)  UBRRH = 0x00; //set baud rate hi
    0086 BC20      OUT	0x20,R2
(0091)  UCSRB = 0x98;
    0087 E988      LDI	R24,0x98
    0088 B98A      OUT	0x0A,R24
    0089 9508      RET
_uart0_rx_isr:
  voldata              --> R20
    008A 920A      ST	R0,-Y
    008B 921A      ST	R1,-Y
    008C 922A      ST	R2,-Y
    008D 923A      ST	R3,-Y
    008E 930A      ST	R16,-Y
    008F 931A      ST	R17,-Y
    0090 932A      ST	R18,-Y
    0091 933A      ST	R19,-Y
    0092 938A      ST	R24,-Y
    0093 939A      ST	R25,-Y
    0094 93EA      ST	R30,-Y
    0095 93FA      ST	R31,-Y
    0096 B60F      IN	R0,0x3F
    0097 920A      ST	R0,-Y
    0098 940E02FA  CALL	push_gset1
(0092) }
(0093) /*************************************************************************** 
(0094)                                                  
(0095) ****************************************************************************/ 
(0096) #pragma interrupt_handler uart0_rx_isr:12
(0097) void uart0_rx_isr(void)
(0098) {
(0099)   uchar voldata;
(0100)  //uart has received a character in UDR
(0101)     UartBuf[UartBufCount++]= UDR;
    009A 90200077  LDS	R2,UartBufCount
    009C 2433      CLR	R3
    009D 2D82      MOV	R24,R2
    009E 5F8F      SUBI	R24,0xFF
    009F 93800077  STS	UartBufCount,R24
    00A1 E789      LDI	R24,0x79
    00A2 E090      LDI	R25,0
    00A3 2DE2      MOV	R30,R2
    00A4 27FF      CLR	R31
    00A5 0FE8      ADD	R30,R24
    00A6 1FF9      ADC	R31,R25
    00A7 B02C      IN	R2,0x0C
    00A8 8220      STD	Z+0,R2
(0102) 	if(UartBuf[0]==0xaa)//包头
    00A9 91800079  LDS	R24,UartBuf
    00AB 3A8A      CPI	R24,0xAA
    00AC F559      BNE	0x00D8
(0103) 	{
(0104) 	//UartBuf[3]=Rev,Rev,Rev,Rev,Rev,Rev,LEFT_LED,RIGHT_LED	
(0105) 	     if(UartBufCount>4)
    00AD E084      LDI	R24,4
    00AE 90200077  LDS	R2,UartBufCount
    00B0 1582      CP	R24,R2
    00B1 F548      BCC	0x00DB
(0106) 		 {
(0107) 		    if( ((UartBuf[1]+UartBuf[2])==0xff)&&
    00B2 9020007B  LDS	R2,UartBuf+2
    00B4 9180007A  LDS	R24,UartBuf+1
    00B6 0D82      ADD	R24,R2
    00B7 3F8F      CPI	R24,0xFF
    00B8 F4D9      BNE	0x00D4
    00B9 9020007D  LDS	R2,0x7D
    00BB 9180007C  LDS	R24,UartBuf+3
    00BD 0D82      ADD	R24,R2
    00BE 3F8F      CPI	R24,0xFF
    00BF F4A1      BNE	0x00D4
(0108) 				((UartBuf[3]+UartBuf[4])==0xff) ) 
(0109) 			{				
(0110) 				LedBuf[0]=UartBuf[1];//SpeedVal
    00C0 9020007A  LDS	R2,UartBuf+1
    00C2 92200074  STS	LedBuf,R2
(0111) 				voldata=UartBuf[3];
    00C4 9140007C  LDS	R20,UartBuf+3
(0112) 				if(voldata<105)voldata=105; //电压范围21~29.5,每个码表示0.2V
    00C6 3649      CPI	R20,0x69
    00C7 F408      BCC	0x00C9
    00C8 E649      LDI	R20,0x69
(0113) 				// result=100*((tmpvol/5)-21)/(29.5-21)
(0114) 				LedBuf[1]=40*(voldata-105)/17;//+24V
    00C9 E288      LDI	R24,0x28
    00CA 9F84      MUL	R24,R20
    00CB 0180      MOVW	R16,R0
    00CC 5608      SUBI	R16,0x68
    00CD 4110      SBCI	R17,0x10
    00CE E121      LDI	R18,0x11
    00CF E030      LDI	R19,0
    00D0 940E02A6  CALL	div16s
    00D2 93000075  STS	LedBuf+1,R16
(0115) 				  				   					
(0116) 		    }
(0117) 		    UartBufCount=0;			
    00D4 2422      CLR	R2
    00D5 92200077  STS	UartBufCount,R2
(0118) 	     }	    
(0119) 	}
    00D7 C003      RJMP	0x00DB
(0120) 	else UartBufCount=0;   
    00D8 2422      CLR	R2
    00D9 92200077  STS	UartBufCount,R2
    00DB 940E02FD  CALL	pop_gset1
    00DD 9009      LD	R0,Y+
    00DE BE0F      OUT	0x3F,R0
    00DF 91F9      LD	R31,Y+
    00E0 91E9      LD	R30,Y+
    00E1 9199      LD	R25,Y+
    00E2 9189      LD	R24,Y+
    00E3 9139      LD	R19,Y+
    00E4 9129      LD	R18,Y+
    00E5 9119      LD	R17,Y+
    00E6 9109      LD	R16,Y+
    00E7 9039      LD	R3,Y+
    00E8 9029      LD	R2,Y+
    00E9 9019      LD	R1,Y+
    00EA 9009      LD	R0,Y+
    00EB 9518      RETI
(0121) }
(0122) /*************************************************************************** 
(0123)                                                     
(0124) ****************************************************************************/ 
(0125) void uart0_tx(uchar tdata)
(0126) {
(0127)    while(!(UCSRA & (1<<UDRE) ));
_uart0_tx:
  tdata                --> R16
    00EC 9B5D      SBIS	0x0B,5
    00ED CFFE      RJMP	_uart0_tx
(0128)    UDR = tdata;
    00EE B90C      OUT	0x0C,R16
    00EF 9508      RET
(0129) }
(0130) void tx_pack(void)
(0131) {
(0132)   
(0133) 	uart0_tx(0xaa);
_tx_pack:
    00F0 EA0A      LDI	R16,0xAA
    00F1 DFFA      RCALL	_uart0_tx
(0134) 	if(SpeedMode)
    00F2 90200061  LDS	R2,SpeedMode
    00F4 2022      TST	R2
    00F5 F059      BEQ	0x0101
(0135) 	{   //巡航模式
(0136) 	    uart0_tx(SpeedVal);
    00F6 91000062  LDS	R16,SpeedVal
    00F8 DFF3      RCALL	_uart0_tx
(0137) 	    uart0_tx(0xff-SpeedVal);		
    00F9 90200062  LDS	R2,SpeedVal
    00FB 2433      CLR	R3
    00FC EF0F      LDI	R16,0xFF
    00FD 1902      SUB	R16,R2
    00FE 0913      SBC	R17,R3
    00FF DFEC      RCALL	_uart0_tx
(0138) 	}	
    0100 C00A      RJMP	0x010B
(0139) 	else
(0140) 	{   //手动模式
(0141) 	    uart0_tx(AdResult);
    0101 91000060  LDS	R16,AdResult
    0103 DFE8      RCALL	_uart0_tx
(0142) 	    uart0_tx(0xff-AdResult);	
    0104 90200060  LDS	R2,AdResult
    0106 2433      CLR	R3
    0107 EF0F      LDI	R16,0xFF
    0108 1902      SUB	R16,R2

⌨️ 快捷键说明

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