📄 test.lst
字号:
124 E030 LDI R19,0
125 2700 CLR R16
126 2711 CLR R17
127 DF97 RCALL _LCD_write_char
128 9543 INC R20
129 3140 CPI R20,0x10
12A F3C0 BCS 0x0123
12B 9149 LD R20,Y+
12C 9508 RET
_LCD_write_string:
s --> R20
Y --> R12
X --> R10
12D 940E 0383 CALL push_xgset303C
12F 2EC2 MOV R12,R18
130 2EA0 MOV R10,R16
131 814E LDD R20,Y+6
132 815F LDD R21,Y+7
(0114) }
(0115) /*-------------------------------------------------------------
(0116) 函数: 写字符串
(0117) 参数:列---X=0~15,行---Y=0~1 写地址
(0118) s为所要写的字符串
(0119) ---------------------------------------------------------------*/
(0120) void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s)
(0121) {
(0122) LCD_set_xy(X,Y);
133 2D2C MOV R18,R12
134 2D0A MOV R16,R10
135 DF71 RCALL _LCD_set_xy
136 C008 RJMP 0x013F
(0123) while(*s)
(0124) {
(0125) LCD_write_char(0,*s);
137 01FA MOVW R30,R20
138 8120 LDD R18,Z+0
139 2733 CLR R19
13A 2700 CLR R16
13B 2711 CLR R17
13C DF82 RCALL _LCD_write_char
(0126) s++;
13D 5F4F SUBI R20,0xFF
13E 4F5F SBCI R21,0xFF
13F 01FA MOVW R30,R20
140 8020 LDD R2,Z+0
141 2022 TST R2
142 F7A1 BNE 0x0137
143 940C 038A JMP pop_xgset303C
_LCD_write_data:
data --> Y,+0
i --> R20
dat --> R14
Y --> R12
X --> R10
145 940E 036C CALL push_xgset30FC
147 2EC2 MOV R12,R18
148 2EA0 MOV R10,R16
149 9724 SBIW R28,4
14A 84EC LDD R14,Y+12
14B 84FD LDD R15,Y+13
(0127) }
(0128) }
(0129)
(0130) /*-------------------------------------------------------------
(0131) 函数: 写数字
(0132) 参数:列---X=0~15,行---Y=0~1 写地址
(0133) dat为所要写的数字
(0134) ---------------------------------------------------------------*/
(0135) void LCD_write_data(unsigned char X,unsigned char Y,int dat)
(0136) {
(0137) unsigned char data[4];
(0138) unsigned char i;
(0139)
(0140) data[0]=dat/1000+0x30; dat%=1000;
14C EE28 LDI R18,0xE8
14D E033 LDI R19,3
14E 0187 MOVW R16,R14
14F 940E 02C1 CALL div16s
151 01C8 MOVW R24,R16
152 96C0 ADIW R24,0x30
153 8388 STD Y+0,R24
154 EE28 LDI R18,0xE8
155 E033 LDI R19,3
156 0187 MOVW R16,R14
157 940E 02BD CALL mod16s
159 0178 MOVW R14,R16
(0141) data[1]=dat/100+0x30; dat%=100;
15A E624 LDI R18,0x64
15B E030 LDI R19,0
15C 940E 02C1 CALL div16s
15E 01C8 MOVW R24,R16
15F 96C0 ADIW R24,0x30
160 8389 STD Y+1,R24
161 E624 LDI R18,0x64
162 E030 LDI R19,0
163 0187 MOVW R16,R14
164 940E 02BD CALL mod16s
166 0178 MOVW R14,R16
(0142) data[2]=dat/10+0x30;
167 E02A LDI R18,0xA
168 E030 LDI R19,0
169 940E 02C1 CALL div16s
16B 01C8 MOVW R24,R16
16C 96C0 ADIW R24,0x30
16D 838A STD Y+2,R24
(0143) data[3]=dat%10+0x30;
16E E02A LDI R18,0xA
16F E030 LDI R19,0
170 0187 MOVW R16,R14
171 940E 02BD CALL mod16s
173 01C8 MOVW R24,R16
174 96C0 ADIW R24,0x30
175 838B STD Y+3,R24
(0144)
(0145) LCD_set_xy(X,Y);
176 2D2C MOV R18,R12
177 2D0A MOV R16,R10
178 DF2E RCALL _LCD_set_xy
(0146) for(i=0;i<4;i++)
179 2744 CLR R20
17A C00B RJMP 0x0186
(0147) LCD_write_char(0,data[i]);
17B 01CE MOVW R24,R28
17C 2FE4 MOV R30,R20
17D 27FF CLR R31
17E 0FE8 ADD R30,R24
17F 1FF9 ADC R31,R25
180 8120 LDD R18,Z+0
181 2733 CLR R19
182 2700 CLR R16
183 2711 CLR R17
184 DF3A RCALL _LCD_write_char
185 9543 INC R20
186 3044 CPI R20,4
187 F398 BCS 0x017B
188 9624 ADIW R28,4
189 940C 0361 JMP pop_xgset30FC
_max144_read:
adc --> Y,+0
adc_temp --> R10
temp --> R12
18B 940E 0391 CALL push_xgsetF03C
18D 9724 SBIW R28,4
FILE: D:\iccavr\mega16\11\max144\max144.h
(0001) //**********ADC口线定义**********//
(0002) #define adc_cs PA5
(0003) #define adc_sdat PA6
(0004) #define adc_sclk PA7
(0005) #define adc_port PORTA
(0006) #define adc_ddr DDRA
(0007) #define adc_pin PINA
(0008)
(0009) unsigned int adc_out1,adc_out0;
(0010) unsigned int adcttemp[2][15];
(0011) unsigned int adcfirst[2];
(0012)
(0013) void max144_read(void)
(0014) {
(0015) unsigned char temp;
(0016) unsigned int adc_temp=0;
18E 24AA CLR R10
18F 24BB CLR R11
(0017) unsigned long adc;
(0018)
(0019) /*********max144模拟SPI口线设置**********/
(0020) adc_port|=BIT(adc_cs)|BIT(adc_sdat)|BIT(adc_sclk);
190 B38B IN R24,0x1B
191 6E80 ORI R24,0xE0
192 BB8B OUT 0x1B,R24
(0021) adc_ddr|=BIT(adc_cs)|BIT(adc_sclk);
193 B38A IN R24,0x1A
194 6A80 ORI R24,0xA0
195 BB8A OUT 0x1A,R24
(0022) adc_ddr&=~BIT(adc_sdat);
196 98D6 CBI 0x1A,6
(0023)
(0024) adc_port|=BIT(adc_cs);
197 9ADD SBI 0x1B,5
(0025) adc_port|=BIT(adc_sclk);
198 9ADF SBI 0x1B,7
(0026) adc_port&=~BIT(adc_cs);
199 98DD CBI 0x1B,5
(0027) asm("nop");asm("nop");asm("nop");asm("nop");
19A 0000 NOP
19B 0000 NOP
19C 0000 NOP
19D 0000 NOP
(0028) adc_port&=~BIT(adc_sclk);
19E 98DF CBI 0x1B,7
19F C005 RJMP 0x01A5
(0029) while(1)
(0030) {
(0031) if((adc_pin&BIT(adc_sdat))==BIT(adc_sdat))
1A0 B389 IN R24,0x19
1A1 7480 ANDI R24,0x40
1A2 3480 CPI R24,0x40
1A3 F409 BNE 0x01A5
(0032) break;
1A4 C001 RJMP 0x01A6
1A5 CFFA RJMP 0x01A0
(0033) }
(0034) temp=16; while(temp--)
1A6 E180 LDI R24,0x10
1A7 2EC8 MOV R12,R24
1A8 C00B RJMP 0x01B4
(0035) {
(0036) adc_port|=BIT(adc_sclk);
1A9 9ADF SBI 0x1B,7
(0037) if((adc_pin&BIT(adc_sdat))==BIT(adc_sdat))
1AA B389 IN R24,0x19
1AB 7480 ANDI R24,0x40
1AC 3480 CPI R24,0x40
1AD F419 BNE 0x01B1
(0038) adc_temp++;
1AE 01C5 MOVW R24,R10
1AF 9601 ADIW R24,1
1B0 015C MOVW R10,R24
(0039) adc_temp=adc_temp<<1;
1B1 0CAA LSL R10
1B2 1CBB ROL R11
(0040) adc_port&=~BIT(adc_sclk);
1B3 98DF CBI 0x1B,7
1B4 2C2C MOV R2,R12
1B5 2433 CLR R3
1B6 2D82 MOV R24,R2
1B7 5081 SUBI R24,1
1B8 2EC8 MOV R12,R24
1B9 2022 TST R2
1BA F771 BNE 0x01A9
(0041) }
(0042) adc_port|=BIT(adc_cs);
1BB 9ADD SBI 0x1B,5
(0043)
(0044) if((adc_temp&0x2000)==0x2000)
1BC 01C5 MOVW R24,R10
1BD 7080 ANDI R24,0
1BE 7290 ANDI R25,0x20
1BF 3080 CPI R24,0
1C0 E2A0 LDI R26,0x20
1C1 079A CPC R25,R26
1C2 F009 BEQ 0x01C4
1C3 C067 RJMP 0x022B
(0045) {
(0046) adcfirst[0]=(adc_temp>>1)&0xfff;
1C4 01C5 MOVW R24,R10
1C5 9596 LSR R25
1C6 9587 ROR R24
1C7 709F ANDI R25,0xF
1C8 9390 0083 STS adcfirst+1,R25
1CA 9380 0082 STS adcfirst,R24
(0047) adc_temp&=0x1ffc;
1CC 01C5 MOVW R24,R10
1CD 7F8C ANDI R24,0xFC
1CE 719F ANDI R25,0x1F
1CF 015C MOVW R10,R24
(0048) adc=adc_temp;
1D0 011C MOVW R2,R24
1D1 2444 CLR R4
1D2 2455 CLR R5
1D3 8228 STD Y+0,R2
1D4 8239 STD Y+1,R3
1D5 824A STD Y+2,R4
1D6 825B STD Y+3,R5
(0049) adcttemp[0][14]=adc_temp;
1D7 92B0 00A3 STS 0x00A3,R11
1D9 92A0 00A2 STS 0x00A2,R10
(0050) for(temp=0;temp<14;temp++)
1DB 24CC CLR R12
1DC C02A RJMP 0x0207
(0051) {
(0052) adcttemp[0][temp]=adcttemp[0][temp+1];
1DD E886 LDI R24,0x86
1DE E090 LDI R25,0
1DF 2DEC MOV R30,R12
1E0 27FF CLR R31
1E1 9631 ADIW R30,1
1E2 0FEE LSL R30
1E3 1FFF ROL R31
1E4 0FE8 ADD R30,R24
1E5 1FF9 ADC R31,R25
1E6 8020 LDD R2,Z+0
1E7 8031 LDD R3,Z+1
1E8 2DEC MOV R30,R12
1E9 27FF CLR R31
1EA 0FEE LSL R30
1EB 1FFF ROL R31
1EC 0FE8 ADD R30,R24
1ED 1FF9 ADC R31,R25
1EE 8231 STD Z+1,R3
1EF 8220 STD Z+0,R2
(0053) adc+=adcttemp[0][temp];
1F0 2DEC MOV R30,R12
1F1 27FF CLR R31
1F2 0FEE LSL R30
1F3 1FFF ROL R31
1F4 0FE8 ADD R30,R24
1F5 1FF9 ADC R31,R25
1F6 8020 LDD R2,Z+0
1F7 8031 LDD R3,Z+1
1F8 2444 CLR R4
1F9 2455 CLR R5
1FA 8068 LDD R6,Y+0
1FB 8079 LDD R7,Y+1
1FC 808A LDD R8,Y+2
1FD 809B LDD R9,Y+3
1FE 0C62 ADD R6,R2
1FF 1C73 ADC R7,R3
200 1C84 ADC R8,R4
201 1C95 ADC R9,R5
202 8268 STD Y+0,R6
203 8279 STD Y+1,R7
204 828A STD Y+2,R8
205 829B STD Y+3,R9
206 94C3 INC R12
207 2D8C MOV R24,R12
208 308E CPI R24,0xE
209 F298 BCS 0x01DD
(0054) }
(0055) adc/=15;
20A E04F LDI R20,0xF
20B E050 LDI R21,0
20C E060 LDI R22,0
20D E070 LDI R23,0
20E 8108 LDD R16,Y+0
20F 8119 LDD R17,Y+1
210 812A LDD R18,Y+2
211 813B LDD R19,Y+3
212 937A ST R23,-Y
213 936A ST R22,-Y
214 935A ST R21,-Y
215 934A ST R20,-Y
216 940E 02F7 CALL div32u
218 8308 STD Y+0,R16
219 8319 STD Y+1,R17
21A 832A STD Y+2,R18
21B 833B STD Y+3,R19
(0056) adc_temp=adc;
21C 80A8 LDD R10,Y+0
21D 80B9 LDD R11,Y+1
(0057) adc_out1=adc>>1;
21E 8028 LDD R2,Y+0
21F 8039 LDD R3,Y+1
220 804A LDD R4,Y+2
221 805B LDD R5,Y+3
222 9456 LSR R5
223 9447 ROR R4
224 9437 ROR R3
225 9427 ROR R2
226 9230 00C5 STS adc_out1+1,R3
228 9220 00C4 STS adc_out1,R2
(0058) }
22A C066 RJMP 0x0291
(0059) else
(0060) {
(0061) adcfirst[1]=(adc_temp>>1)&0xfff;
22B 01C5 MOVW R24,R10
22C 9596 LSR R25
22D 9587 ROR R24
22E 709F ANDI R25,0xF
22F 9390 0085 STS adcfirst+3,R25
231 9380 0084 STS adcfirst+2,R24
(0062) adc_temp&=0x1ffc;
233 01C5 MOVW R24,R10
234 7F8C ANDI R24,0xFC
235 719F ANDI R25,0x1F
236 015C MOVW R10,R24
(0063) adc=adc_temp;
237 011C MOVW R2,R24
238 2444 CLR R4
239 2455 CLR R5
23A 8228 STD Y+0,R2
23B 8239 STD Y+1,R3
23C 824A STD Y+2,R4
23D 825B STD Y+3,R5
(0064) adcttemp[1][14]=adc_temp;
23E 92B0 00C1 STS 0x00C1,R11
240 92A0 00C0 STS 0x00C0,R10
(0065) for(temp=0;temp<14;temp++)
242 24CC CLR R12
243 C02A RJMP 0x026E
(0066) {
(0067) adcttemp[1][temp]=adcttemp[1][temp+1];
244 EA84 LDI R24,0xA4
245 E090 LDI R25,0
246 2DEC MOV R30,R12
247 27FF CLR R31
248 9631 ADIW R30,1
249 0FEE LSL R30
24A 1FFF ROL R31
24B 0FE8 ADD R30,R24
24C 1FF9 ADC R31,R25
24D 8020 LDD R2,Z+0
24E 8031 LDD R3,Z+1
24F 2DEC MOV R30,R12
250 27FF CLR R31
251 0FEE LSL R30
252 1FFF ROL R31
253 0FE8 ADD R30,R24
254 1FF9 ADC R31,R25
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -