添付: マイコン・アセンブラ・プログラム(counter-7segN-5ms-1s-zero-sup.txt) ;Interval timer(1sec=5msec*200,5msec*1000/0.1/4=12500,12500/256=48.83) INCLUDE "P16F84A.INC" LIST P=16F84A ;コンフィグ→クロック信号HS、パワーアップタイマのみオン __CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF ;ファイルレジスタ定義 N EQU 0x0C ON EQU 0x0D TU EQU 0x0E WB EQU 0x0F SB EQU 0x10 T1 EQU 0x11 T2 EQU 0x12 N1 EQU 0x13 N2 EQU 0x14 N3 EQU 0x15 N4 EQU 0x16 N5 EQU 0x17 N6 EQU 0x18 N7 EQU 0x19 N8 EQU 0x1A LX EQU 0x1B ; ORG 0 ;リセットベクタ GOTO START ORG 4 ;割込みベクタ BCF INTCON,T0IF ;割り込みフラグをクリア MOVWF WB ;Wレジスタ退避 SWAPF STATUS,0 ;STATUS取り出し MOVWF SB ;STATUS退避 MOVLW 0xCF ;カウント値=207(=256-49)を再ロード MOVWF TMR0 INCF TU,1 ;TUレジスタをカウントアップ BCF PORTA,0 ;全消灯 BCF PORTA,1 BCF PORTA,2 BCF PORTA,3 INCF LX,1 ;LXレジスタをカウントアップ MOVF LX,0 ADDLW 0xFC BTFSC STATUS,C ;LX=4ならばリセット(LX=0) CLRF LX SWAPF SB,0 ;STATUS戻し MOVWF STATUS SWAPF WB,1 ;Wレジスタ戻し SWAPF WB,0 RETFIE START BSF STATUS,RP0 ;バンク1選択 MOVLW B'10000' ;RA4を入力ポート、RA0-RA3を出力ポート MOVWF TRISA MOVLW B'00000000' ;RB0-RB7を出力ポート MOVWF TRISB MOVLW 0x87 ;256カウントモード指定 MOVWF OPTION_REG ;プリスケーラへ出力 BCF STATUS,RP0 ;バンク0選択 MOVLW 0xCF ;カウント値=207(=256-49) MOVWF TMR0 ;タイマーへ出力 BSF INTCON,T0IE ;タイマ割り込み許可 BSF INTCON,GIE ;全体割り込み許可 CLRF N1 ;N1,N2,N3,N4は1位から4位 CLRF N2 CLRF N3 CLRF N4 CLRF N5 ;N5,N6,N7,N8は保持用 CLRF N6 CLRF N7 CLRF N8 CLRF TU CLRF LX CLRF ON ; MAIN BCF INTCON,T0IE ;タイマ割り込み禁止 CALL DSP BSF INTCON,T0IE ;タイマ割り込み許可 BSF INTCON,GIE ;全体割り込み許可 MOVF TU,0 ADDLW 0x38 ;1sec=5msec*200、TUレジスタが56(256-200=56)でリセット BTFSS STATUS,C GOTO CINI MOVF N1,0 ;計数保持 MOVWF N5 MOVF N2,0 MOVWF N6 MOVF N3,0 MOVWF N7 MOVF N4,0 MOVWF N8 CLRF N1 CLRF N2 CLRF N3 CLRF N4 CLRF TU CINI BTFSS PORTA,4 ;RA4がクリアならばMAINへ GOTO CPAS BSF ON,0 ;(ON,0)をセット GOTO MAIN CPAS BTFSS ON,0 ;(ON,0)がクリアならばMAINへ GOTO MAIN INCF N1,1 ;N1=N1+1 MOVF N1,0 SUBLW 0x0A BTFSS STATUS,Z GOTO NCL CLRF N1 INCF N2,1 ;桁上がり(N2=N2+1) MOVF N2,0 SUBLW 0x0A BTFSS STATUS,Z GOTO NCL CLRF N2 INCF N3,1 ;桁上がり(N3=N3+1) MOVF N3,0 SUBLW 0x0A BTFSS STATUS,Z GOTO NCL CLRF N3 INCF N4,1 ;桁上がり(N4=N4+1) MOVF N4,0 SUBLW 0x0A BTFSS STATUS,Z GOTO NCL CLRF N4 NCL BCF ON,0 ;(ON,0)をクリア GOTO MAIN ; DSP LX0 MOVF LX,1 BTFSS STATUS,Z GOTO LX1 BTFSC PORTA,3 GOTO LXE MOVF N8,1 BTFSS STATUS,Z GOTO LX01 BCF PORTA,3 GOTO LXE LX01 MOVF N8,0 MOVWF N CALL SEG MOVWF PORTB BSF PORTA,3 ;RA3点灯(7-SEGがカソードコモンのため、NPNTr使用) GOTO LXE LX1 MOVF LX,0 SUBLW 0x01 BTFSS STATUS,Z GOTO LX2 BTFSC PORTA,2 GOTO LXE MOVF N7,1 BTFSS STATUS,Z GOTO LX11 MOVF N8,1 BTFSS STATUS,Z GOTO LX11 BCF PORTA,3 BCF PORTA,2 GOTO LXE LX11 MOVF N7,0 MOVWF N CALL SEG MOVWF PORTB BSF PORTA,2 ;RA2点灯(7-SEGがカソードコモンのため、NPNTr使用) GOTO LXE LX2 MOVF LX,0 SUBLW 0x02 BTFSS STATUS,Z GOTO LX3 BTFSC PORTA,1 GOTO LXE MOVF N6,1 BTFSS STATUS,Z GOTO LX21 MOVF N7,1 BTFSS STATUS,Z GOTO LX21 MOVF N8,1 BTFSS STATUS,Z GOTO LX21 BCF PORTA,3 BCF PORTA,2 BCF PORTA,1 GOTO LXE LX21 MOVF N6,0 MOVWF N CALL SEG MOVWF PORTB BSF PORTA,1 ;RA1点灯(7-SEGがカソードコモンのため、NPNTr使用) GOTO LXE LX3 MOVF LX,0 SUBLW 0x03 BTFSS STATUS,Z GOTO LXE BTFSC PORTA,0 GOTO LXE MOVF N5,0 MOVWF N CALL SEG MOVWF PORTB BSF PORTA,0 ;RA0点灯(7-SEGがカソードコモンのため、NPNTr使用) LXE RETURN ; SEG ;7SEG変換 MOVF N,1 BTFSC STATUS,Z RETLW B'01111110' ;0 MOVF N,0 SUBLW 0x01 BTFSC STATUS,Z RETLW B'00110000' ;1 MOVF N,0 SUBLW 0x02 BTFSC STATUS,Z RETLW B'01101101' ;2 MOVF N,0 SUBLW 0x03 BTFSC STATUS,Z RETLW B'01111001' ;3 MOVF N,0 SUBLW 0x04 BTFSC STATUS,Z RETLW B'00110011' ;4 MOVF N,0 SUBLW 0x05 BTFSC STATUS,Z RETLW B'01011011' ;5 MOVF N,0 SUBLW 0x06 BTFSC STATUS,Z RETLW B'01011111' ;6 MOVF N,0 SUBLW 0x07 BTFSC STATUS,Z RETLW B'01110000' ;7 MOVF N,0 SUBLW 0x08 BTFSC STATUS,Z RETLW B'01111111' ;8 MOVF N,0 SUBLW 0x09 BTFSC STATUS,Z RETLW B'01111011' ;9 RETLW B'01001111' ;E ; END