Hi, I have been working in a project with AT89C51. Specifically it is a car that follows a black line and it has to be communicated with a raspberry pi 2 that has a camera to see some signals like turn left, turn right or stop. It is neccesary to use interruptions and serial communication ( it is the only way to communicate both things), the problem is the microcontroller doesn´t recognize serial inputs. I have simulated the code in proteus and it is working pretty well but in real life the serial communication is not working. I have tried serial communication with an arduino but has the same problem.I don´t know if Im missing something. My code is the next one:
ORG 000H // origin LJMP MAIN ORG 23H LJMP SERIAL MAIN: MOV P1,#204 // sets port 1 as input port MOV P2,#0000000B // sets port 0 as output port MOV P0,#0000000B MOV A,#0000 MOV SCON,#50H MOV TMOD,#20H // TIMER1 mode autoreload MOV TH1,#0FDH //9600 baudrate MOV IE,#10010000B SETB TR1 (HERE IT IS THE MAIN CODE OF LINE FOLLOWER AND DEPENDIG OF THE VALUE OF REGISTER A,THE CAR STOPS OR TURNS LEFT/RIGHT) HERE IT IS THE SERIAL INTERRUPT PART //SERIAL PORT SUBRUTINA ORG 120H SERIAL: SETB P0.1 MOV A,SBUF CLR RI RETI END // end statement
Thanks for your help
The basic first step for serial comms in any context - not specific to any particular microcontroller or system - is to start with a terminal.
So - can your code successfully communicate with a terminal (or a terminal emulator) on a PC?
one other - often overlooked - thing
are both 'ends' the same (RD232/TTL/...)
I have never tried with a terminal, I have tried with an arduino and another microcontroller. Im now getting a usb- serial cable in order to see if I can communicate with terminal.
Sorry , I dont understand what you said (english is not my native language)
I'm now getting a usb- serial cable in order to see if I can communicate with terminal.
make sure that either the cable is TTL (VERY rare) ot that you have a MAX232(equivalent) between your controller and the cable (see the schematic for ant devboard as to how)
HERE IT IS THE SERIAL INTERRUPT PART //SERIAL PORT SUBRUTINA ORG 120H SERIAL: SETB P0.1 MOV A,SBUF CLR RI RETI
1) the above should be preceded by if (RI)
and you need to process TI
I guess you have to, but why use assembler?
So , you say that I need to add a " if RI =0, do something?" Before i put the code the code of the serial part? Sorry if I dont understand you very well.
Hi. Im Karek. Im working on exactly same stuff. Im stuck. Can you say what the SETB does. Can you explain what is the best way to use it.
Waiting for your naswer.
"Waiting for your naswer"
Don't just sit there waiting. You have the entire internet at your disposal - get searching!
Again, the 8051 is decades old: there is no shortage of books and tutorials - especially on basic topics like this.
Have you reviewed your class notes?
Have you studied the instruction set documentation?
Can you say what the SETB does
www.danlhenry.com/.../80C51_FAM_ARCH_1.pdf www.danlhenry.com/.../80C51_FAM_HARDWARE_1.pdf www.danlhenry.com/.../80C51_FAM_PROG_GUIDE_1.pdf
I think it sets bounds. why is it useful?
Do you?
And what makes you think that?
if (RI) should be there as well as an if (TI) since you have no idea of the interrupt was from a read or a write
OK if you have no idea about C then JB RI and JB TI
I was not using that condition for one reason, I don´t have to transmit data from the 8051 to the other device so that I dont connect tx of 8051 to the Rx of the rapsbery so I ignore the TX flag because Im not transmitting something, I don´t know if I have to ask the condition however im not transmitting. Can be that the reason that I can´t communicate serially?
Have you enabled the receiver?