51单片机之串口操作入门经验总结与C源程序

发布者:朱雀最新更新时间:2017-10-02 来源: eefocus关键字:51单片机  串口操作 手机看文章 扫描二维码
随时随地手机看文章

用计算机来控制单片机,进而控制继电器等其他外设,感觉不错啊,怎么实现呢?一步步来吧。

单片机串行口通信,也就是单片机与计算机之间的通信,要实现,要明白一些基本的概念。

(1)实现之前,请确定串口正常,我之前做过串口操作,烧了不能控制,后来才发现,设备管理器里串口有叹号,驱动有问题,可能是开发实验板没有插好或是换了个USB口造成的(我用的是串口转USB的,笔记本用)

(2)串口初始化,这方面,最好有相关的书来的,明白消化定时器与中断, 这样操作起来就容易了。

一。设定串口的工作方式:设定SCON寄存器。

什么是SCON呢?

SCON寄存器是51单片机一个可寻址的专用寄存器,用于串行数据通信的控制,其字节地址为:98H,位地址为:98H~9FH。   内容为:


SM0SM1SM2RENTB8RB8TIRI


SM0 SM1:串行口工作方式选择位。

SM0SM1     工作方式   功能                                  波特率

00                   方式0   8位同步移位寄存器            fosc/12        

01                   方式1    10位UART                        可变

10                    方式2    11位UART                     fosc/64(或是fosc/32)

11                    方式3      11位UART                  可变

 

-----------------------------------------------------------

SM2:多机通信控制位

REN:接收允许控制,1为允许串行口接收,0为禁止串行口接收。

TB8:发送的第9位数据位。

RB8:接收的第9位数据位。

TI:发送中断标志。发送完一帧数据后,硬件自动置1。TI位必须要由软件清零。

RI:接收中断标志。接收完一帧数据后,硬件自动置1。RI位必须要由软件清零。

 

 

例:用串口调试助手来调试串口,发送十六进制的数,来让相应的LED灯亮起来。

C程序如下:

#include
void main()

TMOD=0x20;           //设置定时器:Timer1 Mode 2 8位reload
TH1=0xfd;                //波特率for 9600 baud @ 11.0592MHz
TL1=0xfd;
SM0=0;               
SM1=1;
REN=1; //控制RI,允许串行接收。SM0SM1及REN为SCON=0x50;
TR1=1;   //启动定时器1
while(1)
   {
   
    if(RI==1)      //如果RI为1,则接收到串口发过来的数据
    {
    RI=0;库              //软件清零。必须
    P0=SBUF;          //SBUF,为缓冲器,接收缓冲器只能读出不能写入,发送缓冲器只能写入不能读出。

/*   二者共用一个字节地址,两个相互独立。   */
   
     }

   }
}

 

以 上为串行控制LED灯,想显示哪几个灯,可通过串口调试软件发送即可。

例:数码管显示。这里只给出某一位显示,如果多位,再自己加入相关的程序段即可。

#include
void main()

TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
SM0=0;
SM1=1;
REN=1; //控制RI
TR1=1;
while(1)
   {
   
    if(RI==1)
    {
    RI=0;
    P0=SBUF;                //P0为数码管的值。             
   
    P2=0x06;                     //8位数码管,第7个,P2口为片选,
    }

   }
}

以上程序可在AT89s52单片机+Keil 上调试通过并运行。

相关工具:

串口调试助手,51串口通信计算器.exe,可在网上搜索下载。


关键字:51单片机  串口操作 引用地址:51单片机之串口操作入门经验总结与C源程序

上一篇:液晶12864汉字显示程序及显示顺序正常的C语言程序
下一篇:基于MCS-51内核的汇编学习笔记

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

51单片机汇编:多路延时开关
要求:51单片机,8个按键、8个发光二极管。 ;一个键按下则对应灯亮,3秒后灭,每个键控制一个灯。 ;题目要求的电路,非常简单,用 P1 连接按键、P2 连接 LED 即可。 ;用定时器,定时 7.5 ms,中断 400 遍,即为 3 秒钟。 ;针对每个灯,都要有一个计时单元,用来控制亮灯 3 秒钟的时间。 ;用汇编语言编写程序如下: KEY EQU 30H K_L EQU 31H K_T EQU 32H ORG 0000H AJMP START ORG 000BH ;T0中断入口地址 JMP T0_INT START: MOV TH0, #40 ;定时
[单片机]
<font color='red'>51单片机</font>汇编:多路延时开关
51单片机串口通讯结合点阵显示的实例
通过电脑使用虚拟串口软件发送特定命令,然后在点阵上进行显示,后期可配合蓝牙串口模块实现短距离控制显示效果,有哪位朋友想给女朋友做生日礼物的可以参考 单片机源程序如下: //单片机P1口和P2口接点阵的阴极,而PO口接点阵的阳极,实现行扫描显示汉子 #include tab.h //uchar temp ={0}; //定义数据接收缓冲区10个字节 uchar tt=7; void main() { T0init(); portinit(); uartinit(); while(1) //等待中断 { if(RI)
[单片机]
<font color='red'>51单片机</font><font color='red'>串口</font>通讯结合点阵显示的实例
51单片机精确延时设计
在我们使用单片机的时候,很多情况下需要用到精确的延时。比如在跟DS18B20进行通讯的时候需要遵循严格的时序,这就需要我们严格把控程序执行的时间。 一般我们都是通过执行空语句的方式来使程序延时。这种方法是用循环嵌套的方式使程序执行空操作,达到延时的目的;除此之外还有使用中断的方式等。 我们可以通过debug来验证我们的函数延时是否准确。本次实验采用12M的晶振进行仿真模拟,应当对软件进行一些设置。在option中将晶振频率改为12M。用12M的晶振是因为这时候一条指令周期恰好是1us,方便我们计算。 首先我们构建一个延时函数void delay_10us( unsigned char tick ),即每次延时的最小单位
[单片机]
<font color='red'>51单片机</font>精确延时设计
51单片机实验3:led流水灯
开发板led模块电路图如下: 循环左/右移函数头文件为 intrins.h #include reg52.h #include intrins.h #define uc unsigned char void delay(uc n) { uc i,j; for(i=1;i =n;i++) for(j=110;j =1;j--); } void main() { P2=0xFE; while(1) { delay(200); p2=_crol_(P2,1); delay(200); } }
[单片机]
<font color='red'>51单片机</font>实验3:led流水灯
基于51单片机利用中断实现100以内的按键计数
具体功能实现: 按下“计数”按键可以自增1,按下“清零”按键可以将两位数码管全部置0 使用器件: 两只数码管、总线、排阻、两个按键、AT89C51芯片 Proteus仿真原理图: 仿真: 知识介绍 : Proteus布线 为了让整个原理图看上去简洁明了,我们对元器件的导线进行标号,而不是直接和芯片相连。 数码管共阳、阳极断码 共阳极(1-9): 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 共阴极(1-9): 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f 中断系统 执行现程序的过程中,出现某些急需处理的异常情况或
[单片机]
51单片机教程(七):LCD1602液晶显示模块
一、原理简介 液晶显示模块具有体积小、功耗低、显示内容丰富、超薄轻巧等优点,在嵌入式应用系统中得到越来越广泛的应用,这讲中向大家介绍的LCD1602 液晶显示模块(其内部控制器为HD44780 芯片),它可以显示两行,每行16 个字符,因此可相当于32 个LED数码管,而且比数码管显示的信息还多。采用单+5V 电源供电,外围电路配置简单,价格便宜,具有很高的性价比。 LCD1602 外观如图1(a) 所示。1602 字符型LCD 模块的管脚分布如图1(b) 所示, 其管脚各功能如表1 所示。 图1 (a) LCD1602外观图 (b) LCD1602管脚分布图 值得提出的是,各种液晶厂家均有提供几乎都是同样规格的160
[单片机]
<font color='red'>51单片机</font>教程(七):LCD1602液晶显示模块
基于51单片机的智能水表
一.硬件方案 本设计主要以51单片机作为主控处理器的智能水表,该水表能够记录总的用水量和单次用水量,当用水量超出设定值时系统发出声光报警提醒,水量报警值能够通过按键进行自行设置,并且存储于AT24C02中,并且可以测量水流速度。测量的结果采用LCD1602液晶显示平显示出来。 主要由51单片机+最小系统+LCD1602液晶显示模块+蜂鸣器模块+LED指示灯模块+继电器驱动模块+按键电路+AT24C02芯片模块+水泵驱动电路;如图: 二.设计功能 (1)采用LCD1602液晶显示屏实时显示瞬时水流速、总用水量、本次用水量、水流量限值; (2)可通过按键设置水流量限值,当本次用水量超过水流量限值时系统发出声光报警提醒; (3)
[单片机]
基于<font color='red'>51单片机</font>的智能水表
构造一个51单片机的实时操作系统的方法
目前,大多数的产品开发是在基于一些小容量的单片机上进行的。51系列单片机,是我目前使用最多的单片机系列之一,有非常广大的应用环境与前景,多年来的资源积累,使51系列单片机仍是许多开发者的首选。针对这种情况,近几年涌现出许多基于51内核的扩展芯片,功能越来越齐全,速度越来越快,也从一个侧面说明了51系列单片机在国内的生命力。 多年来我们一直想找一个合适的实时操作系统,作为自己的开发基础。根据开发需求,整合一些常用的嵌入式构件,以节约开发时间,尽最大可能地减少开发工作量;另外,要求这个实时操作系统能非常容易地嵌入到小容量的芯片中。毕竟,大系统是少数的,而小应用是多数而广泛的。显而易见,μC/OS—II是不太适合于以上要求的,而Keil
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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