📄 rctest.lst
字号:
(0212) PORTB &= ~LCD_DC_PIN ; // 传送命令
01EC 98C2 CBI 0x18,2
01ED C001 RJMP 0x01EF
(0213) else
(0214) PORTB |= LCD_DC_PIN ; // 传送数据
01EE 9AC2 SBI 0x18,2
(0215)
(0216) SPDR = data; // 传送数据到SPI寄存器
01EF B90F OUT 0x0F,R16
(0217)
(0218) while ((SPSR & 0x80) == 0); // 等待数据传送完毕
01F0 9B77 SBIS 0x0E,7
01F1 CFFE RJMP 0x01F0
(0219)
(0220) PORTB |= LCD_CE_PIN ; // 关闭LCD
01F2 9AC1 SBI 0x18,1
01F3 9508 RET
(0221) }
(0222) /*--------------------------------------------------------------------------------------------------
(0223) Name : Delay
(0224) Description : Uncalibrated delay for LCD init routine.
(0225) Argument(s) : None.
(0226) Return value : None.
(0227) --------------------------------------------------------------------------------------------------*/
(0228) static void Delay ( void )
(0229) {
(0230) int i;
(0231) for ( i = -12000; i < 12000; i++ );
_Delay:
i --> R16
01F4 E200 LDI R16,0x20
01F5 ED11 LDI R17,0xD1
01F6 5F0F SUBI R16,0xFF
01F7 4F1F SBCI R17,0xFF
01F8 3E00 CPI R16,0xE0
01F9 E2EE LDI R30,0x2E
01FA 071E CPC R17,R30
01FB F3D4 BLT 0x01F6
01FC 9508 RET
_lcd_show:
tmp --> R20
i --> R22
DOT --> R10
r --> R12
01FD 940E043B CALL push_gset4
01FF 0159 MOVW R10,R18
0200 0168 MOVW R12,R16
(0232) }
(0233)
(0234) void lcd_show(unsigned int r,unsigned int DOT)
(0235) {
(0236) unsigned char tmp=0,i=0;
0201 2744 CLR R20
0202 2766 CLR R22
(0237) if(r >1000)
0203 EE88 LDI R24,0xE8
0204 E093 LDI R25,3
0205 158C CP R24,R12
0206 059D CPC R25,R13
0207 F4C0 BCC 0x0220
(0238) {
(0239) tmp=r/1000;
0208 EE28 LDI R18,0xE8
0209 E033 LDI R19,3
020A 0186 MOVW R16,R12
020B 940E0409 CALL div16u
020D 2F40 MOV R20,R16
(0240) for(i=0;i<5;i++)
020E C00F RJMP 0x021E
(0241) LcdSend(FontLookup[tmp][i],1);
020F E021 LDI R18,1
0210 E085 LDI R24,5
0211 9F84 MUL R24,R20
0212 0110 MOVW R2,R0
0213 E584 LDI R24,0x54
0214 E090 LDI R25,0
0215 0E28 ADD R2,R24
0216 1E39 ADC R3,R25
0217 2FE6 MOV R30,R22
0218 27FF CLR R31
0219 0DE2 ADD R30,R2
021A 1DF3 ADC R31,R3
021B 9104 LPM R16,0(Z)
021C DFCC RCALL _LcdSend
021D 9563 INC R22
021E 3065 CPI R22,5
021F F378 BCS 0x020F
(0242) }
(0243) if(r >100)
0220 E684 LDI R24,0x64
0221 E090 LDI R25,0
0222 158C CP R24,R12
0223 059D CPC R25,R13
0224 F4E8 BCC 0x0242
(0244) {
(0245) tmp=(r%1000)/100;
0225 EE28 LDI R18,0xE8
0226 E033 LDI R19,3
0227 0186 MOVW R16,R12
0228 940E0407 CALL mod16u
022A E624 LDI R18,0x64
022B E030 LDI R19,0
022C 940E0409 CALL div16u
022E 2F40 MOV R20,R16
(0246) for(i=0;i<5;i++)
022F 2766 CLR R22
0230 C00F RJMP 0x0240
(0247) LcdSend(FontLookup[tmp][i],1);
0231 E021 LDI R18,1
0232 E085 LDI R24,5
0233 9F84 MUL R24,R20
0234 0110 MOVW R2,R0
0235 E584 LDI R24,0x54
0236 E090 LDI R25,0
0237 0E28 ADD R2,R24
0238 1E39 ADC R3,R25
0239 2FE6 MOV R30,R22
023A 27FF CLR R31
023B 0DE2 ADD R30,R2
023C 1DF3 ADC R31,R3
023D 9104 LPM R16,0(Z)
023E DFAA RCALL _LcdSend
023F 9563 INC R22
0240 3065 CPI R22,5
0241 F378 BCS 0x0231
(0248) }
(0249) if(r >10)
0242 E08A LDI R24,0xA
0243 E090 LDI R25,0
0244 158C CP R24,R12
0245 059D CPC R25,R13
0246 F4E8 BCC 0x0264
(0250) {
(0251) tmp=(r%100)/10;
0247 E624 LDI R18,0x64
0248 E030 LDI R19,0
0249 0186 MOVW R16,R12
024A 940E0407 CALL mod16u
024C E02A LDI R18,0xA
024D E030 LDI R19,0
024E 940E0409 CALL div16u
0250 2F40 MOV R20,R16
(0252) for(i=0;i<5;i++)
0251 2766 CLR R22
0252 C00F RJMP 0x0262
(0253) LcdSend(FontLookup[tmp][i],1);
0253 E021 LDI R18,1
0254 E085 LDI R24,5
0255 9F84 MUL R24,R20
0256 0110 MOVW R2,R0
0257 E584 LDI R24,0x54
0258 E090 LDI R25,0
0259 0E28 ADD R2,R24
025A 1E39 ADC R3,R25
025B 2FE6 MOV R30,R22
025C 27FF CLR R31
025D 0DE2 ADD R30,R2
025E 1DF3 ADC R31,R3
025F 9104 LPM R16,0(Z)
0260 DF88 RCALL _LcdSend
0261 9563 INC R22
0262 3065 CPI R22,5
0263 F378 BCS 0x0253
(0254) }
(0255)
(0256) tmp=r%10;
0264 E02A LDI R18,0xA
0265 E030 LDI R19,0
0266 0186 MOVW R16,R12
0267 940E0407 CALL mod16u
0269 2F40 MOV R20,R16
(0257)
(0258) for(i=0;i<5;i++)
026A 2766 CLR R22
026B C00F RJMP 0x027B
(0259) LcdSend(FontLookup[tmp][i],1);
026C E021 LDI R18,1
026D E085 LDI R24,5
026E 9F84 MUL R24,R20
026F 0110 MOVW R2,R0
0270 E584 LDI R24,0x54
0271 E090 LDI R25,0
0272 0E28 ADD R2,R24
0273 1E39 ADC R3,R25
0274 2FE6 MOV R30,R22
0275 27FF CLR R31
0276 0DE2 ADD R30,R2
0277 1DF3 ADC R31,R3
0278 9104 LPM R16,0(Z)
0279 DF6F RCALL _LcdSend
027A 9563 INC R22
027B 3065 CPI R22,5
027C F378 BCS 0x026C
(0260) // 小数点
(0261) for(i=0;i<5;i++)
027D 2766 CLR R22
027E C00A RJMP 0x0289
(0262) LcdSend(FontLookup[10][i],1);
027F E021 LDI R18,1
0280 E886 LDI R24,0x86
0281 E090 LDI R25,0
0282 2FE6 MOV R30,R22
0283 27FF CLR R31
0284 0FE8 ADD R30,R24
0285 1FF9 ADC R31,R25
0286 9104 LPM R16,0(Z)
0287 DF61 RCALL _LcdSend
0288 9563 INC R22
0289 3065 CPI R22,5
028A F3A0 BCS 0x027F
(0263) //
(0264) for(i=0;i<5;i++)
028B 2766 CLR R22
028C C016 RJMP 0x02A3
(0265) LcdSend(FontLookup[DOT][i],1);
028D E021 LDI R18,1
028E E005 LDI R16,5
028F E010 LDI R17,0
0290 932F PUSH R18
0291 933F PUSH R19
0292 0195 MOVW R18,R10
0293 940E0423 CALL empy16s
0295 0118 MOVW R2,R16
0296 913F POP R19
0297 912F POP R18
0298 E584 LDI R24,0x54
0299 E090 LDI R25,0
029A 0E28 ADD R2,R24
029B 1E39 ADC R3,R25
029C 2FE6 MOV R30,R22
029D 27FF CLR R31
029E 0DE2 ADD R30,R2
029F 1DF3 ADC R31,R3
02A0 9104 LPM R16,0(Z)
02A1 DF47 RCALL _LcdSend
02A2 9563 INC R22
02A3 3065 CPI R22,5
02A4 F340 BCS 0x028D
(0266) //K
(0267) for(i=0;i<5;i++)
02A5 2766 CLR R22
02A6 C00A RJMP 0x02B1
(0268) LcdSend(FontLookup[11][i],1);
02A7 E021 LDI R18,1
02A8 E88B LDI R24,0x8B
02A9 E090 LDI R25,0
02AA 2FE6 MOV R30,R22
02AB 27FF CLR R31
02AC 0FE8 ADD R30,R24
02AD 1FF9 ADC R31,R25
02AE 9104 LPM R16,0(Z)
02AF DF39 RCALL _LcdSend
02B0 9563 INC R22
02B1 3065 CPI R22,5
02B2 F3A0 BCS 0x02A7
02B3 940E0436 CALL pop_gset4
02B5 9508 RET
_main:
RF --> Y+4
DOT --> R22
time2 --> R12
time1 --> R14
R_TMP --> R20
R --> Y+0
02B6 972C SBIW R28,0xC
(0269) }
(0270)
(0271)
(0272) /*--------------------------------------------------------------------------------------------------
(0273) Name : main
(0274) Description :
(0275) Argument(s) :
(0276) Return value : None.
(0277) --------------------------------------------------------------------------------------------------*/
(0278) /*
(0279) void main(void)
(0280) { unsigned char X; //v=0,按行显示,x对应某个bank(0~83)
(0281) LcdInit();
(0282)
(0283) while(1)
(0284) {
(0285) LcdGotoXY(X_Init,Y_Init);
(0286) for(X=0;X<X_Length;X++)LcdSend(X_TAB[X],1);
(0287) }
(0288) }
(0289) */
(0290)
(0291) void main(void)
(0292) {
(0293) unsigned int time1=0,time2=0;
02B7 24EE CLR R14
02B8 24FF CLR R15
02B9 24CC CLR R12
02BA 24DD CLR R13
(0294) float RF=46.0,R=0.0;
02BB E102 LDI R16,0x12
02BC E012 LDI R17,2
02BD 940E0461 CALL lpm32
02BF 01FE MOVW R30,R28
02C0 8304 STD Z+4,R16
02C1 8315 STD Z+5,R17
02C2 8326 STD Z+6,R18
02C3 8337 STD Z+7,R19
02C4 E00E LDI R16,0xE
02C5 E012 LDI R17,2
02C6 940E0461 CALL lpm32
02C8 01FE MOVW R30,R28
02C9 8300 STD Z+0,R16
02CA 8311 STD Z+1,R17
02CB 8322 STD Z+2,R18
02CC 8333 STD Z+3,R19
(0295) unsigned int R_TMP=0,DOT=0;
02CD 2744 CLR R20
02CE 2755 CLR R21
02CF 2766 CLR R22
02D0 2777 CLR R23
(0296) timer_count=0;
02D1 2422 CLR R2
02D2 2433 CLR R3
02D3 92300061 STS timer_count+1,R3
02D5 92200060 STS timer_count,R2
(0297)
(0298) init_devices(); //全部输入,内部上拉
02D7 DE82 RCALL _init_devices
(0299)
(0300) DDRA |=(1<<2);
02D8 9AD2 SBI 0x1A,2
(0301) PORTA |=(1<<2); //PA2 输出,完成充电
02D9 9ADA SBI 0x1B,2
(0302) Delay1s(1); //延时等待充满
02DA E001 LDI R16,1
02DB E010 LDI R17,0
02DC DEB3 RCALL _Delay1s
(0303) _NOP();
02DD 0000 NOP
(0304) DDRA &=~(1<<2); //输入,
02DE 98D2 CBI 0x1A,2
(0305) PORTA &=~(1<<2);
02DF 98DA CBI 0x1B,2
(0306)
(0307) timer0_init();
02E0 DE5B RCALL _timer0_init
(0308) DDRA |=(1<<1); //
02E1 9AD1 SBI 0x1A,1
(0309) PORTA &=~(1<<1); //PA1 输出低,完成放电
02E2 98D9 CBI 0x1B,1
(0310) while(PINA&(1<<2)); //等待,放电完成,PINA2被拉低
02E3 99CA SBIC 0x19,2
02E4 CFFE RJMP 0x02E3
(0311) TCCR0 = 0x00; //stop timer
02E5 2422 CLR R2
02E6 BE23 OUT 0x33,R2
(0312) time1=timer_count; //记录标准电阻的放电时间
02E7 90E00060 LDS R14,timer_count
02E9 90F00061 LDS R15,timer_count+1
(0313)
(0314)
(0315) timer_count=0;
02EB 2433 CLR R3
02EC 92300061 STS timer_count+1,R3
02EE 92200060 STS timer_count,R2
(0316) init_devices(); //全部输入,内部上拉
02F0 DE69 RCALL _init_devices
(0317) DDRA |=(1<<2);
02F1 9AD2 SBI 0x1A,2
(0318) PORTA |=(1<<2); //PA2 输出,完成充电
02F2 9ADA SBI 0x1B,2
(0319) Delay1s(1); //延时等待充满
02F3 E001 LDI R16,1
02F4 E010 LDI R17,0
02F5 DE9A RCALL _Delay1s
(0320) _NOP();
02F6 0000 NOP
(0321) DDRA &=~(1<<2); //输入
02F7 98D2 CBI 0x1A,2
(0322) PORTA &=~(1<<2); //清内部上拉
02F8 98DA CBI 0x1B,2
(0323)
(0324) timer0_init();
02F9 DE42 RCALL _timer0_init
(0325) DDRA |=(1<<0); //
02FA 9AD0 SBI 0x1A,0
(0326) PORTA &=~(1<<0); //PA0 输出低,完成放电
02FB 98D8 CBI 0x1B,0
(0327) while(PINA&(1<<2)); //等待,让电完成,PINA2被拉低
02FC 99CA SBIC 0x19,2
02FD CFFE RJMP 0x02FC
(0328) TCCR0 = 0x00; //stop timer
02FE 2422 CLR R2
02FF BE23 OUT 0x33,R2
(0329) time2=timer_count; //计算待测电阻的时间
0300 90C00060 LDS R12,timer_count
0302 90D00061 LDS R13,timer_count+1
(0330)
(0331) //开始计算阻值
(0332) R=RF*time2/time1;
0304 01FE MOVW R30,R28
0305 8024 LDD R2,Z+4
0306 8035 LDD R3,Z+5
0307 8046 LDD R4,Z+6
0308 8057 LDD R5,Z+7
0309 925A ST R5,-Y
030A 924A ST R4,-Y
030B 923A ST R3,-Y
030C 922A ST R2,-Y
030D E00A LDI R16,0xA
030E E012 LDI R17,2
030F 940E0461 CALL lpm32
0311 933A ST R19,-Y
0312 932A ST R18,-Y
0313 931A ST R17,-Y
0314 930A ST R16,-Y
0315 0186 MOVW R16,R12
0316 9516 LSR R17
0317 9507 ROR R16
0318 940E04BD CALL int2fp
031A 933A ST R19,-Y
031B 932A ST R18,-Y
031C 931A ST R17,-Y
031D 930A ST R16,-Y
031E 940E0606 CALL empy32fs
0320 0186 MOVW R16,R12
0321 7001 ANDI R16,1
0322 7010 ANDI R17,0
0323 940E04BD CALL int2fp
0325 933A ST R19,-Y
0326 932A ST R18,-Y
0327 931A ST R17,-Y
0328 930A ST R16,-Y
0329 940E0517 CALL add32fs
032B 940E0606 CALL empy32fs
032D E00A LDI R16,0xA
032E E012 LDI R17,2
032F 940E0461 CALL lpm32
0331 933A ST R19,-Y
0332 932A ST R18,-Y
0333 931A ST R17,-Y
0334 930A ST R16,-Y
0335 0187 MOVW R16,R14
0336 9516 LSR R17
0337 9507 ROR R16
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -