View previous topic :: View next topic |
Author |
Message |
bling23
Joined: 21 Mar 2009 Posts: 4
|
help with PIC16F877A |
Posted: Mon Mar 23, 2009 5:08 pm |
|
|
hi everyone,
I'm working on my undergraduate project and I need to use PIC16F877A.
I can't seem to find any available website online that has all the available functions that can be used on the pic and compiled using C.
does anyone have a link on that?
also, I seem to be having simple problems in getting my PIC to work.
for example,
I am just trying to light up some LEDs.
I kinda have figured out the syntax but sometimes the PIC just does not light up the LEDs that i want to, nor execute what i need.
for example:
Code: | #include <16F877A.h>
#use delay(Clock=20000000)
#fuses XT, NOWDT, NOPROTECT, NOPUT
#define LED0 PIN_C0
#define LED1 PIN_C1
#define LED2 PIN_C2
#define LED3 PIN_C3
void main(){
set_tris_c(0b00000000);
for(;;){
output_high(LED0);
output_low(LED1);
output_high(LED2);
output_low(LED3);
}
} |
I was having problems feeding the output to RS232 thats why I'm trying to debug and see if it prints to LED first. Apparently now even such a simple program does not work.
I have previously used a different set of code that made the LED work (I copied it from a website) Syntax wise, it should be the same.
I have no idea why such a simple program does not work.
Can someone give me some tips? |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Mon Mar 23, 2009 5:32 pm |
|
|
Quote: | I can't seem to find any available website online that has all the available functions |
http://www.ccsinfo.com/content.php?page=compspecific
1. The 20 MHz crystal requires HS mode. It will not oscillate with the low
powered XT mode fuse.
2. You need to allow your LEDs to be on long enough for your eyes to
see them. Put delay statements between the LED on/off statements.
3. You don't need to set the TRIS. The compiler will do it for you when
you use the output_low() and output_high() functions (and other CCS
functions).
4. Always specify the NOLVP fuse. The vs. 4.x compilers default to that
mode, but I don't know what version you have, so it's best to specify it.
Study this example program:
Code: |
#include <16F877A.H>
#fuses HS, NOWDT, NOPROTECT, BROWNOUT, PUT, NOLVP
#use delay(clock=20000000)
//===============================
void main()
{
while(1)
{
output_high(PIN_C0); // Blink LED on Pin C0
delay_ms(500);
output_low(PIN_C0);
delay_ms(500);
}
} |
|
|
|
bling23
Joined: 21 Mar 2009 Posts: 4
|
|
Posted: Mon Mar 23, 2009 6:00 pm |
|
|
Thanks for your help
Now my simple test LED code works perfectly.
I have been to the website but it does not provide details on how to use those functions that they have.
It will be good if there was a source that has all the functions with all the different parameters that can be fed into the functions.
For example,
I was trying to do:
Code: | setup_timer_1(T1_INTERNAL | T1_DIV_BY_4); |
I copied the code from a source.
however,
I want to do the same for timer2.
I know that timer2 is slightly different from 1 but I have no idea what parameters to type in.
I tried to duplicate.
Code: | setup_timer_2(T2_INTERNAL | T2_DIV_BY_4); |
But it gives me error while compiling.
The problem I have now is not programming as I am quite good with C programming but the syntax and the coding for PIC.
I have never used it before and its very confusing.
For example, I would never figure that the problem I was having was with the HS fuse as I just included it because it seems like some syntax that PIC needed. |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Mon Mar 23, 2009 6:19 pm |
|
|
Quote: |
I have been to the website but it does not provide details on how to use
those functions that they have. |
Look in the CCS manual:
http://www.ccsinfo.com/downloads/ccs_c_manual.pdf
Unfortunately the manual is not easy to use, because it has no table
of contents ("Bookmarks") that you can click on, and the hyperlinks
don't work. You may want to use the Help file instead. It's in this directory:
Quote: | c:\Program Files\Picc\ccsc.chm |
Quote: |
I would never figure that the problem I was having was with the HS fuse. |
Download the 16F877A data sheet:
http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en010242
Look in this section:
Quote: | 14.0 SPECIAL FEATURES OF THE CPU |
This table shows the frequency limits for each oscillator fuse:
Quote: | TABLE 14-2: CAPACITOR SELECTION FOR CRYSTAL OSCILLATOR |
Always review a PIC module in the documentation before you use it. |
|
|
|