
假设收到的数据存在单片机temp里面。
char temp[4] ={'5','1','6','8'};
a = (temp[0] - '0') 10 + (temp[1] - '0');
b = (temp[2] - '0') 10 + (temp[3] - '0');
这样就可以了。
void Init_Serial(void)
{ RD485=0;
SCON = 0x50; //串口工作方式1
TMOD = (TMOD&0x0F)|0x20; //选择定时器1方式2
PCON = 0x80; // 波特率倍增
TH1 = 0xF6; // 计数初值9600bps
TR1 = 1; // 启动定时器1
IE |= 0x90 ; //Enable Serial Interrupt
SBUF=0x00;
RI=0;
}
void delay(void)
{ unsigned int i;
for(i=0; i<9500; i++);
}
void sendbit(unsigned char ch,int len)
{
int flaglen=0;
RD485=1;
delay();
while (flaglen<len) {
while(!TI) /检查发送标志/
{; }
TI=0;
SBUF=(ch+flaglen); /发送数据/
flaglen++;
}
delay();
RD485=0;
} void serial () interrupt 4 using 3
{ if (RI)
{
if(fg>=3)
fg=0;
b[fg]=SBUF;
fg++;
RI = 0 ;
}
}
这个程序的单片机晶振是18432M的,你用的时候把要发送的整形数据的高低八位放到字符型的数组里,通过中断就能在另一个单片机里接收了,这个程序在发送和接收的单片机里都能用。
单片机(MCU)也就是人们所说的微处理器。可以理解为应用于嵌入式或工业控制上的小型CPU。与我们PC中CPU不同的是,单片机是一个处理器核与一些人们常用到的硬件资源封装到一片芯片里了。
例如你这里说到的串口,它是工控中最常使用到的通信方式之一,几乎所有的MCU内都会集成串口资源。而PC中串口一般是在主板上外扩一片16C554芯片扩屏出来的。当然在需要多串口的场合,MCU也可以通过控制16C55x来扩屏出串口。
你提到的TMOD,SCON,SBUF是C51/52系列单片机中的与串口控制相关的寄存器。
为了简单说明,给你一段程序,我加上注释给你:
void InitComm() //初始化C51单片机串口
{//设置定时器1为波特率发生器
PCON |= 0x80; //设置波特率加倍
TMOD |= 0x20; //设置定时器1为方式2运行
TH1 = (unsigned char)(0xXXXX); //设置定时常数。一般0xXXXX由系统晶振与通信目标波特率所定
TR1 = 1; //启动定时器1
SCON = 0x50; //串行口方式1,允许串行接收。
ES = 1; //允许串口中断
}
//串行中断服务程序
void it_comm(void ) interrupt 4 using 1
{
if (RI)
{//接收数据中断
RI = 0;
}
if (TI)
{//发送数据中断
TI = 0;
}
}
////////////////////////
补充:
RS232协议是串口通信协议,它是由硬件自动完成的。也就是说,像开始位,停止位,效验等等,都是由硬件自动加上去的。对于程序员来讲,可以认为是透明的。只需要初始化时定义好就可以了。
你提到的MAX232只是做电平转换用的。和RS232协议没有直接关系。
利用串口烧写,和电脑连接硬件可以是RS232转TTL,也可以是USB转232,再转TTL,也可以直接用uSB转TTL,最后一种最简单,开发板还可以用转换线提供的电源。硬件搭建好后,打开STC提供的烧写软件,经简单设置即可进行下载。
以上就是关于STC 52 单片机 从串口接收字符串全部的内容,包括:STC 52 单片机 从串口接收字符串、c51语言编写,串口通讯程序,实现AT89S52单片机把一个整型数组数据,发送给、单片机上写的串口程序是什么意思啊等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)