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

📄 main.lis

📁 用AVR单片机做的一些程序,包括跑马灯显示,PWM产生,ADC转换等
💻 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 + -