1、51单片机串行口是独立的硬件,对其设置完之后,它就独立工作了。如果REN=1,它会自动检测RXD,当它收齐了一帧数据,就自动将数据放到(接收)SBUF,然后在RI置一。 CPU的中断系统,如果已经开放了串口中断,CPU就会自动转到0023H去执行程序。
2、例程:
#include <AT89X51H>//单片机51头文件,存放着单片机的寄存器unsigned char dat; //用于存储单片机接收发送缓冲寄存器SBUF里面的内容
sbit gewei=P2^2; //个位选通定义
sbit shiwei=P2^3; //十位选通定义
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,0x77,0x7c,0x39,0x5e,0x79,0x71};
//{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,};// 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
void Delay(unsigned int tc) //延时程序
{
while( tc != 0 )
{unsigned int i;
for(i=0; i<100; i++);
tc--;}
}
void LED() //LED显示接收到的数据
{
shiwei=0;
P0=~table[dat/16];
Delay(8);
shiwei=1;
gewei=0;
P0=~table[dat%16];
Delay(5);
gewei=1;
}
void Init_Com(void)//功能:串口初始化,波特率9600,方式1
{
TMOD = 0x20;
PCON = 0x00;
SCON = 0x50;
TH1 = 0xFd;
TL1 = 0xFd;
TR1 = 1;
}
void main()//主程序功能:实现接收数据并把接收到的数据原样发送回去///////
{
Init_Com();//串口初始化
// P1=0xf0;
while(1)
{
if ( RI ) //扫描判断是否接收到数据,
{
dat = SBUF;//接收数据SBUF赋与dat
RI=0; //RI清零。
SBUF = dat;//在原样把数据发送回去
}
LED(); //显示接收到的数据
}
}程序就不写了 学程序不应该做伸手党 只有自己写才有深刻的记忆 并且能养成自己的思维方式
:首先确定一下51的串口工作方式 进入串口工作方式寄存器设置 然后根据波特率设置一下定时器
写一个串口中断程序 设定一个标志位(标志位改变表明收到数据)记得初始化各项总中断 串口中断 定时器中断 还有TH0 TL0初值什么的 TX接语音识别模块RX RX接语音识别模块TX GND共同接地(数地) 你应该大概懂了吧 不懂欢迎追问void serial () interrupt 4 using 3
{
if(RI)
{
unsigned char ch;
ch=SBUF;0
if(ch==0xaa)// 这里加一条不知可不可以
{
Receive_data_buffer[z]=ch;
RI = 0;
z++;
send_char_com(ch);
if(z==7)
{
z=0;
}
}
}
}//串口接收一帧数据放在数组中
void Com_Int(void) interrupt 4
{
EA = 0;
for(i = 0; i < 12; i++) --发生一次中断,你在这里,接收了十二次?
{
table[i] = SBUF;
}
RI = 0;
flag = 1;
EA = 1;
}
每发生一次中断,串行口,仅仅有一个字节的新数据,你却接收了十二次?答:
1 判断你的硬件有没有问题;方法是 用跳线讲串口的pin2 和pin3短接,用串口调试助手发送数据看调试助手能不 能自己收到,能就说明是单片机程序有问题
2 你检查你的波特率是生成程序是否正确, 中断和主程序用 1楼给你程序,我看了 没问题。
这样就可以实现串口通信了可惜我不能贴图
12864去电子城买时找专做显示屏的柜台买。
只要是专业生产LCD的公司,都会配有c语言的驱动程序(通常是51的程序),还有电子档LCD说明书
买来稍微修改就可以用啦
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)