📄 main.lst
字号:
1 .file "main.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:
92 .global date
93 .data
96 date:
97 0000 0100 .word 1
98 .global month
101 month:
102 0002 0100 .word 1
103 .global S
104 .section .progmem.data,"a",@progbits
107 S:
108 0000 AF .byte -81
109 0001 06 .byte 6
110 0002 6D .byte 109
111 0003 4F .byte 79
112 0004 C6 .byte -58
113 0005 CB .byte -53
114 0006 EB .byte -21
115 0007 0E .byte 14
116 0008 EF .byte -17
117 0009 CF .byte -49
118 000a 00 .byte 0
119 .text
121 .global port_init
123 port_init:
1:main.c **** //编译gccavr
2:main.c **** //m16
3:main.c **** #include <avr/io.h>
4:main.c **** //#include <avr/signal.h>
5:main.c **** #include <avr/interrupt.h>
6:main.c **** #include <util/delay.h>
7:main.c **** #include <avr/pgmspace.h>
8:main.c **** //#include <avr/twi.h>
9:main.c **** //#include <compat/twi.h>
10:main.c **** //#include <stdio.h>
11:main.c ****
12:main.c **** #define LOBYTE(a) ((BYTE)(a&0X0f))
13:main.c **** #define HIBYTE(a) ((BYTE)((a)>>4))
14:main.c **** /*
15:main.c **** #define LOBCD(b) (b%10)
16:main.c **** #define HIBCD(b) (b/10)
17:main.c **** #define BCD(c) (((c/10)<<4)|LOBYTE(c%10))
18:main.c **** #define DEC(d) (HIBYTE(d)*10+LOBYTE(d))
19:main.c ****
20:main.c ****
21:main.c **** #define down() (MCUCR =0x60)
22:main.c **** #define int1() (GICR =0x80)
23:main.c **** #define int1_off() (GICR =0x00)
24:main.c **** */
25:main.c ****
26:main.c **** //TWI状态定义
27:main.c **** //MT 主方式传输 MR 主方式接收
28:main.c **** #define START 0x08
29:main.c **** #define RE_START 0x10
30:main.c **** #define MT_SLA_ACK 0x18
31:main.c **** #define MT_SLA_NOACK 0x20
32:main.c **** #define MT_DATA_ACK 0x28
33:main.c **** #define MT_DATA_NOACK 0x30
34:main.c **** #define MR_SLA_ACK 0x40
35:main.c **** #define MR_SLA_NOACK 0x48
36:main.c **** #define MR_DATA_ACK 0x50
37:main.c **** #define MR_DATA_NOACK 0x58
38:main.c ****
39:main.c **** #define rd_device_add 0xd1
40:main.c **** #define wr_device_add 0xd0
41:main.c **** //常用TWI操作(主模式写和主模式读)
42:main.c **** #define Start() (TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN))
43:main.c **** #define Stop() (TWCR=(1<<TWINT)|(1<<TWSTO)|(1<<TWEN))
44:main.c **** #define Wait() {while(!(TWCR&(1<<TWINT)));}
45:main.c **** #define TestAck() (TWSR&0xf8)
46:main.c **** #define SetAck() (TWCR|=(1<<TWEA))
47:main.c **** #define SetNoAck() (TWCR&=~(1<<TWEA))
48:main.c **** #define Twi() (TWCR=(1<<TWINT)|(1<<TWEN))
49:main.c **** #define Write8Bit(x) {TWDR=(x);TWCR=(1<<TWINT)|(1<<TWEN);}
50:main.c ****
51:main.c **** #define SS PB4
52:main.c **** #define MOSI PB5
53:main.c **** #define SCK PB7
54:main.c ****
55:main.c **** typedef unsigned char BYTE;
56:main.c **** typedef unsigned int WORD;
57:main.c **** typedef unsigned long DWORD;
58:main.c **** //prog_uchar
59:main.c **** const unsigned char S[11] PROGMEM={0xaf,0x06,0x6d,0x4f,0xc6,0xcb,0xeb,0x0e,0xef,0xcf,0x00};
60:main.c ****
61:main.c **** volatile int month=1;//1~12
62:main.c **** volatile int date=1;//1~31
63:main.c **** volatile int hours;//0~23
64:main.c **** volatile int minutes;//0~59
65:main.c **** volatile BYTE senconds;//0~59
66:main.c ****
67:main.c ****
68:main.c **** volatile BYTE a,b,c;
69:main.c ****
70:main.c **** void port_init(void)//口方向设置
71:main.c **** {
125 .LM1:
126 /* prologue: frame size=0 */
127 /* prologue end (size=0) */
72:main.c **** DDRA = 0x00;
129 .LM2:
130 0000 1ABA out 58-0x20,__zero_reg__
73:main.c **** PORTA = 0x00;
132 .LM3:
133 0002 1BBA out 59-0x20,__zero_reg__
74:main.c **** DDRB = 0xff;
135 .LM4:
136 0004 8FEF ldi r24,lo8(-1)
137 0006 87BB out 55-0x20,r24
75:main.c **** DDRC = 0XFC;
139 .LM5:
140 0008 8CEF ldi r24,lo8(-4)
141 000a 84BB out 52-0x20,r24
76:main.c **** DDRD = 0xF0;
143 .LM6:
144 000c 80EF ldi r24,lo8(-16)
145 000e 81BB out 49-0x20,r24
146 /* epilogue: frame size=0 */
147 0010 0895 ret
148 /* epilogue end (size=1) */
149 /* function port_init size 9 (8) */
151 .Lscope0:
154 .global delay_us
156 delay_us:
77:main.c **** }
78:main.c ****
79:main.c **** void delay_us(int time)//微秒级延时程序
80:main.c **** {
158 .LM7:
159 /* prologue: frame size=0 */
160 /* prologue end (size=0) */
161 .L3:
81:main.c **** do
82:main.c **** {
83:main.c **** time--;
163 .LM8:
164 0012 0197 sbiw r24,1
84:main.c **** }
166 .LM9:
167 0014 8230 cpi r24,2
168 0016 9105 cpc r25,__zero_reg__
169 0018 E4F7 brge .L3
170 /* epilogue: frame size=0 */
171 001a 0895 ret
172 /* epilogue end (size=1) */
173 /* function delay_us size 5 (4) */
175 .Lscope1:
178 .global delay_ms
180 delay_ms:
85:main.c **** while (time>1);
86:main.c **** }
87:main.c **** void delay_ms(unsigned int time)//毫秒级延时程序
88:main.c **** {
182 .LM10:
183 /* prologue: frame size=0 */
184 001c CF93 push r28
185 001e DF93 push r29
186 /* prologue end (size=2) */
187 0020 EC01 movw r28,r24
89:main.c **** while(time!=0)
90:main.c **** {
91:main.c **** delay_us(1000);
92:main.c **** time--;
189 .LM11:
190 0022 892B or r24,r25
191 0024 31F0 breq .L11
192 .L9:
194 .LM12:
195 0026 88EE ldi r24,lo8(1000)
196 0028 93E0 ldi r25,hi8(1000)
197 002a 0E94 0000 call delay_us
199 .LM13:
200 002e 2197 sbiw r28,1
201 0030 D1F7 brne .L9
202 .L11:
203 /* epilogue: frame size=0 */
204 0032 DF91 pop r29
205 0034 CF91 pop r28
206 0036 0895 ret
207 /* epilogue end (size=3) */
208 /* function delay_ms size 15 (10) */
210 .Lscope2:
212 .global Delay
214 Delay:
93:main.c **** }
94:main.c **** }
95:main.c **** /**/
96:main.c **** void Delay(void)
97:main.c **** {
216 .LM14:
217 /* prologue: frame size=1 */
218 0038 CF93 push r28
219 003a DF93 push r29
220 003c CDB7 in r28,__SP_L__
221 003e DEB7 in r29,__SP_H__
222 0040 2197 sbiw r28,1
223 0042 0FB6 in __tmp_reg__,__SREG__
224 0044 F894 cli
225 0046 DEBF out __SP_H__,r29
226 0048 0FBE out __SREG__,__tmp_reg__
227 004a CDBF out __SP_L__,r28
228 /* prologue end (size=10) */
98:main.c **** volatile unsigned char i;
99:main.c **** for(i=0;i<10;i++); //用于调整CLK 脉冲宽度
230 .LM15:
231 004c 1982 std Y+1,__zero_reg__
232 004e 8981 ldd r24,Y+1
233 0050 8A30 cpi r24,lo8(10)
234 0052 30F4 brsh .L18
235 .L16:
237 .LM16:
238 0054 8981 ldd r24,Y+1
239 0056 8F5F subi r24,lo8(-(1))
240 0058 8983 std Y+1,r24
241 005a 8981 ldd r24,Y+1
242 005c 8A30 cpi r24,lo8(10)
243 005e D0F3 brlo .L16
244 .L18:
245 /* epilogue: frame size=1 */
246 0060 2196 adiw r28,1
247 0062 0FB6 in __tmp_reg__,__SREG__
248 0064 F894 cli
249 0066 DEBF out __SP_H__,r29
250 0068 0FBE out __SREG__,__tmp_reg__
251 006a CDBF out __SP_L__,r28
252 006c DF91 pop r29
253 006e CF91 pop r28
254 0070 0895 ret
255 /* epilogue end (size=9) */
256 /* function Delay size 29 (10) */
261 .Lscope3:
265 .global SendBit
267 SendBit:
100:main.c **** }
101:main.c **** void SendBit(unsigned char dat,unsigned char bitcnt)
102:main.c **** {
269 .LM17:
270 /* prologue: frame size=0 */
271 0072 1F93 push r17
272 0074 CF93 push r28
273 /* prologue end (size=2) */
274 0076 182F mov r17,r24
103:main.c **** unsigned char i;
104:main.c **** cli();
276 .LM18:
277 /* #APP */
278 0078 F894 cli
105:main.c **** for(i=0;i<bitcnt;i++)
280 .LM19:
281 /* #NOAPP */
282 007a 6623 tst r22
283 007c 79F0 breq .L27
284 007e C62F mov r28,r22
285 .L25:
106:main.c **** {
107:main.c **** if(( dat & 0X80 ) == 0)
287 .LM20:
288 0080 17FD sbrc r17,7
289 0082 02C0 rjmp .L23
108:main.c **** PORTB &=(~(1<<MOSI));
291 .LM21:
292 0084 C598 cbi 56-0x20,5
293 0086 01C0 rjmp .L24
294 .L23:
109:main.c **** else
110:main.c **** PORTB |=(1<<MOSI); /*发送数据由高位到低位传送*/
296 .LM22:
297 0088 C59A sbi 56-0x20,5
298 .L24:
111:main.c **** Delay();
300 .LM23:
301 008a 0E94 0000 call Delay
112:main.c **** //delay_us(10);
113:main.c **** PORTB |=(1<<SCK); /*置时钟线为高通知被控器开始接收数位*/
303 .LM24:
304 008e C79A sbi 56-0x20,7
114:main.c **** Delay();
306 .LM25:
307 0090 0E94 0000 call Delay
115:main.c **** //delay_us(10);
116:main.c **** PORTB &=(~(1<<SCK)); /*钳住总线准备下一个数据位*/
309 .LM26:
310 0094 C798 cbi 56-0x20,7
117:main.c **** dat=dat<<1; /*发送数据左移一位*/
312 .LM27:
313 0096 110F lsl r17
315 .LM28:
316 0098 C150 subi r28,lo8(-(-1))
317 009a 91F7 brne .L25
318 .L27:
118:main.c **** }
119:main.c **** sei();
320 .LM29:
321 /* #APP */
322 009c 7894 sei
323 /* #NOAPP */
324 /* epilogue: frame size=0 */
325 009e CF91 pop r28
326 00a0 1F91 pop r17
327 00a2 0895 ret
328 /* epilogue end (size=3) */
329 /* function SendBit size 28 (23) */
334 .Lscope4:
336 .global Start_spi
338 Start_spi:
120:main.c **** }
121:main.c ****
122:main.c **** void Start_spi(void)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -