📄 disp.lst
字号:
1 .file "disp.c"
2 .arch atmega16
3 __SREG__ = 0x3f
4 __SP_H__ = 0x3e
5 __SP_L__ = 0x3d
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
11 .text
12 .Ltext0:
79 .global NumTab
80 .data
83 NumTab:
84 0000 C0 .byte -64
85 0001 F9 .byte -7
86 0002 A4 .byte -92
87 0003 B0 .byte -80
88 0004 99 .byte -103
89 0005 92 .byte -110
90 0006 82 .byte -126
91 0007 F8 .byte -8
92 0008 80 .byte -128
93 0009 90 .byte -112
94 000a 88 .byte -120
95 000b 83 .byte -125
96 000c C6 .byte -58
97 000d A1 .byte -95
98 000e 86 .byte -122
99 000f 8E .byte -114
100 0010 7F .byte 127
101 0011 FF .byte -1
102 0012 00 .skip 1,0
103 .text
106 .global DispData
108 DispData:
1:disp.c **** #include <inttypes.h>
2:disp.c **** #include <util/delay.h>
3:disp.c **** #include <avr/io.h>
4:disp.c **** #include <avr/interrupt.h>
5:disp.c **** #include <stdio.h>
6:disp.c **** //#include "type.h"
7:disp.c **** #include "disp.h"
8:disp.c **** /*
9:disp.c **** * 74HC138 INPUT A B C : PA5 PA6 PA7
10:disp.c **** * Data PORT: 74HC595的ST对应NCS :PA2
11:disp.c **** * SH对应SCK :PA3
12:disp.c **** * DS对应MOSI:PA4
13:disp.c **** *
14:disp.c **** */
15:disp.c **** #define DispSel(x) (PORTA=((PORTA&0x1f)|(x<<5)))
16:disp.c ****
17:disp.c **** #define NCS_PIN PA2
18:disp.c **** #define NCS_DDR DDRA
19:disp.c **** #define NCS_PORT PORTA
20:disp.c ****
21:disp.c **** #define SCK_PIN PA3
22:disp.c **** #define SCK_DDR DDRA
23:disp.c **** #define SCK_PORT PORTA
24:disp.c ****
25:disp.c **** #define MOSI_PIN PA4
26:disp.c **** #define MOSI_DDR DDRA
27:disp.c **** #define MOSI_PORT PORTA
28:disp.c ****
29:disp.c ****
30:disp.c **** #define NCS_SET (NCS_PORT|=(1<<NCS_PIN))
31:disp.c **** #define NCS_CLR (NCS_PORT&=~(1<<NCS_PIN))
32:disp.c ****
33:disp.c **** #define SCK_SET (SCK_PORT|=(1<<SCK_PIN))
34:disp.c **** #define SCK_CLR (SCK_PORT&=~(1<<SCK_PIN))
35:disp.c ****
36:disp.c **** #define MOSI_SET (MOSI_PORT|=(1<<MOSI_PIN))
37:disp.c **** #define MOSI_CLR (MOSI_PORT&=~(1<<MOSI_PIN))
38:disp.c ****
39:disp.c **** //四位共阳数码管码
40:disp.c **** //PB 0 1 2 3 4 5 6 7
41:disp.c **** // a b c d e f g h
42:disp.c **** // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f
43:disp.c **** const uint8_t NumTab[19]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x8
44:disp.c **** //uint8_t DispBuf[8];
45:disp.c ****
46:disp.c **** /*
47:disp.c **** #define DispPortInit() do{\
48:disp.c **** NCS_DDR|=(1<<NCS_PIN);\
49:disp.c **** SCK_DDR|=(1<<SCK_PIN);\
50:disp.c **** MOSI_DDR|=(1<<MOSI_PIN);\
51:disp.c **** DispData(0xff);\
52:disp.c **** DDRA|=(1<<PA5)|(1<<PA6)|(1<<PA7);\
53:disp.c **** }while(0)
54:disp.c **** */
55:disp.c **** void DispData(uint8_t x)
56:disp.c **** {
110 .LM1:
111 /* prologue: frame size=2 */
112 0000 CF93 push r28
113 0002 DF93 push r29
114 0004 CDB7 in r28,__SP_L__
115 0006 DEB7 in r29,__SP_H__
116 0008 2297 sbiw r28,2
117 000a 0FB6 in __tmp_reg__,__SREG__
118 000c F894 cli
119 000e DEBF out __SP_H__,r29
120 0010 0FBE out __SREG__,__tmp_reg__
121 0012 CDBF out __SP_L__,r28
122 /* prologue end (size=10) */
123 0014 8983 std Y+1,r24
57:disp.c **** uint8_t i;
58:disp.c **** NCS_CLR;
125 .LM2:
126 0016 8091 3B00 lds r24,59
127 001a 8B7F andi r24,lo8(-5)
128 001c 8093 3B00 sts 59,r24
59:disp.c **** SCK_CLR;
130 .LM3:
131 0020 8091 3B00 lds r24,59
132 0024 877F andi r24,lo8(-9)
133 0026 8093 3B00 sts 59,r24
60:disp.c **** for(i=0;i<8;i++)
135 .LM4:
136 002a 1A82 std Y+2,__zero_reg__
137 .L2:
139 .LM5:
140 002c 8A81 ldd r24,Y+2
141 002e 8830 cpi r24,lo8(8)
142 0030 F8F4 brsh .L3
61:disp.c **** {
62:disp.c **** if(x&0x80) //一位一位数据通过MOSI(PA4)输出,先输出高位
144 .LM6:
145 0032 8981 ldd r24,Y+1
146 0034 8823 tst r24
147 0036 34F4 brge .L5
63:disp.c **** MOSI_SET;
149 .LM7:
150 0038 8091 3B00 lds r24,59
151 003c 8061 ori r24,lo8(16)
152 003e 8093 3B00 sts 59,r24
153 0042 05C0 rjmp .L6
154 .L5:
64:disp.c **** else MOSI_CLR;
156 .LM8:
157 0044 8091 3B00 lds r24,59
158 0048 8F7E andi r24,lo8(-17)
159 004a 8093 3B00 sts 59,r24
160 .L6:
65:disp.c **** SCK_SET; //上升沿有效,SCK对应74HC595的ST_CP,逐位移位输入,但Qn引脚不改变
162 .LM9:
163 004e 8091 3B00 lds r24,59
164 0052 8860 ori r24,lo8(8)
165 0054 8093 3B00 sts 59,r24
66:disp.c **** SCK_CLR;
167 .LM10:
168 0058 8091 3B00 lds r24,59
169 005c 877F andi r24,lo8(-9)
170 005e 8093 3B00 sts 59,r24
67:disp.c **** x<<=1;
172 .LM11:
173 0062 8981 ldd r24,Y+1
174 0064 880F lsl r24
175 0066 8983 std Y+1,r24
177 .LM12:
178 0068 8A81 ldd r24,Y+2
179 006a 8F5F subi r24,lo8(-(1))
180 006c 8A83 std Y+2,r24
181 006e DECF rjmp .L2
182 .L3:
68:disp.c **** }
69:disp.c **** NCS_SET; //上升沿有效,NSC对应74HC595的SH_CP,当8位数据均移入后,才改变Qn的引脚电平
184 .LM13:
185 0070 8091 3B00 lds r24,59
186 0074 8460 ori r24,lo8(4)
187 0076 8093 3B00 sts 59,r24
188 /* epilogue: frame size=2 */
189 007a 2296 adiw r28,2
190 007c 0FB6 in __tmp_reg__,__SREG__
191 007e F894 cli
192 0080 DEBF out __SP_H__,r29
193 0082 0FBE out __SREG__,__tmp_reg__
194 0084 CDBF out __SP_L__,r28
195 0086 DF91 pop r29
196 0088 CF91 pop r28
197 008a 0895 ret
198 /* epilogue end (size=9) */
199 /* function DispData size 70 (51) */
204 .Lscope0:
206 .global DispPortInit
208 DispPortInit:
70:disp.c **** }
71:disp.c ****
72:disp.c **** void DispPortInit(void)
73:disp.c **** {
210 .LM14:
211 /* prologue: frame size=0 */
212 008c CF93 push r28
213 008e DF93 push r29
214 0090 CDB7 in r28,__SP_L__
215 0092 DEB7 in r29,__SP_H__
216 /* prologue end (size=4) */
74:disp.c **** NCS_DDR|=(1<<NCS_PIN);
218 .LM15:
219 0094 8091 3A00 lds r24,58
220 0098 8460 ori r24,lo8(4)
221 009a 8093 3A00 sts 58,r24
75:disp.c **** SCK_DDR|=(1<<SCK_PIN);
223 .LM16:
224 009e 8091 3A00 lds r24,58
225 00a2 8860 ori r24,lo8(8)
226 00a4 8093 3A00 sts 58,r24
76:disp.c **** MOSI_DDR|=(1<<MOSI_PIN);
228 .LM17:
229 00a8 8091 3A00 lds r24,58
230 00ac 8061 ori r24,lo8(16)
231 00ae 8093 3A00 sts 58,r24
77:disp.c **** DispData(NumTab[17]);
233 .LM18:
234 00b2 8091 0000 lds r24,NumTab+17
235 00b6 0E94 0000 call DispData
78:disp.c **** DDRA|=(1<<PA5)|(1<<PA6)|(1<<PA7);
237 .LM19:
238 00ba 8091 3A00 lds r24,58
239 00be 806E ori r24,lo8(-32)
240 00c0 8093 3A00 sts 58,r24
241 /* epilogue: frame size=0 */
242 00c4 DF91 pop r29
243 00c6 CF91 pop r28
244 00c8 0895 ret
245 /* epilogue end (size=3) */
246 /* function DispPortInit size 31 (24) */
248 .Lscope1:
251 .global Disp
253 Disp:
79:disp.c **** }
80:disp.c ****
81:disp.c **** void Disp(uint8_t *p)
82:disp.c **** {
255 .LM20:
256 /* prologue: frame size=15 */
257 00ca CF93 push r28
258 00cc DF93 push r29
259 00ce CDB7 in r28,__SP_L__
260 00d0 DEB7 in r29,__SP_H__
261 00d2 2F97 sbiw r28,15
262 00d4 0FB6 in __tmp_reg__,__SREG__
263 00d6 F894 cli
264 00d8 DEBF out __SP_H__,r29
265 00da 0FBE out __SREG__,__tmp_reg__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -