??? 06/21/09 18:29 Modified: 06/21/09 18:51 Read: times |
#166313 - UART code porting to SDCC |
Hi
I am working on porting a relatively simple piece of UART Code from Keil/Raisonance to SDCC. As I was expecting, this piece of code works perfect on Keil/Raisonance but does not on SDCC. -On Raisonance, it sends out the character 'D' 100 times -On SDCC, it sends out the character 'D' only once. (and thus indicating something to do with ISR) -I am using the standard header files provided by each compiler -I have verified that the registers used in my program have same values in the header files for both compilers. I have the values in my source code for comparison. -Hardware target board is common That was my first step to identify any difference My next step as Erik suggests - Slow down - Go back and read the bible :-) Any directions/tips/pointers or corrections in my code would be helpful .. //#include <REG52.h> /* Use with Keil or Raisonance */ //#include <at89x52.h> /* Use with SDCC */ #include <p89v51rd2.h> /* Use with SDCC */ #include <stdio.h> #include <string.h> xdata char rcvbuf[256]; int ldptr,flptr,xmt_flag,opti_fooler; void serial_intr(void) interrupt 4 { if(TI==1) { TI=0; xmt_flag=1; } if(RI==1) { RI=0; rcvbuf[ldptr++]=SBUF; //get 1st char in array rcvbuf[] if(ldptr>=256) ldptr=0; //to chk overflow of buffer } } void uart_send(char c) { xmt_flag=0; SBUF=c; //while(xmt_flag==0) while(1) { if ( xmt_flag != 0) break; else opti_fooler++; } } void init_port(void) { RCAP2H=0xff; RCAP2L=0xFd; //for 115kbps T2CON = 0x34; SCON = 0x50; IE = 0x90; } void main (void) { int i; init_port(); for (i = 0; i < 100; i++) { uart_send('D'); } while(1); } #ifdef NEVER_DEFINED Definitions for SDCC /* SCON */ __sbit __at (0x98) RI ; __sbit __at (0x99) TI ; /* T2CON */ __sfr __at (0xC8) T2CON ; /* RCAP2 L & H */ __sfr __at (0xCA) RCAP2L ; __sfr __at (0xCB) RCAP2H ; __sfr __at (0xA8) IE ; __sfr __at (0x99) SBUF ; //-------------------- Definitions for Raisonance /* SCON */ at 0x99 sbit TI ; at 0x98 sbit RI ; at 0xC8 sfr T2CON ; at 0xCA sfr RCAP2L; at 0xCB sfr RCAP2H; at 0xA8 sfr IE ; at 0x99 sfr SBUF ; #endif |
Topic | Author | Date |
UART code porting to SDCC | 01/01/70 00:00 | |
doesn't SDCC warn about line 36? | 01/01/70 00:00 | |
that's it | 01/01/70 00:00 | |
ah ha | 01/01/70 00:00 | |
Don't blame the optimiser! | 01/01/70 00:00 | |
doesn't SDCC warn about line 36 | 01/01/70 00:00 | |
hmmm | 01/01/70 00:00 | |
modified dog![]() | 01/01/70 00:00 | |
I cannot remember now | 01/01/70 00:00 | |
xmt_flag., why "int"? | 01/01/70 00:00 | |
if you want to use it as "int" / "char" | 01/01/70 00:00 | |
You destroy succeding putchar()'s | 01/01/70 00:00 | |
"Volatile" Helps | 01/01/70 00:00 | |
"bit" is more useful | 01/01/70 00:00 | |
buzzzzz | 01/01/70 00:00 | |
family | 01/01/70 00:00 | |
stdbool | 01/01/70 00:00 |