📄 main.lis
字号:
.module main.c
.area text(rom, con, rel)
0000 .dbfile E:\ICCAVR\project\AVRMEG~3\icc\009-AD-LED4\main.c
0000 .dbfunc e delay_ms _delay_ms fV
0000 ; a -> R20
0000 ; b -> R22
0000 ; i -> R16
.even
0000 _delay_ms::
0000 0E940000 xcall push_gset2
0004 .dbline -1
0004 .dbline 23
0004 ; /*
0004 ; 实验九:
0004 ; AD转换实验。
0004 ; 1、AD转换实验。程序进行周期AD转换,在并转换值显示在数码管上。
0004 ; 2、使用内部1 M晶振。
0004 ; 3、进行此实验需要插上SPI、AD0短路块。
0004 ; 4、此实验采用项目化管理,主要文件有ADC、DISP、主程序。
0004 ; 5、此实验包含ADC采样、数值转换、显示,是一个完整的小系统。
0004 ;
0004 ; AVR mega128学习板
0004 ; www.iccavr.com 阿发
0004 ; 2007-10-12
0004 ; */
0004 ;
0004 ; #include "iom128v.h"
0004 ; #include <macros.h>
0004 ;
0004 ; extern unsigned int get_ad(void); /*AD采样函数*/
0004 ; extern void disp_init(void); /*显示初始化*/
0004 ; extern unsigned char led_buf[]; /*显示缓存*/
0004 ;
0004 ; /*延时函数,频率1MHz,单位mS*/
0004 ; void delay_ms(unsigned char i) {
0004 .dbline 26
0004 4427 clr R20
0006 06C0 xjmp L5
0008 L2:
0008 .dbline 26
0008 ;
0008 ; unsigned char a, b;
0008 ; for (a = 0; a < i; a++) {
0008 .dbline 27
0008 61E0 ldi R22,1
000A 01C0 xjmp L9
000C L6:
000C .dbline 27
000C L7:
000C .dbline 27
000C 6395 inc R22
000E L9:
000E .dbline 27
000E 6623 tst R22
0010 E9F7 brne L6
0012 .dbline 28
0012 L3:
0012 .dbline 26
0012 4395 inc R20
0014 L5:
0014 .dbline 26
0014 4017 cp R20,R16
0016 C0F3 brlo L2
0018 .dbline -2
0018 L1:
0018 0E940000 xcall pop_gset2
001C .dbline 0 ; func end
001C 0895 ret
001E .dbsym r a 20 c
001E .dbsym r b 22 c
001E .dbsym r i 16 c
001E .dbend
001E .dbfunc e io_init _io_init fV
.even
001E _io_init::
001E .dbline -1
001E .dbline 32
001E ; for (b = 1; b; b++);
001E ; }
001E ; }
001E ;
001E ; /*IO口初始化函数*/
001E ; void io_init(void) {
001E .dbline 34
001E ;
001E ; DDRA = 0x00; /*方向输入*/
001E 2224 clr R2
0020 2ABA out 0x1a,R2
0022 .dbline 35
0022 ; PORTA = 0xFF; /*打开上拉*/
0022 8FEF ldi R24,255
0024 8BBB out 0x1b,R24
0026 .dbline 36
0026 ; DDRB = 0xFF; /*方向输出*/
0026 87BB out 0x17,R24
0028 .dbline 37
0028 ; PORTB = 0xFF; /*输出高电平*/
0028 88BB out 0x18,R24
002A .dbline 38
002A ; DDRC = 0x00; /*不用的IO口建议设置为输入带上拉*/
002A 24BA out 0x14,R2
002C .dbline 39
002C ; PORTC = 0xFF;
002C 85BB out 0x15,R24
002E .dbline 40
002E ; DDRD = 0x00;
002E 21BA out 0x11,R2
0030 .dbline 41
0030 ; PORTD = 0xFF;
0030 82BB out 0x12,R24
0032 .dbline 42
0032 ; DDRE = 0x00;
0032 22B8 out 0x2,R2
0034 .dbline 43
0034 ; PORTE = 0xFF;
0034 83B9 out 0x3,R24
0036 .dbline 44
0036 ; DDRF = 0x00;
0036 20926100 sts 97,R2
003A .dbline 45
003A ; PORTF = 0xFE; /*PF0无上拉电阻*/
003A 8EEF ldi R24,254
003C 80936200 sts 98,R24
0040 .dbline 46
0040 ; DDRG = 0x00;
0040 20926400 sts 100,R2
0044 .dbline 47
0044 ; PORTG = 0xFF;
0044 8FEF ldi R24,255
0046 80936500 sts 101,R24
004A .dbline -2
004A L10:
004A .dbline 0 ; func end
004A 0895 ret
004C .dbend
004C .dbfunc e int_to_bcd _int_to_bcd fV
004C ; i -> R20
004C ; temp -> R22,R23
.even
004C _int_to_bcd::
004C 0E940000 xcall push_gset2
0050 B801 movw R22,R16
0052 .dbline -1
0052 .dbline 51
0052 ; }
0052 ;
0052 ; /*十六进制转十进制函数*/
0052 ; void int_to_bcd(unsigned int temp) {
0052 .dbline 54
0052 ; unsigned char i;
0052 ;
0052 ; if (temp > 9999) { /*防止数值过大*/
0052 8FE0 ldi R24,9999
0054 97E2 ldi R25,39
0056 8617 cp R24,R22
0058 9707 cpc R25,R23
005A 10F4 brsh L12
005C .dbline 54
005C .dbline 55
005C ; temp = 9999;
005C 6FE0 ldi R22,9999
005E 77E2 ldi R23,39
0060 .dbline 56
0060 ; }
0060 L12:
0060 .dbline 57
0060 4427 clr R20
0062 13C0 xjmp L17
0064 L14:
0064 .dbline 57
0064 .dbline 58
0064 2AE0 ldi R18,10
0066 30E0 ldi R19,0
0068 8B01 movw R16,R22
006A 0E940000 xcall mod16u
006E 80E0 ldi R24,<_led_buf
0070 90E0 ldi R25,>_led_buf
0072 E42F mov R30,R20
0074 FF27 clr R31
0076 E80F add R30,R24
0078 F91F adc R31,R25
007A 0083 std z+0,R16
007C .dbline 59
007C 2AE0 ldi R18,10
007E 30E0 ldi R19,0
0080 8B01 movw R16,R22
0082 0E940000 xcall div16u
0086 B801 movw R22,R16
0088 .dbline 60
0088 L15:
0088 .dbline 57
0088 4395 inc R20
008A L17:
008A .dbline 57
008A ; for (i = 0; i < 4; i++) {
008A 4430 cpi R20,4
008C 58F3 brlo L14
008E .dbline -2
008E L11:
008E 0E940000 xcall pop_gset2
0092 .dbline 0 ; func end
0092 0895 ret
0094 .dbsym r i 20 c
0094 .dbsym r temp 22 i
0094 .dbend
0094 .dbfunc e main _main fV
0094 ; i -> R10,R11
.even
0094 _main::
0094 .dbline -1
0094 .dbline 63
0094 ; led_buf[i] = temp % 10; /*提取当前变量最低位*/
0094 ; temp = temp / 10; /*去掉当前最低位值*/
0094 ; }
0094 ; }
0094 ;
0094 ; void main(void) {
0094 .dbline 67
0094 ;
0094 ; unsigned int i;
0094 ;
0094 ; delay_ms(200); /*加入延时*/
0094 08EC ldi R16,200
0096 B4DF xcall _delay_ms
0098 .dbline 68
0098 ; io_init(); /*IO口初始化*/
0098 C2DF xcall _io_init
009A .dbline 69
009A ; disp_init(); /*显示初始化*/
009A 0E940000 xcall _disp_init
009E 1BC0 xjmp L20
00A0 L19:
00A0 .dbline 70
00A0 .dbline 71
00A0 04E6 ldi R16,100
00A2 AEDF xcall _delay_ms
00A4 .dbline 72
00A4 0E940000 xcall _get_ad
00A8 5801 movw R10,R16
00AA .dbline 73
00AA 1501 movw R2,R10
00AC 4424 clr R4
00AE 5524 clr R5
00B0 48E8 ldi R20,136
00B2 53E1 ldi R21,19
00B4 60E0 ldi R22,0
00B6 70E0 ldi R23,0
00B8 5A92 st -y,R5
00BA 4A92 st -y,R4
00BC 3A92 st -y,R3
00BE 2A92 st -y,R2
00C0 8A01 movw R16,R20
00C2 9B01 movw R18,R22
00C4 0E940000 xcall empy32u
00C8 8AE0 ldi R24,10
00CA 90E0 ldi R25,0
00CC 8A93 st -y,R24
00CE 0E940000 xcall lsr32
00D2 5801 movw R10,R16
00D4 .dbline 74
00D4 BBDF xcall _int_to_bcd
00D6 .dbline 75
00D6 L20:
00D6 .dbline 70
00D6 E4CF xjmp L19
00D8 X0:
00D8 .dbline -2
00D8 L18:
00D8 .dbline 0 ; func end
00D8 0895 ret
00DA .dbsym r i 10 i
00DA .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -