📄 testadc.lst
字号:
1B9 E624 LDI R18,0x64
1BA E030 LDI R19,0
1BB 018B MOVW R16,R22
1BC D072 RCALL div16u
1BD 2F40 MOV R20,R16
1BE 1942 SUB R20,R2
1BF 0953 SBC R21,R3
(0219) srnum=ll%10; //个位
1C0 E02A LDI R18,0xA
1C1 E030 LDI R19,0
1C2 018B MOVW R16,R22
1C3 D069 RCALL mod16u
1C4 2EC0 MOV R12,R16
(0220) tnnum=(ll-knnum*1000-hunum*100)/10; //十位
1C5 2D2E MOV R18,R14
1C6 2733 CLR R19
1C7 EE08 LDI R16,0xE8
1C8 E013 LDI R17,3
1C9 D07F RCALL empy16s
1CA 0118 MOVW R2,R16
1CB 018B MOVW R16,R22
1CC 1902 SUB R16,R2
1CD 0913 SBC R17,R3
1CE E684 LDI R24,0x64
1CF 9F84 MUL R24,R20
1D0 1900 SUB R16,R0
1D1 0911 SBC R17,R1
1D2 E02A LDI R18,0xA
1D3 E030 LDI R19,0
1D4 D05A RCALL div16u
1D5 2F60 MOV R22,R16
(0221)
(0222) knnum+=0x30;hunum+=0x30;srnum+=0x30;tnnum+=0x30;
1D6 2D8E MOV R24,R14
1D7 5D80 SUBI R24,0xD0
1D8 2EE8 MOV R14,R24
1D9 5D40 SUBI R20,0xD0
1DA 2D8C MOV R24,R12
1DB 5D80 SUBI R24,0xD0
1DC 2EC8 MOV R12,R24
1DD 5D60 SUBI R22,0xD0
(0223) DispHalfWord(l,h,knnum,hunum);
1DE 834A STD Y+2,R20
1DF 82E8 STD Y+0,R14
1E0 2D2A MOV R18,R10
1E1 850D LDD R16,Y+13
1E2 DF49 RCALL _DispHalfWord
(0224) DispHalfWord(l+1,h,tnnum,srnum);
1E3 82CA STD Y+2,R12
1E4 8368 STD Y+0,R22
1E5 2D2A MOV R18,R10
1E6 850D LDD R16,Y+13
1E7 5F0F SUBI R16,0xFF
1E8 DF43 RCALL _DispHalfWord
1E9 9623 ADIW R28,3
1EA D06E RCALL pop_xgsetF0FC
1EB 9624 ADIW R28,4
1EC 9508 RET
_main:
1ED 9722 SBIW R28,2
FILE: D:\学习\AVRpro\Mega8程序\TestADC\Main.C
(0001) //*********************************************
(0002) //主程序Main.C
(0003) //MCU:AVR_MEGA8L ,晶振频率:8.0 MHz
(0004) //制作人:平顶山工学院计算机系,郭猛
(0005) //**********************************************
(0006) # include "stdlib.h"
(0007) # include "iom8v.h"
(0008) # include "macros.h"
(0009) # include "LCDFun.h"
(0010)
(0011) #ifndef uchar
(0012) #define uchar unsigned char
(0013) #endif
(0014)
(0015) void main()
(0016) {
(0017) LCD_Ini();
1EE DEEB RCALL _LCD_Ini
(0018) PrintS(2,1,"欢迎使用\0\0");
1EF E680 LDI R24,0x60
1F0 E090 LDI R25,0
1F1 8399 STD Y+1,R25
1F2 8388 STD Y+0,R24
1F3 E021 LDI R18,1
1F4 E002 LDI R16,2
1F5 DF59 RCALL _PrintS
(0019) Delay(1000);
1F6 EE08 LDI R16,0xE8
1F7 E013 LDI R17,3
1F8 DE5E RCALL _Delay
1F9 C003 RJMP 0x01FD
(0020)
(0021) while(1)
(0022) {
(0023) LCD_Ini();
1FA DEDF RCALL _LCD_Ini
(0024) ADC_Init();
1FB D004 RCALL _ADC_Init
(0025) ADC_Convert();
1FC D014 RCALL _ADC_Convert
1FD CFFC RJMP 0x01FA
1FE 9622 ADIW R28,2
1FF 9508 RET
FILE: D:\学习\AVRpro\Mega8程序\TestADC\ADC.C
(0001) //*********************************************
(0002) //ADC转换
(0003) //MCU:AVR_MEGA8L ,晶振频率:8.0 MHz
(0004) //ADC通道:ADC3,PA3,采用软件方式
(0005) //制作人:平顶山工学院计算机系,郭猛
(0006) //**********************************************
(0007)
(0008) #include "iom8v.h"
(0009) #include "macros.h"
(0010) #include "LCDFun.h"
(0011)
(0012) #define Vref 5 //参考电压为3.3V
(0013) #define VolMax 945 //电池电量满,4.15V-1.1V=3.05V,对应ADC结果为0x3ff*(3.05/3.3)=945
(0014) #define VolMin 728 //电池电量空,3.45V-1.1V=2.35V,对应ADC结果为0x3ff*(2.35/3.3)=728
(0015) #define ADC_MUX 0x03 //ADC_PC3通道
(0016)
(0017) unsigned char Bak_DDRC,Bak_PORTC; //记录端口C的原先状态
(0018)
(0019) //ADC初始化函数
(0020) void ADC_Init(void)
(0021) {
(0022) Bak_DDRC=DDRC;
_ADC_Init:
200 B224 IN R2,0x14
201 9220 0070 STS Bak_DDRC,R2
(0023) Bak_PORTC=PORTC; //保存原来的端口A状态
203 B225 IN R2,0x15
204 9220 006F STS Bak_PORTC,R2
(0024) DDRC&=~BIT(3); //端口C设置为高阻态
206 98A3 CBI 0x14,3
(0025) PORTC&=~BIT(3);
207 98AB CBI 0x15,3
(0026) //DDRC=0;PORTC=0;
(0027)
(0028) ADCSRA=0x00;
208 2422 CLR R2
209 B826 OUT 0x06,R2
(0029) ADMUX=BIT(REFS0)|(3&0x0f); //选择外部ARef为基准,ADC数据左对齐
20A E483 LDI R24,0x43
20B B987 OUT 0x07,R24
(0030) ACSR=BIT(ACD); //关闭模拟比较器
20C E880 LDI R24,0x80
20D B988 OUT 0x08,R24
(0031) ADCSRA=BIT(ADEN)|BIT(ADPS2)|BIT(ADPS1); //CLK64分频,不产生ADC中断
20E E886 LDI R24,0x86
20F B986 OUT 0x06,R24
210 9508 RET
_ADC_Convert:
i --> Y,+3
rslt --> R10
adc_reslt --> R20
211 D05D RCALL push_xgset300C
212 9722 SBIW R28,2
(0032) }
(0033)
(0034) //ADC转换处理函数:
(0035) unsigned char ADC_Convert(void)
(0036) {
(0037) unsigned int adc_reslt=0; //AD转换结果
213 2744 CLR R20
214 2755 CLR R21
(0038) unsigned char rslt,i;
(0039) ADCSRA|=BIT(ADSC); //启动AD转换
215 9A36 SBI 0x06,6
(0040) while(!(ADCSRA & BIT(ADIF))) ; //等待AD转换完毕
216 9B34 SBIS 0x06,4
217 CFFE RJMP 0x0216
(0041) adc_reslt=ADC&0x03FF; //保存ADC结果
218 B144 IN R20,0x04
219 B155 IN R21,0x05
21A 7053 ANDI R21,3
(0042) //测试使用,显示adc_reslt:
(0043) DisplayNumChar(3,3,adc_reslt);
21B 8359 STD Y+1,R21
21C 8348 STD Y+0,R20
21D E023 LDI R18,3
21E E003 LDI R16,3
21F DF8B RCALL _DisplayNumChar
(0044) Delay(500);
220 EF04 LDI R16,0xF4
221 E011 LDI R17,1
222 DE34 RCALL _Delay
(0045)
(0046) //ADMUX=ADC_MUX; //选择外部ARef为基准
(0047) ADCSRA|=BIT(ADIF); //ADIF位写入1,清零
223 9A34 SBI 0x06,4
(0048) ADCSRA&=~BIT(ADEN); //禁止ADC
224 9837 CBI 0x06,7
(0049) //恢复原来的端口C状态:
(0050) //DDRC=Bak_DDRC;
(0051) //PORTC=Bak_PORTC;
(0052)
(0053) return rslt;
FILE: <library>
225 2D0A MOV R16,R10
226 9622 ADIW R28,2
227 C04C RJMP pop_xgset300C
push_arg4:
228 933A ST R19,-Y
229 932A ST R18,-Y
push_arg2:
22A 931A ST R17,-Y
22B 930A ST R16,-Y
22C 9508 RET
mod16u:
22D 9468 BSET 6
22E C001 RJMP xdiv16u
div16u:
22F 94E8 BCLR 6
xdiv16u:
230 92EA ST R14,-Y
231 92FA ST R15,-Y
232 938A ST R24,-Y
233 24EE CLR R14
234 24FF CLR R15
235 E180 LDI R24,0x10
236 0F00 LSL R16
237 1F11 ROL R17
238 1CEE ROL R14
239 1CFF ROL R15
23A 16E2 CP R14,R18
23B 06F3 CPC R15,R19
23C F018 BCS 0x0240
23D 1AE2 SUB R14,R18
23E 0AF3 SBC R15,R19
23F 9503 INC R16
240 958A DEC R24
241 F7A1 BNE 0x0236
242 F416 BRTC 0x0245
243 2D0E MOV R16,R14
244 2D1F MOV R17,R15
245 9189 LD R24,Y+
246 90F9 LD R15,Y+
247 90E9 LD R14,Y+
248 9508 RET
empy16s:
249 920A ST R0,-Y
24A 921A ST R1,-Y
24B 938A ST R24,-Y
24C 939A ST R25,-Y
24D 9F02 MUL R16,R18
24E 01C0 MOVW R24,R0
24F 9F12 MUL R17,R18
250 0D90 ADD R25,R0
251 9F03 MUL R16,R19
252 0D90 ADD R25,R0
253 018C MOVW R16,R24
254 9199 LD R25,Y+
255 9189 LD R24,Y+
256 9019 LD R1,Y+
257 9009 LD R0,Y+
258 9508 RET
pop_xgsetF0FC:
259 90A9 LD R10,Y+
25A 90B9 LD R11,Y+
25B 90C9 LD R12,Y+
25C 90D9 LD R13,Y+
25D 90E9 LD R14,Y+
25E 90F9 LD R15,Y+
25F 9149 LD R20,Y+
260 9159 LD R21,Y+
261 9169 LD R22,Y+
262 9179 LD R23,Y+
263 9508 RET
push_xgsetF0FC:
264 937A ST R23,-Y
265 936A ST R22,-Y
push_xgset30FC:
266 935A ST R21,-Y
267 934A ST R20,-Y
push_xgset00FC:
268 92FA ST R15,-Y
269 92EA ST R14,-Y
push_xgset003C:
26A 92DA ST R13,-Y
26B 92CA ST R12,-Y
26C 92BA ST R11,-Y
26D 92AA ST R10,-Y
26E 9508 RET
push_xgset300C:
26F 935A ST R21,-Y
270 934A ST R20,-Y
271 92BA ST R11,-Y
272 92AA ST R10,-Y
273 9508 RET
pop_xgset300C:
274 90A9 LD R10,Y+
275 90B9 LD R11,Y+
276 9149 LD R20,Y+
277 9159 LD R21,Y+
278 9508 RET
push_xgsetF00C:
279 937A ST R23,-Y
27A 936A ST R22,-Y
27B 935A ST R21,-Y
27C 934A ST R20,-Y
27D 92BA ST R11,-Y
27E 92AA ST R10,-Y
27F 9508 RET
pop_xgsetF00C:
280 90A9 LD R10,Y+
281 90B9 LD R11,Y+
282 9149 LD R20,Y+
283 9159 LD R21,Y+
284 9169 LD R22,Y+
285 9179 LD R23,Y+
286 9508 RET
push_xgset303C:
287 935A ST R21,-Y
288 934A ST R20,-Y
289 92DA ST R13,-Y
28A 92CA ST R12,-Y
28B 92BA ST R11,-Y
28C 92AA ST R10,-Y
28D 9508 RET
pop_xgset303C:
28E 90A9 LD R10,Y+
28F 90B9 LD R11,Y+
290 90C9 LD R12,Y+
291 90D9 LD R13,Y+
292 9149 LD R20,Y+
293 9159 LD R21,Y+
294 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -