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

📄 led4.lis

📁 avr单片机atmage16驱动小灯的一些例程 并且包括一些收发数据的程序利用usb口
💻 LIS
字号:
                        .module LED4.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 8883              .byte 136,131
                        .area data(ram, con, rel)
 000C                   .blkb 2
                        .area idata
 000C C6A1              .byte 198,161
                        .area data(ram, con, rel)
 000E                   .blkb 2
                        .area idata
 000E 868E              .byte 134,142
                        .area data(ram, con, rel)
 0010                   .dbfile E:\ICCAVR\project\AVRMEG~2\icc\030-DS18B20-LED4\LED4.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\030-DS18B20-LED4\LED4.C
 0012                   .blkb 2
                        .area idata
 0012 0304              .byte 3,4
                        .area data(ram, con, rel)
 0014                   .dbfile E:\ICCAVR\project\AVRMEG~2\icc\030-DS18B20-LED4\LED4.C
 0014                   .blkb 1
                        .area idata
 0014 08                .byte 8
                        .area data(ram, con, rel)
 0015                   .dbfile E:\ICCAVR\project\AVRMEG~2\icc\030-DS18B20-LED4\LED4.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\030-DS18B20-LED4\LED4.C
 0000                   .dbfunc e led4_init _led4_init fV
                        .even
 0000           _led4_init::
 0000                   .dbline -1
 0000                   .dbline 28
 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,0x88,0x83,0xC6,0xA1,0x86,0x8E};
 0000           ; 
 0000           ; /*
 0000           ; 前4位为显示数值。
 0000           ; 最后一位为小数点显示位置。
 0000           ; */
 0000           ; unsigned char led_buf[] = {1, 2, 3, 4, 8};                    /*显示信息*/
 0000           ; 
 0000           ; /*------------------------------------------------------------------*-
 0000           ; 
 0000           ;        Disp_Init()
 0000           ;        显示初始化
 0000           ; 
 0000           ; -*------------------------------------------------------------------*/
 0000           ; void led4_init(void) {
 0000                   .dbline 31
 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 32
 0008           ;       TIMSK |= (1 << OCIE1A);                         /*比较中断A允许*/
 0008 89B7              in R24,0x39
 000A 8061              ori R24,16
 000C 89BF              out 0x39,R24
 000E                   .dbline 33
 000E           ;       SREG = 0x80;
 000E 80E8              ldi R24,128
 0010 8FBF              out 0x3f,R24
 0012                   .dbline 34
 0012           ;       TCCR1A = 0x00;
 0012 2224              clr R2
 0014 2FBC              out 0x2f,R2
 0016                   .dbline 35
 0016           ;       TCCR1B = 0x08;                                          /*定时器工作在CTC计数器模式*/
 0016 88E0              ldi R24,8
 0018 8EBD              out 0x2e,R24
 001A                   .dbline 36
 001A           ;       TCCR1B |= 0x02;                                         /*设置定时器的分频值为8分频*/
 001A 8EB5              in R24,0x2e
 001C 8260              ori R24,2
 001E 8EBD              out 0x2e,R24
 0020                   .dbline 39
 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 40
 0026           ;       SPCR = (1<<SPE) | (1<<MSTR)
 0026 83E5              ldi R24,83
 0028 8DB9              out 0xd,R24
 002A                   .dbline 44
 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\030-DS18B20-LED4\LED4.C
                        .area bss(ram, con, rel)
 0000                   .dbfile E:\ICCAVR\project\AVRMEG~2\icc\030-DS18B20-LED4\LED4.C
 0000           L3:
 0000                   .blkb 1
                        .area text(rom, con, rel)
 002E                   .dbfile E:\ICCAVR\project\AVRMEG~2\icc\030-DS18B20-LED4\LED4.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 3A92              st -y,R3
 0032 0A93              st -y,R16
 0034 1A93              st -y,R17
 0036 8A93              st -y,R24
 0038 9A93              st -y,R25
 003A EA93              st -y,R30
 003C FA93              st -y,R31
 003E 2FB6              in R2,0x3f
 0040 2A92              st -y,R2
 0042 0E940000          xcall push_gset1
 0046                   .dbline -1
 0046                   .dbline 57
 0046           ; }
 0046           ; 
 0046           ; /*------------------------------------------------------------------*-
 0046           ;   
 0046           ;       Int_TCCR1A()
 0046           ;       LED数码管动态显示函数
 0046           ; 
 0046           ;       定时器'T1',A组比较中断产生5mS周期性中断
 0046           ;       在中断里刷新显示
 0046           ;  
 0046           ; -*------------------------------------------------------------------*/
 0046           ; #pragma interrupt_handler Int_TCCR1A: 7
 0046           ; void Int_TCCR1A(void) {
 0046                   .dbline 62
 0046           ; 
 0046           ;       unsigned char temp;
 0046           ;       static unsigned char i;
 0046           ; 
 0046           ;       PORTB &= ~(1 << 4);                                     /*准备锁存*/
 0046 C498              cbi 0x18,4
 0048                   .dbline 63
 0048           ;       PORTB |= 0x0F;
 0048 88B3              in R24,0x18
 004A 8F60              ori R24,15
 004C 88BB              out 0x18,R24
 004E                   .dbline 64
 004E           ;       PORTB |= (1 << 4);                                      /*锁存数据*/
 004E C49A              sbi 0x18,4
 0050                   .dbline 65
 0050           ;       if (i == 3) {                                           /*显示位*/
 0050 80910000          lds R24,L3
 0054 8330              cpi R24,3
 0056 09F4              brne L4
 0058                   .dbline 65
 0058                   .dbline 66
 0058           ;               PORTB &= ~(1 << 2);
 0058 C298              cbi 0x18,2
 005A                   .dbline 67
 005A           ;               }
 005A           L4:
 005A                   .dbline 68
 005A           ;       if (i == 2) {
 005A 80910000          lds R24,L3
 005E 8230              cpi R24,2
 0060 09F4              brne L6
 0062                   .dbline 68
 0062                   .dbline 69
 0062           ;               PORTB &= ~(1 << 1);
 0062 C198              cbi 0x18,1
 0064                   .dbline 70
 0064           ;               }
 0064           L6:
 0064                   .dbline 71
 0064           ;       if (i == 1) {
 0064 80910000          lds R24,L3
 0068 8130              cpi R24,1
 006A 09F4              brne L8
 006C                   .dbline 71
 006C                   .dbline 72
 006C           ;               PORTB &= ~(1 << 0);
 006C C098              cbi 0x18,0
 006E                   .dbline 73
 006E           ;               }
 006E           L8:
 006E                   .dbline 74
 006E           ;       if (i == 0) {
 006E 20900000          lds R2,L3
 0072 2220              tst R2
 0074 09F4              brne L10
 0076                   .dbline 74
 0076                   .dbline 75
 0076           ;               PORTB &= ~(1 << 3);
 0076 C398              cbi 0x18,3
 0078                   .dbline 76
 0078           ;               }
 0078           L10:
 0078                   .dbline 78
 0078           ;       
 0078           ;       temp = led_buf[i] % 16;
 0078 80E0              ldi R24,<_led_buf
 007A 90E0              ldi R25,>_led_buf
 007C E0910000          lds R30,L3
 0080 FF27              clr R31
 0082 E80F              add R30,R24
 0084 F91F              adc R31,R25
 0086 0081              ldd R16,z+0
 0088 10E1              ldi R17,16
 008A 0E940000          xcall mod8u
 008E 402F              mov R20,R16
 0090                   .dbline 79
 0090           ;       temp = disp[temp];
 0090 80E0              ldi R24,<_disp
 0092 90E0              ldi R25,>_disp
 0094 E42F              mov R30,R20
 0096 FF27              clr R31
 0098 E80F              add R30,R24
 009A F91F              adc R31,R25
 009C 4081              ldd R20,z+0
 009E                   .dbline 80
 009E           ;       if (led_buf[4] == i) {                          /*显示小数点*/
 009E 20900000          lds R2,L3
 00A2 30901400          lds R3,_led_buf+4
 00A6 3214              cp R3,R2
 00A8 21F4              brne L12
 00AA                   .dbline 80
 00AA                   .dbline 81
 00AA           ;               SPDR = temp & 0x7F;
 00AA 842F              mov R24,R20
 00AC 8F77              andi R24,127
 00AE 8FB9              out 0xf,R24
 00B0                   .dbline 82
 00B0           ;               }
 00B0 01C0              xjmp L13
 00B2           L12:
 00B2                   .dbline 83
 00B2           ;       else {
 00B2                   .dbline 84
 00B2           ;               SPDR = temp;
 00B2 4FB9              out 0xf,R20
 00B4                   .dbline 85
 00B4           ;               }
 00B4           L13:
 00B4                   .dbline 87
 00B4 80910000          lds R24,L3
 00B8 8F5F              subi R24,255    ; addi 1
 00BA 80930000          sts L3,R24
 00BE                   .dbline 88
 00BE 83E0              ldi R24,3
 00C0 20900000          lds R2,L3
 00C4 8215              cp R24,R2
 00C6 18F4              brsh L15
 00C8                   .dbline 88
 00C8                   .dbline 89
 00C8 2224              clr R2
 00CA 20920000          sts L3,R2
 00CE                   .dbline 90
 00CE           L15:
 00CE                   .dbline -2
 00CE           L2:
 00CE 0E940000          xcall pop_gset1
 00D2 2990              ld R2,y+
 00D4 2FBE              out 0x3f,R2
 00D6 F991              ld R31,y+
 00D8 E991              ld R30,y+
 00DA 9991              ld R25,y+
 00DC 8991              ld R24,y+
 00DE 1991              ld R17,y+
 00E0 0991              ld R16,y+
 00E2 3990              ld R3,y+
 00E4 2990              ld R2,y+
 00E6                   .dbline 0 ; func end
 00E6 1895              reti
 00E8                   .dbsym r temp 20 c
 00E8                   .dbend

⌨️ 快捷键说明

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