Forums

printf() not working , peculiar situation

Started by som July 10, 2004
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
"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

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 > Som
Sorry 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?