(C51学习五)单片机与PC通过串口通信

发布者:chaxue1987最新更新时间:2018-07-15 来源: eefocus关键字:C51  单片机  PC  串口通信 手机看文章 扫描二维码
随时随地手机看文章

1.开发步骤

1.设置串口中断寄存器

2.求出给定波特率对应的T1定时器初始值(因为传统的C51是用T1定时器产生波特率的)

3.写程序


2.串口模块

什么是串口?串口就是COM口,串口是串行发送数据的,是一位位地发送数据位,常见的是9针串口。但在一般的C51学习版和开发版上都有集成CH340转换芯片,

使得用usb口就可以代替串口,所以用一般的学习板进行开发,只要插上usb线就可以进行串口测试。


3.SBUF是什么

SBUF是一个寄存器,作为一个缓冲区,当单片机准备接收数据时,会先把数据放到SBUF中,然后再接收。发送也是,当单片机准备发送数据时,会先把数据放到

SBUF中,再发送出去


4.串口相应寄存器

SCON串口控制寄存器(主要用方式1)

SM1,SM0:

SM0SM1工作方式功能波特率
00方式08位同步移位寄存器晶振频率 / 12
01方式110位UART可变
10方式211位UART晶振频率/32或晶振频率/64
11方式311位UART可变

SM2:----多机通信控制位(可以先不理)

多机通信是工作在方式2和方式3的,所以SM2主要用于方式2和方式3,多级通信时,SM2=1,当SM2=1时,只有当接收到的数据帧第9位(RB8)为1时,

单片机才把前八位数据放入自己的SBUF中,否则,将丢弃数据帧。当SM2=0时,不论RB8的值是什么,都会把串口收到的数据放到SBUF中。


REN:-----允许接收位

REN用于控制是否允许接收数据,REN=1时,允许接收数据,REN=0时,拒绝接收数据


TB8:-------是要发送的第9位数据位

在方式2和方式3中,TB8是要作为数据帧第9位被发送出去的,在多机通信中,可用于判断当前数据帧的数据是地址还是数据,TB8=0为数据,TB8=1为地址


RB8:-------接收到的第9位数据位

当单片机已经接收一帧数据帧时,会把数据帧中的第9位放到 RB8中。方式0不使用RB8,在方式2和方式3中,RB8为接收到的数据帧的第9位数据位。


TI:-----发送中断标志位

方式0中,不用管他。其他方式下,当发送数据完毕,硬件会将其置1,当 TI 被置1,会向CPU发送中断请求。我们记得要在中断服务程序中把 IT 置回0.


RI:-----接收中断标志位

当接受完一帧数据时,RI  由硬件置1,当RI 被置1,会向CPU请求中断。同样要在中断服务程序中把 RI 置回0。


PCON功率控制寄存器

这个寄存器只有一个位SMOD,在方式1,2.,3时,波特率都与SMOD有关,当SMOD=1时,波特率会增加一倍。复位时,SMOD变回0



5.给定波特率求定时值

串口中断要有定时器T1参加,因为C51是用定时器1来产生波特率的。

因此就需要给 定时器T1 设置初值。


首先,我们要选择一个合适的波特率,波特率关乎数据发送的快慢,一般我们选择9600b/s好了,你选2400也没问题。

一般我们会选择定时器的方式2(这里不是说上面的方式2,而是最大计数为256且自动重载定时器初值的方式)

使用这种方式是因为它能自动重载定时器初值,不用在中断服务程序中人工重设,可以减少误差。

下面给出公式:

Fosc:为晶振频率

(256-X):最终要求的是X,256出现的原因是定时器的方式2最大技术是256,如果是方式1,则是65536-X

最后把X化成16进制,高八位赋给 TH1,第八位赋给 TL1


例子:


或者可以直接下载一个51波特率计算器:



6.代码实现:

测试前提:首先要在PC机(电脑)上下载个串口助手,用于接收51单片机的数据。


C51发送数据到电脑:


#include

 

typedef   unsigned char  uint8;

typedef   unsigned int   uint16;

 

uint8 Buf[]="hello world!\n";

 

void delay(uint16 n)

{

while (n--);

}

 

/*波特率为9600*/

void UART_init(void)

{

    SCON = 0x50;        //串口方式1

 

    TMOD = 0x20;        // 定时器使用方式2自动重载

    TH1 = 0xFD;    //9600波特率对应的预设数,定时器方式2下,TH1=TL1

    TL1 = 0xFD;

 

    TR1 = 1;//开启定时器,开始产生波特率

}

 

/*发送一个字符*/

void UART_send_byte(uint8 dat)

{

SBUF = dat;       //把数据放到SBUF中

while (TI == 0);//未发送完毕就等待

TI = 0;    //发送完毕后,要把TI重新置0

}

 

/*发送一个字符串*/

void UART_send_string(uint8 *buf)

{

while (*buf != '\0')

{

UART_send_byte(*buf++);

}

}

 

main()

{

UART_init();

while (1)

{

UART_send_string(Buf);

delay(20000);

}

 

}

效果:串口助手连接后会不停显示 hello world。(串口助手波特率要设成和单片机发送波特率一样,COM口也是)





电脑发送数据到单片机:



#include

#define uchar unsigned char

#define uint  unsigned int

uchar buf;

void main(void)

{

SCON=0x50;//设定串口工作方式0101 0000

PCON=0x00;

TMOD=0x20;

EA=1;

ES=1;

TL1=0xfd;//波特率9600

TH1=0xfd;

TR1=1;

while(1);

}

 

//串行中断服务函数

void serial() interrupt 4

{

ES=0; //暂时关闭串口中断

RI=0;

buf=SBUF; //把收到的信息从SBUF放到buf中。

switch(buf)

{

case 0x31: P1=0xfe;break;   //二进制 0011 0001  十进制 49 控制字符 1  16进制 0X31

case 0x32: P1=0xfd;break; //1111 1101

case 0x33: P1=0xfb;break;

case 0x34: P1=0xf7;break;

case 0x35: P1=0xef;break;   

case 0x36: P1=0xdf;break;

case 0x37: P1=0xbf;break;

case 0x38: P1=0x7f;break;

}

ES=1; //重新开启串口中断

 

}

 

效果:当用电脑的串口助手向单片机发送数字1的时候,单片机会亮起LED0,以此类推。


关键字:C51  单片机  PC  串口通信 引用地址:(C51学习五)单片机与PC通过串口通信

上一篇:基于AT89C52和串口通信助手的串口通信
下一篇:C51单片机串口通信之上位机交互

推荐阅读最新更新时间:2024-03-16 16:08

无需MCU的低成本太阳能电池充电器设计
 太阳能电池板的泄漏问题传统上可以采用一个与太阳能电池板相串联的肖特基二极管来解决,但肖特基二极管的正向电压降使得它在高电流条件下会消耗大量的功率。因此,需要采用昂贵的散热器和精细的布局来把肖特基二极管保持于低温状态。那么,有没有低成本的解决方案?太阳能电池充电器设计最困扰设计师的“至满充电电池的浮动电压控制”和“在最佳发电点给电池板加载”问题又该如何解决?在下文中,Linear电源专家将为你介绍该公司最新的低成本解决方案。   作为在商业和住宅环境中均具实用性的一种发电方法而言,太阳能电池板已经被人们所广泛接受。然而,尽管在技术方面取得了进步,太阳能电池板的造价仍然很昂贵。这种高昂的成本有很大部分来自于电池板本身,这里,电池板
[电源管理]
STM32F10x系列的MCU配置PB3和PB4为普通IO口
对于初学习者来说为什么用到PB3和PB4时无法控制输出呢? 下面就这一问题进行分析讲解。 首先,STM32F10x系列的MCU复位后,PA13/14/15 & PB3/4默认配置为JTAG功能。有时我们为了充分利用MCU I/O口的资源,会把这些 端口设置为普通I/O口。具体方法如下: 在GPIO_Configuration(); // 配置使用的 GPIO 口: 注意:不要忘记在RCC_Configuration()中开启AFIO时钟, //AFIO时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SW
[单片机]
HOLTEK 新推出 HT45F3W 血压计Flash MCU
21ic讯 Holtek在医疗量测领域不断追求卓越精进,正式推出高度整合,高性价比的血压计专用MCU HT45F3W。HT45F3W整合了多个可程序调整放大倍率及偏压的专用运算放大器,并内建有13-位模拟数字转换器,定电流产生器,同时具有Charge Pump及Regulator等功能,并搭配IAP ( In-Application Programming) 技术,对于程序更新及量测数据储存都可轻易完成。非常适用于臂式血压计及腕式血压计并各项居家医疗健康器材等产品。 HT45F3W包含有16K Word Flash程序内存、512Byte数据存储器、64Byte Data EEPROM及8 Level Stack等核心规格
[单片机]
51XA单片机与图形液晶显示器的接口设计
0 引言 P51XA是PHILIPS公司的一种16位单片机,可管理的存储器空间大,运行速度快,支持实时多任务系统的增强了实现高级语言的支持,可以运用在需要复杂、高速控制的场合,在体系结构上与MCS-5高度兼容,便于实现向高性能微控制器的快速、平滑转移。北京精电蓬远显示技术有限公司的MGLS240128T是一种240%26;#215;128点阵的图形LCD(液晶显示器),可以显示图形、曲线,全屏可显示15%26;#215;8个汉字,适宜用在需要有较多显示内容的场合,它内含T6963C控制器,能直接与INTEL系列的微处理器接口。 1 P51XAG37单片机和T6963C简介 P51XA单片机的内部结构和外部数据
[应用]
基于PIR的移动检测系统的设计实现
  在邻居家的私人车道上、在超市中,或越来越多地,在家庭和工作单位之间的高速公路上,几乎无论走到哪里,你都能找到它。它既不太复杂也不很昂贵,但在我们的日常生活中有广泛的应用,它就是移动检测器。从门边的保安灯到自动照明控制背后的智能电路,我们到处都能看到它的身影,它在让我们感到更安全同时也节省了我们的金钱。那么,如何用被动式红外(PIR)传感器来简单地实现移动检测呢?在设计这样的系统时,应该记住两个目标:一是低功率,二是低成本。两者都是在设计移动检测系统时需要考虑的关键因素。   1.选择传感器   首先讨论硬件。我们为本设计选择的传感器是Glolab公司的(www.glolab.com)PIR325双元件热释电传感器。从单元件
[测试测量]
基于PIR的移动检测系统的设计实现
单片机学习之十五:定时器应用2(模式2)
一、试验现象 在P0.0输出一个周期是500us的方波信号,方波的周期由定时器T0确定。 二、试验目的 掌握内部定时/计数器作定时功能(模式2)的应用 三、试验任务分析 上一个试验我们采用了T0工作于模式1的应用,因为定时时间较长,所以T0应该选择16位的工作方式。但是在这个试验里面,定时时间很短,只有500/2=250us,所以我们可以让T0工作于方式2,即8位计数器(注:8位计数器的最长定时时间是:2^8=256us)。计数初值的计算方法和以前一样,即: 定时器工作于模式2的时候,它还有一个特性-可自动再装入定时常数。我们在上一个试验的时候发现,
[单片机]
<font color='red'>单片机</font>学习之十五:定时器应用2(模式2)
AVR单片机在无线自动报靶系统中的应用
目前,在野外射击训练考核中,大部分还是通过人工报靶的方法,带有很多人为因素(如报靶人员的主观性、情绪等),影响报靶的结果,使得射手不能正确了解自己的成绩,不利于打靶水平的提高。虽然现在市面上出现了一些自动报靶产品,但这些产品的成本高、系统比较复杂,并且占用场地。因此,本文根据实际训练需要,研制出了集轻武器射击训练所需的所有功能于一体的、基于AVR单片机的一种无线自动报靶系统。该系统包括精确和非精确报靶,射击成绩的自动实时显示、统计和打印,可以满足多种武器和多种射击模式的训练需求,对目标的隐显时机、次数、间隔等均按训练大纲要求由电脑自动控制,既可同时监控多个(25个)靶位的射击情况,也可单独监控一个靶位的射击情况。 1 系统组成  
[单片机]
AVR<font color='red'>单片机</font>在无线自动报靶系统中的应用
基于LPC930的双向汽车防盗器设计
0 引言   汽车目前是人类主要的交通工具,也是现代文明的标志。全世界每年汽车销量达6 000多万,保有量已超过5亿辆。用车越多被盗的汽车也越多,因此汽车防盗已成为一个重要的社会问题,它已经与安全、环保、节能三者一起被列为汽车技术发展的四大课题。   汽车防盗设备按其结构与功能可分三大类:机械式、网络式和电子式。机械式防盗原理是用机械锁锁住汽车上某一结构,如变速器、方向盘等。该类防盗器安装简便,价格便宜,但其体积较大,且该类防盗设备只防盗不报警,无法确保防盗。网络式防盗主要依靠社会的公共网络监控车辆的行驶,如GPS定位系统、GSM或GPRS等,该类防盗器技术先进,功能强大,但价格较高,需要支付服务费,而且通信信号容易受到干扰,使
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多精选电路图
换一换 更多 相关热搜器件
更多每日新闻
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved