;****************************************************************************************** ; Program Name : 16F88 Sample Program ; Programer : ; Create date : 2009/07/01 ; History : ; Discription : ;****************************************************************************************** ; (1)Description ;****************************************************************************************** ; 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 ; LP_1 EQU 20H IO_data EQU 21H ; ORG 0 GOTO START ORG 4 GOTO START ; ; ********************************** ; 1.Initialize ; ********************************** START ;(1)初期化1 ; Bank0での設定 BCF STATUS,RP0 ; SET BANK1 CLRF PORTA ; PortAの初期化(Bank0) CLRF PORTB ; PortBの初期化 ; Bank1での設定 BSF STATUS,RP0 ; SET BANK1 MOVLW B'01111110' ; 内部OSC選択,内部OSCに8MHzを選択 ; MOVLW B'00111110' ; 内部OSC選択,内部OSCに500KHzを選択 MOVWF OSCCON MOVLW B'00000000' ; 全てをDegitalに設定 MOVWF ANSEL ; Degital Inputに設定(Bank1) MOVLW B'11111111' MOVWF TRISA ; PortAのI/O設定(Bank1) MOVLW B'11010111' MOVWF TRISB ; PortBのI/O設定(Bank1) ; Bank0に戻す BCF STATUS,RP0 ; SET BANK1 ; CLRF PORTB ; ;(2)UARTモジュールの初期化 CALL Init_USART ; ********************************** ; 2.Main Program ; ********************************** MAIN MOVLW D'0' MOVWF IO_data CALL Trans_USART ; CALL Rec_USART CALL TIM1S CALL TIM1S CALL TIM1S ; MOVLW D'60' MOVWF IO_data CALL Trans_USART ; CALL Rec_USART CALL TIM1S CALL TIM1S CALL TIM1S ; MOVLW D'120' MOVWF IO_data CALL Trans_USART ; CALL Rec_USART CALL TIM1S CALL TIM1S CALL TIM1S ; MOVLW D'60' MOVWF IO_data CALL Trans_USART ; CALL Rec_USART CALL TIM1S CALL TIM1S CALL TIM1S ; GOTO MAIN ;****************************************************************************************** ; Function Name : TIM1S ; Title : タイマー(1S) ; Input : ; Output : ; Description : ;****************************************************************************************** TIM1S MOVLW H'0A' MOVWF LP_1 TIM1SA CALL TIM01S DECFSZ LP_1,F GOTO TIM1SA RETURN ;****************************************************************************************** ; Function Name : TIM01S ; Title : タイマー(0.1S) ; Input : ; Output : ; Description : ;****************************************************************************************** TIM01S ; ; 1.Set Register ; (1)T1CON Register ; MOVLW B'00110101' ; *Bit7(0):None ; *Bit6(0)/T1RUN:0 = System clock is derived from another source ; *Bit5,4(11)/T1CKPS:1:8 Prescale Value ; *Bit3(0)/T1OSCEN:OSC is shut off ; *Bit2(1)/T1SYNC:ASyncronize ; *Bit1(0)/TMR1CS:Internal clock(Fosc/4) ; *Bit0(1)/TMR1ON:Enable Timer1 MOVWF T1CON ; * ; (2)Set TMR1 Value ; 500000Hz(Int_OSC)/4/2(Prescale) => 0d62500(0xF424) ; 0xFFFF(-)0xF424 => 0d3035(0x0BDB) ; ; 8000000Hz(Int_OSC)/4/8(Prescale)/10(0.1S) => 0d25000(0x61A8) ; 0xFFFF(-)0x61A8 => 0d40535(0x9E57) MOVLW H'9E' ; *TMR1 MOVWF TMR1H ; *TMR1 MOVLW H'57' ; *TMR1 MOVWF TMR1L ; *TMR1 ; 2.Timer BCF PIR1,TMR1IF BTFSS PIR1,TMR1IF GOTO $-1 RETURN ;**************************************************************************** ; Function Name : Init_USART ; Title : Initialized USART ; Input : ; Output : ; Description : ;**************************************************************************** Init_USART ; ; TXSTA;TRANSMIT STATUS AND CONTROL REGISTER ; Bit7:Async ==> Don't care ; BIT6:Selects 8-bit ==> 0 ; BIT5:Transmit Enable Bit ==> 1:Enable 0:Disable ; BIT4:AUSART Select mode ==> 1:Synce 0:Async ; BIT3:Read As '0' ; BIT2:High BAUD Rate Select ==> 1:High Speed 0:Low Speed ; BIT1:TSR Status bit ==> 1:TSR Empty 0:TSR Full ; BIT0:9Th Bit of Transmit data , can be parity bit ; BSF STATUS,RP0 ; SET BANK1 MOVLW H'20' ; 0b0010,0000 MOVWF TXSTA BCF STATUS,RP0 ; SET BANK0 ; ; RCSTA;RECIVE STATUS AND CONTROL REGISTER ; Bit7:Serial Port Enable bit==> 1:Serial Port Enable 0:Serial Port Disable ; BIT6:Selects 8-bit ==> 0 ; BIT5:Single Recive Enable ==> Asyn:Don't Care ; BIT4:AUSART Select mode ==> 1:Enable 0:Disable ; BIT3:When Bit6=1 ; BIT2: 1:Framing error 0:No Framing error ; BIT1: 1:Overrun error 0:Overrun error ; BIT0:9Th bit Recived data ; MOVLW H'90' ;0b1001,0000 MOVWF RCSTA ; ; SPBRG;Baund Rate Genarator REGISTER ; See PIC16F88 Manual P.101 ; BSF STATUS,RP0 ; SET BANK1 ; MOVLW H'0C' ; 9600BPS, OSC:8MHz(Inside) ==> SPREG:12(0x0C) <== 8MHz/64/9600(BPS)-1 MOVLW H'67' ; 1200BPS, OSC:8MHz(Inside) ==> SPREG:103(0x67) <== 8MHz/64/1200(BPS)-1 ; MOVLW H'06' ; 1200BPS, OSC:500KHz(Inside) ==> SPREG:6(0x06) <== 500KHz/64/1200(BPS)-1 MOVWF SPBRG BCF STATUS,RP0 ; SET BANK0 RETURN ;**************************************************************************** ; Function Name : Trans_USART ; Title : Put character ; Input : IO_data ; Output : ; Description : ;**************************************************************************** Trans_USART ; *************************** ; 1.Check Send Flag ; *************************** BSF STATUS,RP0 ; SET BANK1 BTFSS TXSTA,TRMT GOTO $-1 BCF STATUS,RP0 ; SET BANK0 ; *************************** ; 2.Set data ; *************************** MOVFW IO_data MOVWF TXREG RETURN ;**************************************************************************** ; Function Name : Rec_USART ; Title : Get character ; Input : ; Output : IO_data ; Description : ;**************************************************************************** Rec_USART ; **************************** ; 1.Check Recvive Flag ; **************************** BTFSS PIR1,RCIF GOTO $-1 ; **************************** ; 2.Set Recive Data ; **************************** MOVFW RCREG MOVWF IO_data RETURN END