;****************************************************************************************** ; Program Name : 16F88 Sample Program ; Programer : ; Create date : 2009/06/01 ; History : ; Discription : ;****************************************************************************************** ; (1)Description ;****************************************************************************************** ; LIST P=PIC16F88,ST=OFF,R=DEC INCLUDE "P16F88.inc" __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 ; LP01 EQU 20H LPMOV01 EQU 21H LPMOV02 EQU 22H MOVDAT EQU 23H LP1S1 EQU 24H LP1S2 EQU 25H ; ORG 0 GOTO START ORG 4 GOTO START ; ; ********************************** ; 1.Initialize ; ********************************** START ; Bank0での設定 BANKSEL PORTA ; CLRF PORTA ; PortAの初期化(Bank0) CLRF PORTB ; PortBの初期化 ; Bank1での設定 BANKSEL ANSEL ; MOVLW B'01111110' ;内部OSC選択,内部OSCに8MHzを選択 MOVWF OSCCON MOVLW B'00000000' ; 全てをDegitalに設定 MOVWF ANSEL ; Degital Inputに設定(Bank1) MOVLW B'11111111' MOVWF TRISA ; PortAのI/O設定(Bank1) MOVLW B'00000000' MOVWF TRISB ; PortBのI/O設定(Bank1) ; Bank0に戻す BANKSEL PORTA ; ; CLRF PORTB ; ; ********************************** ; 2.Main Program ; ********************************** MAIN ; (1)Move -60° MOVLW H'15' MOVWF MOVDAT CALL MOV01 CALL TIM1S ; (2)Move 0° MOVLW H'0F' MOVWF MOVDAT CALL MOV01 CALL TIM1S ; (3)Move 60° MOVLW H'09' MOVWF MOVDAT CALL MOV01 CALL TIM1S ; (4)Move 0° MOVLW H'0F' MOVWF MOVDAT CALL MOV01 CALL TIM1S GOTO MAIN ;****************************************************************************************** ; Function Name : MOV01 ; Title : Move ; Input : MOVDAT:(09[0x09] < 15[0x0F] < 21[0x15]) ; Output : ; Decription : 20mS * 100 => 2S ; Note : 0.9mS(-60°) < 1.5mS(Center) < 2.1mS(60°) Total:20mS ;****************************************************************************************** MOV01 MOVLW H'64' MOVWF LPMOV02 MOV01A1 ; (1)H-Plus MOVLW H'FF' MOVWF PORTB; ; ; MOVLW H'09' MOVFW MOVDAT MOVWF LPMOV01 MOV01A2 CALL TIM01 DECFSZ LPMOV01,F GOTO MOV01A2 ; (2)L-Plus MOVLW H'00' MOVWF PORTB ; MOVLW H'C8' MOVWF LPMOV01 MOVFW MOVDAT SUBWF LPMOV01,F ; MOVLW H'BE' MOVWF LPMOV01 MOV01A3 CALL TIM01 DECFSZ LPMOV01,F GOTO MOV01A3 ; DECFSZ LPMOV02,F GOTO MOV01A1 RETURN ;****************************************************************************************** ; Function Name : TIM1S ; Title : ; Input : ; Output : 10KHz(0.1mS)=100=>100Hz(0.01S)=100=>1Hz(1S) ;****************************************************************************************** TIM1S MOVLW H'64' MOVWF LP1S2 TIM1S2 MOVLW H'64' MOVWF LP1S1 TIM1S1 CALL TIM01 DECFSZ LP1S1,F GOTO TIM1S1 DECFSZ LP1S2,F GOTO TIM1S2 RETURN ;****************************************************************************************** ; Function Name : TIM01 ; Title : ; Input : ; Output : ; Description : 8MHz/4(2MHz)=200=>10KHz(0.1mS) ;****************************************************************************************** TIM01 MOVLW H'14' MOVWF LP01 TIM01A NOP NOP NOP NOP NOP NOP NOP DECFSZ LP01,F GOTO TIM01A RETURN END