;****************************************************************************************** ; Program Name : 16F88 Sample Program ; Programer : ; Create date : 2011/04/15 ; History : ; Discription : ;****************************************************************************************** ; (1)Define I/O ;****************************************************************************************** ; LIST P=PIC16F88,ST=OFF,R=DEC INCLUDE "P16F88.inc" __CONFIG _CONFIG1 , _CP_OFF & _CCP1_RB3 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_OFF & _PWRTE_OFF & _WDT_OFF & _INTRC_IO ; __CONFIG _CONFIG1 , _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_OFF & _PWRTE_OFF & _WDT_OFF & _INTRC_IO ; __CONFIG _CONFIG1 , _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_OFF & _PWRTE_OFF & _WDT_OFF & _HS_OSC __CONFIG _CONFIG2 , _IESO_OFF & _FCMEN_OFF ; DN0 EQU 20H DN1 EQU 21H DN2 EQU 22H DN3 EQU 23H LPDSP EQU 24H LPDSP1 EQU 25H COU0 EQU 26H COU1 EQU 27H COU2 EQU 28H COU3 EQU 29H CNT1 EQU 2CH CNT2 EQU 2DH LP1 EQU 2EH LP2 EQU 2FH LPWAT1 EQU 30H LPWT1B EQU 31H TMP1 EQU 32H ORG 0 GOTO START ORG 4 GOTO START ; ; ********************************** ; 1.Initialize ; ********************************** START ;(1)初期化 ; Bank0での設定 BCF STATUS,RP0 ; SET BANK0 MOVLW H'FF' MOVFW PORTA ; PortAの初期化(Bank0) MOVFW PORTB ; PortAの初期化(Bank0) ; Bank1での設定 BSF STATUS,RP0 ; SET BANK1 MOVLW B'01111110' ; 内部OSC選択,内部OSCに8MHzを選択 MOVWF OSCCON MOVLW B'00000000' ; 全てをDegitalに設定 MOVWF ANSEL ; Degital Inputに設定(Bank1) MOVLW B'11110000' MOVWF TRISA ; PortAのI/O設定(Bank1) MOVLW B'10000000' MOVWF TRISB ; PortBのI/O設定(Bank1) BCF OPTION_REG,NOT_RBPU ; PORTBの入力ポートをプルアップする ; Bank0に戻す BCF STATUS,RP0 ; SET BANK0 ; ; ; ********************************** ; 2.Main Program ; ********************************** ;(1)デモ表示 CALL DEMO1 ;(2)変数初期化 CALL INTCOU ;(3)メインプログラム MAIN CALL PRG03 GOTO MAIN ; ;****************************************************************************************** ; Function Name : DEC7SEG ; Title : DECデコーダと7セグメント表示(アノードコモン用) ; Input : W:ワーキングレジスタ ; Output : なし ;****************************************************************************************** DEC7SEG CALL TBL7A MOVWF PORTB RETURN TBL7A ADDWF PCL,F RETLW B'01000000' ; 0(00) RETLW B'01111001' ; 1(01) RETLW B'00100100' ; 2(02) RETLW B'00110000' ; 3(03) RETLW B'00011001' ; 4(04) RETLW B'00010010' ; 5(05) RETLW B'00000010' ; 6(06) RETLW B'01111000' ; 7(07) RETLW B'00000000' ; 8(08) RETLW B'00010000' ; 9(09) RETLW B'00001000' ; A(0A) RETLW B'00000011' ; B(0B) RETLW B'01000110' ; C(0C) RETLW B'00100001' ; D(0D) RETLW B'00000110' ; E(0E) RETLW B'00001110' ; F(0F) RETLW B'00000000' ; G(10) RETLW B'00000000' ; H(11) RETLW B'00000000' ; I(12) RETLW B'00000000' ; J(13) RETLW B'00000000' ; K(14) RETLW B'00000000' ; L(15) RETLW B'00000000' ; M(16) RETLW B'00000000' ; N(17) RETLW B'00000000' ; O(18) RETLW B'00001100' ; P(19) RETLW B'00000000' ; Q(1A) RETLW B'00101111' ; R(1B) RETLW B'00000000' ; S(1C) RETLW B'00000000' ; T(1D) RETLW B'01000001' ; U(1E) RETLW B'00000000' ; V(1F) RETLW B'00000000' ; W(20) RETLW B'00000000' ; X(21) RETLW B'00000000' ; Y(22) RETLW B'00000000' ; Z(23) RETLW B'00000000' ; a(24) RETLW B'00000011' ; b(25) RETLW B'00100111' ; c(26) RETLW B'00000000' ; d(27) RETLW B'00000000' ; e(28) RETLW B'00000000' ; f(29) RETLW B'01000000' ; g(2A) RETLW B'00000000' ; h(2B) RETLW B'01111011' ; i(2C) RETLW B'00000000' ; j(2D) RETLW B'00000000' ; k(2E) RETLW B'00000000' ; l(2F) RETLW B'00000000' ; m(30) RETLW B'00000000' ; n(31) RETLW B'00000000' ; o(32) RETLW B'00000000' ; p(33) RETLW B'00000000' ; q(34) RETLW B'00101111' ; r(35) RETLW B'00000000' ; s(36) RETLW B'00000000' ; t(37) RETLW B'00000000' ; u(38) RETLW B'00000000' ; v(39) RETLW B'00000000' ; w(3A) RETLW B'00000000' ; x(3B) RETLW B'00000000' ; y(3C) RETLW B'00000000' ; z(3D) RETLW B'01111111' ; (3E) RETLW B'00000000' ; -(3F) RETLW B'00000000' ; _(40) RETLW B'00000000' ; 全(41) ;****************************************************************************************** ; Function Name : DEMO0 ; Title : 7-Segment-LEDの点灯状態確認用関数 ; Input : ; Output : ;****************************************************************************************** DEMO0 MOVLW H'41' MOVWF DN3 MOVLW H'41' MOVWF DN2 MOVLW H'41' MOVWF DN1 MOVLW H'41' MOVWF DN0 CALL WATDSP RETURN ;****************************************************************************************** ; Function Name : DEMO1 ; Title : 電源投入時のデモ ; Input : ; Output : ;****************************************************************************************** DEMO1 ; PicCPU 表示 MOVLW H'19' ;P MOVWF DN3 MOVLW H'2C' ;i MOVWF DN2 MOVLW H'26' ;c MOVWF DN1 MOVLW H'3E' ; MOVWF DN0 CALL WATDSP ; 16F88 表示 MOVLW H'01' ;1 MOVWF DN3 MOVLW H'06' ;6 MOVWF DN2 MOVLW H'08' ;8 MOVWF DN1 MOVLW H'08' ;8 MOVWF DN0 CALL WATDSP RETURN ;****************************************************************************************** ; Function Name : DEMO2 ; Title : エラーメッセージ ; Input : ; Output : ;****************************************************************************************** DEMO2 ; Err 表示 MOVLW H'0E' ;E MOVWF DN3 MOVLW H'1B' ;r MOVWF DN2 MOVLW H'1B' ;r MOVWF DN1 MOVLW H'3E' ; MOVWF DN0 CALL WATDSP RETURN ;****************************************************************************************** ; Function Name : PRG01 ; Title : 16進(4桁)アップカウンター ; Input : COU0〜COU3 ; Output : ;****************************************************************************************** PRG01 ; 1.16進カウンタ CALL HEXCOU ; 2.変数セット CALL SETHEX ; 3.7セグメント表示 CALL WATDSP2 RETURN ;****************************************************************************************** ; Function Name : PRG02 ; Title : 10進(4桁)アップカウンター ; Input : COU0〜COU3 ; Output ;****************************************************************************************** PRG02 ; 1.10進カウンタ CALL CNTDEC ; 2.変数セット CALL SETHEX ; 3.7セグメント表示 CALL WATDSP2 RETURN ;****************************************************************************************** ; Function Name : PRG03 ; Title : 10進(4桁)プッシュボタン式 アップカウンター ; Input : COU0〜COU3 ; Output ;****************************************************************************************** PRG03 ; 1.10進カウンタ BTFSS PORTB,7 CALL CNTDEC ; 2.変数セット CALL SETHEX ; 3.7セグメント表示 CALL WATDSP RETURN ;****************************************************************************************** ; Function Name : INTCOU ; Title : カウンター変数を初期化 ; Input : COU0〜COU3 ; Output : ;****************************************************************************************** INTCOU CLRF COU0 CLRF COU1 CLRF COU2 CLRF COU3 RETURN ;****************************************************************************************** ; Function Name : CNTDEC ; Title : 10進(4桁)アップカウンタ ; Input : COU0,COU1,COU2,COU3 ; Output : COU0,COU1,COU2,COU3 ;****************************************************************************************** CNTDEC MOVLW H'01' ADDWF COU0,F ; 0桁目10進カウンタ(0aで桁上げ) MOVFW COU0 XORLW H'0A' BTFSS STATUS,Z RETURN ; CLRF COU0 MOVLW H'01' ADDWF COU1,F ; 1桁目10進カウンタ(0aで桁上げ) MOVFW COU1 XORLW H'0A' BTFSS STATUS,Z RETURN ; CLRF COU1 MOVLW H'01' ADDWF COU2,F ; 2桁目10進カウンタ(0aで桁上げ) MOVFW COU2 XORLW H'0A' BTFSS STATUS,Z RETURN ; CLRF COU2 MOVLW H'01' ADDWF COU3,F ; 3桁目10進カウンタ(0aで桁上げ) MOVFW COU3 XORLW H'0A' BTFSS STATUS,Z RETURN ; CLRF COU0 CLRF COU1 CLRF COU2 CLRF COU3 RETURN ;****************************************************************************************** ; Function Name : HEXCOU ; Title : 16進(4桁)アップカウンター ; Input : COU0〜COU3 ; Output : ;****************************************************************************************** HEXCOU ; 0桁目 MOVLW H'01' ADDWF COU0,F BTFSS COU0,4 RETURN ; 1桁目 MOVFW COU0 ANDLW B'00001111' MOVWF COU0 MOVLW H'01' ADDWF COU1,F BTFSS COU1,4 RETURN ; 2桁目 MOVFW COU1 ANDLW B'00001111' MOVWF COU1 MOVLW H'01' ADDWF COU2,F BTFSS COU2,4 RETURN ; 3桁目 MOVFW COU2 ANDLW B'00001111' MOVWF COU2 MOVLW H'01' ADDWF COU3,F BTFSS COU3,4 RETURN ; 桁上がり CLRF COU0 CLRF COU1 CLRF COU2 CLRF COU3 RETURN ;****************************************************************************************** ; Function Name : SETHEX ; Title : 16進カウンター変数の7セグメント変数設定 ; Input : COU0 - COU3 ; Output : ;****************************************************************************************** SETHEX MOVFW COU0 MOVWF DN0 MOVFW COU1 MOVWF DN1 MOVFW COU2 MOVWF DN2 MOVFW COU3 MOVWF DN3 RETURN ;****************************************************************************************** ; Function Name : WATDSP ; Title : WAITする(1秒程度、7Segmentを表示する) ; Input : DN0〜DN3 ; Output : ;****************************************************************************************** WATDSP MOVLW H'05' ; 1秒程度点灯 MOVWF LPDSP1 WATDP1A MOVLW H'CF' ; 表示時間調整 MOVWF LPDSP WATDSP1 CALL C1DSP7 DECFSZ LPDSP,F GOTO WATDSP1 DECFSZ LPDSP1,F GOTO WATDP1A RETURN ;****************************************************************************************** ; Function Name : WATDSP2 ; Title : 0.05秒程度、7Segmentを表示する ; Input : DN0〜DN3 ; Output : ;****************************************************************************************** WATDSP2 MOVLW H'1B' ; 表示時間調整 MOVWF LPDSP WATDP2A CALL C1DSP7 DECFSZ LPDSP,F GOTO WATDP2A RETURN ;****************************************************************************************** ; Function Name : C1DSP7 ; Title : 4桁の数字を設定し、7Segmentを点灯する ; Input : DN0〜DN5 ; Output : ;****************************************************************************************** C1DSP7 ; (0)全ての桁を初期化する CALL DEC7OFF ; (1)0桁目の処理 ; 1)数字をドットパターンに変換して表示する MOVFW DN0 CALL DEC7SEG BCF PORTA,0 ; 2)Wait CALL WAT1 CALL LEDOFF BSF PORTA,0 ; (2)1桁目の処理 ; 1)数字をドットパターンに変換して表示する MOVFW DN1 CALL DEC7SEG BCF PORTA,1 ; 2)Wait CALL WAT1 CALL LEDOFF BSF PORTA,1 ; (3)2桁目の処理 ; 1)数字をドットパターンに変換して表示する MOVFW DN2 CALL DEC7SEG BCF PORTA,2 ; 2)Wait CALL WAT1 CALL LEDOFF BSF PORTA,2 ; (4)3桁目の処理 ; 1)数字をドットパターンに変換して表示する MOVFW DN3 CALL DEC7SEG BCF PORTA,3 ; 2)Wait CALL WAT1 CALL LEDOFF BSF PORTA,3 RETURN ;****************************************************************************************** ; Function Name : DEC7OFF ; Title : 7セグメント表示の全桁を初期化 ; Input : ; Output : ;****************************************************************************************** DEC7OFF BSF PORTA,0 BSF PORTA,1 BSF PORTA,2 BSF PORTA,3 RETURN ;****************************************************************************************** ; Function Name : LEDOFF ; Title : 7セグメントを初期化 ; Input : ; Output : ;****************************************************************************************** LEDOFF MOVLW B'01111111' MOVWF PORTB RETURN ;****************************************************************************************** ; Function Name : WAT1 ; Title : タイマー関数(7 Segment表示機の桁間WAIT) ; Input : ; Output : ;****************************************************************************************** WAT1 MOVLW H'FF' MOVWF LPWT1B WAT1B MOVLW H'FF' MOVWF LPWAT1 WAT1A DECFSZ LPWAT1,F GOTO WAT1A ; DECFSZ LPWT1B,F ; GOTO WAT1B RETURN END