;****************************************************************************************** ; PIC 16F88 Sample Program ; Project : ; Program Name : ; Programer : ; Create date : Version 1.0 H27.03.10 ; History : ;****************************************************************************************** ; Description ; (1)Assign I/O PORT ; RB(0-7) : Choose the sound effect of GSE3568 ;****************************************************************************************** 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 ; ; ; Define GENERAL PURPOSE RAM AREA (BANK0) ; TMP_G EQU 20H WAT1M1 EQU 21H ; ; Define Macro ; BANK0 MACRO BCF STATUS,RP1 BCF STATUS,RP0 ENDM BANK1 MACRO BCF STATUS,RP1 BSF STATUS,RP0 ENDM BANK2 MACRO BSF STATUS,RP1 BCF STATUS,RP0 ENDM BANK3 MACRO BSF STATUS,RP1 BSF STATUS,RP0 ENDM WAT001 MACRO #TM_LP MOVLW #TM_LP CALL WAT10M ENDM ORG 0 GOTO START ORG 4 GOTO START START ; ***************************** ; 1.Initialize ; ***************************** ; (1)Initialized I/O Port BANK0 CLRF PORTA MOVLW H'FF' MOVWF PORTB ; (2)Define OSC BANK1 MOVLW B'01111110' ; Internal OSC 8MHz MOVWF OSCCON ; (3)Define ANSEL BANK1 MOVLW B'00000000' ; ALL Degital PORT MOVWF ANSEL ; (4)Define port of direction BANK1 MOVLW B'11111111' MOVWF TRISA MOVLW B'00000000' MOVWF TRISB BANK0 ; ***************************** ; 2.Program main ; ***************************** MAIN MOVLW B'11111110' MOVWF PORTB WAT001 H'64' MOVLW B'11111101' MOVWF PORTB WAT001 H'64' MOVLW B'11111011' MOVWF PORTB WAT001 H'64' MOVLW B'11110111' MOVWF PORTB WAT001 H'64' MOVLW B'11101111' MOVWF PORTB WAT001 H'64' MOVLW B'11011111' MOVWF PORTB WAT001 H'64' MOVLW B'10111111' MOVWF PORTB WAT001 H'64' MOVLW B'01111111' MOVWF PORTB WAT001 H'64' GOTO MAIN ;************************************************************************************ ; Function Name : WAT10M ; Title : Wait 10[m] ; Input : W-reg ; Output : ;************************************************************************************ WAT10M MOVWF WAT1M1 WAT10MA CALL TIMER DECFSZ WAT1M1,F GOTO WAT10MA RETURN ;************************************************************************************ ; Function Name : TIMER ; Title : Wait 0.01[S] ; Input : ; Output : ;************************************************************************************ TIMER ; ******************************************************* ; 1.Define T1CON(TIMER1 CONTROL REGISTER) Register (BANK0) ; T1CON[7] Unimplemented: Read as e0f ; T1CON[6] T1RUN: Timer1 System Clock Status bit ; 1 = System clock is derived from Timer1 oscillator ; 0 = System clock is derived from another source ; T1CON[5-4] T1CKPS<1:0>: Timer1 Input Clock Prescale Select bits ; 11 =1:8 Prescale value ; 10 =1:4 Prescale value ; 01 =1:2 Prescale value ; 00 =1:1 Prescale value ; T1CON[3] T1OSCEN: Timer1 Oscillator Enable Control bit ; 1 = Oscillator is enabled ; 0 = Oscillator is shut off (the oscillator inverter is turned off to eliminate power drain) ; T1CON[2] T1SYNC: Timer1 External Clock Input Synchronization Control bit ; TMR1CS = 1: ; 1 = Do not synchronize external clock input ; 0 = Synchronize external clock input ; TMR1CS = 0: ; This bit is ignored. Timer1 uses the internal clock when TMR1CS = 0. ; T1CON[1] TMR1CS: Timer1 Clock Source Select bit ; 1 = External clock from pin RB6/AN5(1)/PGC/T1OSO/T1CKI (on the rising edge) ;Note 1: Available on PIC16F88 devices only. ; T1CON[0] TMR1ON: Timer1 On bit ; 1 = Enables Timer1 ; 0 = Stops Timer1 ; ******************************************************* BANK0 MOVLW B'00000101' MOVWF T1CON ; ******************************************************* ; 2.Define TMR1 (BANK0) ; TMR1 data ( OSC:8MHz, FOSC/4, 1:1 Prescale value, 0.01[S];100Hz ) ; 10mS(100Hz): 8MHz / 4(FOSC/4) / 1(Prescale) / 100(100Hz)==> 0d20,000(Count) ==> 0x4E20(Count) ; TMR1 = 0xFFFF - 0x4E20 ==> 0xB1DF ; ******************************************************* BANK0 MOVLW H'B1' MOVWF TMR1H MOVLW H'DF' MOVWF TMR1L ; ******************************************************* ; 3.Timer (BANK0) ; ******************************************************* BANK0 BCF PIR1,TMR1IF BTFSS PIR1,TMR1IF GOTO $-1 RETURN END