4mhz internal clock on the 16f1827?

Status
Not open for further replies.

ClydeCrashKop

Well-Known Member
Most Helpful Member
I have been modifying Nigel's 16F628A tutorials to run on the 16F1827. So far I haven't been able to configure them to run on the 4mhz internal clock. I would like to do that to use the LCD routines. Could someone help me with that? This runs okay with the 20mhz crystal but I would like to use the 4mhz internal clock.
Blinks 8 LEDs on PORTB in asm.

C:
;Modified from Tutorial 1.5 - Nigel Goodwin 2002 tutorials from Electrotech online
 
list  p=16f1827      ; list directive to define processor
#include <p16f1827.inc> ; processor specific variable definitions
;------------------------------------------------------------------------------
;
; CONFIGURATION WORD SETUP
;    __CONFIG _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_OFF & _MCLRE_ON & _CP_OFF & _CPD_OFF & _BOREN_OFF & _CLKOUTEN_ON & _IESO_OFF & _FCMEN_OFF
  __CONFIG _CONFIG1, _FOSC_HS & _WDTE_OFF & _PWRTE_OFF & _MCLRE_ON & _CP_OFF & _CPD_OFF & _BOREN_OFF & _CLKOUTEN_ON & _IESO_OFF & _FCMEN_OFF
    __CONFIG _CONFIG2, _WRT_OFF & _PLLEN_OFF & _STVREN_OFF & _BORV_19 & _LVP_OFF
 
cblock  0x20    ;start of general purpose registers
  count1    ;used in delay routine
  counta    ;used in delay routine
  countb    ;used in delay routine
endc
LEDPORT Equ PORTB  ;set constant LEDPORT = 'PORTB'
LEDTRIS Equ TRISB  ;set constant for TRIS register
 
org 0x0000  ;org sets the origin, 0x0000 for the 16F628,
    ;this is where the program starts running
; movlw 0x07
; movwf CMCON  ;turn comparators off (make it like a 16F84)
;    bsf  STATUS,  RP0 ;This doesn't work on 16F1827 use BANKSEL instead
BANKSEL TRISB
    movlw  b'00000000'  ;set PortB all outputs
    movwf  LEDTRIS
; bcf STATUS,  RP0 This doesn't work on 16F1827 use BANKSEL instead
BANKSEL PORTB
clrf LEDPORT  ;set all outputs low
Loop
movlw b'10000000'
; movlw b'11111111'
movwf LEDPORT
call Delay  ;this waits for a while!
movlw b'01000000'
movwf LEDPORT
call Delay  ;this waits for a while!
movlw b'00100000'
movwf LEDPORT
call Delay  ;this waits for a while!
movlw b'00010000'
movwf LEDPORT
call Delay  ;this waits for a while!
movlw b'00001000'
movwf LEDPORT
call Delay  ;this waits for a while!
movlw b'00000100'
movwf LEDPORT
call Delay  ;this waits for a while!
movlw b'00000010'
movwf LEDPORT
call Delay  ;this waits for a while!
movlw b'00000001'
movwf LEDPORT
call Delay  ;this waits for a while!
goto Loop  ;go back and do it again
Delay movlw d'250' ;d'250'  ;delay 250 ms (4 MHz clock)
movwf count1
d1 movlw 0xC7
movwf counta
movlw 0x01
movwf countb
Delay_0
decfsz counta, f
goto $+2
decfsz countb, f
goto Delay_0
decfsz count1 ,f
goto d1
retlw 0x00
end
 
Last edited:
Something like this perhaps?

Code:
  __CONFIG _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _IESO_OFF & _FCMEN_OFF
  __CONFIG _CONFIG2, _PLLEN_OFF &_BORV_HI & _LVP_OFF
;
; _PWRTE_OFF    default
; _MCLRE_ON     default
; _CP_OFF       default
; _CPD_OFF      default
; _BOREN_ON     default
; _CLKOUTEN_OFF default
;
; _WRT_OFF      default
; _STVREN_ON    default
; _VCAPEN_OFF   default
;

The following code excerpt turns off the ADC module and changes the INTOSC operation from the default power-up 500-KHz setting to a 4-MHz setting;

Code:
;******************************************************************
;  reset vector                                                   *
;******************************************************************
        org     0x0000
init
;
;  turn off ADC and select digital I/O
;
        banksel ANSELA          ; bank 3                          |B3
        clrf    ANSELA          ; set digital I/O                 |B3
        clrf    ANSELB          ; set digital I/O                 |B3
;
;  setup INTOSC for 4-MHz
;
        banksel OSCCON          ; bank 1                          |B1
        movlw   b'01101010'     ;                                 |B1
        movwf   OSCCON          ; setup 4-MHz INTOSC              |B1
waitfs  btfss   OSCSTAT,HFIOFS  ; stable? yes, skip, else         |B1
        bra     waitfs          ; branch (wait until stable)      |B1
;
;  setup port direction and latch registers
;

Good luck with your project.

Cheerful regards, Mike
 
Last edited:
Status
Not open for further replies.
Cookies are required to use this site. You must accept them to continue using the site. Learn more…