新闻中心

EEPW首页>嵌入式系统>设计应用> AVR和51单片机串口通信简单实验

AVR和51单片机串口通信简单实验

作者: 时间:2016-11-30 来源:网络 收藏
void writedata(uchar data)
{
wait();
RS=1;
RW=0;
__no_operation();
DATA=data;
__no_operation();
EN=1;
__no_operation();
__no_operation();
EN=0;
}

void displayonechar(uchar x,uchar y,uchar dda)
{
y&=0x01;
x&=0x0f;
if(y)x|=0x40;
x|=0x80;
writecmd(x);
writedata(dda);
}
void displaychar(uchar x,uchar y,uchar *p)
{
y&=0x01;
x&=0x0f;
while(*p!=)
{
if(x<=0x0f)
{
displayonechar(x,y,*p);
p++;
x++;
}
}
}

void init1602()
{
delay(15);
writecmd(0x38);
delay(5);
writecmd(0x38);
delay(5);
writecmd(0x38);
writecmd(0x80);
writecmd(0x01);
writecmd(0x06);
writecmd(0x0c);
}
//51单片机接收端程序 12MHZ晶振,采用2400波特率
#include
#define uchar unsigned char
#define uint unsigned int
sbit bz=P3^3;//喇叭发声变量
sbit relay=P3^5; //继电器吸合变量
code uchar seg[]={0x28,0x7e,0xa2,0x62,0x74,0x61,0x21,0x7a,0x20,0x60}; // 数码管码表
code uchar tab[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; //数码管位选
uchar dat; //接受的数据值
uchar start; //各方式启动变量
void delay(uint k)
{
while(k--);
}
void show(uint k) //显示函数
{
static uchar i,j;
uint ss[4];
i=0;
do
{
ss[i]=k%10;
i++;
}while(k/=10);
for(j=0;j {
P0=seg[ss[j]];
P2=tab[j];
delay(30);
P0=0xff;
P2=0xff;
}
}
void serial_init() //串口初始化
{
TMOD|=0x20;
SM2=0;
SM1=1;
SM0=0;
REN=1;
TH1=0xf3;
TL1=0xf3;
TR1=1;
}
void serial_iit() //串口中断设置
{
EA=1;
ES=1;
}
void sss() interrupt 4 //串口中断子函数
{
if(RI==1)
{
dat=SBUF;
RI=0;
}
}
void time0_init()
{
TMOD|=0x01;
TH0=0xff;
TL0=0x88;
TR0=1;
}
void time0_event() interrupt 1
{
TH0=0xff;
TL0=0x88;
if(start==1)
{
bz=~bz;
}
else
bz=1;
}
void time0_iit()//定时器0中断开
{
ET0=1;
}

void main()
{
serial_init();
serial_iit();
time0_init();
time0_iit();
relay=1;
while(1)
{
show(dat);
if(dat==49)
{
start=1;
}
if(dat==50)
{
start=2;
}
else
start=0;
if(start==2)
{
relay=0;
}
else
{
relay=1;
}
}
}
上一页 1 2 下一页

评论


技术专区

关闭