From: Bob C. <bco...@ve...> - 2010-08-23 02:45:03
|
Greetings, I am a new SDCC user. I have succeeded in compiling, flashing and running a simple LED-blinking program for the PIC16F690 on a breadboard. I am new to embedded programming and very new to writing embedded C programs. I learned about SDCC in my search for an open source PIC device compiler. Where can I find examples of C programs which are compiled on SDCC for the PIC14 port? I would like to study these so I can learn from more advanced programmers. Thanks Bob Cochran Greenbelt, Maryland USA |
From: Milan B. <mi...@ma...> - 2010-08-23 15:04:04
|
Dňa 23.08.2010 04:44, Bob Cochran wrote / napísal(a): > Greetings, > > I am a new SDCC user. I have succeeded in compiling, flashing and > running a simple LED-blinking program for the PIC16F690 on a breadboard. > I am new to embedded programming and very new to writing embedded C > programs. I learned about SDCC in my search for an open source PIC > device compiler. > > Where can I find examples of C programs which are compiled on SDCC for > the PIC14 port? I would like to study these so I can learn from more > advanced programmers. > > Thanks > > Bob Cochran > Greenbelt, Maryland > USA > > > ------------------------------------------------------------------------------ > This SF.net email is sponsored by > > Make an app they can't live without > Enter the BlackBerry Developer Challenge > http://p.sf.net/sfu/RIM-dev2dev > _______________________________________________ > Sdcc-user mailing list > Sdc...@li... > https://lists.sourceforge.net/lists/listinfo/sdcc-user http://burningsmell.org/pic16f628/ Bye, Milan. |
From: caio <bla...@gm...> - 2010-08-26 04:45:23
|
Hello. You should know that 14 bit core has only 8 bit stack levels. It's mean that the 14 bit core is C unfriendly. The 16 bit core or 18f4550 has 31 bit stack levels. There are still a lack of documentation about the Sdcc port for pic. But i will try to show you something i have learned. The header file of pic16f690 can tell you a lot of things that you must know to programming the Pic uc. In the directory */usr/share/sdcc/include/pic/* you can find all the header file to the port14 In the pic16fxxx header file there are the special function registers and its bits. RA0=0; RA1=1; PORTB=2; GIE=0; The sdcc can recognize decimal , binary and hexadecimal numbers. Ex: PORTA=0xFF; // PORTA=255 PORTA=0b11111111; // PORTA=255 PORTA=255; // (default decimal) Remember that C programming to mcu is not same as the C to intel x86. There aren't the standard I/O library, printf , scanf ... Its common to do the following: There are the following data types that you must know to perform embedded system programmig: char / uint_8t: 8 bits Range 0 to 255 unsigned char / int_8t : 8 bits Range -127 to 128 unsigned int / uint_16t : 16 bits Range 0 to 65535 int / int_16t : 16 bits Range ???? float / float : 32 bits ============== The SDCC compiler don't have a built-in delay routine like the CCS compiler eg.: #pragma use clock 40000. void main{ delay(500); } you should do it by yourself. ============== You must also know the bit-masks techniques : Bitwise operatiors: & and operator | or operator ~ not operator (inverter) >> left shift << right shift ^ xor operator CODE= PORTA & 0b10000011 ; // Read the RA7, RA1 and RA0 bits Ex PORTA = 11001101 & 10000011 ( bit mask) ------------------ 10000001 (masked result) Eg.: read the PORTA hight nibbles : NIBBLES= PORTA >> 4; Eg.: Blink all leds in PORTA. CODE= 0b1111111; while(1){ PORTA=PORTA^CODE; delay_500(); } .... .... ============================== You should avoid complex math and store constant data in program memory by storing the data on program memory (flash memory). Note that *__code* directive forces the data to be stored in the flash memory( program memory). Eg.: #include <xxxx.h> #define u8 char ..... void main(){ TRISA=0x00; PORTA=disp7seg(8); // Display digit 8 on the seven segment display } #if 1 static u8 disp7seg(u8 digit){ __code u8 LookUpTable[10]={ // It is stored in the program memory __code 0x3F, // Disp 0 0x06, // Disp 1 0x5B, // Disp 2 0X4F, // Disp 3 0x66, // Disp 4 0x6D, // Disp 5 0x7D, // Disp 6 0x07, // Disp 7 0x7F, // Disp 8 0x6F, // Disp 9 0x00 // Digito nulo se requerido };//End of LookUpTable return LookUpTable[digit]; } #endif Excuse my English, it's not my native language,I am from Brazil. Best regards. On 08/22/2010 11:44 PM, Bob Cochran wrote: > Greetings, > > I am a new SDCC user. I have succeeded in compiling, flashing and > running a simple LED-blinking program for the PIC16F690 on a breadboard. > I am new to embedded programming and very new to writing embedded C > programs. I learned about SDCC in my search for an open source PIC > device compiler. > > Where can I find examples of C programs which are compiled on SDCC for > the PIC14 port? I would like to study these so I can learn from more > advanced programmers. > > Thanks > > Bob Cochran > Greenbelt, Maryland > USA > > > ------------------------------------------------------------------------------ > This SF.net email is sponsored by > > Make an app they can't live without > Enter the BlackBerry Developer Challenge > http://p.sf.net/sfu/RIM-dev2dev > _______________________________________________ > Sdcc-user mailing list > Sdc...@li... > https://lists.sourceforge.net/lists/listinfo/sdcc-user > |
From: Bob C. <bco...@ve...> - 2010-08-26 22:26:45
|
Thank you very, very much for your help to me! I will study this more carefully over the next few days. You made some comments that are extremely helpful to me. Thank you for taking the time to help a complete beginner. Bob Cochran On 08/26/2010 12:45 AM, caio wrote: > Hello. You should know that 14 bit core has only 8 bit stack levels. > It's mean that the 14 bit core is C unfriendly. The 16 bit core or > 18f4550 has 31 bit stack levels. > > There are still a lack of documentation about the Sdcc port for pic. > But i will try to show you something i have learned. > > The header file of pic16f690 can tell you a lot of things that you > must know to > programming the Pic uc. > > In the directory */usr/share/sdcc/include/pic/* you can find all > the header file to the port14 > > In the pic16fxxx header file there are the special function registers > and its bits. > > RA0=0; > RA1=1; > PORTB=2; > GIE=0; > > > The sdcc can recognize decimal , binary and hexadecimal numbers. Ex: > > PORTA=0xFF; // PORTA=255 > PORTA=0b11111111; // PORTA=255 > PORTA=255; // (default decimal) > > Remember that C programming to mcu is not same as the C to intel x86. > There aren't the standard I/O library, printf , scanf ... > > Its common to do the following: > > There are the following data types that you must know to perform > embedded system programmig: > > > char / uint_8t: 8 bits Range 0 to 255 > unsigned char / int_8t : 8 bits Range -127 to 128 > unsigned int / uint_16t : 16 bits Range 0 to 65535 > int / int_16t : 16 bits Range ???? > float / float : 32 bits > > > ============== > > The SDCC compiler don't have a built-in delay routine like the CCS > compiler eg.: > #pragma use clock 40000. > > void main{ > delay(500); > } > > you should do it by yourself. > > ============== > > You must also know the bit-masks techniques : > > Bitwise operatiors: > > & and operator > | or operator > ~ not operator (inverter) > >> left shift > << right shift > ^ xor operator > > CODE= PORTA & 0b10000011 ; // Read the RA7, RA1 and RA0 bits > > Ex PORTA = 11001101 > & 10000011 ( bit mask) > ------------------ > 10000001 (masked result) > > > Eg.: read the PORTA hight nibbles : > NIBBLES= PORTA >> 4; > > > Eg.: > Blink all leds in PORTA. > > CODE= 0b1111111; > > while(1){ > PORTA=PORTA^CODE; > delay_500(); > } > > .... > .... > > ============================== > > You should avoid complex math and store constant data in program > memory by storing the data on program memory (flash memory). > > Note that *__code* directive forces the data to be stored in the flash > memory( program memory). > > Eg.: > > #include <xxxx.h> > #define u8 char > ..... > > > > void main(){ > > TRISA=0x00; > PORTA=disp7seg(8); // Display digit 8 on the seven segment display > > } > > #if 1 > static u8 disp7seg(u8 digit){ > > > __code u8 LookUpTable[10]={ // It is stored in the program > memory __code > 0x3F, // Disp 0 > 0x06, // Disp 1 > 0x5B, // Disp 2 > 0X4F, // Disp 3 > 0x66, // Disp 4 > 0x6D, // Disp 5 > 0x7D, // Disp 6 > 0x07, // Disp 7 > 0x7F, // Disp 8 > 0x6F, // Disp 9 > 0x00 // Digito nulo se requerido > };//End of LookUpTable > > > return LookUpTable[digit]; > } > #endif > > > > Excuse my English, it's not my native language,I am from Brazil. > > Best regards. > > On 08/22/2010 11:44 PM, Bob Cochran wrote: >> Greetings, >> >> I am a new SDCC user. I have succeeded in compiling, flashing and >> running a simple LED-blinking program for the PIC16F690 on a breadboard. >> I am new to embedded programming and very new to writing embedded C >> programs. I learned about SDCC in my search for an open source PIC >> device compiler. >> >> Where can I find examples of C programs which are compiled on SDCC for >> the PIC14 port? I would like to study these so I can learn from more >> advanced programmers. >> >> Thanks >> >> Bob Cochran >> Greenbelt, Maryland >> USA >> >> >> ------------------------------------------------------------------------------ >> This SF.net email is sponsored by >> >> Make an app they can't live without >> Enter the BlackBerry Developer Challenge >> http://p.sf.net/sfu/RIM-dev2dev >> _______________________________________________ >> Sdcc-user mailing list >> Sdc...@li... >> https://lists.sourceforge.net/lists/listinfo/sdcc-user >> > > > ------------------------------------------------------------------------------ > Sell apps to millions through the Intel(R) Atom(Tm) Developer Program > Be part of this innovative community and reach millions of netbook users > worldwide. Take advantage of special opportunities to increase revenue and > speed time-to-market. Join now, and jumpstart your future. > http://p.sf.net/sfu/intel-atom-d2d > > > _______________________________________________ > Sdcc-user mailing list > Sdc...@li... > https://lists.sourceforge.net/lists/listinfo/sdcc-user |