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

📄 ac18-1.lst

📁 AVR单片机ATmega16(L)应用实例1——风机测试仪
💻 LST
📖 第 1 页 / 共 5 页
字号:
__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 + -