?? ad_lcd.lst
字號:
__start:
__text_start:
001F E5CF LDI R28,0x5F
0020 E0D2 LDI R29,2
0021 BFCD OUT P3D,R28
0022 BFDE OUT P3E,R29
0023 51C0 SUBI R28,0x10
0024 40D0 SBCI R29,0
0025 EA0A LDI R16,0xAA
0026 8308 STD R16,0+Y
0027 2400 CLR R0
0028 E7E7 LDI R30,0x77
0029 E0F0 LDI R31,0
002A E010 LDI R17,0
002B 37EF CPI R30,0x7F
002C 07F1 CPC R31,R17
002D F011 BEQ 0x0030
002E 9201 ST R0,Z+
002F CFFB RJMP 0x002B
0030 8300 STD R16,0+Z
0031 E2E6 LDI R30,0x26
0032 E0F0 LDI R31,0
0033 E6A0 LDI R26,0x60
0034 E0B0 LDI R27,0
0035 E010 LDI R17,0
0036 33ED CPI R30,0x3D
0037 07F1 CPC R31,R17
0038 F021 BEQ 0x003D
0039 95C8 LPM
003A 9631 ADIW R30,1
003B 920D ST R0,X+
003C CFF9 RJMP 0x0036
003D D06F RCALL _main
_exit:
003E CFFF RJMP _exit
_adctoasc:
char_p --> R10
i --> R12
temp --> R14
adc --> R10
003F D18E RCALL push_gset5
0040 2EA0 MOV R10,R16
0041 2EB1 MOV R11,R17
FILE: D:\ICC-AVR\examples.sl\AD_8535_LCD\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<io8535.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);
0042 2C2A MOV R2,R10
0043 2C3B MOV R3,R11
0044 2444 CLR R4
0045 2455 CLR R5
0046 EF41 LDI R20,0xF1
0047 E051 LDI R21,1
0048 E060 LDI R22,0
0049 E070 LDI R23,0
004A 925A ST R5,-Y
004B 924A ST R4,-Y
004C 923A ST R3,-Y
004D 922A ST R2,-Y
004E 2F04 MOV R16,R20
004F 2F15 MOV R17,R21
0050 2F26 MOV R18,R22
0051 2F37 MOV R19,R23
0052 D1B3 RCALL mpy32s
0053 E08A LDI R24,0xA
0054 E090 LDI R25,0
0055 938A ST R24,-Y
0056 D17E RCALL lsr32
0057 2EE0 MOV R14,R16
0058 2EF1 MOV R15,R17
(0027) for(i=0;i<3;i++)
0059 24CC CLR R12
005A C01B RJMP 0x0076
(0028) {
(0029) adcval[3-i]=temp%10+0x30;
005B 2C2C MOV R2,R12
005C 2433 CLR R3
005D E0E3 LDI R30,3
005E E0F0 LDI R31,0
005F 19E2 SUB R30,R2
0060 09F3 SBC R31,R3
0061 E787 LDI R24,0x77
0062 E090 LDI R25,0
0063 0FE8 ADD R30,R24
0064 1FF9 ADC R31,R25
0065 E02A LDI R18,0xA
0066 E030 LDI R19,0
0067 2D0E MOV R16,R14
0068 2D1F MOV R17,R15
0069 D128 RCALL mod16u
006A 2F80 MOV R24,R16
006B 2F91 MOV R25,R17
006C 96C0 ADIW R24,0x30
006D 8380 STD R24,0+Z
(0030) temp=temp/10;
006E E02A LDI R18,0xA
006F E030 LDI R19,0
0070 2D0E MOV R16,R14
0071 2D1F MOV R17,R15
0072 D121 RCALL div16u
0073 2EE0 MOV R14,R16
0074 2EF1 MOV R15,R17
(0031) }
0075 94C3 INC R12
0076 2D8C MOV R24,R12
0077 3083 CPI R24,3
0078 F310 BCS 0x005B
(0032) adcval[0]=adcval[1];
0079 90200078 LDS R2,_adcval+1
007B 92200077 STS R2,_adcval
(0033) adcval[1]='.';
007D E28E LDI R24,0x2E
007E 93800078 STS R24,_adcval+1
(0034) adcval[4]='V';
0080 E586 LDI R24,0x56
0081 9380007B STS R24,0x7B
(0035) adcval[5]=0;
0083 2422 CLR R2
0084 9220007C STS R2,0x7C
(0036) char_p=adcval;
0086 E787 LDI R24,0x77
0087 E090 LDI R25,0
0088 2EA8 MOV R10,R24
0089 2EB9 MOV R11,R25
(0037) return char_p;
008A 2F08 MOV R16,R24
008B 2F19 MOV R17,R25
008C D146 RCALL pop_gset5
008D 9508 RET
_adc_isr:
temp --> R16
008E 922A ST R2,-Y
008F 923A ST R3,-Y
0090 930A ST R16,-Y
0091 931A ST R17,-Y
0092 93EA ST R30,-Y
0093 B62F IN R2,P3F
0094 922A ST R2,-Y
(0038) }
(0039) /* AD轉換程序 */
(0040) #pragma interrupt_handler adc_isr:IT_ADC
(0041) void adc_isr(void)
(0042) {
(0043) unsigned int temp=0;
0095 2700 CLR R16
0096 2711 CLR R17
0097 C002 RJMP 0x009A
(0044) while(temp<6)
(0045) temp++;
0098 5F0F SUBI R16,0xFF
0099 4F1F SBCI R17,0xFF
009A 3006 CPI R16,6
009B E0E0 LDI R30,0
009C 071E CPC R17,R30
009D F3D0 BCS 0x0098
(0046) ad_con=ADC;
009E B024 IN R2,P04
009F B035 IN R3,P05
00A0 9230007E STS R3,_ad_con+1
00A2 9220007D STS R2,_ad_con
(0047) ADCSR|=(1<<ADSC);//啟動轉換
00A4 9A36 SBI P06,6
(0048) }
00A5 9029 LD R2,Y+
00A6 BE2F OUT P3F,R2
00A7 91E9 LD R30,Y+
00A8 9119 LD R17,Y+
00A9 9109 LD R16,Y+
00AA 9039 LD R3,Y+
00AB 9029 LD R2,Y+
00AC 9518 RETI
(0049) //將AD轉換結果轉換成電壓數值,然后在LCD上顯示
(0050) void main(void)
(0051) {
(0052) MCUCR=0;
_main:
00AD 2422 CLR R2
00AE BE25 OUT P35,R2
(0053) ADMUX=0x00;//0通道
00AF B827 OUT P07,R2
(0054) ADCSR=(1<<ADEN)|(1<<ADSC)|(1<<ADIF)|(1<<ADIE)|0x06;
00B0 ED8E LDI R24,0xDE
00B1 B986 OUT P06,R24
(0055) lcd_init();
00B2 D08D RCALL _lcd_init
(0056) SEI();
00B3 9478 BSET 7
00B4 C019 RJMP 0x00CE
(0057) while(1)
(0058) {
(0059) lcd_gotoxy(2,0);
00B5 2722 CLR R18
00B6 E002 LDI R16,2
00B7 D018 RCALL _lcd_gotoxy
(0060) lcd_puts("AD--Converter");
00B8 E609 LDI R16,0x69
00B9 E010 LDI R17,0
00BA D0BD RCALL _lcd_puts
(0061) lcd_gotoxy(2,1);
00BB E021 LDI R18,1
00BC E002 LDI R16,2
00BD D012 RCALL _lcd_gotoxy
(0062) lcd_puts("Voltage:");
00BE E600 LDI R16,0x60
00BF E010 LDI R17,0
00C0 D0B7 RCALL _lcd_puts
(0063) lcd_gotoxy(10,1);
00C1 E021 LDI R18,1
00C2 E00A LDI R16,0xA
00C3 D00C RCALL _lcd_gotoxy
(0064) lcd_puts(adctoasc(ad_con));
00C4 9100007D LDS R16,_ad_con
00C6 9110007E LDS R17,_ad_con+1
00C8 DF76 RCALL _adctoasc
00C9 D0AE RCALL _lcd_puts
(0065) delay_ms(500);
00CA EF04 LDI R16,0xF4
00CB E011 LDI R17,1
00CC D01E RCALL _delay_ms
(0066) lcd_clear();
00CD D0BE RCALL _lcd_clear
(0067) }
00CE CFE6 RJMP 0x00B5
(0068) } FILE: <library>
00CF 9508 RET
_lcd_gotoxy:
00D0 D0F4 RCALL push_gset2
00D1 2F42 MOV R20,R18
00D2 2F60 MOV R22,R16
00D3 3041 CPI R20,1
00D4 F419 BNE 0x00D8
00D5 2F46 MOV R20,R22
00D6 5440 SUBI R20,0x40
00D7 C002 RJMP 0x00DA
00D8 2F46 MOV R20,R22
00D9 5840 SUBI R20,0x80
00DA 2722 CLR R18
00DB 2733 CLR R19
00DC 2F04 MOV R16,R20
00DD 2711 CLR R17
00DE D02B RCALL _write_lcd
00DF D0F1 RCALL pop_gset2
00E0 9508 RET
_delay_1ms:
00E1 E001 LDI R16,1
00E2 E010 LDI R17,0
00E3 C002 RJMP 0x00E6
00E4 5F0F SUBI R16,0xFF
00E5 4F1F SBCI R17,0xFF
00E6 3706 CPI R16,0x76
00E7 E0E4 LDI R30,4
00E8 071E CPC R17,R30
00E9 F3D0 BCS 0x00E4
00EA 9508 RET
_delay_ms:
00EB D0D9 RCALL push_gset2
00EC 2F60 MOV R22,R16
00ED 2F71 MOV R23,R17
00EE 2744 CLR R20
00EF 2755 CLR R21
00F0 C003 RJMP 0x00F4
00F1 DFEF RCALL _delay_1ms
00F2 5F4F SUBI R20,0xFF
00F3 4F5F SBCI R21,0xFF
00F4 1746 CP R20,R22
00F5 0757 CPC R21,R23
00F6 F3D0 BCS 0x00F1
00F7 D0D9 RCALL pop_gset2
00F8 9508 RET
_lcd_port_init:
00F9 2422 CLR R2
00FA BA27 OUT P17,R2
00FB BA28 OUT P18,R2
00FC EF8F LDI R24,0xFF
00FD BB81 OUT P11,R24
00FE BB82 OUT P12,R24
00FF 9508 RET
_delay:
0100 2700 CLR R16
0101 2711 CLR R17
0102 C002 RJMP 0x0105
0103 5F0F SUBI R16,0xFF
0104 4F1F SBCI R17,0xFF
0105 310E CPI R16,0x1E
0106 E0E0 LDI R30,0
0107 071E CPC R17,R30
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -