; 該程序用RC充電的方法實現溫度的檢測
; RA0 數碼管個位選通 RA1 數碼管百位選通
; RB7 數碼管百位和負號選通
; RA2 檢測電容高低電平
; RA3 對電容充電和放電 ;----------------- INCLUDE "P16F84A.INC" ;------------------ ;***************************************************** LIST P=16F84A,R=DEC ;定義器件,默認為十進制 ;----------------------------------------------------- __CONFIG B'11111111110001';_CP_OFF&_WDT_OFF&_PWRITE_ON&_XT_OSC ;沒有代碼保護 ;看門狗關閉 ;上電廷時器開啟 ;振蕩器模式為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 ;負值標記 FP EQU 0 ;分頻標記 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=測試','_blank');" onmouseout=kwL(event); target=_blank>測試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最終計時 MOVLW D'60';判TIMER2是否到了60到了60采用另一分頻 XORWF TIMER2,0 BTFSC STATUS,Z BSF BZH,FP GOTO LOOP2 TWOFP MOVLW D'1' ;高分頻單步長o 11 XORWF TIMER,0 BTFSS STATUS,Z GOTO LOOP2 CLRF TIMER INCF TIMER2,1 MOVLW D'1' ;只有在-1的時候才顯示負數 XORWF TIMER2,0;判斷是否為-1在00時不顯示負數 BTFSC STATUS,Z GOTO SETFH ;轉到設置負號 MOVLW D'120';判是否到了120如果到了,則為負值 XORWF TIMER2,0 BTFSS STATUS,Z GOTO LOOP2 ;CALL SETFH BSF BZH,ZEROFZ;置負數標志,因為是00所以不能置負號 CLRF TIMER2 GOTO LOOP2 SETFH ;設置負號 MOVLW 0BFH;040H MOVWF XIANZHIBAI GOTO LOOP2 OUT BSF PORTA,RVCC BTFSC BZH,ZEROFZ;如果是負值就不用減,如果是正值就應該減 GOTO CLFZ MOVF TIMER2,0 SUBLW D'120' MOVWF TIMER2 MOVF TIMER2,0 ;判斷TIMER是不是有百位數 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 ;負值處理 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 ;一次顯示循環次數,以免閃濼 ;-----------顯示L------- XS MOVF BCDLS,0;讀出兩位十進制數 ANDLW 00FH;去掉高四位 MOVWF XIANZHIL;低四位放在L SWAPF BCDLS,1 ;高低交換,高在低位 MOVLW 00FH;取高位值 ANDWF BCDLS,0; MOVWF XIANZHIH;放到顯示H中 SWAPF BCDLS,1;恢復BCDLS值 BCF PORTA,H;關H BCF PORTA,L;關L CLRF PORTB MOVF XIANZHIL,0 CALL TAB MOVWF PORTB BCF PORTB,BAI BSF PORTA,L;打開L CALL YS;延時 ;-----------顯示H------- BCF PORTA,H;關閉顯示 BCF PORTA,L CLRF PORTB MOVF XIANZHIH,0 CALL TAB MOVWF PORTB BCF PORTB,7 BSF PORTA,H;開高 CALL YS ;-----------顯示BAI------- BCF PORTA,H;關 BCF PORTA,L ;BCF PORTA,BAI CLRF PORTB MOVF XIANZHIBAI,0 MOVWF PORTB BSF PORTB,7 ; BSF PORTA,BAI CALL YS DECFSZ JSQ2,1;判斷循環4次到了沒有 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
|