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

📄 disp_2.lis

📁 avr单片机atmage16驱动小灯的一些例程 并且包括一些收发数据的程序利用usb口
💻 LIS
字号:
                        .module disp_2.c
                        .area data(ram, con, rel)
 0000           _disp::
 0000                   .blkb 2
                        .area idata
 0000 C0F9              .byte 192,249
                        .area data(ram, con, rel)
 0002                   .blkb 2
                        .area idata
 0002 A4B0              .byte 164,176
                        .area data(ram, con, rel)
 0004                   .blkb 2
                        .area idata
 0004 9992              .byte 153,146
                        .area data(ram, con, rel)
 0006                   .blkb 2
                        .area idata
 0006 82F8              .byte 130,248
                        .area data(ram, con, rel)
 0008                   .blkb 2
                        .area idata
 0008 8090              .byte 128,144
                        .area data(ram, con, rel)
 000A                   .blkb 2
                        .area idata
 000A C0C0              .byte 192,192
                        .area data(ram, con, rel)
 000C                   .blkb 2
                        .area idata
 000C C0C0              .byte 192,192
                        .area data(ram, con, rel)
 000E                   .blkb 2
                        .area idata
 000E C0C0              .byte 192,192
                        .area data(ram, con, rel)
 0010                   .dbfile E:\ICCAVR\project\AVRMEG~2\icc\005-LED4\disp_2.c
 0010                   .dbsym e disp _disp A[16:16]c
 0010           _led_buf::
 0010                   .blkb 2
                        .area idata
 0010 0102              .byte 1,2
                        .area data(ram, con, rel)
 0012                   .dbfile E:\ICCAVR\project\AVRMEG~2\icc\005-LED4\disp_2.c
 0012                   .blkb 2
                        .area idata
 0012 0304              .byte 3,4
                        .area data(ram, con, rel)
 0014                   .dbfile E:\ICCAVR\project\AVRMEG~2\icc\005-LED4\disp_2.c
 0014                   .blkb 1
                        .area idata
 0014 00                .byte 0
                        .area data(ram, con, rel)
 0015                   .dbfile E:\ICCAVR\project\AVRMEG~2\icc\005-LED4\disp_2.c
 0015                   .dbsym e led_buf _led_buf A[5:5]c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\ICCAVR\project\AVRMEG~2\icc\005-LED4\disp_2.c
 0000                   .dbfunc e Disp_Init _Disp_Init fV
                        .even
 0000           _Disp_Init::
 0000                   .dbline -1
 0000                   .dbline 24
 0000           ; /*
 0000           ; 模块说明:
 0000           ; 
 0000           ;       LED数码管中断动态显示程序。
 0000           ;       1、程序通过SPI接口输出数据到HC595芯片驱动LED数据管简单显示。
 0000           ;       2、动态调度由片内定时器1中断产生,中断周期为5mS。
 0000           ;       3、内部1 M晶振,程序采用单任务方式,软件延时。
 0000           ;       4、此模块文件为使用文件,可直接用于项目中。
 0000           ;       www.iccavr.com
 0000           ; */
 0000           ; #include "iom16v.h"
 0000           ; #include <macros.h>
 0000           ; 
 0000           ; unsigned char disp[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0};
 0000           ; 
 0000           ; unsigned char led_buf[] = {1, 2, 3, 4, 0};                    /*显示信息*/
 0000           ; 
 0000           ; /*------------------------------------------------------------------*-
 0000           ; 
 0000           ;        Disp_Init()
 0000           ;        显示初始化
 0000           ; 
 0000           ; -*------------------------------------------------------------------*/
 0000           ; void Disp_Init(void) {
 0000                   .dbline 27
 0000           ; 
 0000           ;       /*初始化定时器*/
 0000           ;       OCR1A = 625;                                            /*计数周期为5mS,F=1M*/
 0000 81E7              ldi R24,625
 0002 92E0              ldi R25,2
 0004 9BBD              out 0x2b,R25
 0006 8ABD              out 0x2a,R24
 0008                   .dbline 28
 0008           ;       TIMSK |= (1 << OCIE1A);                         /*比较中断A允许*/
 0008 89B7              in R24,0x39
 000A 8061              ori R24,16
 000C 89BF              out 0x39,R24
 000E                   .dbline 29
 000E           ;       SREG = 0x80;
 000E 80E8              ldi R24,128
 0010 8FBF              out 0x3f,R24
 0012                   .dbline 30
 0012           ;       TCCR1A = 0x00;
 0012 2224              clr R2
 0014 2FBC              out 0x2f,R2
 0016                   .dbline 31
 0016           ;       TCCR1B = 0x08;                                          /*定时器工作在CTC计数器模式*/
 0016 88E0              ldi R24,8
 0018 8EBD              out 0x2e,R24
 001A                   .dbline 32
 001A           ;       TCCR1B |= 0x02;                                         /*设置定时器的分频值为8分频*/
 001A 8EB5              in R24,0x2e
 001C 8260              ori R24,2
 001E 8EBD              out 0x2e,R24
 0020                   .dbline 35
 0020           ;       
 0020           ;       /*SPI接口初始化*/
 0020           ;       DDRB |= (1<<PB5) | (1<<PB7);            /* 设置MOSI 和SCK 为输出,其他为输入 */
 0020 87B3              in R24,0x17
 0022 806A              ori R24,160
 0024 87BB              out 0x17,R24
 0026                   .dbline 36
 0026           ;       SPCR = (1<<SPE) | (1<<MSTR)
 0026 83E5              ldi R24,83
 0028 8DB9              out 0xd,R24
 002A                   .dbline 40
 002A           ;               | (1<<SPR1) | (1<<SPR0);                /* 使能SPI 主机模式,时钟为fck/128 */
 002A           ;       
 002A           ;       /*中断使能*/
 002A           ;       SEI();
 002A 7894              sei
 002C                   .dbline -2
 002C           L1:
 002C                   .dbline 0 ; func end
 002C 0895              ret
 002E                   .dbend
                        .area vector(rom, abs)
                        .org 24
 0018 0C941700          jmp _Int_TCCR1A
                        .area text(rom, con, rel)
 002E                   .dbfile E:\ICCAVR\project\AVRMEG~2\icc\005-LED4\disp_2.c
                        .area bss(ram, con, rel)
 0000                   .dbfile E:\ICCAVR\project\AVRMEG~2\icc\005-LED4\disp_2.c
 0000           L3:
 0000                   .blkb 1
                        .area text(rom, con, rel)
 002E                   .dbfile E:\ICCAVR\project\AVRMEG~2\icc\005-LED4\disp_2.c
 002E                   .dbfunc e Int_TCCR1A _Int_TCCR1A fV
 002E                   .dbsym s i L3 c
 002E           ;           temp -> R20
                        .even
 002E           _Int_TCCR1A::
 002E 2A92              st -y,R2
 0030 0A93              st -y,R16
 0032 1A93              st -y,R17
 0034 8A93              st -y,R24
 0036 9A93              st -y,R25
 0038 EA93              st -y,R30
 003A FA93              st -y,R31
 003C 2FB6              in R2,0x3f
 003E 2A92              st -y,R2
 0040 0E940000          xcall push_gset1
 0044                   .dbline -1
 0044                   .dbline 53
 0044           ; }
 0044           ; 
 0044           ; /*------------------------------------------------------------------*-
 0044           ;   
 0044           ;       Int_TCCR1A()
 0044           ;       LED数码管动态显示函数
 0044           ; 
 0044           ;       定时器'T1',A组比较中断产生5mS周期性中断
 0044           ;       在中断里刷新显示
 0044           ;  
 0044           ; -*------------------------------------------------------------------*/
 0044           ; #pragma interrupt_handler Int_TCCR1A: 7
 0044           ; void Int_TCCR1A(void) {
 0044                   .dbline 58
 0044           ; 
 0044           ;       unsigned char temp;
 0044           ;       static unsigned char i;
 0044           ; 
 0044           ;       PORTB &= ~(1 << 4);                                     /*准备锁存*/
 0044 C498              cbi 0x18,4
 0046                   .dbline 59
 0046           ;       PORTB |= 0x0F;
 0046 88B3              in R24,0x18
 0048 8F60              ori R24,15
 004A 88BB              out 0x18,R24
 004C                   .dbline 60
 004C           ;       PORTB |= (1 << 4);                                      /*锁存数据*/
 004C C49A              sbi 0x18,4
 004E                   .dbline 61
 004E           ;       if (i == 3) {
 004E 80910000          lds R24,L3
 0052 8330              cpi R24,3
 0054 09F4              brne L4
 0056                   .dbline 61
 0056                   .dbline 62
 0056           ;               PORTB &= ~(1 << 2);
 0056 C298              cbi 0x18,2
 0058                   .dbline 63
 0058           ;               }
 0058           L4:
 0058                   .dbline 64
 0058           ;       if (i == 2) {
 0058 80910000          lds R24,L3
 005C 8230              cpi R24,2
 005E 09F4              brne L6
 0060                   .dbline 64
 0060                   .dbline 65
 0060           ;               PORTB &= ~(1 << 1);
 0060 C198              cbi 0x18,1
 0062                   .dbline 66
 0062           ;               }
 0062           L6:
 0062                   .dbline 67
 0062           ;       if (i == 1) {
 0062 80910000          lds R24,L3
 0066 8130              cpi R24,1
 0068 09F4              brne L8
 006A                   .dbline 67
 006A                   .dbline 68
 006A           ;               PORTB &= ~(1 << 0);
 006A C098              cbi 0x18,0
 006C                   .dbline 69
 006C           ;               }
 006C           L8:
 006C                   .dbline 70
 006C           ;       if (i == 0) {
 006C 20900000          lds R2,L3
 0070 2220              tst R2
 0072 09F4              brne L10
 0074                   .dbline 70
 0074                   .dbline 71
 0074           ;               PORTB &= ~(1 << 3);
 0074 C398              cbi 0x18,3
 0076                   .dbline 72
 0076           ;               }
 0076           L10:
 0076                   .dbline 74
 0076           ;       
 0076           ;       temp = led_buf[i] % 16;         /**/
 0076 80E0              ldi R24,<_led_buf
 0078 90E0              ldi R25,>_led_buf
 007A E0910000          lds R30,L3
 007E FF27              clr R31
 0080 E80F              add R30,R24
 0082 F91F              adc R31,R25
 0084 0081              ldd R16,z+0
 0086 10E1              ldi R17,16
 0088 0E940000          xcall mod8u
 008C 402F              mov R20,R16
 008E                   .dbline 75
 008E           ;       temp = disp[temp];                      /**/
 008E 80E0              ldi R24,<_disp
 0090 90E0              ldi R25,>_disp
 0092 E42F              mov R30,R20
 0094 FF27              clr R31
 0096 E80F              add R30,R24
 0098 F91F              adc R31,R25
 009A 4081              ldd R20,z+0
 009C                   .dbline 76
 009C           ;       SPDR = temp;
 009C 4FB9              out 0xf,R20
 009E                   .dbline 78
 009E           ; 
 009E           ;       if (i > 3) {
 009E 83E0              ldi R24,3
 00A0 20900000          lds R2,L3
 00A4 8215              cp R24,R2
 00A6 20F4              brsh L12
 00A8                   .dbline 78
 00A8                   .dbline 79
 00A8           ;               i = 0;
 00A8 2224              clr R2
 00AA 20920000          sts L3,R2
 00AE                   .dbline 80
 00AE           ;               }
 00AE 05C0              xjmp L13
 00B0           L12:
 00B0                   .dbline 81
 00B0                   .dbline 82
 00B0 80910000          lds R24,L3
 00B4 8F5F              subi R24,255    ; addi 1
 00B6 80930000          sts L3,R24
 00BA                   .dbline 83
 00BA           L13:
 00BA                   .dbline -2
 00BA           L2:
 00BA 0E940000          xcall pop_gset1
 00BE 2990              ld R2,y+
 00C0 2FBE              out 0x3f,R2
 00C2 F991              ld R31,y+
 00C4 E991              ld R30,y+
 00C6 9991              ld R25,y+
 00C8 8991              ld R24,y+
 00CA 1991              ld R17,y+
 00CC 0991              ld R16,y+
 00CE 2990              ld R2,y+
 00D0                   .dbline 0 ; func end
 00D0 1895              reti
 00D2                   .dbsym r temp 20 c
 00D2                   .dbend

⌨️ 快捷键说明

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