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

📄 text2.lst

📁 ATmega16-ad1602
💻 LST
📖 第 1 页 / 共 4 页
字号:
Interrupt Vectors
    00000 C00B      RJMP	__text_start|__start

Program Code (text area)
__text_start|__start:
    0000C E5CF      LDI	R28,0x5F
    0000D E0D2      LDI	R29,2
    0000E BFCD      OUT	0x3D,R28
    0000F BFDE      OUT	0x3E,R29
    00010 51C0      SUBI	R28,0x10
    00011 40D0      SBCI	R29,0
    00012 EA0A      LDI	R16,0xAA
    00013 8308      ST	Y,R16
    00014 2400      CLR	R0
    00015 E6EB      LDI	R30,0x6B
    00016 E0F0      LDI	R31,0
    00017 E010      LDI	R17,0
    00018 36EB      CPI	R30,0x6B
    00019 07F1      CPC	R31,R17
    0001A F011      BEQ	0x001D
    0001B 9201      ST	Z+,R0
    0001C CFFB      RJMP	0x0018
    0001D 8300      ST	Z,R16
    0001E E0EC      LDI	R30,0xC
    0001F E0F0      LDI	R31,0
    00020 E6A0      LDI	R26,0x60
    00021 E0B0      LDI	R27,0
    00022 E010      LDI	R17,0
    00023 E000      LDI	R16,0
    00024 BF0B      OUT	0x3B,R16
    00025 31E7      CPI	R30,0x17
    00026 07F1      CPC	R31,R17
    00027 F021      BEQ	0x002C
    00028 95C8      LPM
    00029 9631      ADIW	R30,1
    0002A 920D      ST	X+,R0
    0002B CFF9      RJMP	0x0025
    0002C D0AF      RCALL	_main
_exit:
    0002D CFFF      RJMP	_exit
FILE: F:\file\数控电源3\ad_da\text\delay.c
(0001) #define DELAY_C
(0002) #include "includes.h"
(0003) #define XTAL 8    //晶振频率,单位MHz
(0004) void delay_1us(void)                 //1us延时函数
(0005)   {
(0006)    asm("nop");
_delay_1us:
    0002E 0000      NOP
    0002F 9508      RET
_delay_nus:
  i                    --> R20
  n                    --> R10
    00030 D287      RCALL	push_xgset300C
    00031 0158      MOVW	R10,R16
(0007)   }
(0008) 
(0009) void delay_nus(unsigned int n)       //N us延时函数
(0010)   {
(0011)    unsigned int i=0;
(0012)    for (i=0;i<n;i++)
    00032 2744      CLR	R20
    00033 2755      CLR	R21
    00034 C003      RJMP	0x0038
(0013)    delay_1us();
    00035 DFF8      RCALL	_delay_1us
    00036 5F4F      SUBI	R20,0xFF
    00037 4F5F      SBCI	R21,0xFF
    00038 154A      CP	R20,R10
    00039 055B      CPC	R21,R11
    0003A F3D0      BCS	0x0035
    0003B C281      RJMP	pop_xgset300C
(0014)   }
(0015)   
(0016) void delay_1ms(void)                 //1ms延时函数
(0017)   {
(0018)    unsigned int i;
(0019)    for (i=0;i<(unsigned int)(XTAL*143-2);i++);
_delay_1ms:
  i                    --> R16
    0003C 2700      CLR	R16
    0003D 2711      CLR	R17
    0003E C002      RJMP	0x0041
    0003F 5F0F      SUBI	R16,0xFF
    00040 4F1F      SBCI	R17,0xFF
    00041 E786      LDI	R24,0x76
    00042 E094      LDI	R25,4
    00043 1708      CP	R16,R24
    00044 0719      CPC	R17,R25
    00045 F3C8      BCS	0x003F
    00046 9508      RET
_delay_nms:
  i                    --> R20
  n                    --> R10
    00047 D270      RCALL	push_xgset300C
    00048 0158      MOVW	R10,R16
(0020)   }
(0021)   
(0022) void delay_nms(unsigned int n)       //N ms延时函数
(0023)   {
(0024)    unsigned int i=0;
(0025)    for (i=0;i<n;i++)
    00049 2744      CLR	R20
    0004A 2755      CLR	R21
    0004B C003      RJMP	0x004F
(0026)    {
(0027)       delay_1ms();
    0004C DFEF      RCALL	_delay_1ms
    0004D 5F4F      SUBI	R20,0xFF
    0004E 4F5F      SBCI	R21,0xFF
    0004F 154A      CP	R20,R10
    00050 055B      CPC	R21,R11
    00051 F3D0      BCS	0x004C
    00052 C26A      RJMP	pop_xgset300C
_adc:
  temp                 --> R10
    00053 92AA      ST	-Y,R10
    00054 92BA      ST	-Y,R11
FILE: F:\file\数控电源3\ad_da\text\newadc.c
(0001) #define NEWADC_C
(0002) #include"includes.h"
(0003) unsigned int adc(void)
(0004) {	 
(0005) 	 unsigned int temp;
(0006)  	 DDRA&=~BIT(7);             //PA0口输入数据
    00055 98D7      CBI	0x1A,7
(0007) 	 ADMUX=0x40;
    00056 E480      LDI	R24,0x40
    00057 B987      OUT	0x07,R24
(0008) 	 ADCSRA=0xC6;
    00058 EC86      LDI	R24,0xC6
    00059 B986      OUT	0x06,R24
(0009) 	 while(!(ADCSRA&(BIT(4))));//查询方式
    0005A 9B34      SBIS	0x06,4
    0005B CFFE      RJMP	0x005A
(0010) 	 temp=ADCL;
    0005C B0A4      IN	R10,0x04
    0005D 24BB      CLR	R11
(0011) 	 temp=temp+ADCH*256;
    0005E B125      IN	R18,0x05
    0005F 2733      CLR	R19
    00060 E000      LDI	R16,0
    00061 E011      LDI	R17,1
    00062 D233      RCALL	empy16s
    00063 0EA0      ADD	R10,R16
    00064 1EB1      ADC	R11,R17
(0012) 	 ADCSRA|=BIT(4);
    00065 9A34      SBI	0x06,4
(0013) 	 return temp;
    00066 0185      MOVW	R16,R10
    00067 90B9      LD	R11,Y+
    00068 90A9      LD	R10,Y+
    00069 9508      RET
_ADtoBCD:
  Vref                 --> R20
  j                    --> Y,+0
  count                --> R10
  tmp                  --> R10
    0006A D24D      RCALL	push_xgset300C
    0006B 0158      MOVW	R10,R16
    0006C 9724      SBIW	R28,4
FILE: F:\file\数控电源3\ad_da\mydesign1\cfile\main.c
(0001) #define MAIN_C
(0002) #include "includes.h"
(0003) 
(0004) static unsigned char *value = "00.000 V";	
(0005) 
(0006) void ADtoBCD(unsigned int tmp)//将AD值转换成BCD码,并写入value
(0007) {
(0008)  	float j;
(0009) 	unsigned int count;
(0010) 	unsigned int Vref=50000;
    0006D E540      LDI	R20,0x50
    0006E EC53      LDI	R21,0xC3
(0011) 	
(0012) 	j = (float)(((float)((Vref/341)))*tmp)/1000.00;//1022-149853.3724-149.853
    0006F E525      LDI	R18,0x55
    00070 E031      LDI	R19,1
    00071 018A      MOVW	R16,R20
    00072 D209      RCALL	div16u
    00073 D2C9      RCALL	uint2fp
    00074 0118      MOVW	R2,R16
    00075 0129      MOVW	R4,R18
    00076 0185      MOVW	R16,R10
    00077 D2C5      RCALL	uint2fp
    00078 933A      ST	-Y,R19
    00079 932A      ST	-Y,R18
    0007A 931A      ST	-Y,R17
    0007B 930A      ST	-Y,R16
    0007C 0181      MOVW	R16,R2
    0007D 0192      MOVW	R18,R4
    0007E D456      RCALL	fpmule2
    0007F 0118      MOVW	R2,R16
    00080 0129      MOVW	R4,R18
    00081 E008      LDI	R16,0x8
    00082 E010      LDI	R17,0
    00083 D275      RCALL	lpm32
    00084 933A      ST	-Y,R19
    00085 932A      ST	-Y,R18
    00086 931A      ST	-Y,R17
    00087 930A      ST	-Y,R16
    00088 0181      MOVW	R16,R2
    00089 0192      MOVW	R18,R4
    0008A D2DD      RCALL	fpdiv2
    0008B 8308      ST	Y,R16
    0008C 8319      STD	Y+1,R17
    0008D 832A      STD	Y+2,R18
    0008E 833B      STD	Y+3,R19
(0013) 	count = j*100;	//14985					
    0008F E004      LDI	R16,4
    00090 E010      LDI	R17,0
    00091 D267      RCALL	lpm32
    00092 01CE      MOVW	R24,R28
    00093 939A      ST	-Y,R25
    00094 938A      ST	-Y,R24
    00095 D436      RCALL	fpmule1
    00096 D276      RCALL	fpint
    00097 0158      MOVW	R10,R16
(0014)     value[0] = count /10000+0x30; //1 
    00098 E120      LDI	R18,0x10
    00099 E237      LDI	R19,0x27
    0009A D1E1      RCALL	div16u
    0009B 01C8      MOVW	R24,R16
    0009C 96C0      ADIW	R24,0x30
    0009D 91E0 0060 LDS	R30,main.c:value
    0009F 91F0 0061 LDS	R31,main.c:value+1
    000A1 8380      ST	Z,R24
(0015) 	count = count %10000; //4985
    000A2 E120      LDI	R18,0x10
    000A3 E237      LDI	R19,0x27
    000A4 0185      MOVW	R16,R10
    000A5 D1D4      RCALL	mod16u
    000A6 0158      MOVW	R10,R16
(0016)     value[1] = count /1000+0x30;//4
    000A7 EE28      LDI	R18,0xE8
    000A8 E033      LDI	R19,3
    000A9 D1D2      RCALL	div16u
    000AA 01C8      MOVW	R24,R16
    000AB 96C0      ADIW	R24,0x30
    000AC 91E0 0060 LDS	R30,main.c:value
    000AE 91F0 0061 LDS	R31,main.c:value+1
    000B0 8381      STD	Z+1,R24
(0017)     count = count %1000; //985
    000B1 EE28      LDI	R18,0xE8
    000B2 E033      LDI	R19,3
    000B3 0185      MOVW	R16,R10
    000B4 D1C5      RCALL	mod16u
    000B5 0158      MOVW	R10,R16
(0018)     value[3] = count  /100 + 0x30; //9	
    000B6 E624      LDI	R18,0x64
    000B7 E030      LDI	R19,0
    000B8 D1C3      RCALL	div16u
    000B9 01C8      MOVW	R24,R16
    000BA 96C0      ADIW	R24,0x30
    000BB 91E0 0060 LDS	R30,main.c:value
    000BD 91F0 0061 LDS	R31,main.c:value+1
    000BF 8383      STD	Z+3,R24
(0019) 	count = count %100; //85		 
    000C0 E624      LDI	R18,0x64
    000C1 E030      LDI	R19,0
    000C2 0185      MOVW	R16,R10
    000C3 D1B6      RCALL	mod16u
    000C4 0158      MOVW	R10,R16
(0020)     value[4] = count /10 + 0x30; //8
    000C5 E02A      LDI	R18,0xA
    000C6 E030      LDI	R19,0
    000C7 D1B4      RCALL	div16u
    000C8 01C8      MOVW	R24,R16
    000C9 96C0      ADIW	R24,0x30
    000CA 91E0 0060 LDS	R30,main.c:value
    000CC 91F0 0061 LDS	R31,main.c:value+1
    000CE 8384      STD	Z+4,R24
(0021) 	value[5] = count %10 + 0x30; //5		
    000CF E02A      LDI	R18,0xA
    000D0 E030      LDI	R19,0
    000D1 0185      MOVW	R16,R10
    000D2 D1A7      RCALL	mod16u
    000D3 01C8      MOVW	R24,R16
    000D4 96C0      ADIW	R24,0x30
    000D5 91E0 0060 LDS	R30,main.c:value
    000D7 91F0 0061 LDS	R31,main.c:value+1
    000D9 8385      STD	Z+5,R24
    000DA 9624      ADIW	R28,4
    000DB C1E1      RJMP	pop_xgset300C
_main:
  tmp                  --> R10
  i                    --> R10
  key_press_num        --> R22
  num                  --> R20
    000DC 9722      SBIW	R28,2
(0022) }
(0023) //主函数
(0024) void main(void)
(0025) {	unsigned int i=0;
    000DD 24AA      CLR	R10
    000DE 24BB      CLR	R11
(0026) 	unsigned char key_press_num;
(0027) 	unsigned int  num=0;
    000DF 2744      CLR	R20
    000E0 2755      CLR	R21
(0028) 	
(0029) 	DDRB=0XFF;      //PB口输出SPI信号
    000E1 EF8F      LDI	R24,0xFF
    000E2 BB87      OUT	0x17,R24
(0030)  	DDRA&=~BIT(PA2);//PA2输入,检测加
    000E3 98D2      CBI	0x1A,2
(0031) 	PORTA|=BIT(PA2);//PA2上拉电阻
    000E4 9ADA      SBI	0x1B,2
(0032) 	DDRA&=~BIT(PA3);//PA3输入,检测减
    000E5 98D3      CBI	0x1A,3
(0033) 	PORTA|=BIT(PA3);//PA3上拉电阻	
    000E6 9ADB      SBI	0x1B,3
(0034) 	
(0035) 	spi_init();
    000E7 D070      RCALL	_spi_init
(0036) 	spi_io_init();
    000E8 D072      RCALL	_spi_io_init
(0037) 	Init_LCD();
    000E9 D121      RCALL	_Init_LCD
(0038) 	LCD_Clear();
    000EA D12D      RCALL	_LCD_Clear
(0039) 	delay_nms(10);	
    000EB E00A      LDI	R16,0xA
    000EC E010      LDI	R17,0
    000ED DF59      RCALL	_delay_nms
(0040) 	
(0041) 	LCD_DisplayString(2,1,value);//显示"00.000 V";	
    000EE 9020 0060 LDS	R2,main.c:value
    000F0 9030 0061 LDS	R3,main.c:value+1
    000F2 8239      STD	Y+1,R3
    000F3 8228      ST	Y,R2
    000F4 E021      LDI	R18,1
    000F5 E002      LDI	R16,2
    000F6 D13F      RCALL	_LCD_DisplayString
(0042) 	delay_nms(1000);	
    000F7 EE08      LDI	R16,0xE8
    000F8 E013      LDI	R17,3
    000F9 DF4D      RCALL	_delay_nms
    000FA C05A      RJMP	0x0155
(0043) 
(0044) 	while (1)         //主循环
(0045) 	{
(0046) 	 unsigned int tmp;
(0047) 	 tmp=adc();//启动AD并返回temp值
    000FB DF57      RCALL	_adc
    000FC 0158      MOVW	R10,R16
(0048) 	 ADtoBCD(tmp);//将temp值转换成BCD码并写入value
    000FD DF6C      RCALL	_ADtoBCD
(0049) 	 LCD_DisplayString(2,1,value); 
    000FE 9020 0060 LDS	R2,main.c:value
    00100 9030 0061 LDS	R3,main.c:value+1
    00102 8239      STD	Y+1,R3
    00103 8228      ST	Y,R2
    00104 E021      LDI	R18,1
    00105 E002      LDI	R16,2
    00106 D12F      RCALL	_LCD_DisplayString
(0050) 	 
(0051) 	 if( (PINA&0x04)==0 )  //检测到加
    00107 99CA      SBIC	0x19,2
    00108 C026      RJMP	0x012F
(0052)      {
(0053) 	 	delay_nms(10); //延时去抖,一般10-20ms
    00109 E00A      LDI	R16,0xA
    0010A E010      LDI	R17,0
    0010B DF3B      RCALL	_delay_nms
(0054) 		if( (PINA&0x04)==0 )   //再次确认按键是否按下,没有按下则退出
    0010C 99CA      SBIC	0x19,2
    0010D C021      RJMP	0x012F
(0055) 		 {
    0010E C015      RJMP	0x0124
(0056) 			while((PINA&0x04)==0)
(0057) 	    	{
(0058) 			   key_press_num++;
    0010F 9563      INC	R22
(0059) 			   delay_nms(10);           //10x200=2000ms=2s 
    00110 E00A      LDI	R16,0xA
    00111 E010      LDI	R17,0
    00112 DF34      RCALL	_delay_nms
(0060)              //****************************长按键模式开始***********************
(0061) 			
(0062) 			   if(key_press_num==100) //大约2s,进入长按键模式
    00113 3664      CPI	R22,0x64
    00114 F479      BNE	0x0124
(0063) 			   {
(0064) 				key_press_num=0; 
    00115 2766      CLR	R22
    00116 C00B      RJMP	0x0122
(0065) 				while((PINA&0x04)==0)  //这里用于识别是否按键还在按下,如果按下执行相关动作,否则退出
(0066) 				{
(0067) 				 if(num<1000)    	//是否达到最大值
    00117 3E48      CPI	R20,0xE8
    00118 E0E3      LDI	R30,3
    00119 075E      CPC	R21,R30
    0011A F410      BCC	0x011D
(0068) 				 num=num+24;		//未到达最大值则加操作
    0011B 5E48      SUBI	R20,0xE8
    0011C 4F5F      SBCI	R21,0xFF
(0069) 				 spi_tlc5615(num);  
    0011D 018A      MOVW	R16,R20
    0011E D043      RCALL	_spi_tlc5615
(0070) 				 delay_nms(30);	//用于调节长按循环操作的速度,可以自行调整此值以便达到最佳效果
    0011F E10E      LDI	R16,0x1E
    00120 E010      LDI	R17,0
    00121 DF25      RCALL	_delay_nms
    00122 9BCA      SBIS	0x19,2
    00123 CFF3      RJMP	0x0117
    00124 9BCA      SBIS	0x19,2
    00125 CFE9      RJMP	0x010F
(0071) 				}
(0072) 			   }
(0073) 		     }
(0074) 		     key_press_num=0;//防止累加造成错误识别
    00126 2766      CLR	R22
(0075) 			 
(0076)              //****************************长按键模式结束***********************
(0077) 			 
(0078) 			 if(num<1000)
    00127 3E48      CPI	R20,0xE8
    00128 E0E3      LDI	R30,3
    00129 075E      CPC	R21,R30
    0012A F410      BCC	0x012D
(0079) 			 num=num+24;
    0012B 5E48      SUBI	R20,0xE8
    0012C 4F5F      SBCI	R21,0xFF
(0080) 			 spi_tlc5615(num);
    0012D 018A      MOVW	R16,R20
    0012E D033      RCALL	_spi_tlc5615
(0081) 				
(0082) 		 }
(0083)      }
(0084) 	 
(0085)             
(0086) 	 
(0087) 	 if( (PINA&0x08)==0 )  //检测到减
    0012F 99CB      SBIC	0x19,3
    00130 C024      RJMP	0x0155
(0088)      {
(0089) 	 	delay_nms(10);     //延时去抖,一般10-20ms
    00131 E00A      LDI	R16,0xA
    00132 E010      LDI	R17,0
    00133 DF13      RCALL	_delay_nms
(0090) 		if( (PINA&0x08)==0 )   //再次确认按键是否按下,没有按下则退出
    00134 99CB      SBIC	0x19,3
    00135 C01F      RJMP	0x0155
(0091) 		 {
    00136 C014      RJMP	0x014B

⌨️ 快捷键说明

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