;A_LED 09/6/16 JA0BAS FCOUNT 4MHZ ;CALLは2スタック,512ワード,リセットベクタ1FF ;T0IF,SUBLWが無い バンク切替不要 TRISのアドレスなし ;PORTがINの場合は変更できない ;1/16 プリスケーラー用 *1/4 =1/64 LIST P=16F54 INCLUDE "P16F5X.INC" __CONFIG _CP_OFF & _WDT_OFF & _HS_OSC ERRORLEVEL -220 ; SUPPRESS MESSAGE 302 FROM LIST FILE TIMA EQU 07H ;*256 TIM0 EQU 08H ;PSAノ値LO(TIM)。 TIM1 EQU 09H ;TMR0ノ値 TIM2 EQU 0AH ;TOIFニヨリINCシタ値 TIM3 EQU 0BH ;TIM(2)ノOVERフローニヨリINCシタ値 TIM_M EQU 0CH ; 一時余リ格納場所(SUBルーチンデ使用) D EQU 0DH COUNT EQU 0EH OVERF EQU 0FH DEC0 EQU 10H ;1GHZ DEC1 EQU 11H ;100MHZ ;9桁7SEG データ DEC2 EQU 12H ;10MHZ DEC3 EQU 13H ;1MHZ DEC4 EQU 14H ;100KHZ DEC5 EQU 15H ;10KHZ DEC6 EQU 16H ;1KHZ DEC7 EQU 17H ;100HZ DEC8 EQU 18H ;10HZ DEC9 EQU 19H ;1HZ DEC EQU 1AH WAIT_A EQU 1BH WAIT_B EQU 1CH WAIT_C EQU 1DH K_POS EQU 1EH ;桁位置 CN EQU 1FH ORG 1FFH GOTO INIT_ ORG 0H TABLE ;PCL+W=JMP,データヲ持ッテRETスル ANDLW B'00001111' ;下位4ビット有効 ADDWF PCL,F ; ADBECGF RETLW B'10000010' ;0 RETLW B'11101011' ;1 RETLW B'10000101' ;2 RETLW B'10001001' ;3 A RETLW B'11101000' ;4 F B RETLW B'10011000' ;5 G RETLW B'10010000' ;6 E C RETLW B'10101011' ;7 D RETLW B'10000000' ;8 RETLW B'10001000' ;9 RETLW B'10100000' ;A RETLW B'11010000' ;B RETLW B'10010110' ;C RETLW B'11000001' ;D RETLW B'10010100' ;E RETLW B'10110100' ;F INIT_ MOVLW B'00100111' ;PRESCALER 1/256 SET;立上カウント OPTION MOVLW B'11110111' MOVWF PORTA MOVLW B'11111111' MOVWF PORTB MOVLW B'00000000' TRIS PORTB CMAIN MOVLW B'11111000' TRIS PORTA ;PORTA3ヲINPUT MODE=HIGH IMPEDANCE/TMR0ノ開始 CLRWDT ;250 MS カウントノ始点 ++++++++++++++++++++++ CLRF TMR0 ;カウンタTMR0ヲクリア MOVLW D'13' ;時間調整3 MOVWF WAIT_A ; C1 DECFSZ WAIT_A,F GOTO C1 MOVLW D'79' ;時間調整1 MOVWF WAIT_B DISPLAY MOVLW 13H ; MOVWF FSR ;アドレスヲセット MOVF INDF,W ;FSR番地カラ表示DATA取得 CALL TABLE ;7SEG DATA ニ変換 MOVWF PORTB ;7SEG DATA ニ出力 BSF PORTB,7 BCF PORTA,0 CALL DELAY DECF FSR,F MOVF INDF,W ;FSR番地カラ表示DATA取得 CALL TABLE ;7SEG DATA ニ変換 MOVWF PORTB ;7SEG DATA ニ出力 BSF PORTA,0 BCF PORTA,1 CALL DELAY DECF FSR,F MOVF INDF,W ;FSR番地カラ表示DATA取得 CALL TABLE ;7SEG DATA ニ変換 MOVWF PORTB ;7SEG DATA ニ出力 BSF PORTA,1 BCF PORTA,2 CALL DELAY DECF FSR,F MOVF INDF,W ;FSR番地カラ表示DATA取得 CALL TABLE ;7SEG DATA ニ変換 MOVWF PORTB ;7SEG DATA ニ出力 BSF PORTA,2 BCF PORTB,7 CALL DELAY DECFSZ WAIT_B,F GOTO DISPLAY MOVLW B'11110000' TRIS PORTA ;PORTA.3ヲOUT TMR0ノ停止 250MSカウントノ終点 ++++++++ NOP ;WAIT NOP MOVF TMR0,W MOVWF TIM1 TOGGLE BSF PORTA,3 ;PORT PORTA4ノトグル プリスケーラノ読出 NOP BCF PORTA,3 NOP DECF TIM0,F MOVF TMR0,W SUBWF TIM1,W ;TIM1-TMR0=0デアレバ Z=1 BTFSC STATUS,Z GOTO TOGGLE A4 BCF STATUS,C ;*2 250MS 計測値ヲ2倍スル RRF TIM3,F RRF TIM2,F RRF TIM1,F RRF TIM0,F RRF TIMA,F BCF STATUS,C ;*2 250MS 計測値ヲ2倍スル RRF TIM3,F RRF TIM2,F RRF TIM1,F RRF TIM0,F RRF TIMA,F HD_C ;16進->10進変換 MOVLW H'19' ;格納場所開始アドレス MOVWF FSR ;格納場所初期値 MOVLW D'10' ;回数SET 10回繰返 MOVWF COUNT DEVIDE ;÷10サブルーチン MOVLW D'40' MOVWF CN ;40ビットクリ返シ CLRF TIM_M DEVIDE0 BCF STATUS,C RLF TIMA,F RLF TIM0,F RLF TIM1,F RLF TIM2,F RLF TIM3,F RLF TIM_M,F MOVLW B'11110110' ;246 ADDWF TIM_M,0 BTFSC STATUS,C MOVWF TIM_M BTFSC STATUS,C INCF TIMA,F DECFSZ CN,F GOTO DEVIDE0 DECF FSR,F MOVF TIM_M,W MOVWF INDF ; 余リ DECFSZ COUNT,F GOTO DEVIDE CLRF TIMA ;変数クリヤ 終了処理 CLRF TIM0 CLRF TIM1 CLRF TIM2 CLRF TIM3 GOTO CMAIN ;NEXT COUNT DELAY ;STEP数を揃える事 MOVLW D'253' ;時間調整2 MOVWF WAIT_C ; D1 DECFSZ WAIT_C,F GOTO D1 BTFSC OVERF,1 ;前回の状態確認0スキップ GOTO D2 ;前回1JANP BTFSC TMR0,7 ;TMRは1?0スキップ BSF OVERF,1 ;オーバーしない NOP ;STEP 調整 NOP ;STEP 調整 GOTO D3 ;オーバーJAMP D2 BTFSC TMR0,7 ;0になったか GOTO D4 ;STEP 調整 BCF OVERF,1 ;フラグSET BSF OVERF,2 ;TOIFオーバーフラグSET NOP ;STEP 調整 D3 BCF STATUS,C ;キャリークリヤ BTFSC OVERF,2 ;TOIFオーバーフローチェック INCF TIM2,F ;TIM1 オーバーフロー BTFSC STATUS,C INCF TIM3,F ;TIM2 オーバーフロー BCF OVERF,2 ;TOIFフラグクリヤ RETLW 0 D4 GOTO D3 ;STEP 調整 END