?? irr.lst
字號(hào):
12E 9ADF SBI 0x1B,7
(0158) s_ms(50);
12F E302 LDI R16,0x32
130 E010 LDI R17,0
131 DF20 RCALL _s_ms
(0159) PORTA&=~(1<<EN);
132 98DF CBI 0x1B,7
(0160) pBuffer++;
133 5F4F SUBI R20,0xFF
134 4F5F SBCI R21,0xFF
135 9563 INC R22
136 3160 CPI R22,0x10
137 F398 BCS 0x012B
(0161) }
(0162) writecom(0xC0);
138 EC00 LDI R16,0xC0
139 DF4C RCALL _writecom
(0163)
(0164) PORTA|=(1<<RS);
13A 9ADD SBI 0x1B,5
(0165) PORTA&=~(1<<RW);
13B 98DE CBI 0x1B,6
(0166) s_ms(50);
13C E302 LDI R16,0x32
13D E010 LDI R17,0
13E DF13 RCALL _s_ms
(0167) for(i=0;i<16;i++)
13F 2766 CLR R22
140 C00B RJMP 0x014C
(0168) {
(0169) t = *pBuffer;
141 01FA MOVW R30,R20
142 80A0 LDD R10,Z+0
(0170) PORTD = t;
143 BAA2 OUT 0x12,R10
(0171) PORTA|=(1<<EN);
144 9ADF SBI 0x1B,7
(0172) s_ms(50);
145 E302 LDI R16,0x32
146 E010 LDI R17,0
147 DF0A RCALL _s_ms
(0173) PORTA&=~(1<<EN);
148 98DF CBI 0x1B,7
(0174) pBuffer++;
149 5F4F SUBI R20,0xFF
14A 4F5F SBCI R21,0xFF
14B 9563 INC R22
14C 3160 CPI R22,0x10
14D F398 BCS 0x0141
14E 940C 03FB JMP pop_xgsetF00C
_WriteNum:
num --> R20
col --> R10
row --> R22
150 940E 03F4 CALL push_xgsetF00C
152 0159 MOVW R10,R18
153 01B8 MOVW R22,R16
154 814E LDD R20,Y+6
155 815F LDD R21,Y+7
(0175) }
(0176) }
(0177) //====================================================
(0178) // 描述:在任意位置寫數(shù)字函數(shù)
(0179) // 入口:’row‘表示要寫數(shù)字所在的行地址,只能為1或2
(0180) // ’col‘表示要寫數(shù)字所在的列地址,只能為0--15
(0181) // ‘num’表示要寫的數(shù)字,只能為0--9
(0182) // 出口:無(wú)
(0183) //===================================================
(0184) void WriteNum(uint row,uint col,uint num)
(0185) {
(0186) if (row == 1) row = 0x80 + col;
156 3061 CPI R22,1
157 E0E0 LDI R30,0
158 077E CPC R23,R30
159 F421 BNE 0x015E
15A 01B5 MOVW R22,R10
15B 5860 SUBI R22,0x80
15C 4F7F SBCI R23,0xFF
15D C003 RJMP 0x0161
(0187) else row = 0xC0 + col;
15E 01B5 MOVW R22,R10
15F 5460 SUBI R22,0x40
160 4F7F SBCI R23,0xFF
(0188) writecom(row);
161 2F06 MOV R16,R22
162 DF23 RCALL _writecom
(0189) if (num<=0 | num>9) num =0x30;
163 3040 CPI R20,0
164 0745 CPC R20,R21
165 F421 BNE 0x016A
166 E081 LDI R24,1
167 E090 LDI R25,0
168 015C MOVW R10,R24
169 C002 RJMP 0x016C
16A 24AA CLR R10
16B 24BB CLR R11
16C E089 LDI R24,0x9
16D E090 LDI R25,0
16E 1784 CP R24,R20
16F 0795 CPC R25,R21
170 F418 BCC 0x0174
171 E061 LDI R22,1
172 E070 LDI R23,0
173 C002 RJMP 0x0176
174 2766 CLR R22
175 2777 CLR R23
176 0115 MOVW R2,R10
177 2A26 OR R2,R22
178 2A37 OR R3,R23
179 2022 TST R2
17A F411 BNE 0x017D
17B 2033 TST R3
17C F019 BEQ 0x0180
17D E340 LDI R20,0x30
17E E050 LDI R21,0
17F C002 RJMP 0x0182
(0190) else num = 0x30 + num;
180 5D40 SUBI R20,0xD0
181 4F5F SBCI R21,0xFF
(0191)
(0192) PORTA|=(1<<RS);
182 9ADD SBI 0x1B,5
(0193) s_ms(200);
183 EC08 LDI R16,0xC8
184 E010 LDI R17,0
185 DECC RCALL _s_ms
(0194) PORTA&=~(1<<RW);
186 98DE CBI 0x1B,6
(0195) s_ms(200);
187 EC08 LDI R16,0xC8
188 E010 LDI R17,0
189 DEC8 RCALL _s_ms
(0196) PORTD = num;
18A BB42 OUT 0x12,R20
(0197) s_ms(200);
18B EC08 LDI R16,0xC8
18C E010 LDI R17,0
18D DEC4 RCALL _s_ms
(0198) PORTA|=(1<<EN);
18E 9ADF SBI 0x1B,7
(0199) s_ms(200);
18F EC08 LDI R16,0xC8
190 E010 LDI R17,0
191 DEC0 RCALL _s_ms
(0200) PORTA&=~(1<<EN);
192 98DF CBI 0x1B,7
(0201) s_ms(200);
193 EC08 LDI R16,0xC8
194 E010 LDI R17,0
195 DEBC RCALL _s_ms
196 940C 03FB JMP pop_xgsetF00C
_WriteChar:
t --> R12
i --> R10
pBuffer --> R20
num --> Y,+8
col --> R10
row --> R22
198 940E 0402 CALL push_xgsetF03C
19A 2EA2 MOV R10,R18
19B 2F60 MOV R22,R16
19C 854A LDD R20,Y+10
19D 855B LDD R21,Y+11
(0202) }
(0203) //================================================================
(0204) // 描述:在任意位置寫任意多個(gè)字符
(0205) // 入口:’row‘要寫的字符所在的行,只能為1或2;
(0206) // ‘col’要寫的字符所在的列,只能為0---15
(0207) // ‘num’要寫字符的個(gè)數(shù)
(0208) // ‘pbuffer’要寫字符的首地址
(0209) //==================================================================
(0210) void WriteChar(uchar row,uchar col,uint num,uchar *pBuffer)
(0211) {
(0212) uchar i,t;
(0213) if (row == 1) row = 0x80 + col;
19E 3061 CPI R22,1
19F F419 BNE 0x01A3
1A0 2D6A MOV R22,R10
1A1 5860 SUBI R22,0x80
1A2 C002 RJMP 0x01A5
(0214) else row = 0xC0 + col;
1A3 2D6A MOV R22,R10
1A4 5460 SUBI R22,0x40
(0215) writecom(row);
1A5 2F06 MOV R16,R22
1A6 DEDF RCALL _writecom
(0216) //if (num<=0 | num>9) num =0x30;
(0217) //else num = 0x30 + num;
(0218)
(0219) PORTA|=(1<<RS);
1A7 9ADD SBI 0x1B,5
(0220) s_ms(200);
1A8 EC08 LDI R16,0xC8
1A9 E010 LDI R17,0
1AA DEA7 RCALL _s_ms
(0221) PORTA&=~(1<<RW);
1AB 98DE CBI 0x1B,6
(0222) s_ms(200);
1AC EC08 LDI R16,0xC8
1AD E010 LDI R17,0
1AE DEA3 RCALL _s_ms
(0223) for(i=num;i!=0;i--)
1AF 84A8 LDD R10,Y+8
1B0 84B9 LDD R11,Y+9
1B1 C014 RJMP 0x01C6
(0224) {
(0225) t = *pBuffer;
1B2 01FA MOVW R30,R20
1B3 80C0 LDD R12,Z+0
(0226) s_ms(200);
1B4 EC08 LDI R16,0xC8
1B5 E010 LDI R17,0
1B6 DE9B RCALL _s_ms
(0227) PORTD = t;
1B7 BAC2 OUT 0x12,R12
(0228) s_ms(200);
1B8 EC08 LDI R16,0xC8
1B9 E010 LDI R17,0
1BA DE97 RCALL _s_ms
(0229) PORTA|=(1<<EN);
1BB 9ADF SBI 0x1B,7
(0230) s_ms(200);
1BC EC08 LDI R16,0xC8
1BD E010 LDI R17,0
1BE DE93 RCALL _s_ms
(0231) PORTA&=~(1<<EN);
1BF 98DF CBI 0x1B,7
(0232) s_ms(200);
1C0 EC08 LDI R16,0xC8
1C1 E010 LDI R17,0
1C2 DE8F RCALL _s_ms
(0233) pBuffer++;
1C3 5F4F SUBI R20,0xFF
1C4 4F5F SBCI R21,0xFF
1C5 94AA DEC R10
1C6 20AA TST R10
1C7 F751 BNE 0x01B2
1C8 940C 040B JMP pop_xgsetF03C
_ext_int0_isr:
1CA 922A ST R2,-Y
1CB 923A ST R3,-Y
1CC 924A ST R4,-Y
1CD 925A ST R5,-Y
1CE 930A ST R16,-Y
1CF 931A ST R17,-Y
1D0 932A ST R18,-Y
1D1 933A ST R19,-Y
1D2 938A ST R24,-Y
1D3 939A ST R25,-Y
1D4 93AA ST R26,-Y
1D5 93BA ST R27,-Y
1D6 B62F IN R2,0x3F
1D7 922A ST R2,-Y
FILE: C:\DOCUME~1\wdd\MYDOCU~1\16實(shí)驗(yàn)程序\紅外接收\(chéng)irr.c
(0001) //Atmega16的紅外遙控器接收試驗(yàn)
(0002) //使用1602液晶進(jìn)行顯示,
(0003) #include<iom16v.h>
(0004) #include"1602.h"
(0005) #pragma interrupt_handler ext_int0_isr:2 //指定外部中斷函數(shù)
(0006) #define uchar unsigned char
(0007) #define uint unsigned int
(0008)
(0009) uchar irr_b=0,s_s=0;
(0010) uchar wb=0,a=0,ds=0;
(0011) long da=0;
(0012) uchar d1,d2,d3,d4;
(0013) uchar ten_1,ten_2,ten_3,ten_4,i;
(0014)
(0015) //中斷接收
(0016) void ext_int0_isr(void)
(0017) {
(0018) if(irr_b==0) //第一個(gè)中斷
1D8 9020 0060 LDS R2,irr_b
1DA 2022 TST R2
1DB F431 BNE 0x01E2
(0019) {
(0020) irr_b=1; //狀態(tài)為:開(kāi)始接收
1DC E081 LDI R24,1
1DD 9380 0060 STS irr_b,R24
(0021) TCNT1L=0x00; //定時(shí)器清零
1DF 2422 CLR R2
1E0 BC2C OUT 0x2C,R2
(0022) }
1E1 C071 RJMP 0x0253
(0023) else if(irr_b==1) //第二個(gè)以后的中斷
1E2 9180 0060 LDS R24,irr_b
1E4 3081 CPI R24,1
1E5 F009 BEQ 0x01E7
1E6 C06C RJMP 0x0253
(0024) {
(0025) a=TCNT1L; //讀取定時(shí)器的值
1E7 B42C IN R2,0x2C
1E8 9220 0063 STS a,R2
(0026) //判斷是引導(dǎo),還是數(shù)據(jù)
(0027) if((170<a)&&(a<235)) //引導(dǎo)
1EA 2C42 MOV R4,R2
1EB 2433 CLR R3
1EC EA8A LDI R24,0xAA
1ED E090 LDI R25,0
1EE 1582 CP R24,R2
1EF 0593 CPC R25,R3
1F0 F4A4 BGE 0x0205
1F1 2D82 MOV R24,R2
1F2 3E8B CPI R24,0xEB
1F3 F488 BCC 0x0205
(0028) {
(0029) wb=0; //數(shù)據(jù)計(jì)數(shù)清零
1F4 2422 CLR R2
1F5 9220 0062 STS wb,R2
(0030) da=0; //數(shù)據(jù)清零
1F7 E080 LDI R24,0
1F8 E090 LDI R25,0
1F9 E0A0 LDI R26,0
1FA E0B0 LDI R27,0
1FB 9390 0066 STS da+1,R25
1FD 9380 0065 STS da,R24
1FF 93B0 0068 STS da+3,R27
201 93A0 0067 STS da+2,R26
(0031) TCNT1L=0x00; //定時(shí)器清零
203 BC2C OUT 0x2C,R2
(0032) }
204 C04E RJMP 0x0253
(0033) else if((8<a)&&(a<25)) //數(shù)據(jù)0
205 9020 0063 LDS R2,a
207 E088 LDI R24,0x8
208 1582 CP R24,R2
209 F4F8 BCC 0x0229
20A 2D82 MOV R24,R2
20B 3189 CPI R24,0x19
20C F4E0 BCC 0x0229
(0034) {
(0035) wb++;
20D 9180 0062 LDS R24,wb
20F 5F8F SUBI R24,0xFF
210 9380 0062 STS wb,R24
(0036) da=(da<<1);
212 9040 0067 LDS R4,da+2
214 9050 0068 LDS R5,da+3
216 9020 0065 LDS R2,da
218 9030 0066 LDS R3,da+1
21A 0C22 LSL R2
21B 1C33 ROL R3
21C 1C44 ROL R4
21D 1C55 ROL R5
21E 9230 0066 STS da+1,R3
220 9220 0065 STS da,R2
222 9250 0068 STS da+3,R5
224 9240 0067 STS da+2,R4
(0037) TCNT1L=0x00;
226 2422 CLR R2
227 BC2C OUT 0x2C,R2
(0038) }
228 C02A RJMP 0x0253
(0039) else if((25<a)&&(a<45)) //數(shù)據(jù)1
229 9100 0063 LDS R16,a
22B E189 LDI R24,0x19
22C 1780 CP R24,R16
22D F528 BCC 0x0253
22E 320D CPI R16,0x2D
22F F518 BCC 0x0253
(0040) {
(0041) wb++;
230 9180 0062 LDS R24,wb
232 5F8F SUBI R24,0xFF
233 9380 0062 STS wb,R24
(0042) da=(da<<1)+1;
235 E081 LDI R24,1
236 E090 LDI R25,0
237 E0A0 LDI R26,0
238 E0B0 LDI R27,0
239 9040 0067 LDS R4,da+2
23B 9050 0068 LDS R5,da+3
23D 9020 0065 LDS R2,da
23F 9030 0066 LDS R3,da+1
241 0C22 LSL R2
242 1C33 ROL R3
243 1C44 ROL R4
244 1C55 ROL R5
245 0E28 ADD R2,R24
246 1E39 ADC R3,R25
247 1E4A ADC R4,R26
248 1E5B ADC R5,R27
249 9230 0066 STS da+1,R3
24B 9220 0065 STS da,R2
24D 9250 0068 STS da+3,R5
24F 9240 0067 STS da+2,R4
(0043) TCNT1L=0x00;
251 2422 CLR R2
252 BC2C OUT 0x2C,R2
(0044) }
(0045) }
(0046) if(wb==32) //數(shù)據(jù)長(zhǎng)度夠32位
253 9180 0062 LDS R24,wb
255 3280 CPI R24,0x20
256 F441 BNE 0x025F
(0047) {
(0048) irr_b=0; //狀態(tài)為停止接收
257 2422 CLR R2
258 9220 0060 STS irr_b,R2
(0049) wb=0; //數(shù)據(jù)計(jì)數(shù)清零
25A 9220 0062 STS wb,R2
(0050) s_s=1; //打開(kāi)顯示許可
25C E081 LDI R24,1
25D 9380 0061 STS s_s,R24
(0051) }
25F 9029 LD R2,Y+
260 BE2F OUT 0x3F,R2
261 91B9 LD R27,Y+
262 91A9 LD R26,Y+
263 9199 LD R25,Y+
264 9189 LD R24,Y+
265 9139 LD R19,Y+
266 9129 LD R18,Y+
267 9119 LD R17,Y+
268 9109 LD R16,Y+
269 9059 LD R5,Y+
26A 9049 LD R4,Y+
26B 9039 LD R3,Y+
26C 9029 LD R2,Y+
26D 9518 RETI
(0052) }
(0053)
(0054) //定時(shí)器T1初始化
(0055) void t1_init()
(0056) {
(0057) TCCR1B=0x00; //關(guān)閉定時(shí)器
_t1_init:
26E 2422 CLR R2
26F BC2E OUT 0x2E,R2
(0058) TCNT1H=0x00; //定時(shí)器初值
270 BC2D OUT 0x2D,R2
(0059) TCNT1L=0x00;
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -