//接收程序
#include
#define uchar unsigned char
#define uint unsigned int
uchar buffer[9];
uchar a,num;
uint n;
sbit RS=P2^0; //寄存器选择位,将RS位定义为P2.0引脚
sbit RW=P2^1; //读写选择位,将RW位定义为P2.1引脚
sbit E=P2^2; //使能信号位,将E位定义为P2.2引脚
sbit BF=P0^7; //忙碌标志位,,将BF位定义为P0.7引脚
void delay(uint z)
{
uint i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
void write_com(uchar com)
{
RS=0;
RW=0;
P0=com;
delay(20);
E=1;
delay(20);
E=0;
}
void write_data(uchar date)
{
RS=1;
RW=0;
P0=date;
delay(20);
E=1;
delay(20);
E=0;
}
void init()
{
E=0;
write_com(0x38);
write_com(0x0f);
write_com(0x06);
write_com(0x01);
//write_com(0x80);
}
void InitUART (void)
{
PCON=0x00;
SCON = 0x50; //SM0=0 SM1=1 REN=1
TMOD = 0x20; //T1定时器工作方式2
TR1=1;
TH1 = 0xf3;
TL1=0xf3;
EA=1;
ES=1;
}
void main (void)
{ init();
InitUART();
delay(20);
for(num=0;num<9;num++)
write_data(buffer[num]);
delay(200);
while (1)
for( n=0;n<9;n++)
{ while(RI!=1);
RI=0;
buffer[n]=a;
}
}
void rxd() interrupt 4
{
ES=0; //关串口中断
a=SBUF;//命令存到命令数组
RI=0; //软件清除接收中断
ES=1;//开串口中断
}
//发送程序
#include
#define uchar unsigned char
uchar table[9]={0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39} ; // '1','2','3','4','5','6','7','8','9'
int i;
bit sent_over;
void DelayMs(uchar z)
{ uchar i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
void InitUART (void)
{
PCON=0x00;
SCON = 0x50;
TMOD = 0x20;
TR1=1;
TH1 = 0xf3;
TL1=0xf3;
EA=1;
ES=1;
}
void main (void)
{
InitUART();
sent_over=1;
while(1)
{ static uchar i=0;
if(sent_over==1)
{
sent_over=0;
SBUF=table[i];
if(i<9)
i++;
RI=0;
}
}
}
void txd() interrupt 4
{
while(RI==0);
RI=0;
while(!TI);
TI=0;
}
两个AT89s51单片机,想让甲机发送信号,乙机接收后在1602液晶上显示循环123456789。这个程序哪出错了???
你得告诉咱到底是什么现象啊!你就说错了,我们哪知道是什么原因啊?
到底是什么现象啊!你就说错了,我们哪知道是什么原因啊?没有人能有时间一条一条分析。