Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

[SOLVED] PIC18F252 & XC8: LED Flashing

Status
Not open for further replies.

megacrypto

Junior Member level 2
Junior Member level 2
Joined
Sep 21, 2009
Messages
20
Helped
5
Reputation
10
Reaction score
5
Trophy points
1,283
Visit site
Activity points
1,425
I just moved to PIC18 to maybe make use of the better functions XC8 has for them (especially SPI) and I got the PIC18F252. Now before I get to SPI, I have to through all the initial learning curve step, which begin with flashing an LED.

here is my code:

config.h
Code:
// PIC18F252 Configuration Bit Settings


// CONFIG1H
#pragma config OSC = HS       // Oscillator Selection bits (RC oscillator w/ OSC2 configured as RA6)
#pragma config OSCS = OFF       // Oscillator System Clock Switch Enable bit (Oscillator system clock switch option is disabled (main oscillator is source))

// CONFIG2L
#pragma config PWRT = OFF       // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOR = OFF        // Brown-out Reset Enable bit (Brown-out Reset disabled)
#pragma config BORV = 20        // Brown-out Reset Voltage bits (VBOR set to 2.0V)

// CONFIG2H
#pragma config WDT = OFF        // Watchdog Timer Enable bit (WDT disabled (control is placed on the SWDTEN bit))
#pragma config WDTPS = 128      // Watchdog Timer Postscale Select bits (1:128)

// CONFIG3H
#pragma config CCP2MUX = ON     // CCP2 Mux bit (CCP2 input/output is multiplexed with RC1)

// CONFIG4L
#pragma config STVR = OFF       // Stack Full/Underflow Reset Enable bit (Stack Full/Underflow will not cause RESET)
#pragma config LVP = OFF        // Low Voltage ICSP Enable bit (Low Voltage ICSP disabled)

// CONFIG5L
#pragma config CP0 = OFF        // Code Protection bit (Block 0 (000200-001FFFh) not code protected)
#pragma config CP1 = OFF        // Code Protection bit (Block 1 (002000-003FFFh) not code protected)
#pragma config CP2 = OFF        // Code Protection bit (Block 2 (004000-005FFFh) not code protected)
#pragma config CP3 = OFF        // Code Protection bit (Block 3 (006000-007FFFh) not code protected)

// CONFIG5H
#pragma config CPB = OFF        // Boot Block Code Protection bit (Boot Block (000000-0001FFh) not code protected)
#pragma config CPD = OFF        // Data EEPROM Code Protection bit (Data EEPROM not code protected)

// CONFIG6L
#pragma config WRT0 = OFF       // Write Protection bit (Block 0 (000200-001FFFh) not write protected)
#pragma config WRT1 = OFF       // Write Protection bit (Block 1 (002000-003FFFh) not write protected)
#pragma config WRT2 = OFF       // Write Protection bit (Block 2 (004000-005FFFh) not write protected)
#pragma config WRT3 = OFF       // Write Protection bit (Block 3 (006000-007FFFh) not write protected)

// CONFIG6H
#pragma config WRTC = OFF       // Configuration Register Write Protection bit (Configuration registers (300000-3000FFh) not write protected)
#pragma config WRTB = OFF       // Boot Block Write Protection bit (Boot Block (000000-0001FFh) not write protected)
#pragma config WRTD = OFF       // Data EEPROM Write Protection bit (Data EEPROM not write protected)

// CONFIG7L
#pragma config EBTR0 = OFF      // Table Read Protection bit (Block 0 (000200-001FFFh) not protected from Table Reads executed in other blocks)
#pragma config EBTR1 = OFF      // Table Read Protection bit (Block 1 (002000-003FFFh) not protected from Table Reads executed in other blocks)
#pragma config EBTR2 = OFF      // Table Read Protection bit (Block 2 (004000-005FFFh) not protected from Table Reads executed in other blocks)
#pragma config EBTR3 = OFF      // Table Read Protection bit (Block 3 (006000-007FFFh) not protected from Table Reads executed in other blocks)

// CONFIG7H
#pragma config EBTRB = OFF      // Boot Block Table Read Protection bit (Boot Block (000000-0001FFh) not protected from Table Reads executed in other blocks)

main.c

Code:
#define _XTAL_FREQ 16000000                  //4Mhz FRC internal osc
#include <xc.h>
#include <stdio.h>
#include <stdlib.h>
#include "config.h"

void main(void) {
    INTCON = 0;
    INTCON2 = 0;
    INTCON3 = 0;
    TRISB6 = 0;
    TRISB7 = 0;

    while(1){
        LATB6 = 0;
        LATB7 = 1;
        for ( int i = 0; i < 100; i++ ){
             __delay_ms(10);
        };
        LATB6 = 1;
        LATB7 = 0;
        for ( int i = 0; i < 100; i++ ){
             __delay_ms(10);
        };
    }

}

Im using an external 16MHz crystal.

When the program runs, LED 2 (LATB7) goes on and LED 1 (LATB6) stays off. It should be alternating, but it doesn't

Thanks you all
 

Ansel = 0;
anselh = 0;

I tried this but when compiling it gave back:
Code:
main.c:25: error: undefined identifier "ANSEL"
main.c:26: error: undefined identifier "ANSELH"

although they come up when i use auto-complete while typing
 

As it turned out to be (first time to come across this) MCLR is not included in the configuration bits as like in the previous 16F's that I used, so (as someone pointed out and) as per the datasheet:

A Power-on Reset pulse is generated on-chip when VDD rise is detected. To take advantage of the POR circuitry, just tie the MCLR pin directly (or through a resistor) to VDD. This will eliminate external RC components usually needed to create a Power-on Reset delay.

and so, I connected the MCLR pin to Vdd and that was it :)

Here is the final code (config.h is the same as in first post):

main.c

Code:
#define _XTAL_FREQ 16000000

#include <xc.h>
#include "config.h"


void main(void) {
    TRISB = 0;
    LATB6 = 0;
    LATB7 = 1;
    while(1){
        for ( unsigned char i = 0; i < 100; i++ ){
            __delay_ms(10);
        }
        LATB6 = ~LATB6;
        LATB7 = ~LATB7;
    }

}
 

Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top