📄 ad转化.lst
字号:
0102 F7B9 BNE 0x00FA
0103 940E01E3 CALL pop_gset3
0105 9508 RET
_LCD_write_char:
data --> Y+4
Y --> R22
X --> R20
0106 940E01EC CALL push_gset2
0108 2F62 MOV R22,R18
0109 2F40 MOV R20,R16
(0108) }
(0109)
(0110) }
(0111)
(0112) void LCD_write_char(unsigned char X,unsigned char Y,unsigned char data) //列x=0~15,行y=0,1
(0113) {
(0114) LCD_set_xy( X, Y ); //写地址
010A 2F26 MOV R18,R22
010B 2F04 MOV R16,R20
010C DFD3 RCALL _LCD_set_xy
(0115) LCD_write_data( data);
010D 810C LDD R16,Y+4
010E DFB1 RCALL _LCD_write_data
010F 940E01E0 CALL pop_gset2
0111 9508 RET
_change:
p --> R20
i --> R22
0112 940E01EC CALL push_gset2
0114 01A9 MOVW R20,R18
0115 01B8 MOVW R22,R16
FILE: E:\单片机\PROJECT\高精度三维太阳自动跟踪器\程序\传感器控制\main.c
(0001) /*****************************************
(0002) * 基于AD转化程序设计 *
(0003) * 功 能:AD转化 *
(0004) * 时钟频率:内部8M *
(0005) * 设 计:莫锦攀 *
(0006) * 修改日期:2007年07月04日 *
(0007) * 编译环境:ICC-AVR6.31 *
(0008) * 实验环境:M16学习板 *
(0009) * 使用端口:PC6,PC7,PA4~PA7,PA0 *
(0010) *****************************************/
(0011)
(0012) #include <iom16v.h>
(0013) #include "1602.h"
(0014) #define uchar unsigned char
(0015) #define uint unsigned int
(0016) uchar Data[5]={0,0,0,0,0};//初始值为0000,最后一个0是结束符
(0017) void change(uint i,uchar *p) //显示处理
(0018) {p[3]=i%10+48;//个
0116 E02A LDI R18,0xA
0117 E030 LDI R19,0
0118 018B MOVW R16,R22
0119 940E01C4 CALL mod16u
011B 01C8 MOVW R24,R16
011C 96C0 ADIW R24,0x30
011D 01FA MOVW R30,R20
011E 8383 STD Z+3,R24
(0019) p[2]=i/10%10+48;//十
011F E02A LDI R18,0xA
0120 E030 LDI R19,0
0121 018B MOVW R16,R22
0122 940E01C6 CALL div16u
0124 E02A LDI R18,0xA
0125 E030 LDI R19,0
0126 940E01C4 CALL mod16u
0128 01C8 MOVW R24,R16
0129 96C0 ADIW R24,0x30
012A 01FA MOVW R30,R20
012B 8382 STD Z+2,R24
(0020) p[1]=i/100%10+48;//百
012C E624 LDI R18,0x64
012D E030 LDI R19,0
012E 018B MOVW R16,R22
012F 940E01C6 CALL div16u
0131 E02A LDI R18,0xA
0132 E030 LDI R19,0
0133 940E01C4 CALL mod16u
0135 01C8 MOVW R24,R16
0136 96C0 ADIW R24,0x30
0137 01FA MOVW R30,R20
0138 8381 STD Z+1,R24
(0021) p[0]=i/1000%10+48;//千
0139 EE28 LDI R18,0xE8
013A E033 LDI R19,3
013B 018B MOVW R16,R22
013C 940E01C6 CALL div16u
013E E02A LDI R18,0xA
013F E030 LDI R19,0
0140 940E01C4 CALL mod16u
0142 01C8 MOVW R24,R16
0143 96C0 ADIW R24,0x30
0144 01FA MOVW R30,R20
0145 8380 STD Z+0,R24
0146 940E01E0 CALL pop_gset2
0148 9508 RET
(0022) }
(0023)
(0024) uint ADC_convert(void)//AD转换函数,读取采样获得的10位数据
(0025) {
(0026) uint temp1,temp2;
(0027) temp1=(uint)ADCL;
_ADC_convert:
temp1 --> R18
temp2 --> R16
0149 B124 IN R18,0x04
014A 2733 CLR R19
(0028) temp2=(uint)ADCH;
014B B105 IN R16,0x05
014C 2711 CLR R17
(0029) temp2=(temp2<<8)+temp1;
014D 0118 MOVW R2,R16
014E 2C32 MOV R3,R2
014F 2422 CLR R2
0150 0E22 ADD R2,R18
0151 1E33 ADC R3,R19
0152 0181 MOVW R16,R2
(0030) return temp2;
0153 9508 RET
_main:
i --> R20
j --> R22
0154 9722 SBIW R28,2
(0031) }
(0032)
(0033)
(0034) void main(void)
(0035) {uint i,j;
(0036) //uchar a;
(0037) DDRA=0x00;
0155 2422 CLR R2
0156 BA2A OUT 0x1A,R2
(0038) PORTA=0x01; //A口为不带上拉输入
0157 E081 LDI R24,1
0158 BB8B OUT 0x1B,R24
(0039) DDRD=0xFF;
0159 EF8F LDI R24,0xFF
015A BB81 OUT 0x11,R24
(0040) PORTD=0xff;
015B BB82 OUT 0x12,R24
(0041) LCD_init();//液晶初始化
015C DF28 RCALL _LCD_init
(0042)
(0043) ADMUX=(1<<REFS1)|(1<<REFS0);//选择第一通道ADC0,内部REF(2.56V)
015D EC80 LDI R24,0xC0
015E B987 OUT 0x07,R24
(0044) ADCSR=0xe7;//8M32分频,125k速率,自由模式;启动AD转换器
015F EE87 LDI R24,0xE7
0160 B986 OUT 0x06,R24
(0045) delay_nms(100);//延迟100ms等待系统稳定后读取数据
0161 E604 LDI R16,0x64
0162 E010 LDI R17,0
0163 DF12 RCALL _delay_nms
0164 C05C RJMP 0x01C1
(0046)
(0047) while(1)
(0048) {i=ADC_convert();
0165 DFE3 RCALL _ADC_convert
0166 01A8 MOVW R20,R16
(0049) j=0;
0167 2766 CLR R22
0168 2777 CLR R23
(0050) change(i,Data);
0169 E620 LDI R18,0x60
016A E030 LDI R19,0
016B DFA6 RCALL _change
(0051) LCD_write_string(3,0,"ADC by cac");
016C E784 LDI R24,0x74
016D E090 LDI R25,0
016E 8399 STD Y+1,R25
016F 8388 STD Y+0,R24
0170 2722 CLR R18
0171 E003 LDI R16,3
0172 DF7D RCALL _LCD_write_string
(0052) LCD_write_string(0,1,Data);
0173 E680 LDI R24,0x60
0174 E090 LDI R25,0
0175 8399 STD Y+1,R25
0176 8388 STD Y+0,R24
0177 E021 LDI R18,1
0178 2700 CLR R16
0179 DF76 RCALL _LCD_write_string
(0053) if(i>0x2BC)
017A EB8C LDI R24,0xBC
017B E092 LDI R25,2
017C 1784 CP R24,R20
017D 0795 CPC R25,R21
017E F4C8 BCC 0x0198
(0054) { LCD_write_string(6,1,"Forw");
017F E68F LDI R24,0x6F
0180 E090 LDI R25,0
0181 8399 STD Y+1,R25
0182 8388 STD Y+0,R24
0183 E021 LDI R18,1
0184 E006 LDI R16,6
0185 DF6A RCALL _LCD_write_string
(0055) PORTD|=(1<<PD1);
0186 9A91 SBI 0x12,1
0187 C00A RJMP 0x0192
(0056) while(j<=2000)
(0057) {
(0058) PORTD|=(1<<PD2);
0188 9A92 SBI 0x12,2
(0059) delay_nus(20);
0189 E104 LDI R16,0x14
018A E010 LDI R17,0
018B DED1 RCALL _delay_nus
(0060) PORTD&=~(1<<PD2);
018C 9892 CBI 0x12,2
(0061) delay_nus(20);
018D E104 LDI R16,0x14
018E E010 LDI R17,0
018F DECD RCALL _delay_nus
(0062) j++;
0190 5F6F SUBI R22,0xFF
0191 4F7F SBCI R23,0xFF
0192 ED80 LDI R24,0xD0
0193 E097 LDI R25,7
0194 1786 CP R24,R22
0195 0797 CPC R25,R23
0196 F788 BCC 0x0188
(0063) }
(0064) }
0197 C029 RJMP 0x01C1
(0065) else if(i<0xC8&&i>0xAA)
0198 3C48 CPI R20,0xC8
0199 E0E0 LDI R30,0
019A 075E CPC R21,R30
019B F4F0 BCC 0x01BA
019C EA8A LDI R24,0xAA
019D E090 LDI R25,0
019E 1784 CP R24,R20
019F 0795 CPC R25,R21
01A0 F4C8 BCC 0x01BA
(0066) {LCD_write_string(6,1,"Back");
01A1 E68A LDI R24,0x6A
01A2 E090 LDI R25,0
01A3 8399 STD Y+1,R25
01A4 8388 STD Y+0,R24
01A5 E021 LDI R18,1
01A6 E006 LDI R16,6
01A7 DF48 RCALL _LCD_write_string
(0067) PORTD&=~(1<<PD1);
01A8 9891 CBI 0x12,1
01A9 C00A RJMP 0x01B4
(0068) while(j<=2000)
(0069) {
(0070) PORTD|=(1<<PD2);
01AA 9A92 SBI 0x12,2
(0071) delay_nus(20);
01AB E104 LDI R16,0x14
01AC E010 LDI R17,0
01AD DEAF RCALL _delay_nus
(0072) PORTD&=~(1<<PD2);
01AE 9892 CBI 0x12,2
(0073) delay_nus(20);
01AF E104 LDI R16,0x14
01B0 E010 LDI R17,0
01B1 DEAB RCALL _delay_nus
(0074) j++;
01B2 5F6F SUBI R22,0xFF
01B3 4F7F SBCI R23,0xFF
01B4 ED80 LDI R24,0xD0
01B5 E097 LDI R25,7
01B6 1786 CP R24,R22
01B7 0797 CPC R25,R23
01B8 F788 BCC 0x01AA
(0075) }
(0076) }
01B9 C007 RJMP 0x01C1
(0077) else
(0078) LCD_write_string(6,1,"Stop");
FILE: <library>
01BA E685 LDI R24,0x65
01BB E090 LDI R25,0
01BC 8399 STD Y+1,R25
01BD 8388 STD Y+0,R24
01BE E021 LDI R18,1
01BF E006 LDI R16,6
01C0 DF2F RCALL _LCD_write_string
01C1 CFA3 RJMP 0x0165
01C2 9622 ADIW R28,2
01C3 9508 RET
mod16u:
01C4 9468 BSET 6
01C5 C001 RJMP xdiv16u
div16u:
01C6 94E8 BCLR 6
xdiv16u:
01C7 92EA ST R14,-Y
01C8 92FA ST R15,-Y
01C9 938A ST R24,-Y
01CA 24EE CLR R14
01CB 24FF CLR R15
01CC E180 LDI R24,0x10
01CD 0F00 LSL R16
01CE 1F11 ROL R17
01CF 1CEE ROL R14
01D0 1CFF ROL R15
01D1 16E2 CP R14,R18
01D2 06F3 CPC R15,R19
01D3 F018 BCS 0x01D7
01D4 1AE2 SUB R14,R18
01D5 0AF3 SBC R15,R19
01D6 9503 INC R16
01D7 958A DEC R24
01D8 F7A1 BNE 0x01CD
01D9 F416 BRTC 0x01DC
01DA 2D0E MOV R16,R14
01DB 2D1F MOV R17,R15
01DC 9189 LD R24,Y+
01DD 90F9 LD R15,Y+
01DE 90E9 LD R14,Y+
01DF 9508 RET
pop_gset2:
01E0 E0E2 LDI R30,2
01E1 940C01F2 JMP pop
pop_gset3:
01E3 E0E4 LDI R30,4
01E4 940C01F2 JMP pop
push_gset5:
01E6 92FA ST R15,-Y
01E7 92EA ST R14,-Y
push_gset4:
01E8 92DA ST R13,-Y
01E9 92CA ST R12,-Y
push_gset3:
01EA 92BA ST R11,-Y
01EB 92AA ST R10,-Y
push_gset2:
01EC 937A ST R23,-Y
01ED 936A ST R22,-Y
push_gset1:
01EE 935A ST R21,-Y
01EF 934A ST R20,-Y
01F0 9508 RET
pop_gset1:
01F1 E0E1 LDI R30,1
pop:
01F2 9149 LD R20,Y+
01F3 9159 LD R21,Y+
01F4 FDE0 SBRC R30,0
01F5 9508 RET
01F6 9169 LD R22,Y+
01F7 9179 LD R23,Y+
01F8 FDE1 SBRC R30,1
01F9 9508 RET
01FA 90A9 LD R10,Y+
01FB 90B9 LD R11,Y+
01FC FDE2 SBRC R30,2
01FD 9508 RET
01FE 90C9 LD R12,Y+
01FF 90D9 LD R13,Y+
0200 FDE3 SBRC R30,3
0201 9508 RET
0202 90E9 LD R14,Y+
0203 90F9 LD R15,Y+
0204 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -