我的程序的一部分,供参考
//主流程
void main(void)
{
//系统初始化
SCON = 0x50; //串口方式为1,SM2= 0,TB8= 1
PCON = 0x80; // SMOD=1
TMOD = 0x22; //设定定时器0/1的工作模式为方式2
//设置T0中断的定时时间为1/7200毫秒
TH0 = 0x00;
TL0 = 0x00;
//设置异步串口的波特率
//TH1 = 0x0f4; //OSC = 110592MHz bps = 4800 SMOD=1
//TL1 = 0x0f4;
TH1 = 0x0fd; //OSC = 110592MHz bps = 19200 SMOD=1
TL1 = 0x0fd;
//设置中断优先级,T0中断为高优先级中断,其他为低优先级中断
IP = 0x02; // 设置中断优先级--T0为高优先级,其他低
ET0 = 1; //定时器0中断
ES = 1; //串行接口中断
EA = 1; //系统中断允许
TR0 = 1; //启动定时器0
TR1 = 1;
//串口接收中断处理程序
//发送采用查询处理
void SerialComm(void) interrupt 4
{
_pReceive[_cReceive] = SBUF;
_cReceive ++;
if(_cReceive >= RecBuffSize) _cReceive = 0;
RI = 0;
}
//串口发送一个字节
//senddata:需要发送的数据
void SendOneByte(unsigned char senddata)
{
ES = 0;
TI = 0;
SBUF = senddata;
while(TI == 0);
TI = 0;
ES = 1;
}
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(); //显示接收到的数据
}
}
以上就是关于C51单片机如何从PC机串口接收字符串全部的内容,包括:C51单片机如何从PC机串口接收字符串、C语言如何处理51串口接收数据、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)