📄 disp_2.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 + -