;****************************************************************************
;  Project      :
;  Program Name : 
;  Programer    :
;  Create date  :  Version 1.0    H19.10.10
;  Replace date :
;  History      :
;  Language     :  
; 
;****************************************************************************
;  Description  :
;   (1)Define I/O Port
;     GPIO(0) : AN0(Voltage Position)
;     GPIO(2) : CCP1(Drive MOS-FET)
;
;****************************************************************************
	LIST	P=PIC12F683,ST=OFF,R=DEC
	INCLUDE	"P12F683.inc"
	__CONFIG _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOD_OFF & _IESO_OFF & _FCMEN_OFF 
;
dat_H	EQU	20H
dat_L	EQU	21H
CCP_H	EQU	22H
CCP_L	EQU	23H
LP_0	EQU	24H
LP_1	EQU	25H
;
	ORG	0
	GOTO	START
	ORG	4
	GOTO	START
START
; **************************************
;  1.Initialied Segment
; **************************************
;  (1)Define OSC
	BSF	STATUS,RP0	; SET BANK1
	BSF	OSCCON,6	; SET OSC-8MHz
	BSF	OSCCON,5	; SET OSC-8MHz
	BSF	OSCCON,4	; SET OSC-8MHz

;  (2)Define I/O PORT
	BSF	STATUS,RP0	; SET BANK1
	MOVLW	B'111011'	; 
	MOVWF	TRISIO		; 

;  (3)Intialized I/O PORT
	BCF	STATUS,RP0	; SET BANK0
	MOVLW	B'000000'	; 
	MOVWF	GPIO	

;  (4)Define A/D Converter
	CALL	Init_DAC

;  (5)Define CCP
	CALL	Init_CCP

; **************************************
;  2.Main Program
; **************************************

MAIN
;  (1)Get A/D Converter data 
	CALL	Get_DAC

;  (2)Edit CCP data
	CALL	Edit_data

;  (3)SEt CCP data
	CALL	Set_CCP

;  (4)Wait
	CALL	TIMER

	GOTO	MAIN



;****************************************************************************
;   Function Name : Init_DAC
;   Title         : 
;   Input         : 
;   Output        : 
;   Description   : 
;****************************************************************************
Init_DAC:
;
;  1.Set ANSEL Register
;     Bit7:0, Bit6-4:Select ADC Clock, Bit3-0:Select Degital or Analog
;     ※Bit6-4:'010' 20～5MHz OSC
;
	BSF	STATUS,RP0	; SET BANK1

	MOVLW	B'00100001'	; 
	MOVWF	ANSEL		; 
;
;  2.Set ADCON0 Register
;     GP7:Fmt, GP6:VRef, GP5,4:None, GP3,2:Sel Bit, GP1:Start, GP0:ADC On
;     ※Fmt(1);Right ,VRef(0);Vdd, Select Bit(00);AN0
;
	BCF	STATUS,RP0	; SET BANK0

;	MOVLW	B'10000001'	;  
	MOVLW	B'00000001'	;  
	MOVWF	ADCON0		; 

	RETURN


;****************************************************************************
;   Function Name : Get_DAC
;   Title         : 
;   Input         : 
;   Output        : 
;   Description   : 
;****************************************************************************
Get_DAC:
;
;  1.Start A/D Converter
;
	BCF	STATUS,RP0	; SET BANK0
	BSF	ADCON0,GO	; Start A/D Converter
;
;  2.Wait loop
;
	BTFSC	ADCON0,GO	; 
	GOTO	$-1		; 
;
;  3.Set data
;
	MOVFW	ADRESH		;
	MOVWF	dat_H		;

        BSF	STATUS,RP0	; SET BANK1
	MOVFW	ADRESL		; 
	BCF	STATUS,RP0	; SET BANK0
	MOVWF	dat_L		; 

	RETURN

;****************************************************************************
;   Function Name : Init_CCP
;   Title         : 
;   Input         : 
;   Output        : 
;   Description   : 
;****************************************************************************
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	B'11111111'	; 
	MOVWF	PR2		; 

;
;  3.Set CCPR1L Register
;     PWM Duty
;
	BCF	STATUS,RP0	; SET BANK0
	MOVLW	B'00000000'	; 
	MOVWF	CCPR1L		; 

;
;  4.Set T2CON Register
;     TMR2 Prescale Value
;     Bit6-3:00, Bit2:TIMER 2 ON, Bit1-0:Prescale(00;Prescaler=1,01;Prescaler=4,1X;Prescaler=16)
;
	BCF	STATUS,RP0	; SET BANK0
	MOVLW	B'00000100'	; 
	MOVWF	T2CON		; 
;
	BCF	STATUS,RP0	; SET BANK0
	RETURN

;****************************************************************************
;   Function Name : Set_CCP
;   Title         : 
;   Input         : 
;   Output        : 
;   Description   : 
;****************************************************************************
Set_CCP:

;
;   1.Set duty cycle
;

; (1)Set 10-3 Bit 
	MOVFW	CCP_H	;
	MOVWF	CCPR1L	;

; (2)Set 2-1 Bit 
	BTFSS	CCP_L,7	;
	BCF	CCP1CON,5
	BTFSC	CCP_L,7	;
	BSF	CCP1CON,5
;
	BTFSS	CCP_L,6	;
	BCF	CCP1CON,4
	BTFSC	CCP_L,6	;
	BSF	CCP1CON,4

	RETURN

;****************************************************************************
;   Function Name : Edit_data
;   Title         : 
;   Input         : 
;   Output        : 
;   Description   : 
;****************************************************************************
Edit_data:
	MOVFW	dat_H	;
	MOVWF	CCP_H	;

	MOVFW	dat_L	;
	MOVWF	CCP_L	;

	RETURN

;****************************************************************************
;   Function Name : TIMER
;   Title         : 
;   Input         : 
;   Output        : 
;   Description   : 
;****************************************************************************
TIMER
	MOVLW	H'0A'
	MOVWF	LP_1
TIMER1
	MOVLW	H'0A'
	MOVWF	LP_0
TIMER2
	DECFSZ	LP_0,F
	GOTO	TIMER2 
	DECFSZ	LP_1,F
	GOTO	TIMER1

	RETURN

	END

