Im tring to write a program for AT89C51 that can send a stream of one character (which is 5) to the computer, I wrote this program but it doesn't work because I didn't see any signal going out from the Tx pin using the osciloscope. the program is as follows:
mov TMOD,#20
mov TH1,#-3
mov SCON,#50
SETB TR1
AGAIN:
mov a,"5"
acall TRANS
sjmp AGAIN
TRANS:
mov SBUF,a
HERE:
jnb TI,HERE
CLR TI
ret
end
the buad rate should be 9600 bps. I didn't actually connect the circuit to the computer because when I use the osciloscope I don't see any signal on the Tx pin. I have attached both the asm and hex files for more information.
Please any help on this issue is appreciated as it is very important for me to get it working.
Bassically your code is right, the problem is you don't put the hexadecimal prefix($), and immediate data prefix (#)
Here is the list of mistake you made :
Code:
mov TMOD,#20
the purpose of this instruction is define TIMER1 as mode 2 (auto reload), but without $ prefix this instruction is define TIMER1 as mode 1 (and other TIMER0 setup bits).
It mean you don't have Baudrate Generator for the UART, so the serial port doesn't functioned.