dear friends i have a peculiar situation at hand . i am trying to dump some message to my serial port and see it through my dummy terminal . before that i tried a simple LED toggling , it worked fine . for that the code i had written is : #pragma small #include<AT89X51.h> #include<stdio.h> int main() { TMOD = 0x20; // The timer set to 8 bit auto reload timer TH1 = 0xFD; // Higher byte of timer1 set to FD or reload value set to FD TL1 = 0xFD; // Lower byte of timer1 set to FD SCON = 0x52; // The serial Controller is configured TR1=1; // Timer 1 run flag set while(1) { printf("Hello World \n"); // data sent to serial port for displaying } return 1 ; } so the problem is that on my hyperterminal i dont get anything . but in debug window ,in the serial watch window , i am able to see the output . but after burning the code into the chip and subsequently in the hyperterminal i am not able to . i am not able to follow where lies the problem . in the c51 primer exact code has been given , but that too does not work . i would like to add that : my oscillator frequency :11.059 mhz ; my baud rate (of hyperterminal also): 9600 bps ; software:evaluation version of KEIL H/W :ATMEL AT89C51 The code size is well below the 4K ram size of 89c51 . an interesting thing is that , with the same hardware i am able to get on my hyperterminal output when i use assembly code(given below). just try if you can solve my problem . is there any setting on the simulator /complier / Hex file that i am missing out ??? code: cseg at 0000H org 0000h ajmp start org 0040H start: mov sp,#40H mov r0,#07Fh back: mov @r0,#00 djnz r0,back mov th1,#0FDh ;configure serial port as 9600/8bit/No mov tmod,#00100000b setb tr1 mov scon,#52h ; repeat1: mov a,#'@' call _xmit_byte jmp repeat1 ;---------------------------------------------------------------- _XMIT_BYTE: MOV SBUF,A ; JNB TI,$ ;wait till byte is transmitted CLR TI ; RET ;---------------------------------------------------------------- end plz help .ASAP with regards Som
printf() not working , peculiar situation
Started by ●July 10, 2004
Reply by ●July 10, 20042004-07-10
"som" <som@london.com> wrote in message news:ca2836ba.0407092016.520efdc7@posting.google.com...> dear friends i have a peculiar situation at hand . i am trying to dump > some message to my serial port and see it through my dummy terminal . > before that i tried a simple LED toggling , it worked fine . > for that the code i had written is : > #pragma small > #include<AT89X51.h> > #include<stdio.h> > > int main() > { > TMOD = 0x20; // The timer set to 8 bit auto reload timer > TH1 = 0xFD; // Higher byte of timer1 set to FD or reload value set to > FD > TL1 = 0xFD; // Lower byte of timer1 set to FD > SCON = 0x52; // The serial Controller is configured > TR1=1; // Timer 1 run flag set > > while(1) > { > printf("Hello World \n"); // data sent to serial port for displaying > > > > } > > return 1 ; > }Does your compiler library have the putchar function fully implemented or is it an empty function framework which you have to fill in yourself? Meindert
Reply by ●July 11, 20042004-07-11
som wrote:> dear friends i have a peculiar situation at hand . i am trying to dump > some message to my serial port and see it through my dummy terminal . > before that i tried a simple LED toggling , it worked fine . > for that the code i had written is : > #pragma small > #include<AT89X51.h> > #include<stdio.h> > > int main() > { > TMOD = 0x20; // The timer set to 8 bit auto reload timer > TH1 = 0xFD; // Higher byte of timer1 set to FD or reload value set to > FD > TL1 = 0xFD; // Lower byte of timer1 set to FD > SCON = 0x52; // The serial Controller is configured > TR1=1; // Timer 1 run flag set > > while(1) > { > printf("Hello World \n"); // data sent to serial port for displaying > > } > > return 1 ; > } > > so the problem is that on my hyperterminal i dont get anything . but > in debug window ,in the serial watch window , i am able to see the > output . but after burning the code into the chip and subsequently in > the hyperterminal i am not able to . > i am not able to follow where lies the problem . in the c51 primer > exact code has been given , but that too does not work . > i would like to add that : > my oscillator frequency :11.059 mhz ; > my baud rate (of hyperterminal also): 9600 bps ; > software:evaluation version of KEIL > H/W :ATMEL AT89C51 > The code size is well below the 4K ram size of 89c51 . > > an interesting thing is that , with the same hardware i am able to get > on my hyperterminal output when i use assembly code(given below). just > try if you can solve my problem . is there any setting on the > simulator /complier / Hex file that i am missing out ??? > > code: > > cseg at 0000H > org 0000h > ajmp start > > org 0040H > > start: mov sp,#40H > mov r0,#07Fh > back: mov @r0,#00 > djnz r0,back > mov th1,#0FDh ;configure serial port as 9600/8bit/No > mov tmod,#00100000b > setb tr1 > mov scon,#52h ; > > repeat1: > mov a,#'@' > call _xmit_byte > jmp repeat1 > > ;---------------------------------------------------------------- > _XMIT_BYTE: MOV SBUF,A ; > JNB TI,$ ;wait till byte is transmitted > CLR TI ; > RET > ;---------------------------------------------------------------- > end > > plz help .ASAP > with regards > SomSorry I am too lazy to look up old code now, but some advice. Look this up at ww.Keil.com and www.8052.com You should find working code there. Note your CPU and compiler in questions. Are you sure Hyperterm is not the problem? It can be finicky sometimes. if you look at putchar.c you will find the code that printf calls. Did you look at the output with a scope?