📄 ac18-1.lst
字号:
__start:
__text_start:
00B7 E5CF LDI R28,0x5F
00B8 E0D4 LDI R29,4
00B9 BFCD OUT 0x3D,R28
00BA BFDE OUT 0x3E,R29
00BB 51C0 SUBI R28,0x10
00BC 40D0 SBCI R29,0
00BD EA0A LDI R16,0xAA
00BE 8308 STD Y+0,R16
00BF 2400 CLR R0
00C0 E6EE LDI R30,0x6E
00C1 E0F0 LDI R31,0
00C2 E010 LDI R17,0
00C3 39E0 CPI R30,0x90
00C4 07F1 CPC R31,R17
00C5 F011 BEQ 0x00C8
00C6 9201 ST R0,Z+
00C7 CFFB RJMP 0x00C3
00C8 8300 STD Z+0,R16
00C9 E5EF LDI R30,0x5F
00CA E0F1 LDI R31,1
00CB E6A0 LDI R26,0x60
00CC E0B0 LDI R27,0
00CD E011 LDI R17,1
00CE 36ED CPI R30,0x6D
00CF 07F1 CPC R31,R17
00D0 F021 BEQ 0x00D5
00D1 95C8 LPM
00D2 9631 ADIW R30,1
00D3 920D ST R0,X+
00D4 CFF9 RJMP 0x00CE
00D5 940E021C CALL _main
_exit:
00D7 CFFF RJMP _exit
FILE: D:\ac18-1\main.c
(0001) //ICC-AVR application builder : 2007-7-24 12:41:43
(0002) // Target : M16
(0003) // Crystal: 8.0000Mhz
(0004) #include <iom16v.h>
(0005) #include <macros.h>
(0006) #include "head.h"
(0007) #define uchar unsigned char
(0008) #define uint unsigned int
(0009) #define xtal 8
(0010)
(0011) extern void WaitForEnable(void);
(0012) extern void LcdWriteData(uchar W);
(0013) extern void LcdWriteCommand(uchar CMD,uchar Attribc);
(0014) extern void InitLcd(void);
(0015) extern void Display(uchar dd);
(0016) extern void DisplayOneChar(uchar x,uchar y,uchar Wdata);
(0017) extern void ePutstr(uchar x,uchar y,uchar const *ptr);
(0018)
(0019) #define SPEED_0V PORTD|=BIT(PD0)
(0020) #define SPEED_5V PORTD&=~BIT(PD0)
(0021) #define POW_OFF PORTD|=BIT(PD1)
(0022) #define POW_ON PORTD&=~BIT(PD1)
(0023) #define POW_14V PORTD|=BIT(PD2)
(0024) #define POW_27V PORTD&=~BIT(PD2)
(0025) #define AIR_OFF PORTD|=BIT(PD3)
(0026) #define AIR_ON PORTD&=~BIT(PD3)
(0027) #define LCM_BLCON_OFF PORTD|=BIT(PD4)
(0028) #define LCM_BLCON_ON PORTD&=~BIT(PD4)
(0029)
(0030) #define BZ_OFF PORTD|=BIT(PD7)
(0031) #define BZ_ON PORTD&=~BIT(PD7)
(0032)
(0033) const uchar str0[]={" Shanghai Hon-Li"};//欢迎界面
(0034) const uchar str1[]={" Electronic Co. "};//欢迎界面
(0035) const uchar str2[]={"Welcome to Enter"};//欢迎界面
(0036) const uchar str3[]={"Testing Process "};//欢迎界面
(0037)
(0038) const uchar cs0[]={" Testing...... "};//测试界面
(0039) const uchar cs1[]={"LVS: TPV: "};//测试界面
(0040) const uchar cs2[]={"RPM: RC: A"};//测试界面
(0041) const uchar cs3[]={"LC: A "};//测试界面
(0042) const uchar result[]={" Result...... "};//测试界面
(0043)
(0044) uchar status=0;
(0045) uchar OutFlag=0;
(0046) uint cnt=0;
(0047) uint display_val=0;
(0048) uint current=0;
(0049)
(0050) uchar LVS[4];
(0051) uchar TPV[4];
(0052) uchar RPM[4];
(0053) uchar RC[4];
(0054) uchar LC[4];
(0055)
(0056) uint LLVS,TTPV,RRPM;
(0057) float RRC,LLC;
(0058)
(0059) uchar Wait10S_Start_Flag=0,Wait10S_End_Flag=0;//10S启动结束标志
(0060) uchar Wait6S_Start_Flag=0,Wait6S_End_Flag=0;//6S启动结束标志
(0061) uchar Wait2S_Start_Flag=0,Wait2S_End_Flag=0;//2S启动结束标志
(0062)
(0063) /***************读取计数器T1的数据*************/
(0064) uint read_T1(void)
(0065) {uint temp1,temp2;
(0066) temp1=(uint)TCNT1L;
_read_T1:
temp1 --> R18
temp2 --> R16
00D8 B52C IN R18,0x2C
00D9 2733 CLR R19
(0067) temp2=(uint)TCNT1H;
00DA B50D IN R16,0x2D
00DB 2711 CLR R17
(0068) temp2=(temp2<<8)+temp1;
00DC 0118 MOVW R2,R16
00DD 2C32 MOV R3,R2
00DE 2422 CLR R2
00DF 0E22 ADD R2,R18
00E0 1E33 ADC R3,R19
00E1 0181 MOVW R16,R2
(0069) return(temp2);
00E2 9508 RET
(0070) }
(0071) /***************清除计数器T1的数据************/
(0072) void clr_T1(void)
(0073) {
(0074) TCNT1L=0x00;TCNT1H=0x00;
_clr_T1:
00E3 2422 CLR R2
00E4 BC2C OUT 0x2C,R2
00E5 BC2D OUT 0x2D,R2
00E6 9508 RET
(0075) }
(0076) /*****************watchdog初始化**************/
(0077) //Watchdog initialize
(0078) // prescale: 512K
(0079) void watchdog_init(void)
(0080) {
(0081) WDR(); //this prevents a timout on enabling
_watchdog_init:
00E7 95A8 WDR
(0082) WDTCR = 0x0D; //WATCHDOG ENABLED - dont forget to issue WDRs
00E8 E08D LDI R24,0xD
00E9 BD81 OUT 0x21,R24
00EA 9508 RET
(0083) }
(0084)
(0085) /******************ADC初始化*********************/
(0086) //ADC initialize
(0087) // Conversion time: 3uS
(0088) void adc_init(void)
(0089) {
(0090) ADCSR = 0x00; //disable adc
_adc_init:
00EB 2422 CLR R2
00EC B826 OUT 0x06,R2
(0091) ADMUX = 0xC0; //select adc input 0
00ED EC80 LDI R24,0xC0
00EE B987 OUT 0x07,R24
(0092) ACSR = 0x80;
00EF E880 LDI R24,0x80
00F0 B988 OUT 0x08,R24
(0093) ADCSR = 0xE1;
00F1 EE81 LDI R24,0xE1
00F2 B986 OUT 0x06,R24
00F3 9508 RET
(0094) }
(0095) /*********************端口初始化*********************/
(0096) void port_init(void)
(0097) {
(0098) PORTA = 0xfe;
_port_init:
00F4 EF8E LDI R24,0xFE
00F5 BB8B OUT 0x1B,R24
(0099) DDRA = 0x00;
00F6 2422 CLR R2
00F7 BA2A OUT 0x1A,R2
(0100) PORTB = 0x00;
00F8 BA28 OUT 0x18,R2
(0101) DDRB = 0x0D;
00F9 E08D LDI R24,0xD
00FA BB87 OUT 0x17,R24
(0102) PORTC = 0x00; //m103 output only
00FB BA25 OUT 0x15,R2
(0103) DDRC = 0xFF;
00FC EF8F LDI R24,0xFF
00FD BB84 OUT 0x14,R24
(0104) PORTD = 0xff;
00FE BB82 OUT 0x12,R24
(0105) DDRD = 0x9F;
00FF E98F LDI R24,0x9F
0100 BB81 OUT 0x11,R24
0101 9508 RET
(0106) }
(0107)
(0108) /****************计数器T1初始化***********************/
(0109) //TIMER1 initialize - prescale:Falling edge
(0110) // WGM: 0) Normal, TOP=0xFFFF
(0111) // desired value: 1KHz
(0112) // actual value: Out of range
(0113) void timer1_init(void)
(0114) {
(0115) TCCR1B = 0x00; //stop
_timer1_init:
0102 2422 CLR R2
0103 BC2E OUT 0x2E,R2
(0116) TCNT1H = 0x00 /*INVALID SETTING*/; //setup
0104 BC2D OUT 0x2D,R2
(0117) TCNT1L = 0x00 /*INVALID SETTING*/;
0105 BC2C OUT 0x2C,R2
(0118) OCR1AH = 0x00 /*INVALID SETTING*/;
0106 BC2B OUT 0x2B,R2
(0119) OCR1AL = 0x00 /*INVALID SETTING*/;
0107 BC2A OUT 0x2A,R2
(0120) OCR1BH = 0x00 /*INVALID SETTING*/;
0108 BC29 OUT 0x29,R2
(0121) OCR1BL = 0x00 /*INVALID SETTING*/;
0109 BC28 OUT 0x28,R2
(0122) ICR1H = 0x00 /*INVALID SETTING*/;
010A BC27 OUT 0x27,R2
(0123) ICR1L = 0x00 /*INVALID SETTING*/;
010B BC26 OUT 0x26,R2
(0124) TCCR1A = 0x00;
010C BC2F OUT 0x2F,R2
(0125) TCCR1B = 0x00; //start Timer
010D BC2E OUT 0x2E,R2
010E 9508 RET
(0126) //TCCR1B = 0x86;
(0127) }
(0128)
(0129) //*************定时器T0初始化********************
(0130) //TIMER0 initialize - prescale:64
(0131) // WGM: Normal
(0132) // desired value: 1mSec
(0133) // actual value: 1.000mSec (0.0%)
(0134) void timer0_init(void)
(0135) {
(0136) TCCR0 = 0x00; //stop
_timer0_init:
010F 2422 CLR R2
0110 BE23 OUT 0x33,R2
(0137) TCNT0 = 0x83; //set count
0111 E883 LDI R24,0x83
0112 BF82 OUT 0x32,R24
(0138) OCR0 = 0x7D; //set compare
0113 E78D LDI R24,0x7D
0114 BF8C OUT 0x3C,R24
(0139) TCCR0 = 0x03; //start timer
0115 E083 LDI R24,3
0116 BF83 OUT 0x33,R24
0117 9508 RET
_timer0_ovf_isr:
0118 922A ST R2,-Y
0119 923A ST R3,-Y
011A 938A ST R24,-Y
011B 939A ST R25,-Y
011C B62F IN R2,0x3F
011D 922A ST R2,-Y
(0140) }
(0141)
(0142) /************************T0 1mS中断*****************************/
(0143) #pragma interrupt_handler timer0_ovf_isr:10
(0144) void timer0_ovf_isr(void)
(0145) {
(0146) TCNT0 = 0x83; //reload counter value
011E E883 LDI R24,0x83
011F BF82 OUT 0x32,R24
(0147) //------------------------------------
(0148) if(Wait10S_Start_Flag==1)
0120 91800068 LDS R24,Wait10S_Start_Flag
0122 3081 CPI R24,1
0123 F4E9 BNE 0x0141
(0149) {
(0150) cnt++;
0124 91800062 LDS R24,cnt
0126 91900063 LDS R25,cnt+1
0128 9601 ADIW R24,1
0129 93900063 STS cnt+1,R25
012B 93800062 STS cnt,R24
(0151) if(cnt>6000){Wait10S_Start_Flag=0;Wait10S_End_Flag=1;cnt=0;}
012D E780 LDI R24,0x70
012E E197 LDI R25,0x17
012F 90200062 LDS R2,cnt
0131 90300063 LDS R3,cnt+1
0133 1582 CP R24,R2
0134 0593 CPC R25,R3
0135 F458 BCC 0x0141
0136 2422 CLR R2
0137 92200068 STS Wait10S_Start_Flag,R2
0139 E081 LDI R24,1
013A 93800069 STS Wait10S_End_Flag,R24
013C 2433 CLR R3
013D 92300063 STS cnt+1,R3
013F 92200062 STS cnt,R2
(0152) }
(0153) //------------------------------------
(0154) if(Wait6S_Start_Flag==1)
0141 9180006A LDS R24,Wait6S_Start_Flag
0143 3081 CPI R24,1
0144 F4E9 BNE 0x0162
(0155) {
(0156) cnt++;
0145 91800062 LDS R24,cnt
0147 91900063 LDS R25,cnt+1
0149 9601 ADIW R24,1
014A 93900063 STS cnt+1,R25
014C 93800062 STS cnt,R24
(0157) if(cnt>6000){Wait6S_Start_Flag=0;Wait6S_End_Flag=1;cnt=0;}
014E E780 LDI R24,0x70
014F E197 LDI R25,0x17
0150 90200062 LDS R2,cnt
0152 90300063 LDS R3,cnt+1
0154 1582 CP R24,R2
0155 0593 CPC R25,R3
0156 F458 BCC 0x0162
0157 2422 CLR R2
0158 9220006A STS Wait6S_Start_Flag,R2
015A E081 LDI R24,1
015B 9380006B STS Wait6S_End_Flag,R24
015D 2433 CLR R3
015E 92300063 STS cnt+1,R3
0160 92200062 STS cnt,R2
(0158) }
(0159) //------------------------------------
(0160) if(Wait2S_Start_Flag==1)
0162 9180006C LDS R24,Wait2S_Start_Flag
0164 3081 CPI R24,1
0165 F4E9 BNE 0x0183
(0161) {
(0162) cnt++;
0166 91800062 LDS R24,cnt
0168 91900063 LDS R25,cnt+1
016A 9601 ADIW R24,1
016B 93900063 STS cnt+1,R25
016D 93800062 STS cnt,R24
(0163) if(cnt>2000){Wait2S_Start_Flag=0;Wait2S_End_Flag=1;cnt=0;}
016F ED80 LDI R24,0xD0
0170 E097 LDI R25,7
0171 90200062 LDS R2,cnt
0173 90300063 LDS R3,cnt+1
0175 1582 CP R24,R2
0176 0593 CPC R25,R3
0177 F458 BCC 0x0183
0178 2422 CLR R2
0179 9220006C STS Wait2S_Start_Flag,R2
017B E081 LDI R24,1
017C 9380006D STS Wait2S_End_Flag,R24
017E 2433 CLR R3
017F 92300063 STS cnt+1,R3
0181 92200062 STS cnt,R2
(0164) }
0183 9029 LD R2,Y+
0184 BE2F OUT 0x3F,R2
0185 9199 LD R25,Y+
0186 9189 LD R24,Y+
0187 9039 LD R3,Y+
0188 9029 LD R2,Y+
0189 9518 RETI
(0165) }
(0166)
(0167) /************************器件初始化***************************/
(0168) //call this routine to initialize all peripherals
(0169) void init_devices(void)
(0170) {
(0171) //stop errant interrupts until set up
(0172) CLI(); //disable all interrupts
_init_devices:
018A 94F8 BCLR 7
(0173) port_init();
018B DF68 RCALL _port_init
(0174) timer0_init();
018C DF82 RCALL _timer0_init
(0175) timer1_init();
018D DF74 RCALL _timer1_init
(0176) adc_init();
018E DF5C RCALL _adc_init
(0177) MCUCR = 0x00;
018F 2422 CLR R2
0190 BE25 OUT 0x35,R2
(0178) GICR = 0x00;
0191 BE2B OUT 0x3B,R2
(0179) TIMSK = 0x01; //timer interrupt sources
0192 E081 LDI R24,1
0193 BF89 OUT 0x39,R24
(0180) SEI(); //re-enable interrupts
0194 9478 BSET 7
(0181) watchdog_init();
0195 DF51 RCALL _watchdog_init
0196 9508 RET
_welcome:
0197 9722 SBIW R28,2
(0182) //all peripherals are now initialized
(0183) }
(0184)
(0185) /**********************欢迎界面********************/
(0186) void welcome(void)
(0187) {
(0188) ePutstr(0,0,str0);
0198 E88C LDI R24,0x8C
0199 E090 LDI R25,0
019A 8399 STD Y+1,R25
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -