|
樓主的程序看起來比較混亂, 今天我抽空給你寫了一個, 我沒有做硬件,也沒有51的編譯器,應(yīng)該沒問題, 主機用查詢方式寫人, 用P1口顯示LED的狀態(tài),從機用中斷方式,用P1口顯示LED的狀態(tài), 如果同步就OK。
//*****Master SourceCode for Uart******//
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
const uchar LEDcode[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
void delay_ms(uint t)
{
uint m,n;
for (m=0;m<t;m++)
for (n=0;n<1000;n++);
}
void MasterUART_init(void)
{
SCON = 0x50;
TMOD = 0x20;
TH1 = 0xFD;
TL1 = 0xFD;
TR1 = 1;
// ES = 1;
// EA = 1;
}
void MasterSendByte(uchar udat)
{
SBUF = udat;
while(!TI);
TI = 0;
}
void MasterSendStr(uchar *str)
{
while(*str!='\0')
{
SendByte(*str);
str++;
}
}
main()
{
MasterUART_init();
while(1)
{
for(i=0;i<8; i++)
{
MasterSendByte(LEDcode[i]);
P1=LEDcode[i];
delay_ms(1000);
}
}
}
//*******Slave_source code for Uart******//
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
void delay_ms(uint t)
{
uint m,n;
for (m=0;m<t;m++)
for (n=0;n<1000;n++);
}
void SlaveUART_init(void)
{
SCON = 0x50;
TMOD = 0x20;
TH1 = 0xFD;
TL1 = 0xFD;
TR1 = 1;
ES = 1;
EA = 1;
}
main()
{
SlaveUART_init();
while(1);
}
void interrupt_uart() interrupt 4
{
uchar temp;
if(TI)
{
TI = 0;
REN = 1;
}
if(RI)
{
RI = 0;
temp = SBUF;
P1=temp;
REN = 0;
}
}
|
|