; 該程序用RC充電的方法實(shí)現(xiàn)溫度的檢測(cè) ; RA0 數(shù)碼管個(gè)位選通 RA1 數(shù)碼管百位選通 ; RB7 數(shù)碼管百位和負(fù)號(hào)選通 ; RA2 檢測(cè)電容高低電平 ; RA3 對(duì)電容充電和放電 ;----------------- INCLUDE "P16F84A.INC" ;------------------ ;***************************************************** LIST P=16F84A,R=DEC ;定義器件,默認(rèn)為十進(jìn)制 ;----------------------------------------------------- __CONFIG B'11111111110001';_CP_OFF&_WDT_OFF&_PWRITE_ON&_XT_OSC ;沒(méi)有代碼保護(hù) ;看門狗關(guān)閉 ;上電廷時(shí)器開(kāi)啟 ;振蕩器模式為XT RC EQU 2 RVCC EQU 3 JIZIBZ EQU 2 TIMER EQU 30H BZH EQU 32H TIMER2 EQU 36H FRISTJSQ EQU 33H XIANZHIL EQU 34H XIANZHIH EQU 35H JSQ1 EQU 37H BCDLS EQU 38H SUM EQU 39H JSQ2 EQU 42H XIANZHIBAI EQU 40H ;顯值百位 L EQU 0 H EQU 1 BAI EQU 7;顯示百位 ZEROFZ EQU 2 ;負(fù)值標(biāo)記 FP EQU 0 ;分頻標(biāo)記 MAIN ORG 000H BANKSEL TRISB CLRF TRISB CLRF TRISA BANKSEL PORTB CLRF PORTB CLRF PORTA BCF PORTA,H BCF PORTA,L CLRZ NOP LOOP BANKSEL TRISA BSF TRISA,RC BCF TRISA,RVCC BANKSEL PORTA LOOP1 CLRF TIMER CLRF SUM CLRF BCDLS CLRF TIMER2 CLRF XIANZHIH CLRF XIANZHIL MOVLW 0FFH MOVWF XIANZHIBAI CLRF BZH CLRF JSQ2 BSF PORTA,RVCC CALL CONG LOOP2 BTFSS PORTA,RC GOTO OUT INCF TIMER,1;TIMER ;GOTO LOOP2 ;http://211.100.30.165/search/?key=測(cè)試','_blank');" onmouseout=kwL(event); target=_blank>測(cè)試2 BTFSC BZH,FP ;選擇分頻 GOTO TWOFP MOVLW D'1' ;低分頻單步短 o 5 XORWF TIMER,0 BTFSS STATUS,Z GOTO LOOP2 CLRF TIMER INCF TIMER2,1;TMER2最終計(jì)時(shí) MOVLW D'60';判TIMER2是否到了60到了60采用另一分頻 XORWF TIMER2,0 BTFSC STATUS,Z BSF BZH,FP GOTO LOOP2 TWOFP MOVLW D'1' ;高分頻單步長(zhǎng)o 11 XORWF TIMER,0 BTFSS STATUS,Z GOTO LOOP2 CLRF TIMER INCF TIMER2,1 MOVLW D'1' ;只有在-1的時(shí)候才顯示負(fù)數(shù) XORWF TIMER2,0;判斷是否為-1在00時(shí)不顯示負(fù)數(shù) BTFSC STATUS,Z GOTO SETFH ;轉(zhuǎn)到設(shè)置負(fù)號(hào) MOVLW D'120';判是否到了120如果到了,則為負(fù)值 XORWF TIMER2,0 BTFSS STATUS,Z GOTO LOOP2 ;CALL SETFH BSF BZH,ZEROFZ;置負(fù)數(shù)標(biāo)志,因?yàn)槭?0所以不能置負(fù)號(hào) CLRF TIMER2 GOTO LOOP2 SETFH ;設(shè)置負(fù)號(hào) MOVLW 0BFH;040H MOVWF XIANZHIBAI GOTO LOOP2 OUT BSF PORTA,RVCC BTFSC BZH,ZEROFZ;如果是負(fù)值就不用減,如果是正值就應(yīng)該減 GOTO CLFZ MOVF TIMER2,0 SUBLW D'120' MOVWF TIMER2 MOVF TIMER2,0 ;判斷TIMER是不是有百位數(shù) MOVWF JSQ2 MOVLW D'100' SUBWF JSQ2,1 BTFSS STATUS,C GOTO OUT_1 MOVLW 0F9H;006H MOVWF XIANZHIBAI MOVF JSQ2,0 MOVWF TIMER2 OUT_1 CALL BCDBIT GOTO XIANSHI CLFZ ;負(fù)值處理 CALL BCDBIT GOTO XIANSHI BCDBIT MOVLW D'8' MOVWF JSQ1 BCD_1 RLF TIMER2 RLF BCDLS,1 DECFSZ JSQ1,1 GOTO TIAOZHEN RETURN TIAOZHEN MOVLW D'3' ADDWF BCDLS,0 MOVWF SUM BTFSC SUM,3 MOVWF BCDLS MOVLW 030H ADDWF BCDLS,0 MOVWF SUM BTFSC SUM,7 MOVWF BCDLS GOTO BCD_1 CONG BSF PORTA,RVCC MOVLW D'200' MOVWF 43H DECFSZ 43H GOTO $-1 BCF PORTA,RVCC RETURN XIANSHI MOVLW D'8' MOVWF JSQ2 ;一次顯示循環(huán)次數(shù),以免閃濼 ;-----------顯示L------- XS MOVF BCDLS,0;讀出兩位十進(jìn)制數(shù) ANDLW 00FH;去掉高四位 MOVWF XIANZHIL;低四位放在L SWAPF BCDLS,1 ;高低交換,高在低位 MOVLW 00FH;取高位值 ANDWF BCDLS,0; MOVWF XIANZHIH;放到顯示H中 SWAPF BCDLS,1;恢復(fù)BCDLS值 BCF PORTA,H;關(guān)H BCF PORTA,L;關(guān)L CLRF PORTB MOVF XIANZHIL,0 CALL TAB MOVWF PORTB BCF PORTB,BAI BSF PORTA,L;打開(kāi)L CALL YS;延時(shí) ;-----------顯示H------- BCF PORTA,H;關(guān)閉顯示 BCF PORTA,L CLRF PORTB MOVF XIANZHIH,0 CALL TAB MOVWF PORTB BCF PORTB,7 BSF PORTA,H;開(kāi)高 CALL YS ;-----------顯示BAI------- BCF PORTA,H;關(guān) BCF PORTA,L ;BCF PORTA,BAI CLRF PORTB MOVF XIANZHIBAI,0 MOVWF PORTB BSF PORTB,7 ; BSF PORTA,BAI CALL YS DECFSZ JSQ2,1;判斷循環(huán)4次到了沒(méi)有 GOTO XS BCF PORTB,7 WAIT ;CALL CONG GOTO LOOP1 TAB ADDWF PCL,F RETLW 0XC0;0 RETLW 0XF9;1 RETLW 0XA4;2 RETLW 0XB0;3 RETLW 0X99;4 RETLW 0X92;5 RETLW 0X82;6 RETLW 0XF8;7 RETLW 0X80;8 RETLW 0X90;9 RETURN YS MOVLW H'0F' MOVWF 20H YS_1 MOVLW H'0F' MOVWF 21H DECFSZ 21H,1 GOTO $-1 DECFSZ 20H,1 GOTO YS_1 RETURN END
| |