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

📄 ad_lcd.lst

📁 用于温度采集过程中的数字及模拟两转换程序清单。采用iccavr系列开发工具调试通过。
💻 LST
📖 第 1 页 / 共 2 页
字号:
__text_start:
__start:
    0038 E5CF      LDI	R28,0x5F
    0039 E0D4      LDI	R29,4
    003A BFCD      OUT	0x3D,R28
    003B BFDE      OUT	0x3E,R29
    003C 51C0      SUBI	R28,0x10
    003D 40D0      SBCI	R29,0
    003E EA0A      LDI	R16,0xAA
    003F 8308      STD	Y+0,R16
    0040 2400      CLR	R0
    0041 E7E7      LDI	R30,0x77
    0042 E0F0      LDI	R31,0
    0043 E010      LDI	R17,0
    0044 37EF      CPI	R30,0x7F
    0045 07F1      CPC	R31,R17
    0046 F011      BEQ	0x0049
    0047 9201      ST	R0,Z+
    0048 CFFB      RJMP	0x0044
    0049 8300      STD	Z+0,R16
    004A E5E8      LDI	R30,0x58
    004B E0F0      LDI	R31,0
    004C E6A0      LDI	R26,0x60
    004D E0B0      LDI	R27,0
    004E E010      LDI	R17,0
    004F 36EF      CPI	R30,0x6F
    0050 07F1      CPC	R31,R17
    0051 F021      BEQ	0x0056
    0052 95C8      LPM
    0053 9631      ADIW	R30,1
    0054 920D      ST	R0,X+
    0055 CFF9      RJMP	0x004F
    0056 940E00C2  CALL	_main
_exit:
    0058 CFFF      RJMP	_exit
_adctoasc:
  char_p               --> R10
  i                    --> R12
  temp                 --> R14
  adc                  --> R10
    0059 940E0206  CALL	push_gset5
    005B 0158      MOVW	R10,R16
FILE: ad_lcd.c
(0001) /******************************************************
(0002)               双龙电子公司http://www.sl.com.cn
(0003)               AT90S8535--AD转换演示程序(ICCAVR)
(0004) 	                  作者:詹卫前		
(0005) 	使用注意:1、应包含头文件slavr.h
(0006)               2、在工程选项中的Additional Lib中填入slavr
(0007) 		         使用编译器使用附加库文件libslavr.a
(0008) 			  3、使用SL-AVRAD实验设备
(0009)     接线说明:1、PA.0(PIN40)处接电平指示LED的短路块断开
(0010) 			  2、A/D和VX之间的短路块闭合
(0011) 			  3、AREF(PIN32)和AVCC(PIN30)接VCC
(0012) 			  4、AGND(PIN31)接GND												   			  
(0013) *******************************************************/
(0014) #include<iom16v.h>
(0015) #include<slavr.h>
(0016) #include<macros.h>
(0017) unsigned int ad_con;//存放PA0的AD转换结果
(0018) unsigned char adcval[6];//存放电压ASCII码
(0019) /*      将AD结果转换成电压     */
(0020) #define vref   497
(0021) unsigned char * adctoasc(unsigned int adc)
(0022)     {
(0023) 	 unsigned int temp;
(0024) 	 unsigned char i;
(0025) 	 unsigned char *char_p;
(0026)      temp=(unsigned int)(((unsigned long)((unsigned long)adc*vref))/1024);
    005C 0115      MOVW	R2,R10
    005D 2444      CLR	R4
    005E 2455      CLR	R5
    005F EF41      LDI	R20,0xF1
    0060 E051      LDI	R21,1
    0061 E060      LDI	R22,0
    0062 E070      LDI	R23,0
    0063 925A      ST	R5,-Y
    0064 924A      ST	R4,-Y
    0065 923A      ST	R3,-Y
    0066 922A      ST	R2,-Y
    0067 018A      MOVW	R16,R20
    0068 019B      MOVW	R18,R22
    0069 940E01CC  CALL	empy32u
    006B E08A      LDI	R24,0xA
    006C E090      LDI	R25,0
    006D 938A      ST	R24,-Y
    006E 940E024A  CALL	lsr32
    0070 0178      MOVW	R14,R16
(0027)      for(i=0;i<3;i++)
    0071 24CC      CLR	R12
    0072 C019      RJMP	0x008C
(0028) 	    {
(0029) 		 adcval[3-i]=temp%10+0x30;
    0073 2C2C      MOV	R2,R12
    0074 2433      CLR	R3
    0075 E0E3      LDI	R30,3
    0076 E0F0      LDI	R31,0
    0077 19E2      SUB	R30,R2
    0078 09F3      SBC	R31,R3
    0079 E787      LDI	R24,0x77
    007A E090      LDI	R25,0
    007B 0FE8      ADD	R30,R24
    007C 1FF9      ADC	R31,R25
    007D E02A      LDI	R18,0xA
    007E E030      LDI	R19,0
    007F 0187      MOVW	R16,R14
    0080 940E01B0  CALL	mod16u
    0082 01C8      MOVW	R24,R16
    0083 96C0      ADIW	R24,0x30
    0084 8380      STD	Z+0,R24
(0030) 		 temp=temp/10;
    0085 E02A      LDI	R18,0xA
    0086 E030      LDI	R19,0
    0087 0187      MOVW	R16,R14
    0088 940E01B2  CALL	div16u
    008A 0178      MOVW	R14,R16
    008B 94C3      INC	R12
    008C 2D8C      MOV	R24,R12
    008D 3083      CPI	R24,3
    008E F320      BCS	0x0073
(0031) 		}
(0032) 	 adcval[0]=adcval[1];
    008F 90200078  LDS	R2,adcval+1
    0091 92200077  STS	adcval,R2
(0033) 	 adcval[1]='.';	
    0093 E28E      LDI	R24,0x2E
    0094 93800078  STS	adcval+1,R24
(0034) 	 adcval[4]='V';	
    0096 E586      LDI	R24,0x56
    0097 9380007B  STS	0x7B,R24
(0035) 	 adcval[5]=0;	
    0099 2422      CLR	R2
    009A 9220007C  STS	0x7C,R2
(0036) 	 char_p=adcval;
    009C E787      LDI	R24,0x77
    009D E090      LDI	R25,0
    009E 015C      MOVW	R10,R24
(0037) 	 return char_p;
    009F 018C      MOVW	R16,R24
    00A0 940E0203  CALL	pop_gset5
    00A2 9508      RET
_adc_isr:
  temp                 --> R16
    00A3 922A      ST	R2,-Y
    00A4 923A      ST	R3,-Y
    00A5 930A      ST	R16,-Y
    00A6 931A      ST	R17,-Y
    00A7 93EA      ST	R30,-Y
    00A8 B62F      IN	R2,0x3F
    00A9 922A      ST	R2,-Y
(0038) 	}
(0039) /*      AD转换程序     */
(0040) #pragma interrupt_handler adc_isr:15
(0041) void adc_isr(void)
(0042)    {
(0043)     unsigned int temp=0;
    00AA 2700      CLR	R16
    00AB 2711      CLR	R17
    00AC C002      RJMP	0x00AF
(0044) 	while(temp<6)
(0045) 	    temp++;
    00AD 5F0F      SUBI	R16,0xFF
    00AE 4F1F      SBCI	R17,0xFF
    00AF 3006      CPI	R16,6
    00B0 E0E0      LDI	R30,0
    00B1 071E      CPC	R17,R30
    00B2 F3D0      BCS	0x00AD
(0046) 	ad_con=ADC;    
    00B3 B024      IN	R2,0x04
    00B4 B035      IN	R3,0x05
    00B5 9230007E  STS	ad_con+1,R3
    00B7 9220007D  STS	ad_con,R2
(0047)    	ADCSR|=(1<<ADSC);//启动转换 			 	 		 
    00B9 9A36      SBI	0x06,6
    00BA 9029      LD	R2,Y+
    00BB BE2F      OUT	0x3F,R2
    00BC 91E9      LD	R30,Y+
    00BD 9119      LD	R17,Y+
    00BE 9109      LD	R16,Y+
    00BF 9039      LD	R3,Y+
    00C0 9029      LD	R2,Y+
    00C1 9518      RETI
(0048)    } 
(0049) //将AD转换结果转换成电压数值,然后在LCD上显示   
(0050) void main(void)
(0051) {
(0052)  MCUCR=0;
_main:
    00C2 2422      CLR	R2
    00C3 BE25      OUT	0x35,R2
(0053)  ADMUX=0x00;//0通道
    00C4 B827      OUT	0x07,R2
(0054)  ADCSR=(1<<ADEN)|(1<<ADSC)|(1<<ADIF)|(1<<ADIE)|0x06;
    00C5 ED8E      LDI	R24,0xDE
    00C6 B986      OUT	0x06,R24
(0055)  lcd_init();
    00C7 940E015E  CALL	_lcd_init
(0056)  SEI();
    00C9 9478      BSET	7
    00CA C021      RJMP	0x00EC
(0057)  while(1)
(0058)     {
(0059)      lcd_gotoxy(2,0);
    00CB 2722      CLR	R18
    00CC E002      LDI	R16,2
    00CD 940E00EE  CALL	_lcd_gotoxy
(0060)      lcd_puts("AD--Converter");
    00CF E609      LDI	R16,0x69
    00D0 E010      LDI	R17,0
    00D1 940E0196  CALL	_lcd_puts
(0061) 	 lcd_gotoxy(2,1); 
    00D3 E021      LDI	R18,1
    00D4 E002      LDI	R16,2
    00D5 940E00EE  CALL	_lcd_gotoxy
(0062) 	 lcd_puts("Voltage:");   
    00D7 E600      LDI	R16,0x60
    00D8 E010      LDI	R17,0
    00D9 940E0196  CALL	_lcd_puts
(0063)      lcd_gotoxy(10,1);
    00DB E021      LDI	R18,1
    00DC E00A      LDI	R16,0xA
    00DD 940E00EE  CALL	_lcd_gotoxy
(0064)      lcd_puts(adctoasc(ad_con));
    00DF 9100007D  LDS	R16,ad_con
    00E1 9110007E  LDS	R17,ad_con+1
    00E3 DF75      RCALL	_adctoasc
    00E4 940E0196  CALL	_lcd_puts
(0065) 	 delay_ms(500);
    00E6 EF04      LDI	R16,0xF4
    00E7 E011      LDI	R17,1
    00E8 940E0109  CALL	_delay_ms
(0066) 	 lcd_clear();
FILE: <library>
    00EA 940E01AA  CALL	_lcd_clear
    00EC CFDE      RJMP	0x00CB
    00ED 9508      RET
_lcd_gotoxy:
    00EE D11D      RCALL	push_gset2
    00EF 2F42      MOV	R20,R18
    00F0 2F60      MOV	R22,R16
    00F1 3041      CPI	R20,1
    00F2 F419      BNE	0x00F6
    00F3 2F46      MOV	R20,R22
    00F4 5440      SUBI	R20,0x40
    00F5 C002      RJMP	0x00F8
    00F6 2F46      MOV	R20,R22
    00F7 5840      SUBI	R20,0x80
    00F8 2722      CLR	R18
    00F9 2733      CLR	R19
    00FA 2F04      MOV	R16,R20
    00FB 2711      CLR	R17
    00FC D02B      RCALL	_write_lcd
    00FD D102      RCALL	pop_gset2
    00FE 9508      RET
_delay_1ms:
    00FF E001      LDI	R16,1
    0100 E010      LDI	R17,0
    0101 C002      RJMP	0x0104
    0102 5F0F      SUBI	R16,0xFF
    0103 4F1F      SBCI	R17,0xFF
    0104 3706      CPI	R16,0x76
    0105 E0E4      LDI	R30,4
    0106 071E      CPC	R17,R30
    0107 F3D0      BCS	0x0102
    0108 9508      RET
_delay_ms:
    0109 D102      RCALL	push_gset2
    010A 2F60      MOV	R22,R16
    010B 2F71      MOV	R23,R17
    010C 2744      CLR	R20
    010D 2755      CLR	R21
    010E C003      RJMP	0x0112
    010F DFEF      RCALL	_delay_1ms
    0110 5F4F      SUBI	R20,0xFF
    0111 4F5F      SBCI	R21,0xFF
    0112 1746      CP	R20,R22
    0113 0757      CPC	R21,R23
    0114 F3D0      BCS	0x010F
    0115 D0EA      RCALL	pop_gset2
    0116 9508      RET
_lcd_port_init:
    0117 2422      CLR	R2
    0118 BA27      OUT	0x17,R2
    0119 BA28      OUT	0x18,R2
    011A EF8F      LDI	R24,0xFF
    011B BB81      OUT	0x11,R24
    011C BB82      OUT	0x12,R24
    011D 9508      RET
_delay:
    011E 2700      CLR	R16
    011F 2711      CLR	R17
    0120 C002      RJMP	0x0123
    0121 5F0F      SUBI	R16,0xFF
    0122 4F1F      SBCI	R17,0xFF
    0123 310E      CPI	R16,0x1E
    0124 E0E0      LDI	R30,0
    0125 071E      CPC	R17,R30
    0126 F3D0      BCS	0x0121
    0127 9508      RET
_write_lcd:
    0128 D0E3      RCALL	push_gset2
    0129 2F62      MOV	R22,R18
    012A 2F40      MOV	R20,R16
    012B 2422      CLR	R2
    012C BA27      OUT	0x17,R2
    012D BA28      OUT	0x18,R2
    012E 9893      CBI	0x12,3
    012F 9A94      SBI	0x12,4
    0130 9A95      SBI	0x12,5
    0131 DFEC      RCALL	_delay
    0132 B386      IN	R24,0x16

⌨️ 快捷键说明

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