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

📄 ac19-1.lst

📁 AVR单片机ATmega16(L)应用实例—红外线转速仪
💻 LST
📖 第 1 页 / 共 4 页
字号:
__text_start:
__start:
    0049 E5CF      LDI	R28,0x5F
    004A E0D4      LDI	R29,4
    004B BFCD      OUT	0x3D,R28
    004C BFDE      OUT	0x3E,R29
    004D 51C0      SUBI	R28,0x10
    004E 40D0      SBCI	R29,0
    004F EA0A      LDI	R16,0xAA
    0050 8308      STD	Y+0,R16
    0051 2400      CLR	R0
    0052 E6E4      LDI	R30,0x64
    0053 E0F0      LDI	R31,0
    0054 E010      LDI	R17,0
    0055 37EE      CPI	R30,0x7E
    0056 07F1      CPC	R31,R17
    0057 F011      BEQ	0x005A
    0058 9201      ST	R0,Z+
    0059 CFFB      RJMP	0x0055
    005A 8300      STD	Z+0,R16
    005B E8EE      LDI	R30,0x8E
    005C E0F0      LDI	R31,0
    005D E6A0      LDI	R26,0x60
    005E E0B0      LDI	R27,0
    005F E010      LDI	R17,0
    0060 39E2      CPI	R30,0x92
    0061 07F1      CPC	R31,R17
    0062 F021      BEQ	0x0067
    0063 95C8      LPM
    0064 9631      ADIW	R30,1
    0065 920D      ST	R0,X+
    0066 CFF9      RJMP	0x0060
    0067 940E00D3  CALL	_main
_exit:
    0069 CFFF      RJMP	_exit
FILE: d:\MYDOCU~1\ac19-1\main.c
(0001) //ICC-AVR application builder : 2007-9-20 10:30:53
(0002) // Target : m16
(0003) // Crystal: 8.0000Mhz
(0004) 
(0005) #include <iom16v.h>
(0006) #include <macros.h>
(0007) #include "head.h"
(0008) #define uchar unsigned char
(0009) #define uint unsigned int
(0010) #define xtal 8
(0011) 
(0012) extern void WaitForEnable(void);
(0013) extern void LcdWriteData(uchar W);
(0014) extern void LcdWriteCommand(uchar CMD,uchar Attribc);
(0015) extern void InitLcd(void);
(0016) extern void Display(uchar dd);
(0017) extern void DisplayOneChar(uchar x,uchar y,uchar Wdata);
(0018) extern void ePutstr(uchar x,uchar y,uchar const *ptr);
(0019) 
(0020) 		
(0021) uchar Start=0,WorkFlag;
(0022) uint WorkTime,DisTime,Counter;
(0023) uint DisVal;
(0024) uint cnt;
(0025) uchar Flag,IntFlag,JS=0;
(0026) uint tx,cx;
(0027) uint disx[4];
(0028) uchar DisFlag=1,EndFlag,BeginFlag=0;
(0029) 
(0030) const uchar cs0[]={"ShangHai"};//欢迎界面
(0031) const uchar cs1[]={"-Tester-"};//欢迎界面
(0032) const uchar cs2[]={"Testing-"};//测试界面
(0033) const uchar dsp[]={"RPM:    "};//测试界面
(0034) 
(0035) //TIMER2 initialize - prescale:64
(0036) // WGM: Normal
(0037) // desired value: 1mSec
(0038) // actual value:  1.000mSec (0.0%)
(0039) void timer2_init(void)
(0040) {
(0041)  TCCR2 = 0x00; //stop
_timer2_init:
    006A 2422      CLR	R2
    006B BC25      OUT	0x25,R2
(0042)  ASSR  = 0x00; //set async mode
    006C BC22      OUT	0x22,R2
(0043)  TCNT2 = 0x83; //setup
    006D E883      LDI	R24,0x83
    006E BD84      OUT	0x24,R24
(0044)  OCR2  = 0x7D;
    006F E78D      LDI	R24,0x7D
    0070 BD83      OUT	0x23,R24
(0045)  TCCR2 = 0x04; //start
    0071 E084      LDI	R24,4
    0072 BD85      OUT	0x25,R24
    0073 9508      RET
(0046) }
(0047) 
(0048) void port_init(void)
(0049) {
(0050)  PORTA = 0x00;
_port_init:
    0074 2422      CLR	R2
    0075 BA2B      OUT	0x1B,R2
(0051)  DDRA  = 0xFF;
    0076 EF8F      LDI	R24,0xFF
    0077 BB8A      OUT	0x1A,R24
(0052)  PORTB = 0x00;
    0078 BA28      OUT	0x18,R2
(0053)  DDRB  = 0xFF;
    0079 BB87      OUT	0x17,R24
(0054)  PORTC = 0x00; //m103 output only
    007A BA25      OUT	0x15,R2
(0055)  DDRC  = 0x00;
    007B BA24      OUT	0x14,R2
(0056)  PORTD = 0xFF;
    007C BB82      OUT	0x12,R24
(0057)  DDRD = 0xFF;
    007D BB81      OUT	0x11,R24
(0058)  DDRD  = 0x63;
    007E E683      LDI	R24,0x63
    007F BB81      OUT	0x11,R24
    0080 9508      RET
(0059) }
(0060) 
(0061) //call this routine to initialize all peripherals
(0062) void init_devices(void)
(0063) {
(0064)  //stop errant interrupts until set up
(0065)  CLI(); //disable all interrupts
_init_devices:
    0081 94F8      BCLR	7
(0066)  port_init();
    0082 DFF1      RCALL	_port_init
(0067)  timer2_init();
    0083 DFE6      RCALL	_timer2_init
(0068) 
(0069)  MCUCR = 0x01;
    0084 E081      LDI	R24,1
    0085 BF85      OUT	0x35,R24
(0070)  GICR  = 0x40;
    0086 E480      LDI	R24,0x40
    0087 BF8B      OUT	0x3B,R24
(0071)  TIMSK = 0x40; //timer interrupt sources
    0088 BF89      OUT	0x39,R24
(0072)  SEI(); //re-enable interrupts
    0089 9478      BSET	7
    008A 9508      RET
_display1:
    008B 9722      SBIW	R28,2
(0073)  //all peripherals are now initialized
(0074) }
(0075) 
(0076) /**********************欢迎界面********************/
(0077) void display1(void)
(0078) {
(0079) LcdWriteCommand(0x01,1); //清屏,检测忙信号
    008C E021      LDI	R18,1
    008D E001      LDI	R16,1
    008E 940E0380  CALL	_LcdWriteCommand
(0080) ePutstr(0,0,cs0);
    0090 E584      LDI	R24,0x54
    0091 E090      LDI	R25,0
    0092 8399      STD	Y+1,R25
    0093 8388      STD	Y+0,R24
    0094 2722      CLR	R18
    0095 2700      CLR	R16
    0096 940E02F3  CALL	_ePutstr
(0081) ePutstr(0,1,cs1);
    0098 E58D      LDI	R24,0x5D
    0099 E090      LDI	R25,0
    009A 8399      STD	Y+1,R25
    009B 8388      STD	Y+0,R24
    009C E021      LDI	R18,1
    009D 2700      CLR	R16
    009E 940E02F3  CALL	_ePutstr
    00A0 9622      ADIW	R28,2
    00A1 9508      RET
_display2:
    00A2 9722      SBIW	R28,2
(0082) }
(0083) 
(0084) void display2(void)
(0085) {
(0086) LcdWriteCommand(0x01,1); //清屏,检测忙信号
    00A3 E021      LDI	R18,1
    00A4 E001      LDI	R16,1
    00A5 940E0380  CALL	_LcdWriteCommand
(0087) ePutstr(0,0,cs2);
    00A7 E686      LDI	R24,0x66
    00A8 E090      LDI	R25,0
    00A9 8399      STD	Y+1,R25
    00AA 8388      STD	Y+0,R24
    00AB 2722      CLR	R18
    00AC 2700      CLR	R16
    00AD 940E02F3  CALL	_ePutstr
(0088) ePutstr(0,1,dsp);
    00AF E68F      LDI	R24,0x6F
    00B0 E090      LDI	R25,0
    00B1 8399      STD	Y+1,R25
    00B2 8388      STD	Y+0,R24
    00B3 E021      LDI	R18,1
    00B4 2700      CLR	R16
    00B5 940E02F3  CALL	_ePutstr
    00B7 9622      ADIW	R28,2
    00B8 9508      RET
(0089) }
(0090) 
(0091) //****************************************
(0092) void Delay_1ms(void)		//1mS延时子函数
(0093) { uint i;
(0094)  for(i=1;i<(uint)(xtal*124);i++)
_Delay_1ms:
  i                    --> R16
    00B9 E001      LDI	R16,1
    00BA E010      LDI	R17,0
    00BB C002      RJMP	0x00BE
    00BC 5F0F      SUBI	R16,0xFF
    00BD 4F1F      SBCI	R17,0xFF
    00BE 3E00      CPI	R16,0xE0
    00BF E0E3      LDI	R30,3
    00C0 071E      CPC	R17,R30
    00C1 F3D0      BCS	0x00BC
    00C2 9508      RET
_Delay_nms:
  i                    --> R20
  n                    --> R22
    00C3 940E03EF  CALL	push_gset2
    00C5 01B8      MOVW	R22,R16
(0095)     ;
(0096) }
(0097) //=============================================
(0098) void Delay_nms(uint n)		//n*1mS延时子函数
(0099) {
(0100)  uint i=0;
    00C6 2744      CLR	R20
    00C7 2755      CLR	R21
    00C8 C004      RJMP	0x00CD
(0101)    while(i<n)
(0102)    {Delay_1ms();WDR();
    00C9 DFEF      RCALL	_Delay_1ms
    00CA 95A8      WDR
(0103)     i++;
    00CB 5F4F      SUBI	R20,0xFF
    00CC 4F5F      SBCI	R21,0xFF
    00CD 1746      CP	R20,R22
    00CE 0757      CPC	R21,R23
    00CF F3C8      BCS	0x00C9
    00D0 940E03E0  CALL	pop_gset2
    00D2 9508      RET
_main:
  time                 --> Y+9
  count                --> Y+5
  x                    --> Y+1
  temp                 --> R10
    00D3 972D      SBIW	R28,0xD
(0104)    }
(0105) }
(0106) 
(0107) /**********************主函数*****************************/
(0108) void main(void)
(0109) {	uchar temp;
(0110)     float count,time,x;
(0111) 	Delay_nms(400);
    00D4 E900      LDI	R16,0x90
    00D5 E011      LDI	R17,1
    00D6 DFEC      RCALL	_Delay_nms
(0112) 	init_devices();
    00D7 DFA9      RCALL	_init_devices
(0113) 	InitLcd();
    00D8 940E034B  CALL	_InitLcd
(0114) 	display1();	   //显示Test界面
    00DA DFB0      RCALL	_display1
(0115) 	Delay_nms(2000);
    00DB ED00      LDI	R16,0xD0
    00DC E017      LDI	R17,7
    00DD DFE5      RCALL	_Delay_nms
(0116) 	display2();		   //显示Work状态
    00DE DFC3      RCALL	_display2
(0117) 	DisFlag=1;
    00DF E081      LDI	R24,1
    00E0 93800062  STS	DisFlag,R24
    00E2 C163      RJMP	0x0246
(0118) 	      
(0119) 	/********************************************/
(0120) 		while(1)               //无限循环
(0121) 		{  WDR();
    00E3 95A8      WDR
(0122) 		     
(0123) 		   	if(DisFlag==1)//如果显示标志为1
    00E4 91800062  LDS	R24,DisFlag
    00E6 3081      CPI	R24,1
    00E7 F009      BEQ	0x00E9
    00E8 C133      RJMP	0x021C
(0124) 		   	{
(0125) 				  time=(float)tx;count=(float)cx;
    00E9 E800      LDI	R16,0x80
    00EA E010      LDI	R17,0
    00EB 940E0411  CALL	lpm32
    00ED 933A      ST	R19,-Y
    00EE 932A      ST	R18,-Y
    00EF 931A      ST	R17,-Y
    00F0 930A      ST	R16,-Y
    00F1 9100006F  LDS	R16,tx
    00F3 91100070  LDS	R17,tx+1
    00F5 9516      LSR	R17
    00F6 9507      ROR	R16
    00F7 940E046D  CALL	int2fp
    00F9 933A      ST	R19,-Y
    00FA 932A      ST	R18,-Y
    00FB 931A      ST	R17,-Y
    00FC 930A      ST	R16,-Y
    00FD 940E05B6  CALL	empy32fs
    00FF 9100006F  LDS	R16,tx
    0101 91100070  LDS	R17,tx+1
    0103 7001      ANDI	R16,1
    0104 7010      ANDI	R17,0
    0105 940E046D  CALL	int2fp
    0107 933A      ST	R19,-Y
    0108 932A      ST	R18,-Y
    0109 931A      ST	R17,-Y
    010A 930A      ST	R16,-Y
    010B 940E04CA  CALL	add32f
    010D 01FE      MOVW	R30,R28
    010E 8701      STD	Z+9,R16
    010F 8712      STD	Z+10,R17
    0110 8723      STD	Z+11,R18
    0111 8734      STD	Z+12,R19
    0112 E800      LDI	R16,0x80
    0113 E010      LDI	R17,0
    0114 940E0411  CALL	lpm32
    0116 933A      ST	R19,-Y
    0117 932A      ST	R18,-Y
    0118 931A      ST	R17,-Y
    0119 930A      ST	R16,-Y
    011A 9100006D  LDS	R16,cx
    011C 9110006E  LDS	R17,cx+1
    011E 9516      LSR	R17
    011F 9507      ROR	R16
    0120 940E046D  CALL	int2fp
    0122 933A      ST	R19,-Y
    0123 932A      ST	R18,-Y
    0124 931A      ST	R17,-Y
    0125 930A      ST	R16,-Y
    0126 940E05B6  CALL	empy32fs
    0128 9100006D  LDS	R16,cx
    012A 9110006E  LDS	R17,cx+1
    012C 7001      ANDI	R16,1
    012D 7010      ANDI	R17,0
    012E 940E046D  CALL	int2fp
    0130 933A      ST	R19,-Y
    0131 932A      ST	R18,-Y
    0132 931A      ST	R17,-Y
    0133 930A      ST	R16,-Y
    0134 940E04CA  CALL	add32f
    0136 01FE      MOVW	R30,R28
    0137 8305      STD	Z+5,R16
    0138 8316      STD	Z+6,R17
    0139 8327      STD	Z+7,R18
    013A 8730      STD	Z+8,R19
(0126) 				  x=count/time;x=x*30000;DisVal=(uint)x;//数学计算
    013B 01FE      MOVW	R30,R28
    013C 8025      LDD	R2,Z+5
    013D 8036      LDD	R3,Z+6
    013E 8047      LDD	R4,Z+7
    013F 8450      LDD	R5,Z+8
    0140 925A      ST	R5,-Y
    0141 924A      ST	R4,-Y
    0142 923A      ST	R3,-Y
    0143 922A      ST	R2,-Y
    0144 01FE      MOVW	R30,R28
    0145 8425      LDD	R2,Z+13
    0146 8436      LDD	R3,Z+14
    0147 8447      LDD	R4,Z+15
    0148 8850      LDD	R5,Z+16
    0149 925A      ST	R5,-Y
    014A 924A      ST	R4,-Y
    014B 923A      ST	R3,-Y
    014C 922A      ST	R2,-Y
    014D 940E052B  CALL	div32f
    014F 01FE      MOVW	R30,R28
    0150 8301      STD	Z+1,R16
    0151 8312      STD	Z+2,R17
    0152 8323      STD	Z+3,R18
    0153 8334      STD	Z+4,R19
    0154 E70C      LDI	R16,0x7C
    0155 E010      LDI	R17,0
    0156 940E0411  CALL	lpm32
    0158 933A      ST	R19,-Y
    0159 932A      ST	R18,-Y
    015A 931A      ST	R17,-Y
    015B 930A      ST	R16,-Y
    015C 01FE      MOVW	R30,R28
    015D 8025      LDD	R2,Z+5
    015E 8036      LDD	R3,Z+6
    015F 8047      LDD	R4,Z+7
    0160 8450      LDD	R5,Z+8
    0161 925A      ST	R5,-Y
    0162 924A      ST	R4,-Y
    0163 923A      ST	R3,-Y
    0164 922A      ST	R2,-Y
    0165 940E05B9  CALL	empy32f
    0167 01FE      MOVW	R30,R28
    0168 8301      STD	Z+1,R16
    0169 8312      STD	Z+2,R17
    016A 8323      STD	Z+3,R18
    016B 8334      STD	Z+4,R19
    016C 01FE      MOVW	R30,R28
    016D 8021      LDD	R2,Z+1
    016E 8032      LDD	R3,Z+2
    016F 8043      LDD	R4,Z+3
    0170 8054      LDD	R5,Z+4

⌨️ 快捷键说明

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