📄 afa-005i.lst
字号:
__start:
__text_start:
0035 E5CF LDI R28,0x5F
0036 E0D4 LDI R29,4
0037 BFCD OUT 0x3D,R28
0038 BFDE OUT 0x3E,R29
0039 51C0 SUBI R28,0x10
003A 40D0 SBCI R29,0
003B EA0A LDI R16,0xAA
003C 8308 STD Y+0,R16
003D 2400 CLR R0
003E E7E5 LDI R30,0x75
003F E0F0 LDI R31,0
0040 E010 LDI R17,0
0041 37E6 CPI R30,0x76
0042 07F1 CPC R31,R17
0043 F011 BEQ 0x0046
0044 9201 ST R0,Z+
0045 CFFB RJMP 0x0041
0046 8300 STD Z+0,R16
0047 E5E4 LDI R30,0x54
0048 E0F0 LDI R31,0
0049 E6A0 LDI R26,0x60
004A E0B0 LDI R27,0
004B E010 LDI R17,0
004C 36E9 CPI R30,0x69
004D 07F1 CPC R31,R17
004E F021 BEQ 0x0053
004F 95C8 LPM
0050 9631 ADIW R30,1
0051 920D ST R0,X+
0052 CFF9 RJMP 0x004C
0053 940E0065 CALL _main
_exit:
0055 CFFF RJMP _exit
_delay_ms:
a --> R20
b --> R22
i --> R16
0056 940E011E CALL push_gset2
0058 E041 LDI R20,1
0059 C006 RJMP 0x0060
005A E061 LDI R22,1
005B C001 RJMP 0x005D
005C 9563 INC R22
005D 2366 TST R22
005E F7E9 BNE 0x005C
005F 9543 INC R20
0060 1740 CP R20,R16
0061 F3C0 BCS 0x005A
0062 940E0115 CALL pop_gset2
0064 9508 RET
_main:
i --> R20
0065 2744 CLR R20
0066 2422 CLR R2
0067 BA2A OUT 0x1A,R2
0068 EF8F LDI R24,0xFF
0069 BB8B OUT 0x1B,R24
006A BB87 OUT 0x17,R24
006B EF80 LDI R24,0xF0
006C BB88 OUT 0x18,R24
006D BA24 OUT 0x14,R2
006E EF8F LDI R24,0xFF
006F BB85 OUT 0x15,R24
0070 BA21 OUT 0x11,R2
0071 BB82 OUT 0x12,R24
0072 EC08 LDI R16,0xC8
0073 DFE2 RCALL _delay_ms
0074 940E0094 CALL _Disp_Init
0076 C01B RJMP 0x0092
0077 9543 INC R20
0078 E604 LDI R16,0x64
0079 DFDC RCALL _delay_ms
007A 2422 CLR R2
007B 92200073 STS led_buf+3,R2
007D E614 LDI R17,0x64
007E 2F04 MOV R16,R20
007F 940E00FF CALL div8u
0081 93000072 STS led_buf+2,R16
0083 E614 LDI R17,0x64
0084 2F04 MOV R16,R20
0085 940E00FD CALL mod8u
0087 E01A LDI R17,0xA
0088 940E00FF CALL div8u
008A 93000071 STS led_buf+1,R16
008C E01A LDI R17,0xA
008D 2F04 MOV R16,R20
008E 940E00FD CALL mod8u
0090 93000070 STS led_buf,R16
0092 CFE4 RJMP 0x0077
0093 9508 RET
FILE: E:\ICCAVR\project\AVRMEG~2\icc\005-LED4\disp_2.c
(0001) /*
(0002) 模块说明:
(0003)
(0004) LED数码管中断动态显示程序。
(0005) 1、程序通过SPI接口输出数据到HC595芯片驱动LED数据管简单显示。
(0006) 2、动态调度由片内定时器1中断产生,中断周期为5mS。
(0007) 3、内部1 M晶振,程序采用单任务方式,软件延时。
(0008) 4、此模块文件为使用文件,可直接用于项目中。
(0009) www.iccavr.com
(0010) */
(0011) #include "iom16v.h"
(0012) #include <macros.h>
(0013)
(0014) unsigned char disp[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0};
(0015)
(0016) unsigned char led_buf[] = {1, 2, 3, 4, 0}; /*显示信息*/
(0017)
(0018) /*------------------------------------------------------------------*-
(0019)
(0020) Disp_Init()
(0021) 显示初始化
(0022)
(0023) -*------------------------------------------------------------------*/
(0024) void Disp_Init(void) {
(0025)
(0026) /*初始化定时器*/
(0027) OCR1A = 625; /*计数周期为5mS,F=1M*/
_Disp_Init:
0094 E781 LDI R24,0x71
0095 E092 LDI R25,2
0096 BD9B OUT 0x2B,R25
0097 BD8A OUT 0x2A,R24
(0028) TIMSK |= (1 << OCIE1A); /*比较中断A允许*/
0098 B789 IN R24,0x39
0099 6180 ORI R24,0x10
009A BF89 OUT 0x39,R24
(0029) SREG = 0x80;
009B E880 LDI R24,0x80
009C BF8F OUT 0x3F,R24
(0030) TCCR1A = 0x00;
009D 2422 CLR R2
009E BC2F OUT 0x2F,R2
(0031) TCCR1B = 0x08; /*定时器工作在CTC计数器模式*/
009F E088 LDI R24,0x8
00A0 BD8E OUT 0x2E,R24
(0032) TCCR1B |= 0x02; /*设置定时器的分频值为8分频*/
00A1 B58E IN R24,0x2E
00A2 6082 ORI R24,2
00A3 BD8E OUT 0x2E,R24
(0033)
(0034) /*SPI接口初始化*/
(0035) DDRB |= (1<<PB5) | (1<<PB7); /* 设置MOSI 和SCK 为输出,其他为输入 */
00A4 B387 IN R24,0x17
00A5 6A80 ORI R24,0xA0
00A6 BB87 OUT 0x17,R24
(0036) SPCR = (1<<SPE) | (1<<MSTR)
00A7 E583 LDI R24,0x53
00A8 B98D OUT 0x0D,R24
(0037) | (1<<SPR1) | (1<<SPR0); /* 使能SPI 主机模式,时钟为fck/128 */
(0038)
(0039) /*中断使能*/
(0040) SEI();
00A9 9478 BSET 7
00AA 9508 RET
_Int_TCCR1A:
temp --> R20
00AB 922A ST R2,-Y
00AC 930A ST R16,-Y
00AD 931A ST R17,-Y
00AE 938A ST R24,-Y
00AF 939A ST R25,-Y
00B0 93EA ST R30,-Y
00B1 93FA ST R31,-Y
00B2 B62F IN R2,0x3F
00B3 922A ST R2,-Y
00B4 940E0120 CALL push_gset1
(0041) }
(0042)
(0043) /*------------------------------------------------------------------*-
(0044)
(0045) Int_TCCR1A()
(0046) LED数码管动态显示函数
(0047)
(0048) 定时器'T1',A组比较中断产生5mS周期性中断
(0049) 在中断里刷新显示
(0050)
(0051) -*------------------------------------------------------------------*/
(0052) #pragma interrupt_handler Int_TCCR1A: 7
(0053) void Int_TCCR1A(void) {
(0054)
(0055) unsigned char temp;
(0056) static unsigned char i;
(0057)
(0058) PORTB &= ~(1 << 4); /*准备锁存*/
00B6 98C4 CBI 0x18,4
(0059) PORTB |= 0x0F;
00B7 B388 IN R24,0x18
00B8 608F ORI R24,0xF
00B9 BB88 OUT 0x18,R24
(0060) PORTB |= (1 << 4); /*锁存数据*/
00BA 9AC4 SBI 0x18,4
(0061) if (i == 3) {
00BB 91800075 LDS R24,i
00BD 3083 CPI R24,3
00BE F409 BNE 0x00C0
(0062) PORTB &= ~(1 << 2);
00BF 98C2 CBI 0x18,2
(0063) }
(0064) if (i == 2) {
00C0 91800075 LDS R24,i
00C2 3082 CPI R24,2
00C3 F409 BNE 0x00C5
(0065) PORTB &= ~(1 << 1);
00C4 98C1 CBI 0x18,1
(0066) }
(0067) if (i == 1) {
00C5 91800075 LDS R24,i
00C7 3081 CPI R24,1
00C8 F409 BNE 0x00CA
(0068) PORTB &= ~(1 << 0);
00C9 98C0 CBI 0x18,0
(0069) }
(0070) if (i == 0) {
00CA 90200075 LDS R2,i
00CC 2022 TST R2
00CD F409 BNE 0x00CF
(0071) PORTB &= ~(1 << 3);
00CE 98C3 CBI 0x18,3
(0072) }
(0073)
(0074) temp = led_buf[i] % 16; /**/
00CF E780 LDI R24,0x70
00D0 E090 LDI R25,0
00D1 91E00075 LDS R30,i
00D3 27FF CLR R31
00D4 0FE8 ADD R30,R24
00D5 1FF9 ADC R31,R25
00D6 8100 LDD R16,Z+0
00D7 E110 LDI R17,0x10
00D8 940E00FD CALL mod8u
00DA 2F40 MOV R20,R16
(0075) temp = disp[temp]; /**/
00DB E680 LDI R24,0x60
00DC E090 LDI R25,0
00DD 2FE4 MOV R30,R20
00DE 27FF CLR R31
00DF 0FE8 ADD R30,R24
00E0 1FF9 ADC R31,R25
00E1 8140 LDD R20,Z+0
(0076) SPDR = temp;
00E2 B94F OUT 0x0F,R20
(0077)
(0078) if (i > 3) {
00E3 E083 LDI R24,3
00E4 90200075 LDS R2,i
00E6 1582 CP R24,R2
00E7 F420 BCC 0x00EC
(0079) i = 0;
00E8 2422 CLR R2
00E9 92200075 STS i,R2
(0080) }
00EB C005 RJMP 0x00F1
(0081) else {
(0082) i ++;
00EC 91800075 LDS R24,i
00EE 5F8F SUBI R24,0xFF
00EF 93800075 STS i,R24
(0083) }
FILE: <library>
00F1 940E0123 CALL pop_gset1
00F3 9029 LD R2,Y+
00F4 BE2F OUT 0x3F,R2
00F5 91F9 LD R31,Y+
00F6 91E9 LD R30,Y+
00F7 9199 LD R25,Y+
00F8 9189 LD R24,Y+
00F9 9119 LD R17,Y+
00FA 9109 LD R16,Y+
00FB 9029 LD R2,Y+
00FC 9518 RETI
mod8u:
00FD 9468 BSET 6
00FE C001 RJMP xdiv8u
div8u:
00FF 94E8 BCLR 6
xdiv8u:
0100 932A ST R18,-Y
0101 92FA ST R15,-Y
0102 92EA ST R14,-Y
0103 24FF CLR R15
0104 24EE CLR R14
0105 E120 LDI R18,0x10
0106 0F00 LSL R16
0107 1CFF ROL R15
0108 1CEE ROL R14
0109 16E1 CP R14,R17
010A F010 BCS 0x010D
010B 1AE1 SUB R14,R17
010C 9503 INC R16
010D 952A DEC R18
010E F7B9 BNE 0x0106
010F F40E BRTC 0x0111
0110 2D0E MOV R16,R14
0111 90E9 LD R14,Y+
0112 90F9 LD R15,Y+
0113 9129 LD R18,Y+
0114 9508 RET
pop_gset2:
0115 E0E2 LDI R30,2
0116 940C0124 JMP pop
push_gset5:
0118 92FA ST R15,-Y
0119 92EA ST R14,-Y
push_gset4:
011A 92DA ST R13,-Y
011B 92CA ST R12,-Y
push_gset3:
011C 92BA ST R11,-Y
011D 92AA ST R10,-Y
push_gset2:
011E 937A ST R23,-Y
011F 936A ST R22,-Y
push_gset1:
0120 935A ST R21,-Y
0121 934A ST R20,-Y
0122 9508 RET
pop_gset1:
0123 E0E1 LDI R30,1
pop:
0124 9149 LD R20,Y+
0125 9159 LD R21,Y+
0126 FDE0 SBRC R30,0
0127 9508 RET
0128 9169 LD R22,Y+
0129 9179 LD R23,Y+
012A FDE1 SBRC R30,1
012B 9508 RET
012C 90A9 LD R10,Y+
012D 90B9 LD R11,Y+
012E FDE2 SBRC R30,2
012F 9508 RET
0130 90C9 LD R12,Y+
0131 90D9 LD R13,Y+
0132 FDE3 SBRC R30,3
0133 9508 RET
0134 90E9 LD R14,Y+
0135 90F9 LD R15,Y+
0136 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -