;****************************************************************************************** ; Project : ; Program Name : ; Programer : ; Create date : Version 1.0 H21.06.10 ; History : ;****************************************************************************************** ; Description ; ;****************************************************************************************** LIST P=PIC12F683,ST=OFF,R=DEC INCLUDE "P12F683.inc" ;標準ヘッダ定義ファイル __CONFIG _MCLRE_OFF & _INTRC_OSC_NOCLKOUT & _WDT_OFF ; LP01 EQU 20H ; ORG 0 GOTO START ORG 4 GOTO START START ; (1)Initialized PORT,OSC BCF STATUS,RP0 MOVLW 07H MOVWF CMCON0 ; BANK0でCOMPARATOR_I/OをデジタルIO設定 CLRF GPIO ; BANK0でポート初期化 BSF STATUS,RP0 CLRF ANSEL ; BANK1でデジタルIO初期化 MOVLW B'111011' MOVWF TRISIO ; BANK1でPORT設定 BCF OSCCON,6 ; BANK1で内臓OSC500KHzを設定 BSF OSCCON,5 ; BANK1で内臓OSC500KHzを設定 BSF OSCCON,4 ; BANK1で内臓OSC500KHzを設定 BCF STATUS,RP0 ; (2)Initialized CCP Module CALL Init_CCP ; ********************************** ; 2.Main Program ; ********************************** MAIN ; (1)Move -60° MOVLW D'7' MOVWF CCPR1L CALL TIM1S ; (2)Move 0° MOVLW D'12' MOVWF CCPR1L CALL TIM1S ; (3)Move 60° MOVLW D'16' MOVWF CCPR1L CALL TIM1S ; (4)Move 0° MOVLW D'12' MOVWF CCPR1L CALL TIM1S GOTO MAIN ;**************************************************************************** ; Function Name : Init_CCP ; Title : ; Input : ; Output : ; Decription : ; (1)PWM Frequency 20mS(50Hz) ; (2)PWM Duty ; 0.9mS/20mS=>0.045(-60°) < 1.5mS/20mS=>0.075(Center) < 2.1mS/20mS=>0.105(60°) ; 156(PR2)*0.045=>7.02 156(PR2)*0.075=>11.7 156(PR2)*0.105=>16.38 ;**************************************************************************** Init_CCP: ; ; 1.Set CCP1CON Register ; Bit7-6:00, Bit5-4:PMW mode, Bit3-0:CCP1 mode select bit ; ※Bit5-4(00):Init value OSC,Bit3-0(11xx):PWM mode ; BCF STATUS,RP0 ; SET BANK0 MOVLW B'00001100' ; MOVWF CCP1CON ; ; ; 2.Set PR2 Register ; PWM Frequency ; BSF STATUS,RP0 ; SET BANK1 MOVLW D'156' ; 50Hz; 500000Hz(Int_OSC)/4/16(Prescaler)/50(Hz)==>156(DEC) MOVWF PR2 ; BCF STATUS,RP0 ; SET BANK0 ; ; 3.Set CCPR1L Register ; PWM Duty 0% ; ; (1)Set 10-3 Bit MOVLW B'00000000' ; MOVWF CCPR1L ; ; (2)Set 2-1 Bit BCF CCP1CON,5 BCF CCP1CON,4 ; ; 4.Set T2CON Register ; Bit6-3:00, Bit2:TIMER 2 ON, Bit1-0:Prescale(00;Prescaler=1,01;Prescaler=4,1X;Prescaler=16) ; MOVLW B'00000110' ; MOVWF T2CON ; ; RETURN ;****************************************************************************************** ; Function Name : TIM1S ; Title : ; Input : ; Output : ;****************************************************************************************** TIM1S ; ; 1.Set Register ; (1)T1CON Register ; MOVLW B'00010101' ; *Bit7(0):None ; *Bit6(0)/T1RUN:0 = System clock is derived from another source ; *Bit5,4(01)/T1CKPS:1:2 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) ; MOVLW H'0B' ; *TMR1 MOVWF TMR1H ; *TMR1 MOVLW H'DB' ; *TMR1 MOVWF TMR1L ; *TMR1 ; 2.Timer BCF PIR1,TMR1IF BTFSS PIR1,TMR1IF GOTO $-1 RETURN END