?? 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:
72 .global S
73 .section .progmem.data,"a",@progbits
76 S:
77 0000 AF .byte -81
78 0001 06 .byte 6
79 0002 6D .byte 109
80 0003 4F .byte 79
81 0004 C6 .byte -58
82 0005 CB .byte -53
83 0006 EB .byte -21
84 0007 0E .byte 14
85 0008 EF .byte -17
86 0009 CF .byte -49
87 000a 00 .byte 0
88 .global month
89 .data
92 month:
93 0000 0100 .word 1
94 .global date
97 date:
98 0002 0100 .word 1
99 .global N
100 .global N
101 .section .bss
104 N:
105 0000 00 .skip 1,0
106 .global Old_hours
107 .global Old_hours
110 Old_hours:
111 0001 00 .skip 1,0
112 .global Old_minutes
113 .global Old_minutes
116 Old_minutes:
117 0002 00 .skip 1,0
118 .global Old_senconds
119 .global Old_senconds
122 Old_senconds:
123 0003 00 .skip 1,0
124 .global Sign1
125 .global Sign1
128 Sign1:
129 0004 00 .skip 1,0
130 .global ADC_ov
131 .global ADC_ov
134 ADC_ov:
135 0005 00 .skip 1,0
136 .global Tov2
137 .global Tov2
140 Tov2:
141 0006 00 .skip 1,0
142 .global Tov0
143 .global Tov0
146 Tov0:
147 0007 0000 .skip 2,0
148 .global Tov1
149 .global Tov1
152 Tov1:
153 0009 00 .skip 1,0
154 .global Fuse1
155 .data
158 Fuse1:
159 0004 01 .byte 1
160 .global Fuse2
163 Fuse2:
164 0005 01 .byte 1
165 .global tmp_old
166 .global tmp_old
167 .section .bss
170 tmp_old:
171 000a 0000 0000 .skip 4,0
172 .text
174 .global port_init
176 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/pgmspace.h>
6:main.c **** //#include "avr/wdt.h"
7:main.c **** #include "avr/interrupt.h"
8:main.c **** #include <avr/sleep.h>
9:main.c ****
10:main.c **** #define LOBYTE(a) ((BYTE)(a&0X0f))
11:main.c **** #define HIBYTE(a) ((BYTE)((a)>>4))
12:main.c **** #define LOBCD(b) (b%10)
13:main.c **** #define HIBCD(b) (b/10)
14:main.c **** #define BCD(c) (((c/10)<<4)|LOBYTE(c%10))
15:main.c **** #define DEC(d) (HIBYTE(d)*10+LOBYTE(d))
16:main.c ****
17:main.c **** #define _asm asm
18:main.c **** #define WDR() asm("wdr")
19:main.c **** #define SEI() asm("sei")
20:main.c **** #define CLI() asm("cli")
21:main.c **** //#define NOP() asm("nop")
22:main.c **** #define SLEEP() asm("SLEEP")
23:main.c **** #define down() (MCUCR =0x60)
24:main.c **** #define int1() (GICR =0x80)
25:main.c **** #define int1_off() (GICR =0x00)
26:main.c ****
27:main.c **** //TWI狀態定義
28:main.c **** //MT 主方式傳輸 MR 主方式接收
29:main.c **** #define START 0x08
30:main.c **** #define RE_START 0x10
31:main.c **** #define MT_SLA_ACK 0x18
32:main.c **** #define MT_SLA_NOACK 0x20
33:main.c **** #define MT_DATA_ACK 0x28
34:main.c **** #define MT_DATA_NOACK 0x30
35:main.c **** #define MR_SLA_ACK 0x40
36:main.c **** #define MR_SLA_NOACK 0x48
37:main.c **** #define MR_DATA_ACK 0x50
38:main.c **** #define MR_DATA_NOACK 0x58
39:main.c ****
40:main.c **** #define rd_device_add 0xd1
41:main.c **** #define wr_device_add 0xd0
42:main.c **** //常用TWI操作(主模式寫和主模式讀)
43:main.c **** #define Start() (TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN))
44:main.c **** #define Stop() (TWCR=(1<<TWINT)|(1<<TWSTO)|(1<<TWEN))
45:main.c **** #define Wait() {while(!(TWCR&(1<<TWINT)));}
46:main.c **** #define TestAck() (TWSR&0xf8)
47:main.c **** #define SetAck() (TWCR|=(1<<TWEA))
48:main.c **** #define SetNoAck() (TWCR&=~(1<<TWEA))
49:main.c **** #define Twi() (TWCR=(1<<TWINT)|(1<<TWEN))
50:main.c **** #define Write8Bit(x) {TWDR=(x);TWCR=(1<<TWINT)|(1<<TWEN);}
51:main.c ****
52:main.c **** #define SS PB4
53:main.c **** #define MOSI PB5
54:main.c **** #define SCK PB7
55:main.c ****
56:main.c **** typedef unsigned char BYTE;
57:main.c **** typedef unsigned int WORD;
58:main.c **** typedef unsigned long DWORD;
59:main.c **** //prog_uchar
60:main.c **** const BYTE S[] PROGMEM={0xaf,0x06,0x6d,0x4f,0xc6,0xcb,0xeb,0x0e,0xef,0xcf,0x00};
61:main.c ****
62:main.c **** int month=1;//1~12
63:main.c **** int date=1;//1~31
64:main.c **** int hours;//0~23
65:main.c **** int minutes;//0~59
66:main.c **** BYTE senconds;//0~59
67:main.c ****
68:main.c **** BYTE N=0;//0~3
69:main.c **** BYTE M[2];//0~4
70:main.c **** WORD T; //燈絲狀態判斷等待次數
71:main.c **** BYTE Old_hours=0; //預存時間
72:main.c **** BYTE Old_minutes=0;
73:main.c **** BYTE Old_senconds=0;//0~59
74:main.c **** BYTE Sign1=0; //計時標志
75:main.c **** BYTE ADC_ov=0;
76:main.c **** BYTE Tov2=0;
77:main.c **** WORD Tov0=0;
78:main.c **** BYTE Tov1=0; //定時器溢出
79:main.c **** BYTE Fuse1=1; //燈絲1狀態
80:main.c **** BYTE Fuse2=1; //燈絲2狀態
81:main.c **** WORD tmp_old[2]={0,0};
82:main.c **** WORD tmp_rel[2];
83:main.c **** BYTE sign2; //極性
84:main.c **** BYTE Close[4]; //門狀態
85:main.c **** BYTE ADC_mux;
86:main.c **** WORD ADC_rel;
87:main.c **** BYTE a,b,c;
88:main.c **** void port_init(void)//口方向設置
89:main.c **** {
178 .LM1:
179 /* prologue: frame size=0 */
180 /* prologue end (size=0) */
90:main.c **** DDRA = 0x00;
182 .LM2:
183 0000 1ABA out 58-0x20,__zero_reg__
91:main.c **** PORTA = 0x00;
185 .LM3:
186 0002 1BBA out 59-0x20,__zero_reg__
92:main.c **** DDRB = 0xff;
188 .LM4:
189 0004 8FEF ldi r24,lo8(-1)
190 0006 87BB out 55-0x20,r24
93:main.c **** DDRC = 0XFC;
192 .LM5:
193 0008 8CEF ldi r24,lo8(-4)
194 000a 84BB out 52-0x20,r24
94:main.c **** DDRD = 0xF0;
196 .LM6:
197 000c 80EF ldi r24,lo8(-16)
198 000e 81BB out 49-0x20,r24
199 /* epilogue: frame size=0 */
200 0010 0895 ret
201 /* epilogue end (size=1) */
202 /* function port_init size 9 (8) */
204 .Lscope0:
206 .global T_init
208 T_init:
95:main.c **** }
96:main.c **** void T_init(void)
97:main.c **** {
210 .LM7:
211 /* prologue: frame size=0 */
212 /* prologue end (size=0) */
98:main.c **** TCCR2=0x00; //停止定時器2
214 .LM8:
215 0012 15BC out 69-0x20,__zero_reg__
99:main.c **** TCCR1B=0x00; //停止定時器1
217 .LM9:
218 0014 1EBC out 78-0x20,__zero_reg__
100:main.c **** TCCR0=0x00; //停止定時器0
220 .LM10:
221 0016 13BE out 83-0x20,__zero_reg__
101:main.c **** TCNT2=0X64; //定時~20ms
223 .LM11:
224 0018 84E6 ldi r24,lo8(100)
225 001a 84BD out 68-0x20,r24
102:main.c **** TCNT1H=0xc2;
227 .LM12:
228 001c 82EC ldi r24,lo8(-62)
229 001e 8DBD out 77-0x20,r24
103:main.c **** TCNT1L=0xf7; //定時0.5s
231 .LM13:
232 0020 87EF ldi r24,lo8(-9)
233 0022 8CBD out 76-0x20,r24
104:main.c **** TCNT0=6; //定時32ms
235 .LM14:
236 0024 86E0 ldi r24,lo8(6)
237 0026 82BF out 82-0x20,r24
105:main.c **** TCCR2=0x05; //1024分頻
239 .LM15:
240 0028 95E0 ldi r25,lo8(5)
241 002a 95BD out 69-0x20,r25
106:main.c **** TCCR1B=0x04; //256分頻
243 .LM16:
244 002c 84E0 ldi r24,lo8(4)
245 002e 8EBD out 78-0x20,r24
107:main.c **** TCCR0=0x05; //1024分頻
247 .LM17:
248 0030 93BF out 83-0x20,r25
249 /* epilogue: frame size=0 */
250 0032 0895 ret
251 /* epilogue end (size=1) */
252 /* function T_init size 17 (16) */
254 .Lscope1:
256 .global Delay
258 Delay:
108:main.c **** }
109:main.c **** void Delay(void)
110:main.c **** {
260 .LM18:
261 /* prologue: frame size=0 */
262 /* prologue end (size=0) */
111:main.c **** unsigned char i;
112:main.c **** for(i=0;i<10;i++); /*用于調整CLK 脈沖寬度*/
264 .LM19:
265 0034 80E0 ldi r24,lo8(0)
266 .L7:
268 .LM20:
269 0036 8F5F subi r24,lo8(-(1))
270 0038 8A30 cpi r24,lo8(10)
271 003a E8F3 brlo .L7
272 /* epilogue: frame size=0 */
273 003c 0895 ret
274 /* epilogue end (size=1) */
275 /* function Delay size 5 (4) */
280 .Lscope2:
284 .global SendBit
286 SendBit:
113:main.c **** }
114:main.c **** void SendBit(unsigned char dat,unsigned char bitcnt)
115:main.c **** {
288 .LM21:
289 /* prologue: frame size=0 */
290 003e 0F93 push r16
291 0040 1F93 push r17
292 0042 CF93 push r28
293 /* prologue end (size=3) */
294 0044 C82F mov r28,r24
295 0046 062F mov r16,r22
116:main.c **** unsigned char i;
117:main.c **** cli();
297 .LM22:
298 /* #APP */
299 0048 F894 cli
118:main.c **** for(i=0;i<bitcnt;i++)
301 .LM23:
302 /* #NOAPP */
303 004a 10E0 ldi r17,lo8(0)
304 004c 1617 cp r17,r22
305 004e 78F4 brsh .L18
306 .L16:
119:main.c **** {
120:main.c **** if(( dat & 0X80 ) == 0)
308 .LM24:
309 0050 CC23 tst r28
310 0052 14F0 brlt .L14
121:main.c **** PORTB &=(~(1<<MOSI));
312 .LM25:
313 0054 C598 cbi 56-0x20,5
314 0056 01C0 rjmp .L15
315 .L14:
122:main.c **** else
123:main.c **** PORTB |=(1<<MOSI); /*發送數據由高位到低位傳送*/
317 .LM26:
318 0058 C59A sbi 56-0x20,5
319 .L15:
124:main.c **** Delay();
321 .LM27:
322 005a 0E94 0000 call Delay
125:main.c **** PORTB |=(1<<SCK); /*置時鐘線為高通知被控器開始接收數位*/
324 .LM28:
325 005e C79A sbi 56-0x20,7
126:main.c **** Delay();
327 .LM29:
328 0060 0E94 0000 call Delay
127:main.c **** PORTB &=(~(1<<SCK)); /*鉗住總線準備下一個數據位*/
330 .LM30:
331 0064 C798 cbi 56-0x20,7
128:main.c **** dat=dat<<1; /*發送數據左移一位*/
333 .LM31:
334 0066 CC0F lsl r28
336 .LM32:
337 0068 1F5F subi r17,lo8(-(1))
338 006a 1017 cp r17,r16
339 006c 88F3 brlo .L16
340 .L18:
129:main.c **** }
130:main.c **** sei();
342 .LM33:
343 /* #APP */
344 006e 7894 sei
345 /* #NOAPP */
346 /* epilogue: frame size=0 */
347 0070 CF91 pop r28
348 0072 1F91 pop r17
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -