hi, i'm using a- 80c31 microcontroller to send the status of port bits: p3.3,p3.4,p3.5 using serial comm. my program works fine only in simulation and i cant get an idea where is the problem. i checked the TX pin(11) with a scope and it seems that no data are being sent.
please help...
#include <Reg51.h> sbit Input1 = 0xB3; /* P3.3 */ sbit Input2 = 0xB4; /* P3.4 */ sbit Input3 = 0xB5; /* P3.5 */ unsigned int Tmr1 = 0; unsigned int Tmr2 = 0; unsigned int Tmr3 = 0; void SendStatus() { if (Input1 == 0){ P2 = P2 | 0x03; Tmr1 = 0; } if (Input2 == 0){ P2 = P2 | 0x18; Tmr2 = 0; } if (Input3 == 0){ P2 = P2 | 0xC0; Tmr3 = 0; } TI = 0; SBUF = P2; while (TI == 0); /* Wait For Transmit */ if (TF0 == 1) { Tmr1 = Tmr1 + 1; Tmr2 = Tmr2 + 1; Tmr3 = Tmr3 + 1; if ((Tmr1>912)&&(Tmr2>912)&&(Tmr3>912)) { Tmr1 = 0; Tmr2 = 0; Tmr3 = 0; TR0 = 0; TF0 = 0; P2 = 0x00; } else if (Tmr1 == 912) {/* 60 Sec Alarm Hold*/ P2 = P2 & 0xFC; } else if (Tmr2 == 912) {/* 60 Sec Alarm Hold*/ P2 = P2 & 0xE7; } else if (Tmr3 == 912) {/* 60 Sec Alarm Hold*/ P2 = P2 & 0x3F; } else { TH0 = 0xFF; TL0 = 0xFF; TF0 = 0; } } } void main() { SCON = 0x40; /* 8-bit UART, BaudRate set by Timer-1 */ TMOD = 0x21; /* Timer1 mode 2, Timer-0 mode 1 */ TCON = 0x40; /* Start baud clock */ TR0 = 0; /* Turn Timer-0 off */ TH0 = 0xFF; TL0 = 0xFF; TF0 = 0; /* Clear rollover flag */ TR0 = 0; /* Turn timer-0 on */ TH1 = 0xCC; /* 600 baud 12MHz */ IE = 0x00; /* Disable serial int */ IP = 0x80; /* Interrupt priority stopped */ P2 = 0x00; P3 = 0x00; Input1 = 1; Input2 = 1; Input3 = 1; while(1) { while ((Input1 == 1)&&(Input2 == 1)&&(Input3 == 1)) { TI = 0; SBUF = 0x00; while (TI == 0);/* Wait For Transmit */ } TH0 = 0xFF; TL0 = 0xFF; TR0 = 1; /* Turn timer-0 on */ while (TR0 == 1) SendStatus(); } }
i'm using a- 80c31 microcontroller to send the status of port bits: p3.3,p3.4,p3.5 using serial comm. my program works fine only in simulation and i cant get an idea where is the problem. i checked the TX pin(11) with a scope and it seems that no data are being sent. I do not know what you "send the status of port bits" to, but guess some RS232 device like a PC. THEN i checked the TX pin seems to indicate that you do not have a MAX232(equivalent) in the chain, in which case P3.0 and P3.1 most likely are blown.
80c31 why on earth? these days there are derivatives galore with internal flash at all kinds of prices with all kinds of features. Are you a nostalgia buff?
Erik
hi, Erik
first of all, i'm working with a pcb layout that implemented in other configuration,(for 10 years now) that is why i keep working with 80c31.
i'm sending the status of the port bit because they are connected to 3 dry contacts of a relay which i monitor: open(1) or close(0).
the TX pin is connected to a ADM233L which converts it to RS232 for the PC COM port.
thanks
Check my 'whittling', try this and then answqer
does this make The Txd pun toggle?
#include <Reg51.h> void SendStatus() { TI = 0; SBUF = P2; while (TI == 0); /* Wait For Transmit */ } void main() { SCON = 0x40; /* 8-bit UART, BaudRate set by Timer-1 */ TMOD = 0x21; /* Timer1 mode 2, Timer-0 mode 1 */ TCON = 0x40; /* Start baud clock */ TH1 = 0xCC; /* 600 baud 12MHz */ while(1) { SendStatus(); }
Are you using the aboninable tab character Erik? Your indents seem a bit short ;)
Hmm. Strange spelling for abominable...
View all questions in Keil forum