📄 adc.lst
字号:
__start:
__text_start:
52 EFCF LDI R28,0xFF
53 E1D0 LDI R29,0x10
54 BFCD OUT 0x3D,R28
55 BFDE OUT 0x3E,R29
56 51CE SUBI R28,0x1E
57 40D0 SBCI R29,0
58 EA0A LDI R16,0xAA
59 8308 STD Y+0,R16
5A 2400 CLR R0
5B E1E8 LDI R30,0x18
5C E0F1 LDI R31,1
5D E011 LDI R17,1
5E 31E8 CPI R30,0x18
5F 07F1 CPC R31,R17
60 F011 BEQ 0x0063
61 9201 ST R0,Z+
62 CFFB RJMP 0x005E
63 8300 STD Z+0,R16
64 E8EC LDI R30,0x8C
65 E0F0 LDI R31,0
66 E0A0 LDI R26,0
67 E0B1 LDI R27,1
68 E010 LDI R17,0
69 E000 LDI R16,0
6A BF0B OUT 0x3B,R16
6B 3AE4 CPI R30,0xA4
6C 07F1 CPC R31,R17
6D F021 BEQ 0x0072
6E 95C8 LPM
6F 9631 ADIW R30,1
70 920D ST R0,X+
71 CFF9 RJMP 0x006B
72 940E 01FF CALL _main
_exit:
74 CFFF RJMP _exit
FILE: D:\16实验程序\模数转换\adc_1602\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
75 C002 RJMP 0x0078
76 5001 SUBI R16,1
77 4010 SBCI R17,0
78 E081 LDI R24,1
79 E090 LDI R25,0
7A 1780 CP R24,R16
7B 0791 CPC R25,R17
7C F3C8 BCS 0x0076
7D 9508 RET
_busy:
temp --> R20
7E 934A ST R20,-Y
(0011) }
(0012)
(0013) //查忙
(0014) void busy(void)
(0015) {
(0016) uchar temp;
(0017) s_ms(500);
7F EF04 LDI R16,0xF4
80 E011 LDI R17,1
81 DFF3 RCALL _s_ms
(0018) PORTA&=~(1<<RS); //RS=0
82 98DD CBI 0x1B,5
(0019) s_ms(500);
83 EF04 LDI R16,0xF4
84 E011 LDI R17,1
85 DFEF RCALL _s_ms
(0020) PORTA|=(1<<RW); //RW=1
86 9ADE SBI 0x1B,6
(0021) s_ms(500);
87 EF04 LDI R16,0xF4
88 E011 LDI R17,1
89 DFEB RCALL _s_ms
8A C01A RJMP 0x00A5
(0022) while(temp)
(0023) {
(0024) PORTA|=(1<<EN); //EN=1
8B 9ADF SBI 0x1B,7
(0025) s_ms(500);
8C EF04 LDI R16,0xF4
8D E011 LDI R17,1
8E DFE6 RCALL _s_ms
(0026) DDRD=0x00; //A口变输入
8F 2422 CLR R2
90 BA21 OUT 0x11,R2
(0027) PORTD=0xff; //上拉使能
91 EF8F LDI R24,0xFF
92 BB82 OUT 0x12,R24
(0028) s_ms(500);
93 EF04 LDI R16,0xF4
94 E011 LDI R17,1
95 DFDF RCALL _s_ms
(0029) temp = PIND&0x80; //读取A口
96 B340 IN R20,0x10
97 7840 ANDI R20,0x80
(0030) s_ms(500);
98 EF04 LDI R16,0xF4
99 E011 LDI R17,1
9A DFDA RCALL _s_ms
(0031) DDRD=0xff;
9B EF8F LDI R24,0xFF
9C BB81 OUT 0x11,R24
(0032) PORTD=0xff; //A口变输出
9D BB82 OUT 0x12,R24
(0033) s_ms(500);
9E EF04 LDI R16,0xF4
9F E011 LDI R17,1
A0 DFD4 RCALL _s_ms
(0034) PORTA&=~(1<<EN); //EN=0
A1 98DF CBI 0x1B,7
(0035) s_ms(500);
A2 EF04 LDI R16,0xF4
A3 E011 LDI R17,1
A4 DFD0 RCALL _s_ms
A5 2344 TST R20
A6 F721 BNE 0x008B
A7 9149 LD R20,Y+
A8 9508 RET
_writecom:
com --> R10
A9 92AA ST R10,-Y
AA 2EA0 MOV R10,R16
(0036) }
(0037) }
(0038)
(0039) //写指令
(0040) void writecom(uchar com)
(0041) {
(0042) busy();
AB DFD2 RCALL _busy
(0043) s_ms(500);
AC EF04 LDI R16,0xF4
AD E011 LDI R17,1
AE DFC6 RCALL _s_ms
(0044) PORTA&=~(1<<RS); //RS=0
AF 98DD CBI 0x1B,5
(0045) s_ms(500);
B0 EF04 LDI R16,0xF4
B1 E011 LDI R17,1
B2 DFC2 RCALL _s_ms
(0046) PORTA&=~(1<<RW); //RW=0
B3 98DE CBI 0x1B,6
(0047) s_ms(500);
B4 EF04 LDI R16,0xF4
B5 E011 LDI R17,1
B6 DFBE RCALL _s_ms
(0048) PORTA|=(1<<EN); //EN=1
B7 9ADF SBI 0x1B,7
(0049) s_ms(500);
B8 EF04 LDI R16,0xF4
B9 E011 LDI R17,1
BA DFBA RCALL _s_ms
(0050) PORTD = com; //输出指令
BB BAA2 OUT 0x12,R10
(0051) s_ms(500);
BC EF04 LDI R16,0xF4
BD E011 LDI R17,1
BE DFB6 RCALL _s_ms
(0052) PORTA&=~(1<<EN); //EN=0
BF 98DF CBI 0x1B,7
(0053) s_ms(500);
C0 EF04 LDI R16,0xF4
C1 E011 LDI R17,1
C2 DFB2 RCALL _s_ms
C3 90A9 LD R10,Y+
C4 9508 RET
(0054) }
(0055)
(0056) //1602初始化
(0057) void LcdInit(void)
(0058) {
(0059) DDRD = 0xff;
_LcdInit:
C5 EF8F LDI R24,0xFF
C6 BB81 OUT 0x11,R24
(0060) PORTD = 0x00;
C7 2422 CLR R2
C8 BA22 OUT 0x12,R2
(0061) writecom(0x38);
C9 E308 LDI R16,0x38
CA DFDE RCALL _writecom
(0062) s_ms(1000);
CB EE08 LDI R16,0xE8
CC E013 LDI R17,3
CD DFA7 RCALL _s_ms
(0063) writecom(0x01);
CE E001 LDI R16,1
CF DFD9 RCALL _writecom
(0064) s_ms(1000);
D0 EE08 LDI R16,0xE8
D1 E013 LDI R17,3
D2 DFA2 RCALL _s_ms
(0065) s_ms(1000);
D3 EE08 LDI R16,0xE8
D4 E013 LDI R17,3
D5 DF9F RCALL _s_ms
(0066) s_ms(1000);
D6 EE08 LDI R16,0xE8
D7 E013 LDI R17,3
D8 DF9C RCALL _s_ms
(0067) s_ms(1000);
D9 EE08 LDI R16,0xE8
DA E013 LDI R17,3
DB DF99 RCALL _s_ms
(0068) s_ms(1000);
DC EE08 LDI R16,0xE8
DD E013 LDI R17,3
DE DF96 RCALL _s_ms
(0069) s_ms(1000);
DF EE08 LDI R16,0xE8
E0 E013 LDI R17,3
E1 DF93 RCALL _s_ms
(0070) s_ms(1000);
E2 EE08 LDI R16,0xE8
E3 E013 LDI R17,3
E4 DF90 RCALL _s_ms
(0071) writecom(0x02);
E5 E002 LDI R16,2
E6 DFC2 RCALL _writecom
(0072) s_ms(1000);
E7 EE08 LDI R16,0xE8
E8 E013 LDI R17,3
E9 DF8B RCALL _s_ms
(0073) writecom(0x06);
EA E006 LDI R16,6
EB DFBD RCALL _writecom
(0074) s_ms(1000);
EC EE08 LDI R16,0xE8
ED E013 LDI R17,3
EE DF86 RCALL _s_ms
(0075) writecom(0x0c);
EF E00C LDI R16,0xC
F0 DFB8 RCALL _writecom
(0076) s_ms(1000);
F1 EE08 LDI R16,0xE8
F2 E013 LDI R17,3
F3 DF81 RCALL _s_ms
(0077) writecom(0x38);
F4 E308 LDI R16,0x38
F5 DFB3 RCALL _writecom
(0078) s_ms(1000);
F6 EE08 LDI R16,0xE8
F7 E013 LDI R17,3
F8 DF7C RCALL _s_ms
F9 9508 RET
_writedata:
data --> R10
FA 92AA ST R10,-Y
FB 2EA0 MOV R10,R16
(0079) }
(0080)
(0081) //写数据
(0082) void writedata(uchar data)
(0083) {
(0084) busy();
FC DF81 RCALL _busy
(0085) s_ms(500);
FD EF04 LDI R16,0xF4
FE E011 LDI R17,1
FF DF75 RCALL _s_ms
(0086) PORTA|=(1<<RS); //RS=1
100 9ADD SBI 0x1B,5
(0087) s_ms(500);
101 EF04 LDI R16,0xF4
102 E011 LDI R17,1
103 DF71 RCALL _s_ms
(0088) PORTA&=~(1<<RW); //RW=0
104 98DE CBI 0x1B,6
(0089) s_ms(500);
105 EF04 LDI R16,0xF4
106 E011 LDI R17,1
107 DF6D RCALL _s_ms
(0090) PORTA|=(1<<EN); //EN=1
108 9ADF SBI 0x1B,7
(0091) s_ms(500);
109 EF04 LDI R16,0xF4
10A E011 LDI R17,1
10B DF69 RCALL _s_ms
(0092) PORTD = data; //输出数据
10C BAA2 OUT 0x12,R10
(0093) s_ms(500);
10D EF04 LDI R16,0xF4
10E E011 LDI R17,1
10F DF65 RCALL _s_ms
(0094) PORTA&=~(1<<EN); //EN=0
110 98DF CBI 0x1B,7
(0095) s_ms(500);
111 EF04 LDI R16,0xF4
112 E011 LDI R17,1
113 DF61 RCALL _s_ms
114 90A9 LD R10,Y+
115 9508 RET
_readdata:
temp --> R10
116 92AA ST R10,-Y
(0096) }
(0097)
(0098)
(0099) //读数据
(0100) uchar readdata(void)
(0101) {
(0102) uchar temp;
(0103) busy();
117 DF66 RCALL _busy
(0104) s_ms(500);
118 EF04 LDI R16,0xF4
119 E011 LDI R17,1
11A DF5A RCALL _s_ms
(0105) PORTA|=(1<<RS); //RS=1
11B 9ADD SBI 0x1B,5
(0106) s_ms(500);
11C EF04 LDI R16,0xF4
11D E011 LDI R17,1
11E DF56 RCALL _s_ms
(0107) PORTA|=(1<<RW); //RW=1
11F 9ADE SBI 0x1B,6
(0108) s_ms(500);
120 EF04 LDI R16,0xF4
121 E011 LDI R17,1
122 DF52 RCALL _s_ms
(0109) PORTA|=(1<<EN); //EN=1
123 9ADF SBI 0x1B,7
(0110) s_ms(500);
124 EF04 LDI R16,0xF4
125 E011 LDI R17,1
126 DF4E RCALL _s_ms
(0111) DDRD=0x00; //A端口变输入
127 2422 CLR R2
128 BA21 OUT 0x11,R2
(0112) s_ms(500);
129 EF04 LDI R16,0xF4
12A E011 LDI R17,1
12B DF49 RCALL _s_ms
(0113) temp = PIND; //读A端口
12C B2A0 IN R10,0x10
(0114) s_ms(500);
12D EF04 LDI R16,0xF4
12E E011 LDI R17,1
12F DF45 RCALL _s_ms
(0115) DDRD=0xff; //A端口变输出
130 EF8F LDI R24,0xFF
131 BB81 OUT 0x11,R24
(0116) s_ms(500);
132 EF04 LDI R16,0xF4
133 E011 LDI R17,1
134 DF40 RCALL _s_ms
(0117) PORTA&=~(1<<EN); //EN=0
135 98DF CBI 0x1B,7
(0118) s_ms(500);
136 EF04 LDI R16,0xF4
137 E011 LDI R17,1
138 DF3C RCALL _s_ms
(0119) return temp;
139 2D0A MOV R16,R10
13A 90A9 LD R10,Y+
13B 9508 RET
_WriteCGRAM:
t --> R10
i --> R20
pBuffer --> R22
num --> R10
13C 940E 02C7 CALL push_xgsetF00C
13E 01B9 MOVW R22,R18
13F 0158 MOVW R10,R16
(0120) }
(0121)
(0122) //=================================================
(0123) // 描述: 写LCD内部CGRAM函数
(0124) // 入口: ‘num’要写的数据个数
(0125) // ‘pbuffer’要写的数据的首地址
(0126) // 出口: 无
(0127) //================================================
(0128) void WriteCGRAM(uint num, const uint *pBuffer)
(0129) {
(0130) uint i,t;
(0131) writecom(0x40);
140 E400 LDI R16,0x40
141 DF67 RCALL _writecom
(0132) PORTA|=(1<<RS);
142 9ADD SBI 0x1B,5
(0133) PORTA&=~(1<<RW);
143 98DE CBI 0x1B,6
(0134) for(i=num;i!=0;i--)
144 01A5 MOVW R20,R10
145 C00A RJMP 0x0150
(0135) {
(0136) t = *pBuffer;
146 01FB MOVW R30,R22
147 90A7 ELPM R10,Z+
148 90B6 ELPM R11,10(Z)
(0137) PORTA|=(1<<EN);
149 9ADF SBI 0x1B,7
(0138) PORTD = t;
14A BAA2 OUT 0x12,R10
(0139) PORTA&=~(1<<EN);
14B 98DF CBI 0x1B,7
(0140) pBuffer++;
14C 5F6E SUBI R22,0xFE
14D 4F7F SBCI R23,0xFF
14E 5041 SUBI R20,1
14F 4050 SBCI R21,0
150 3040 CPI R20,0
151 0745 CPC R20,R21
152 F799 BNE 0x0146
153 940C 02CE JMP pop_xgsetF00C
_WriteMenu:
t --> R10
i --> R22
pBuffer --> R20
155 940E 02C7 CALL push_xgsetF00C
157 01A8 MOVW R20,R16
(0141) }
(0142)
(0143) }
(0144)
(0145) //=================================================
(0146) //描述:写菜单函数,本程序使用的LCD规格为 16 * 2
(0147) //入口:菜单数组首地址
(0148) //出口:无
(0149) //=================================================
(0150) void WriteMenu(const uchar *pBuffer)
(0151) {
(0152) uchar i,t;
(0153) writecom(0x80); //数据地址
158 E800 LDI R16,0x80
159 DF4F RCALL _writecom
(0154)
(0155) PORTA|=(1<<RS);
15A 9ADD SBI 0x1B,5
(0156) PORTA&=~(1<<RW);
15B 98DE CBI 0x1B,6
(0157) s_ms(50);
15C E302 LDI R16,0x32
15D E010 LDI R17,0
15E DF16 RCALL _s_ms
(0158) for(i=0;i<16;i++)
15F 2766 CLR R22
160 C00B RJMP 0x016C
(0159) {
(0160) t = *pBuffer;
161 01FA MOVW R30,R20
162 90A6 ELPM R10,11(Z)
(0161) PORTD = t;
163 BAA2 OUT 0x12,R10
(0162) PORTA|=(1<<EN);
164 9ADF SBI 0x1B,7
(0163) s_ms(50);
165 E302 LDI R16,0x32
166 E010 LDI R17,0
167 DF0D RCALL _s_ms
(0164) PORTA&=~(1<<EN);
168 98DF CBI 0x1B,7
(0165) pBuffer++;
169 5F4F SUBI R20,0xFF
16A 4F5F SBCI R21,0xFF
16B 9563 INC R22
16C 3160 CPI R22,0x10
16D F398 BCS 0x0161
(0166) }
(0167) writecom(0xC0);
16E EC00 LDI R16,0xC0
16F DF39 RCALL _writecom
(0168)
(0169) PORTA|=(1<<RS);
170 9ADD SBI 0x1B,5
(0170) PORTA&=~(1<<RW);
171 98DE CBI 0x1B,6
(0171) s_ms(50);
172 E302 LDI R16,0x32
173 E010 LDI R17,0
174 DF00 RCALL _s_ms
(0172) for(i=0;i<16;i++)
175 2766 CLR R22
176 C00B RJMP 0x0182
(0173) {
(0174) t = *pBuffer;
177 01FA MOVW R30,R20
178 90A6 ELPM R10,11(Z)
(0175) PORTD = t;
179 BAA2 OUT 0x12,R10
(0176) PORTA|=(1<<EN);
17A 9ADF SBI 0x1B,7
(0177) s_ms(50);
17B E302 LDI R16,0x32
17C E010 LDI R17,0
17D DEF7 RCALL _s_ms
(0178) PORTA&=~(1<<EN);
17E 98DF CBI 0x1B,7
(0179) pBuffer++;
17F 5F4F SUBI R20,0xFF
180 4F5F SBCI R21,0xFF
181 9563 INC R22
182 3160 CPI R22,0x10
183 F398 BCS 0x0177
184 940C 02CE JMP pop_xgsetF00C
_WriteNum:
num --> R20
col --> R10
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -