;****************************************************************************************** ; PIC18F14K50 Sample Program ; Project : ; Program Name : ; Programer : ; Create date : Version 1.0 H21.12.20 ; History : ; Laungage : MPASM ;****************************************************************************************** ; (1)Description ; ;****************************************************************************************** LIST P=PIC18F14K50,ST=OFF,R=DEC INCLUDE "P18F14K50.inc" config CPUDIV = NOCLKDIV ;CPU System Clock Selection bit(No CPU System Clock divide) config USBDIV = OFF ;USB Clock Selection bit(USB Clock comes directly from the OSC1/OSC2 oscillator block; no divide) config FOSC = HS ;Oscillator Selection bits(HS oscillator) config PLLEN = ON ;X PLL Enable bit(Oscillator multiplied by 4) config PCLKEN = OFF ;Primary Clock Enable Bit(Primary clock is under software control) config FCMEN = OFF config IESO = OFF ;Internal/External Oscillator Switchover bit(Oscillator Switchover mode disabled) config PWRTEN = OFF,BOREN = OFF,BORV = 19 config WDTEN = OFF,WDTPS = 1 config MCLRE = OFF ;MCLR Pin Enable bit(RE3 input pin enabled; MCLR disabled) config HFOFST = OFF,STVREN = OFF,LVP = OFF,BBSIZ = OFF,XINST = OFF config CP0 = OFF,CP1 = OFF,CPB = OFF,CPD = OFF,WRT0 = OFF,WRT1 = OFF,WRTB = OFF,WRTC = OFF,WRTD = OFF,EBTR0 = OFF,EBTR1 = OFF,EBTRB = OFF LP0 EQU 00H LP1 EQU 01H LP2 EQU 02H LP3 EQU 03H LEDLST EQU 04H ORG 0h GOTO START ORG 8h GOTO START ORG 18h GOTO START START MOVLW B'00000000' MOVWF TRISC MOVLW B'11111111' MOVWF PORTC MOVLW B'00000001' MOVWF LEDLST MAIN CALL MOVLED CALL WAT GOTO MAIN ;****************************************************************************************** ; Function Name : MOVLED ; Title : ; Input : ; Output : ;****************************************************************************************** MOVLED MOVF LEDLST,W MOVWF PORTC RLCF LEDLST ; MOVF LEDLST,W XORLW H'00' BTFSS STATUS,Z RETURN MOVLW B'00000000' MOVWF LEDLST RLCF LEDLST RETURN ;****************************************************************************************** ; Function Name : WAT ; Title : wait function (1S) ; Input : ; Output : ;****************************************************************************************** WAT MOVLW H'64' MOVWF LP0 WAT0 CALL Timer DECFSZ LP0 GOTO WAT0 RETURN ;****************************************************************************************** ; Function Name : Timer ; Title : wait function (10mS) ; Input : ; Output : ;****************************************************************************************** Timer: ; ******************************************************* ; 1.Define T1CON(TIMER1 CONTROL REGISTER) Register ; T1CON(7) RD16: 16-bit Read/Write Mode Enable bit ; 1 = Enables register read/write of TImer1 in one 16-bit operation ; 0 = Enables register read/write of Timer1 in two 8-bit operations ; T1CON(6) T1RUN: Timer1 System Clock Status bit ; 1 = Main system clock is derived from Timer1 oscillator ; 0 = Main 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 bit ; 1 = Timer1 oscillator is enabled ; 0 = Timer1 oscillator is shut off ; The oscillator inverter and feedback resistor are turned off to eliminate power drain. ; T1CON(2) T1SYNC: Timer1 External Clock Input Synchronization Select bit ; When TMR1CS = 1: ; 1 = Do not synchronize external clock input ; 0 = Synchronize external clock input ; When 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 the T13CKI pin (on the rising edge) ; 0 = Internal clock (FOSC/4) ; T1CON(0) bit 0 TMR1ON: Timer1 On bit ; 1 = Enables Timer1 ; 0 = Stops Timer1 ; ******************************************************* MOVLW B'10110001' ; 16-bit Read/Write Mode, 1:8 Prescale value MOVWF T1CON ; ******************************************************* ; 2.Define TMR1 Register ; Caution(16-bit Read/Write Mode) !!!!: ; (a)Writing to TMR1H does not directly affect Timer1. ; Instead, the high byte of Timer1 is updated with the contents of TMR1H when a write occurs to TMR1L. ; This allows all 16 bits of Timer1 to be updated at once. ; (b)A read from TMR1L will load the contents of the high byte of Timer1 into the Timer1 high byte buffer. ; This provides the user with the ability to accurately read all 16 bits of Timer1 without the need to ; determine whether a read of the high byte, followed by a read of the low byte, has become invalid due ; to a rollover or carry between reads. ; ******************************************************* ; TMR1 data ( OSC:12MHz, 4X PLLON, 1:8 Prescale value, 0.01[S];100Hz ) ; 10mS(100Hz): 12MHz * 4(PLLON) / 4(PIC) / 8(Prescale) / 100(100Hz)==> 0d15,000(Count) ==> 0x3A98(Count) ; TMR1 = 0xFFFF - 0x3A98 ==> 0xC567 MOVLW H'C5' MOVWF TMR1H MOVLW H'67' MOVWF TMR1L ; ******************************************************* ; 3.Timer ; ******************************************************* BCF PIR1,TMR1IF Timer_1 BTFSS PIR1,TMR1IF GOTO Timer_1 RETURN END