;************************************************************************* ; Copyright 2004 Hata Akihiro ; ;  第5章 PICアイデア集 ; 5−7 2個の入力ポートで4接点のロータリ・スイッチの状態を読み取る。 ;------------------------------------------------------------------------- ;プログラムの説明 ;<概要> ; 4接点ロータリ・スイッチ状態読み取りのテスト・プログラム。 ; ;<動作> ; 接点位置をRB0から3の4個のLEDに表示する。 ;  ; ;------------------------------------------------------------------------- ; ; 2004/08/23 V1.00 初回リリース ; ; ; ; ;------------------------------------------------------------------------- ; CONFIGRATION FUSE ; WDT:Disable OSC:Int RC Code Protect:OFF Power up timer:ON ; OSCILLATOR ; 4MHz ;************************************************************************* ; LIST P=PIC16F628A, R=DEC ;Target Processor INCLUDE P16F628A.INC ; __CONFIG _BODEN_OFF & _WDT_OFF & _INTOSC_OSC_NOCLKOUT & _CP_OFF & _PWRTE_ON & _DATA_CP_OFF & _LVP_OFF & _MCLRE_OFF __idlocs H'0100' ;V1.00 2004/08/23 ; ;------------------------------------------------------------------------- ; DEFINE I/O Port ;------------------------------------------------------------------------- ; PortA ; RA0 input ; RA1 input ; RA2 input ; RA3 input ; RA4 input ; RA5 input ; ; PortB ; RB0 LED1 output ; RB1 LED2 output ; RB2 LED3 output ; RB3 LED4 output ; RB4 input ; RB5 input ; RB6 SW1 input ; RB7 SW2 input ; ;------------------------------------------------------------------------- ; Variables ;------------------------------------------------------------------------- ; ; ; ;------------------------------------------------------------------------- ; Registers ;------------------------------------------------------------------------- ; SW_DATA EQU H'20' ; Rotary SW Position Data ;------------------------------------------------------------------------- ; Program code ;------------------------------------------------------------------------- ; ORG H'00' ; Power ON GOTO INITIALIZE ; ; ;------------------------------------------------------------------------- ; Initialize ;------------------------------------------------------------------------- INITIALIZE BSF STATUS,RP0 MOVLW B'01111111' ; PORTB Pull up MOVWF OPTION_REG MOVLW B'11111111' ; Set I/O Port INPUT/OUTPUT MOVWF TRISA MOVLW B'11110000' MOVWF TRISB BCF STATUS,RP0 MOVLW H'FF' MOVWF CMCON ; Set CMCON ;---------------------- ; OUTPUT Initialize ;---------------------- ;******************************************************* ; MAIN PROGRAM ;******************************************************* MAIN CALL SW_READ ; SW_DATA Read MOVF SW_DATA,W MOVWF PORTB ; Set PORTB GOTO MAIN ; ;******************************************************* ; SUBROUTINES ;******************************************************* SW_READ MOVF PORTB,W MOVWF SW_DATA RLF SW_DATA,F RLF SW_DATA,F RLF SW_DATA,W ANDLW B'00000011' CALL DATA_CONV MOVWF SW_DATA RETURN DATA_CONV ; Convert SW_data ADDWF PCL,F RETLW B'00001000' RETLW B'00000100' RETLW B'00000010' RETLW B'00000001' ; END