?? irr.lst
字號:
__start:
__text_start:
2F E5CF LDI R28,0x5F
30 E0D4 LDI R29,4
31 BFCD OUT 0x3D,R28
32 BFDE OUT 0x3E,R29
33 51CE SUBI R28,0x1E
34 40D0 SBCI R29,0
35 EA0A LDI R16,0xAA
36 8308 STD Y+0,R16
37 2400 CLR R0
38 E6E9 LDI R30,0x69
39 E0F0 LDI R31,0
3A E010 LDI R17,0
3B 37E2 CPI R30,0x72
3C 07F1 CPC R31,R17
3D F011 BEQ 0x0040
3E 9201 ST R0,Z+
3F CFFB RJMP 0x003B
40 8300 STD Z+0,R16
41 E5E4 LDI R30,0x54
42 E0F0 LDI R31,0
43 E6A0 LDI R26,0x60
44 E0B0 LDI R27,0
45 E010 LDI R17,0
46 E000 LDI R16,0
47 BF0B OUT 0x3B,R16
48 35ED CPI R30,0x5D
49 07F1 CPC R31,R17
4A F021 BEQ 0x004F
4B 95C8 LPM
4C 9631 ADIW R30,1
4D 920D ST R0,X+
4E CFF9 RJMP 0x0048
4F 940E 0276 CALL _main
_exit:
51 CFFF RJMP _exit
FILE: C:\DOCUME~1\wdd\MYDOCU~1\16實驗程序\紅外接收\1602.h
(0001) #define uchar unsigned char
(0002) #define uint unsigned int
(0003)
(0004) #define RS 5
(0005) #define RW 6
(0006) #define EN 7
(0007)
(0008) void s_ms(uint ms)
(0009) {
(0010) for(;ms>1;ms--);
_s_ms:
ms --> R16
52 C002 RJMP 0x0055
53 5001 SUBI R16,1
54 4010 SBCI R17,0
55 E081 LDI R24,1
56 E090 LDI R25,0
57 1780 CP R24,R16
58 0791 CPC R25,R17
59 F3C8 BCS 0x0053
5A 9508 RET
_busy:
temp --> R20
5B 934A ST R20,-Y
(0011) }
(0012)
(0013) //查忙
(0014) void busy(void)
(0015) {
(0016) uchar temp;
(0017) s_ms(500);
5C EF04 LDI R16,0xF4
5D E011 LDI R17,1
5E DFF3 RCALL _s_ms
(0018) PORTA&=~(1<<RS); //RS=0
5F 98DD CBI 0x1B,5
(0019) s_ms(500);
60 EF04 LDI R16,0xF4
61 E011 LDI R17,1
62 DFEF RCALL _s_ms
(0020) PORTA|=(1<<RW); //RW=1
63 9ADE SBI 0x1B,6
(0021) s_ms(500);
64 EF04 LDI R16,0xF4
65 E011 LDI R17,1
66 DFEB RCALL _s_ms
67 C01A RJMP 0x0082
(0022) while(temp)
(0023) {
(0024) PORTA|=(1<<EN); //EN=1
68 9ADF SBI 0x1B,7
(0025) s_ms(500);
69 EF04 LDI R16,0xF4
6A E011 LDI R17,1
6B DFE6 RCALL _s_ms
(0026) DDRD=0x00; //A口變輸入
6C 2422 CLR R2
6D BA21 OUT 0x11,R2
(0027) PORTD=0xff; //上拉使能
6E EF8F LDI R24,0xFF
6F BB82 OUT 0x12,R24
(0028) s_ms(500);
70 EF04 LDI R16,0xF4
71 E011 LDI R17,1
72 DFDF RCALL _s_ms
(0029) temp = PIND&0x80; //讀取A口
73 B340 IN R20,0x10
74 7840 ANDI R20,0x80
(0030) s_ms(500);
75 EF04 LDI R16,0xF4
76 E011 LDI R17,1
77 DFDA RCALL _s_ms
(0031) DDRD=0xff;
78 EF8F LDI R24,0xFF
79 BB81 OUT 0x11,R24
(0032) PORTD=0xff; //A口變輸出
7A BB82 OUT 0x12,R24
(0033) s_ms(500);
7B EF04 LDI R16,0xF4
7C E011 LDI R17,1
7D DFD4 RCALL _s_ms
(0034) PORTA&=~(1<<EN); //EN=0
7E 98DF CBI 0x1B,7
(0035) s_ms(500);
7F EF04 LDI R16,0xF4
80 E011 LDI R17,1
81 DFD0 RCALL _s_ms
82 2344 TST R20
83 F721 BNE 0x0068
84 9149 LD R20,Y+
85 9508 RET
_writecom:
com --> R10
86 92AA ST R10,-Y
87 2EA0 MOV R10,R16
(0036) }
(0037) }
(0038)
(0039) //寫指令
(0040) void writecom(uchar com)
(0041) {
(0042) busy();
88 DFD2 RCALL _busy
(0043) s_ms(500);
89 EF04 LDI R16,0xF4
8A E011 LDI R17,1
8B DFC6 RCALL _s_ms
(0044) PORTA&=~(1<<RS); //RS=0
8C 98DD CBI 0x1B,5
(0045) s_ms(500);
8D EF04 LDI R16,0xF4
8E E011 LDI R17,1
8F DFC2 RCALL _s_ms
(0046) PORTA&=~(1<<RW); //RW=0
90 98DE CBI 0x1B,6
(0047) s_ms(500);
91 EF04 LDI R16,0xF4
92 E011 LDI R17,1
93 DFBE RCALL _s_ms
(0048) PORTA|=(1<<EN); //EN=1
94 9ADF SBI 0x1B,7
(0049) s_ms(500);
95 EF04 LDI R16,0xF4
96 E011 LDI R17,1
97 DFBA RCALL _s_ms
(0050) PORTD = com; //輸出指令
98 BAA2 OUT 0x12,R10
(0051) s_ms(500);
99 EF04 LDI R16,0xF4
9A E011 LDI R17,1
9B DFB6 RCALL _s_ms
(0052) PORTA&=~(1<<EN); //EN=0
9C 98DF CBI 0x1B,7
(0053) s_ms(500);
9D EF04 LDI R16,0xF4
9E E011 LDI R17,1
9F DFB2 RCALL _s_ms
A0 90A9 LD R10,Y+
A1 9508 RET
(0054) }
(0055)
(0056) //1602初始化
(0057) void LcdInit(void)
(0058) {
(0059) DDRD = 0xff;
_LcdInit:
A2 EF8F LDI R24,0xFF
A3 BB81 OUT 0x11,R24
(0060) PORTD = 0x00;
A4 2422 CLR R2
A5 BA22 OUT 0x12,R2
(0061) writecom(0x38);
A6 E308 LDI R16,0x38
A7 DFDE RCALL _writecom
(0062) s_ms(1000);
A8 EE08 LDI R16,0xE8
A9 E013 LDI R17,3
AA DFA7 RCALL _s_ms
(0063) writecom(0x01);
AB E001 LDI R16,1
AC DFD9 RCALL _writecom
(0064) s_ms(1000);
AD EE08 LDI R16,0xE8
AE E013 LDI R17,3
AF DFA2 RCALL _s_ms
(0065) //s_ms(1000);
(0066) writecom(0x02);
B0 E002 LDI R16,2
B1 DFD4 RCALL _writecom
(0067) s_ms(200);
B2 EC08 LDI R16,0xC8
B3 E010 LDI R17,0
B4 DF9D RCALL _s_ms
(0068) writecom(0x06);
B5 E006 LDI R16,6
B6 DFCF RCALL _writecom
(0069) s_ms(200);
B7 EC08 LDI R16,0xC8
B8 E010 LDI R17,0
B9 DF98 RCALL _s_ms
(0070) writecom(0x0c);
BA E00C LDI R16,0xC
BB DFCA RCALL _writecom
(0071) s_ms(200);
BC EC08 LDI R16,0xC8
BD E010 LDI R17,0
BE DF93 RCALL _s_ms
(0072) writecom(0x38);
BF E308 LDI R16,0x38
C0 DFC5 RCALL _writecom
(0073) s_ms(200);
C1 EC08 LDI R16,0xC8
C2 E010 LDI R17,0
C3 CF8E RJMP _s_ms
_writedata:
data --> R10
C4 92AA ST R10,-Y
C5 2EA0 MOV R10,R16
(0074) }
(0075)
(0076) //寫數(shù)據(jù)
(0077) void writedata(uchar data)
(0078) {
(0079) busy();
C6 DF94 RCALL _busy
(0080) s_ms(200);
C7 EC08 LDI R16,0xC8
C8 E010 LDI R17,0
C9 DF88 RCALL _s_ms
(0081) PORTA|=(1<<RS); //RS=1
CA 9ADD SBI 0x1B,5
(0082) s_ms(200);
CB EC08 LDI R16,0xC8
CC E010 LDI R17,0
CD DF84 RCALL _s_ms
(0083) PORTA&=~(1<<RW); //RW=0
CE 98DE CBI 0x1B,6
(0084) s_ms(200);
CF EC08 LDI R16,0xC8
D0 E010 LDI R17,0
D1 DF80 RCALL _s_ms
(0085) PORTA|=(1<<EN); //EN=1
D2 9ADF SBI 0x1B,7
(0086) s_ms(200);
D3 EC08 LDI R16,0xC8
D4 E010 LDI R17,0
D5 DF7C RCALL _s_ms
(0087) PORTD = data; //輸出數(shù)據(jù)
D6 BAA2 OUT 0x12,R10
(0088) s_ms(200);
D7 EC08 LDI R16,0xC8
D8 E010 LDI R17,0
D9 DF78 RCALL _s_ms
(0089) PORTA&=~(1<<EN); //EN=0
DA 98DF CBI 0x1B,7
(0090) s_ms(200);
DB EC08 LDI R16,0xC8
DC E010 LDI R17,0
DD DF74 RCALL _s_ms
DE 90A9 LD R10,Y+
DF 9508 RET
_readdata:
temp --> R10
E0 92AA ST R10,-Y
(0091) }
(0092)
(0093)
(0094) //讀數(shù)據(jù)
(0095) uchar readdata(void)
(0096) {
(0097) uchar temp;
(0098) busy();
E1 DF79 RCALL _busy
(0099) s_ms(200);
E2 EC08 LDI R16,0xC8
E3 E010 LDI R17,0
E4 DF6D RCALL _s_ms
(0100) PORTA|=(1<<RS); //RS=1
E5 9ADD SBI 0x1B,5
(0101) s_ms(200);
E6 EC08 LDI R16,0xC8
E7 E010 LDI R17,0
E8 DF69 RCALL _s_ms
(0102) PORTA|=(1<<RW); //RW=1
E9 9ADE SBI 0x1B,6
(0103) s_ms(200);
EA EC08 LDI R16,0xC8
EB E010 LDI R17,0
EC DF65 RCALL _s_ms
ED 9ADF SBI 0x1B,7
(0105) s_ms(200);
EE EC08 LDI R16,0xC8
EF E010 LDI R17,0
F0 DF61 RCALL _s_ms
(0106) DDRD=0x00; //A端口變輸入
F1 2422 CLR R2
F2 BA21 OUT 0x11,R2
(0107) s_ms(200);
F3 EC08 LDI R16,0xC8
F4 E010 LDI R17,0
F5 DF5C RCALL _s_ms
(0108) temp = PIND; //讀A端口
F6 B2A0 IN R10,0x10
(0109) s_ms(200);
F7 EC08 LDI R16,0xC8
F8 E010 LDI R17,0
F9 DF58 RCALL _s_ms
(0110) DDRD=0xff; //A端口變輸出
FA EF8F LDI R24,0xFF
FB BB81 OUT 0x11,R24
(0111) s_ms(200);
FC EC08 LDI R16,0xC8
FD E010 LDI R17,0
FE DF53 RCALL _s_ms
(0112) PORTA&=~(1<<EN); //EN=0
FF 98DF CBI 0x1B,7
(0113) s_ms(200);
100 EC08 LDI R16,0xC8
101 E010 LDI R17,0
102 DF4F RCALL _s_ms
(0114) return temp;
103 2D0A MOV R16,R10
104 90A9 LD R10,Y+
105 9508 RET
_WriteCGRAM:
t --> R10
i --> R20
pBuffer --> R22
num --> R10
106 940E 03F4 CALL push_xgsetF00C
108 01B9 MOVW R22,R18
109 0158 MOVW R10,R16
(0115) }
(0116)
(0117) //=================================================
(0118) // 描述: 寫LCD內(nèi)部CGRAM函數(shù)
(0119) // 入口: ‘num’要寫的數(shù)據(jù)個數(shù)
(0120) // ‘pbuffer’要寫的數(shù)據(jù)的首地址
(0121) // 出口: 無
(0122) //================================================
(0123) void WriteCGRAM(uint num, const uint *pBuffer)
(0124) {
(0125) uint i,t;
(0126) writecom(0x40);
10A E400 LDI R16,0x40
10B DF7A RCALL _writecom
(0127) PORTA|=(1<<RS);
10C 9ADD SBI 0x1B,5
(0128) PORTA&=~(1<<RW);
10D 98DE CBI 0x1B,6
(0129) for(i=num;i!=0;i--)
10E 01A5 MOVW R20,R10
10F C00A RJMP 0x011A
(0130) {
(0131) t = *pBuffer;
110 01FB MOVW R30,R22
111 80A0 LDD R10,Z+0
112 80B1 LDD R11,Z+1
(0132) PORTA|=(1<<EN);
113 9ADF SBI 0x1B,7
(0133) PORTD = t;
114 BAA2 OUT 0x12,R10
(0134) PORTA&=~(1<<EN);
115 98DF CBI 0x1B,7
(0135) pBuffer++;
116 5F6E SUBI R22,0xFE
117 4F7F SBCI R23,0xFF
118 5041 SUBI R20,1
119 4050 SBCI R21,0
11A 3040 CPI R20,0
11B 0745 CPC R20,R21
11C F799 BNE 0x0110
11D 940C 03FB JMP pop_xgsetF00C
_WriteMenu:
t --> R10
i --> R22
pBuffer --> R20
11F 940E 03F4 CALL push_xgsetF00C
121 01A8 MOVW R20,R16
(0136) }
(0137)
(0138) }
(0139)
(0140) //=================================================
(0141) //描述:寫菜單函數(shù),本程序使用的LCD規(guī)格為 16 * 2
(0142) //入口:菜單數(shù)組首地址
(0143) //出口:無
(0144) //=================================================
(0145) void WriteMenu(const uchar *pBuffer)
(0146) {
(0147) uchar i,t;
(0148) writecom(0x80); //數(shù)據(jù)地址
122 E800 LDI R16,0x80
123 DF62 RCALL _writecom
(0149)
(0150) PORTA|=(1<<RS);
124 9ADD SBI 0x1B,5
(0151) PORTA&=~(1<<RW);
125 98DE CBI 0x1B,6
(0152) s_ms(50);
126 E302 LDI R16,0x32
127 E010 LDI R17,0
128 DF29 RCALL _s_ms
(0153) for(i=0;i<16;i++)
129 2766 CLR R22
12A C00B RJMP 0x0136
(0154) {
(0155) t = *pBuffer;
12B 01FA MOVW R30,R20
12C 80A0 LDD R10,Z+0
(0156) PORTD = t;
12D BAA2 OUT 0x12,R10
(0157) PORTA|=(1<<EN);
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -