📄 test.lst
字号:
__text_start:
__start:
31 E5CF LDI R28,0x5F
32 E0D4 LDI R29,4
33 BFCD OUT 0x3D,R28
34 BFDE OUT 0x3E,R29
35 51C0 SUBI R28,0x10
36 40D0 SBCI R29,0
37 EA0A LDI R16,0xAA
38 8308 STD Y+0,R16
39 2400 CLR R0
3A E6EA LDI R30,0x6A
3B E0F0 LDI R31,0
3C E010 LDI R17,0
3D 36EA CPI R30,0x6A
3E 07F1 CPC R31,R17
3F F011 BEQ 0x0042
40 9201 ST R0,Z+
41 CFFB RJMP 0x003D
42 8300 STD Z+0,R16
43 E5E8 LDI R30,0x58
44 E0F0 LDI R31,0
45 E6A0 LDI R26,0x60
46 E0B0 LDI R27,0
47 E010 LDI R17,0
48 E000 LDI R16,0
49 BF0B OUT 0x3B,R16
4A 36E2 CPI R30,0x62
4B 07F1 CPC R31,R17
4C F021 BEQ 0x0051
4D 95C8 LPM
4E 9631 ADIW R30,1
4F 920D ST R0,X+
50 CFF9 RJMP 0x004A
51 D06B RCALL _main
52 0000 NOP
_exit:
53 CFFF RJMP _exit
FILE: D:\mega16_32实验板资料\ICCAVR源程序\164\数码管\delay.h
(0001) /**********延时函数*****************/
(0002) /*-----------------------------------------------
(0003) delay_us :1us延时函数
(0004) ------------------------------------------------*/
(0005) void delay_1us(void)
(0006) {
(0007) asm("nop");
_delay_1us:
54 0000 NOP
55 9508 RET
_delay_us:
t --> R20
56 934A ST R20,-Y
57 935A ST R21,-Y
58 01A8 MOVW R20,R16
(0008) }
(0009) /*-----------------------------------------------
(0010) delay_nus :长延时函数
(0011) 输入参数: t :延时时间 us
(0012) ------------------------------------------------*/
(0013) void delay_us(unsigned int t)
(0014) {
59 C001 RJMP 0x005B
(0015) while(t--)
(0016) delay_1us();
5A DFF9 RCALL _delay_1us
5B 011A MOVW R2,R20
5C 5041 SUBI R20,1
5D 4050 SBCI R21,0
5E 2022 TST R2
5F F7D1 BNE 0x005A
60 2033 TST R3
61 F7C1 BNE 0x005A
62 9159 LD R21,Y+
63 9149 LD R20,Y+
64 9508 RET
(0017) }
(0018) /*----------------------------------------------
(0019) delay_ms :1ms延时函数
(0020) -----------------------------------------------*/
(0021) void delay_1ms(void)
(0022) {
(0023) unsigned int i;
(0024) for(i=0;i<1140;i++);
_delay_1ms:
i --> R16
65 2700 CLR R16
66 2711 CLR R17
67 C002 RJMP 0x006A
68 5F0F SUBI R16,0xFF
69 4F1F SBCI R17,0xFF
6A 3704 CPI R16,0x74
6B E0E4 LDI R30,4
6C 071E CPC R17,R30
6D F3D0 BCS 0x0068
6E 9508 RET
_delay_ms:
t --> R20
6F 934A ST R20,-Y
70 935A ST R21,-Y
71 01A8 MOVW R20,R16
(0025) }
(0026) /*----------------------------------------------
(0027) delay_nms :长延时函数
(0028) 输入参数: t :延时时间 ms
(0029) -----------------------------------------------*/
(0030) void delay_ms(unsigned int t)
(0031) {
72 C001 RJMP 0x0074
(0032) while(t--)
(0033) delay_1ms();
73 DFF1 RCALL _delay_1ms
74 011A MOVW R2,R20
75 5041 SUBI R20,1
76 4050 SBCI R21,0
77 2022 TST R2
78 F7D1 BNE 0x0073
79 2033 TST R3
7A F7C1 BNE 0x0073
7B 9159 LD R21,Y+
7C 9149 LD R20,Y+
7D 9508 RET
FILE: D:\mega16_32实验板资料\ICCAVR源程序\164\数码管\164.h
(0001) //定义LS164管脚和led控制脚
(0002) #define DDR_CLK DDRA
(0003) #define DDR_DATA DDRA
(0004) #define DDR_CLEAR DDRA
(0005) #define DDR_SEL DDRC
(0006) #define PORT_CLK PORTA
(0007) #define PORT_DATA PORTA
(0008) #define PORT_CLEAR PORTA
(0009) #define PORT_SEL PORTC
(0010) #define CLK PA2
(0011) #define DATA PA4
(0012) #define CLEAR PA3
(0013) #define SEL 0x3C
(0014)
(0015) unsigned char Table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
(0016)
(0017) void Init_164()
(0018) {
(0019) DDR_CLK|=(1<<CLK); //164的时钟,数据,清零
_Init_164:
7E 9AD2 SBI 0x1A,2
(0020) DDR_DATA|=(1<<DATA);
7F 9AD4 SBI 0x1A,4
(0021) DDR_CLEAR|=(1<<CLEAR);
80 9AD3 SBI 0x1A,3
(0022) DDR_SEL|=SEL; //4位数码管选通端
81 B384 IN R24,0x14
82 638C ORI R24,0x3C
83 BB84 OUT 0x14,R24
84 9508 RET
(0023) }
(0024)
(0025) void Clear_164()
(0026) {
(0027) PORT_CLEAR|=(1<<CLEAR);
_Clear_164:
85 9ADB SBI 0x1B,3
86 9508 RET
_write_164:
n --> R20
i --> R16
87 934A ST R20,-Y
(0028) }
(0029)
(0030) void write_164(unsigned char i)
(0031) {
(0032) char n;
(0033) for(n=8;n>0;n--)
88 E048 LDI R20,0x8
89 C00B RJMP 0x0095
(0034) {
(0035) if(i&0x80) PORT_DATA|=(1<<DATA);
8A FF07 SBRS R16,7
8B C002 RJMP 0x008E
8C 9ADC SBI 0x1B,4
8D C001 RJMP 0x008F
(0036) else PORT_DATA&=~(1<<DATA);
8E 98DC CBI 0x1B,4
(0037) NOP();
8F 0000 NOP
(0038) PORT_CLK|=(1<<CLK);
90 9ADA SBI 0x1B,2
(0039) NOP();
91 0000 NOP
(0040) PORT_CLK&=~(1<<CLK);
92 98DA CBI 0x1B,2
(0041) i=(i<<1);
93 0F00 LSL R16
94 954A DEC R20
95 E080 LDI R24,0
96 1784 CP R24,R20
97 F390 BCS 0x008A
98 9149 LD R20,Y+
99 9508 RET
_write_LED:
sel --> R22
i --> R20
p --> R10
9A D039 RCALL push_xgsetF00C
9B 0000 NOP
9C 0158 MOVW R10,R16
(0042) }
(0043) }
(0044) void write_LED(unsigned char *p)
(0045) {
(0046) unsigned char i,sel=0x04;
9D E064 LDI R22,4
(0047)
(0048) for(i=0;i<4;i++)
9E 2744 CLR R20
9F C019 RJMP 0x00B9
(0049) {
(0050) write_164(Table[p[i]]);
A0 2FE4 MOV R30,R20
A1 27FF CLR R31
A2 0DEA ADD R30,R10
A3 1DFB ADC R31,R11
A4 81E0 LDD R30,Z+0
A5 27FF CLR R31
A6 E680 LDI R24,0x60
A7 E090 LDI R25,0
A8 0FE8 ADD R30,R24
A9 1FF9 ADC R31,R25
AA 8100 LDD R16,Z+0
AB DFDB RCALL _write_164
(0051) PORT_SEL&=(~sel);
AC 2E26 MOV R2,R22
AD 9420 COM R2
AE B235 IN R3,0x15
AF 2032 AND R3,R2
B0 BA35 OUT 0x15,R3
(0052) delay_ms(2);
B1 E002 LDI R16,2
B2 E010 LDI R17,0
B3 DFBB RCALL _delay_ms
(0053) PORT_SEL|=SEL;
B4 B385 IN R24,0x15
B5 638C ORI R24,0x3C
B6 BB85 OUT 0x15,R24
(0054) sel=sel<<1;
B7 0F66 LSL R22
B8 9543 INC R20
B9 3044 CPI R20,4
BA F328 BCS 0x00A0
BB C01F RJMP pop_xgsetF00C
BC 0000 NOP
_main:
Date --> Y,+0
BD 9724 SBIW R28,4
FILE: D:\mega16_32实验板资料\ICCAVR源程序\164\数码管\164_test.c
(0001) //ICC-AVR application builder : 2008-11-11 16:14:49
(0002) // Target : M16
(0003) // Crystal: 8.0000Mhz
(0004)
(0005) #include <iom16v.h>
(0006) #include <macros.h>
(0007)
(0008) #include "delay.h"
(0009) #include "164.h"
(0010)
(0011) void main(void)
(0012) {
(0013) unsigned char Date[4]={1,2,3,4};
BE E584 LDI R24,0x54
BF E090 LDI R25,0
C0 01FE MOVW R30,R28
C1 E004 LDI R16,4
C2 E010 LDI R17,0
C3 93FA ST R31,-Y
C4 93EA ST R30,-Y
C5 939A ST R25,-Y
C6 938A ST R24,-Y
C7 D01A RCALL asgncblk
C8 0000 NOP
(0014) delay_ms(20);
C9 E104 LDI R16,0x14
CA E010 LDI R17,0
CB DFA3 RCALL _delay_ms
(0015) Init_164();
CC DFB1 RCALL _Init_164
(0016) Clear_164();
CD DFB7 RCALL _Clear_164
CE C002 RJMP 0x00D1
(0017) while(1)
(0018) write_LED(Date); //显示1234*/
FILE: <library>
CF 018E MOVW R16,R28
D0 DFC9 RCALL _write_LED
D1 CFFD RJMP 0x00CF
D2 9624 ADIW R28,4
D3 9508 RET
push_xgsetF00C:
D4 937A ST R23,-Y
D5 936A ST R22,-Y
D6 935A ST R21,-Y
D7 934A ST R20,-Y
D8 92BA ST R11,-Y
D9 92AA ST R10,-Y
DA 9508 RET
pop_xgsetF00C:
DB 90A9 LD R10,Y+
DC 90B9 LD R11,Y+
DD 9149 LD R20,Y+
DE 9159 LD R21,Y+
DF 9169 LD R22,Y+
E0 9179 LD R23,Y+
E1 9508 RET
asgncblk:
E2 93AA ST R26,-Y
E3 93BA ST R27,-Y
E4 93EA ST R30,-Y
E5 93FA ST R31,-Y
E6 920A ST R0,-Y
E7 81AF LDD R26,Y+7
E8 85B8 LDD R27,Y+8
E9 81ED LDD R30,Y+5
EA 81FE LDD R31,Y+6
EB 3000 CPI R16,0
EC 0701 CPC R16,R17
ED F031 BEQ 0x00F4
EE 95C8 LPM
EF 920D ST R0,X+
F0 9631 ADIW R30,1
F1 5001 SUBI R16,1
F2 4010 SBCI R17,0
F3 CFF7 RJMP 0x00EB
F4 9009 LD R0,Y+
F5 91F9 LD R31,Y+
F6 91E9 LD R30,Y+
F7 91B9 LD R27,Y+
F8 91A9 LD R26,Y+
F9 9624 ADIW R28,4
FA 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -