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

📄 main.lis

📁 用AVR单片机做的一些程序,包括跑马灯显示,PWM产生,ADC转换等
💻 LIS
字号:
                        .module main.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\ICCAVR\project\AVRMEG~3\icc\005-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 19
 0004           ; /*
 0004           ; 实验五:
 0004           ;       SPI接口实险,LED数据管显示。
 0004           ;       1、程序通过SPI接口输出数据到HC595芯片驱动LED数据管简单显示。
 0004           ;       2、内部1 M晶振,程序采用单任务方式,软件延时。
 0004           ;       3、进行此实验请插上SPI短路块。
 0004           ;       4、此实验具有一定参考价值,可作为项目的参考方案。
 0004           ; 
 0004           ;       AVR  mega16学习板
 0004           ;       www.iccavr.com
 0004           ;       2007-10-10
 0004           ; */
 0004           ; 
 0004           ; #include "iom128v.h"
 0004           ; extern unsigned char led_buf[];
 0004           ; extern void disp_init(void);
 0004           ; 
 0004           ; /*延时函数*/
 0004           ; void delay_ms(unsigned char i) {
 0004                   .dbline 22
 0004 41E0              ldi R20,1
 0006 06C0              xjmp L5
 0008           L2:
 0008                   .dbline 22
 0008           ; 
 0008           ;       unsigned char a, b;
 0008           ;       for (a = 1; a < i; a++) {
 0008                   .dbline 23
 0008 61E0              ldi R22,1
 000A 01C0              xjmp L9
 000C           L6:
 000C                   .dbline 23
 000C                   .dbline 24
 000C                   .dbline 25
 000C           L7:
 000C                   .dbline 23
 000C 6395              inc R22
 000E           L9:
 000E                   .dbline 23
 000E 6623              tst R22
 0010 E9F7              brne L6
 0012                   .dbline 26
 0012           L3:
 0012                   .dbline 22
 0012 4395              inc R20
 0014           L5:
 0014                   .dbline 22
 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 30
 001E           ;               for (b = 1; b; b++) {
 001E           ;                       ;
 001E           ;                       }
 001E           ;               }
 001E           ; }
 001E           ; 
 001E           ; /*IO口初始化函数*/
 001E           ; void io_init(void) {
 001E                   .dbline 32
 001E           ; 
 001E           ;       DDRA = 0x00;                                                                            /*方向输入*/
 001E 2224              clr R2
 0020 2ABA              out 0x1a,R2
 0022                   .dbline 33
 0022           ;       PORTA = 0xFF;                                                                           /*打开上拉*/
 0022 8FEF              ldi R24,255
 0024 8BBB              out 0x1b,R24
 0026                   .dbline 34
 0026           ;       DDRB = 0xF0;                                                                            /*设置高4位为输出,控制4位数码管*/
 0026 80EF              ldi R24,240
 0028 87BB              out 0x17,R24
 002A                   .dbline 35
 002A           ;       PORTB = 0x0F;                                                                           /*高4位输出低电平,点亮4位数码管*/
 002A 8FE0              ldi R24,15
 002C 88BB              out 0x18,R24
 002E                   .dbline 36
 002E           ;       DDRC = 0x00;                                                                            /*不用的IO口建议设置为输入带上拉*/
 002E 24BA              out 0x14,R2
 0030                   .dbline 37
 0030           ;       PORTC = 0xFF;
 0030 8FEF              ldi R24,255
 0032 85BB              out 0x15,R24
 0034                   .dbline 38
 0034           ;       DDRD = 0x00;
 0034 21BA              out 0x11,R2
 0036                   .dbline 39
 0036           ;       PORTD = 0xFF;
 0036 82BB              out 0x12,R24
 0038                   .dbline 40
 0038           ;       DDRE = 0x00;
 0038 22B8              out 0x2,R2
 003A                   .dbline 41
 003A           ;       PORTE = 0xFF;
 003A 83B9              out 0x3,R24
 003C                   .dbline 42
 003C           ;       DDRF = 0x00;
 003C 20926100          sts 97,R2
 0040                   .dbline 43
 0040           ;       PORTF = 0xFF;
 0040 80936200          sts 98,R24
 0044                   .dbline 44
 0044           ;       DDRG = 0x00;
 0044 20926400          sts 100,R2
 0048                   .dbline 45
 0048           ;       PORTG = 0xFF;
 0048 80936500          sts 101,R24
 004C                   .dbline -2
 004C           L10:
 004C                   .dbline 0 ; func end
 004C 0895              ret
 004E                   .dbend
 004E                   .dbfunc e int_to_bcd _int_to_bcd fV
 004E           ;              i -> R20
 004E           ;           temp -> R22,R23
                        .even
 004E           _int_to_bcd::
 004E 0E940000          xcall push_gset2
 0052 B801              movw R22,R16
 0054                   .dbline -1
 0054                   .dbline 49
 0054           ; }
 0054           ; 
 0054           ; /*十六进制转十进制函数*/
 0054           ; void int_to_bcd(unsigned int temp) { 
 0054                   .dbline 52
 0054 4427              clr R20
 0056 13C0              xjmp L15
 0058           L12:
 0058                   .dbline 52
 0058                   .dbline 53
 0058 2AE0              ldi R18,10
 005A 30E0              ldi R19,0
 005C 8B01              movw R16,R22
 005E 0E940000          xcall mod16u
 0062 80E0              ldi R24,<_led_buf
 0064 90E0              ldi R25,>_led_buf
 0066 E42F              mov R30,R20
 0068 FF27              clr R31
 006A E80F              add R30,R24
 006C F91F              adc R31,R25
 006E 0083              std z+0,R16
 0070                   .dbline 54
 0070 2AE0              ldi R18,10
 0072 30E0              ldi R19,0
 0074 8B01              movw R16,R22
 0076 0E940000          xcall div16u
 007A B801              movw R22,R16
 007C                   .dbline 55
 007C           L13:
 007C                   .dbline 52
 007C 4395              inc R20
 007E           L15:
 007E                   .dbline 52
 007E           ;       unsigned char i;
 007E           ; 
 007E           ;       for (i = 0; i < 4; i++) {
 007E 4430              cpi R20,4
 0080 58F3              brlo L12
 0082                   .dbline -2
 0082           L11:
 0082 0E940000          xcall pop_gset2
 0086                   .dbline 0 ; func end
 0086 0895              ret
 0088                   .dbsym r i 20 c
 0088                   .dbsym r temp 22 i
 0088                   .dbend
 0088                   .dbfunc e main _main fV
 0088           ;              i -> R20,R21
                        .even
 0088           _main::
 0088                   .dbline -1
 0088                   .dbline 58
 0088           ;       led_buf[i] = temp % 10;                                                         /*提取当前变量最低位*/
 0088           ;       temp = temp / 10;                                                                       /*去掉当前最低位值*/
 0088           ;     }
 0088           ; }
 0088           ; 
 0088           ; void main(void) {
 0088                   .dbline 60
 0088           ; 
 0088           ;       unsigned int i = 0;
 0088 4427              clr R20
 008A 5527              clr R21
 008C                   .dbline 62
 008C           ;       
 008C           ;       delay_ms(200);                                                                          /*200mS启动延时*/
 008C 08EC              ldi R16,200
 008E B8DF              xcall _delay_ms
 0090                   .dbline 63
 0090           ;       io_init();                                                                                      /*初始化IO口*/
 0090 C6DF              xcall _io_init
 0092                   .dbline 64
 0092           ;       disp_init();                                                                            /*初始显示部*/
 0092 0E940000          xcall _disp_init
 0096 0DC0              xjmp L18
 0098           L17:
 0098                   .dbline 65
 0098           ;       while (1) {
 0098                   .dbline 66
 0098           ;               i ++;
 0098 4F5F              subi R20,255  ; offset = 1
 009A 5F4F              sbci R21,255
 009C                   .dbline 67
 009C           ;               if (i > 9999) {
 009C 8FE0              ldi R24,9999
 009E 97E2              ldi R25,39
 00A0 8417              cp R24,R20
 00A2 9507              cpc R25,R21
 00A4 10F4              brsh L20
 00A6                   .dbline 67
 00A6                   .dbline 68
 00A6           ;                       i = 0x00;
 00A6 4427              clr R20
 00A8 5527              clr R21
 00AA                   .dbline 69
 00AA           ;                       }
 00AA           L20:
 00AA                   .dbline 70
 00AA 04E6              ldi R16,100
 00AC A9DF              xcall _delay_ms
 00AE                   .dbline 71
 00AE 8A01              movw R16,R20
 00B0 CEDF              xcall _int_to_bcd
 00B2                   .dbline 72
 00B2           L18:
 00B2                   .dbline 65
 00B2 F2CF              xjmp L17
 00B4           X0:
 00B4                   .dbline -2
 00B4           L16:
 00B4                   .dbline 0 ; func end
 00B4 0895              ret
 00B6                   .dbsym r i 20 i
 00B6                   .dbend

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -