51单片机复习003

发布者:温柔之风最新更新时间:2017-09-18 来源: eefocus关键字:51单片机  串行通信 手机看文章 扫描二维码
随时随地手机看文章

1、AT89S52单片机 串行通信 概念性部分











2、AT89S52单片机 串行通信配置时用到的寄存器


串行通信的基础配置:


配置1:串行口控制寄存器  SCON  (98H)

SCON : 

SM0SM1SM2RENTB8RB8TIRI

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

SM0  SM1  

  0        0    : 方式0 : 8位移位寄存器。

               波特率固定为: fosc/12     (即:一个机器周期)

经常配合“串入并出”、“并入串出”移位寄存器一起使用扩展接口。

如74HC164 、 74hc165 等。

  0        1    : 方式1 : 10位异步收发 (1+8+1位)。波特率可变。

注意:起始位0和结束位1都是单片机自动加上去的,发送端自动

  添加,接收端自动去掉。

  1        0    : 方式2 : 11位异步收发 。(1+8+1+1位)

波特率固定为:focs * 1/32 或 1/64


  1        1    : 方式3 : 11位异步收发。(1+8+1+1位)。波特率可变。



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

SM2 : 串行口通信的控制位。(作为方式2、3的附加控制位)

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

RB8 : 在方式2、3中是:收到的数据的第九位。

  多机通信时:RB8 = 0 :表示接收到的是数据

                                      = 1 :表示接收到的是地址

TB8 : 在方式2、3中是:发送的数据的第九位。

  多机通信时:RB8 = 0 :表示发送的是数据

                                      = 1 :表示发送的是地址

RB8 、TB8 也作为接收发送的奇偶校验位。


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

REN : 串行口接收数据允许位。

  = 1 :可以接收数据;

  = 0 :禁止接收数据。

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

RI、TI : 串行口 接收 / 发送 申请中断标志位。

     = 0 :申请中断;

     = 1 :不申请中断。


方式0时:第8位发送或接收完毕时自动置位;

其他方式:发送或接收停止位之前置位。

都是由硬件自动置位,需要由软件进行清零。



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

配置2:电源控制寄存器  PCON  (97H)

PCON : 

SMODGF1GF0PDIDL

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

SMOD :在串行通信方式1、2、3中,是波特率加倍位。

= 0 :波特率不加倍(书写为:PCON = 0X00 ;)

= 1 :波特率加倍(书写为:PCON = 0X80 ;)

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

注意:PCON寄存器只有SMOD这一位和串行通信有关。

   PCON寄存器不能按位寻址,只能整体访问。

即:只能书写位:PCON = 0X80 ;  PCON = 0X00 ;(当然这只是在设置串行通信的时候)

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

串行通信工作在中断模式的配置:

配置3:中断允许寄存器 IE  (0A8H) (串口工作在中断模式下时配置)

IE :

EAET2ESET1EX1ET0EX0

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

EA : 总中断开关

       = 1 时,允许有中断产生 , = 0 时,禁止全部中断

各具体中断开关 :ET2 ES ET1 EX1 ET0 EX0

       = 1 , 开对应中断 , =0时,禁止对应中断

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

配置4:中断优先级控制寄存器 IP  (0B8H)(选择性配置)

IP : 

PT2PSPT1PX1PT0PX0

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

          = 1 设置为高优先级

          = 0 设置为低优先级

  不设置:默认为低优先级

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

定时器T1产生波特率时的配置(此时T1不能工作在中断模式下,方式2,8位自动重装)


配置5:定时器方式寄存器 TMOD  (89H)

TMOD : (T1----T0)

GATEC/T~M1M0GATEC/T~M1M0

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

产生串行通信的波特率的设置:TMOD = 0X20 ; 

(下方关于TMOD的信息仅供参考理解)

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


       M1  ,M0 

    =  0    0  工作方式0:13位定时器(主要和老单片机8048、8748等兼容);

    =  0    1 工作方式1:16位定时器;  

    =  1    0 工作方式2: 可自动重装的8位定时器; 

    =  1   1 工作方式3: 将T0分为2个8位的定时器,但此时T1不能工作。

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

C/T~ : 定时器/计数器 选择位  

= 1 : 外部事件计数器 (对T0/T1对应管脚的负脉冲进行计数)

= 0 : 片时钟定时器 (对机器周期脉冲计数来实现定时)

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

GATE : 门控置位    

= 0 : Timer的启动/停止由软件对 TR0/TR1 写 1 或 0 来控制

= 1 : Timer的启动/停止由外部中断INTx 和 软件对TRx写 1 或 0 共同控制

(INTx 和 TRx 同时为1时,Tx运行,否则不运行)

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



配置6:定时器/中断控制寄存器 TCON  (88H)

TCON : 

TF1TR1TF0TR0IE1IT1IE0IT0


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

产生串行通信的波特率的设置:TR1 = 1 ; 

(下方关于TCON的信息仅供参考理解)


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

TF1 、TF0 : 定时器0、1溢出中断申请标志位

                  = 0 没溢出 , = 1 溢出-->申请中断-->进入中断后标志位自动清零

IR1 、 IR0 : 定时器运行的启动/停止控制位

                  = 0 停止运行 , = 1 启动定时器

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

IE0 、IE1 : 外部中断的中断请求标志位

                 = 0 无外部中断申请 , =1有外部中断INT0 或 INT1中断申请

IT0 , IT1 : 外部中断请求的触发方式的设置位

                 = 0 低电平触发 , = 1 负跳变触发(下降沿触发)

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


3、串行通信初始化函数

01、串行通信,查询模式,收发数据


  1. /****************************************************************************** 

  2.  *  名称:Serial_Init() 

  3.  *  功能:初始化串口 ,工作方式1,波特率9600 

  4.  *  参数:无 

  5.  *  返回:无 

  6.  ******************************************************************************/  

  7.  void Serial_Init(void)  

  8.  {  

  9.     /*-------------串行通信初始化,定时器T1产生波特率,工作方式2------------*/  

  10.   

  11.      //1、配置串口控制寄存器 SCON  (98H)  

  12.         //  SCON : SM0, SM1, SM2, REN, TB8, RB8, TI, RI  

  13.         SCON = 0x50 ;   // 0101 0000 工作方式1,10位异步接发,波特率自定,  

  14.                         // 起始位和停止位芯片自动加上和去掉,用户只需发送8位数据就行  

  15.                         // REN 串行口接收允许控制位  

  16.   

  17.      //2、配置电源控制寄存器 PCON  (97H) 和波特率相关 , 寄存器PCON不能按位赋值  

  18.         //  PCON : SMOD,  - ,  - ,   - , GF1,  GF0,  PD, IDL  

  19.         PCON = 0x80 ;   //波特率加倍   (不加倍,可不配置PCON,或 PCON = 0x00 ;)  

  20.   

  21.      //3、配置中断允许寄存器 IE  (0A8H)  

  22.         // IE: EA, - , ET2, ES, ET1, EX1, ET0, EX0  

  23.         /*---若要串行通信工作在中断的状态下,则按一下配置,否则不配置寄存器IE---*/  

  24.         //EA = 1 ;   //开总中断  

  25.         //ES = 1 ;  //允许串口ES产生中断  

  26.   

  27.        

  28.      //4、配置定时器T1,产生自定的波特率   

  29.         //4.1、配置定时器方式寄存器 TMOD :  

  30.             // TMOD: GATE, C/T~, M1, M0,| GATE, C/T~, M1, M0  (T1 | T0)  

  31.             TMOD = 0x20 ; //0010 0000 :T1 定时器 ,工作方式2: 8位自动重装定时器  

  32.       

  33.         //4.2、给定时器赋初值 :  

  34.             TL1 = 0xFA ;    //定时器T1产生波特率:9600   

  35.             TH1 = TL1 ;  

  36.           

  37.         //4.3、配置 定时器/中断 控制寄存器 TCON :  

  38.             // TCON: TF1, TR1, TF0, TR0,| IE1, IT1, IE0, IT0   

  39.             TR1 = 1 ;  //运行定时器T1  

  40.   

  41.  }  


02、串行通信,查询模式,只发送不接收


其实就是在上面的初始化函数中关掉REN : REN = 0 ;


  1. /****************************************************************************** 

  2.  *  名称:Serial_Init() 

  3.  *  功能:初始化串口 ,工作方式1 ,波特率9600 

  4.  *  参数:无 

  5.  *  返回:无 

  6.  ******************************************************************************/  

  7.  void Serial_Init(void)  

  8.  {  

  9.     /*-------------串行通信初始化,定时器T1产生波特率,工作方式2------------*/  

  10.   

  11.      //1、配置串口控制寄存器 SCON  (98H)  

  12.         //  SCON : SM0, SM1, SM2, REN, TB8, RB8, TI, RI  

  13.         SCON = 0x40 ;   // 0100 0000 工作方式1,10位异步接发,波特率自定,  

  14.                         // 要用的位将其置 1 ;不用的位将其默认为 0 ;  

  15.                         // 起始位和停止位芯片自动加上和去掉,用户只需发送8位数据就行  

  16.                         // REN 串行口接收允许控制位 = 1 ,允许接收数据  

  17.                         //                          = 0 , 禁止接收数据  

  18.   

  19.      //2、配置电源控制寄存器 PCON  (97H) 和波特率相关 , 寄存器PCON不能按位赋值  

  20.         //  PCON : SMOD,  - ,  - ,   - , GF1,  GF0,  PD, IDL  

  21.         PCON = 0x80 ;   //波特率加倍   (不加倍,可不配置PCON,或 PCON = 0x00 ;)  

  22.   

  23.      //3、配置中断允许寄存器 IE  (0A8H)  

  24.         // IE: EA, - , ET2, ES, ET1, EX1, ET0, EX0  

  25.         /*---若要串行通信工作在中断的状态下,则按一下配置,否则不配置寄存器IE---*/  

  26.         //EA = 1 ;   //开总中断  

  27.         //ES = 1 ;  //允许串口ES产生中断  

  28.   

  29.        

  30.      //4、配置定时器T1,产生自定的波特率   

  31.         //4.1、配置定时器方式寄存器 TMOD :  

  32.             // TMOD: GATE, C/T~, M1, M0,| GATE, C/T~, M1, M0  (T1 | T0)  

  33.             TMOD = 0x20 ; //0010 0000 :T1 定时器 ,工作方式2: 8位自动重装定时器  

  34.       

  35.         //4.2、给定时器赋初值 :  

  36.             TL1 = 0xFA ;    //定时器T1产生波特率:9600   

  37.             TH1 = TL1 ;  

  38.           

  39.         //4.3、配置 定时器/中断 控制寄存器 TCON :  

  40.             // TCON: TF1, TR1, TF0, TR0,| IE1, IT1, IE0, IT0   

  41.             TR1 = 1 ;  //运行定时器T1  

  42.   

  43.  }  


03、串行通信,中断模式,收发数据



  1.    

  2. /****************************************************************************** 

  3.  *  名称:Serial_Receive() 

  4.  *  功能:从串口接收一个字节的数据(8位) 

  5.  *  参数:无 

  6.  *  返回:unsigned char get_data  :返回接收到的数据 

  7.  ******************************************************************************/  

  8. unsigned char Serial_Receive(void)  

  9. {  

  10.     unsigned char get_data ;   

  11.   

  12.     if(RI == 1)    //RI == 1 表示有数据从串口传来,暂时存放在SBUF寄存器中  

  13.     {  

  14.         RI = 0 ;    //清空串行接收数据申请中断标志位  

  15.         get_data = SBUF ;  

  16.         P0 = get_data ; //P0口的LED灯显示从串口接收的数据  

  17.         Serial_Send(get_data) ; //调用函数将接收到的数据通过串口发送出去  

  18.         return get_data ;   //将串口接收到那朵数据作为函数的返回值  

  19.     }  

  20.   

  21. }  



关键字:51单片机  串行通信 引用地址:51单片机复习003

上一篇:51单片机复习程序例举003
下一篇:51单片机复习程序例举002

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

51单片机串口通信实验电路详解
  51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8004单片机,后来随着Flash rom技术的发展,8004单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。   很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是51系列的单片机一般不具备自编程能力。   单片机的串口通信看起来是很复杂的,主要是因为他用到了更多的寄存器,与前面的知识相比他更具综合能力,写起来考虑的问题自然也变多了。而前面学习过的定时器
[单片机]
<font color='red'>51单片机</font>串口通信实验电路详解
51单片机8位数码管电子时钟(完结)
利用8位数码管显示时间,原理与4位数码管显示的基本一样 仿真图: 程序源代码: 作者:胡琴 联系qq:1257394091 本程序版本规本人所有可以任意转载: 技术支持网站: http://www.51hei.com 本程序已经通过在线软件仿真和硬件制作. org 0000h ;程序开始入口地址 sjmp main ;跳转至主程序 org 000bh ;T0中断入口地址 ljmp inti0 ;跳转至T0中断程序 org 001bh ;T1中断入口地址 ljmp inti1 ;跳转至T1中断程序 org 0030h main:mov tmod,#11h ;设T0、T1为模式1 mov ie,#8
[单片机]
<font color='red'>51单片机</font>8位数码管电子时钟(完结)
基于51单片机RTL8019AS的网卡驱动程序
   SNMP网管板使用了RTL8019AS 10M ISA网卡芯片接入以太网。选它的好处是:NE2000兼容,软件移植性好;接口简单不用转换芯片如PCI-ISA桥;价格便宜2.1$/片(我的购入价为22元RMB/片);带宽充裕(针对51);较长一段时间内不会停产。8019有3种配置模式:跳线方式、即插即用P&P方式、串行Flash配置方式。为了节省成本,我去掉了9346而使用X5045作为闪盘存储MAC地址和其他可配置信息。P&P模式用在PC机中,这里用不上。只剩下跳线配置模式可用,它的电路设计参考REALTEK提供的DEMO板图纸。一天时间就可以完成,相对来说硬件设计比较简单。   与这部分硬件相对应的软件是网卡驱动。所
[单片机]
基于<font color='red'>51单片机</font>RTL8019AS的网卡驱动程序
51单片机串口通信(UART)
项目描述: 1.串口工作方式为1(8位UART,波特率可变),无校验位; 2.通信数据格式为:1位起始位 + 8位数据位 + 1位停止位; 3.上电后MCU给上位机发送问候语,之后等待上位机的信息;MCU和上位机的通信为收发交替进行。MCU接收到的信息会实时的显示在LCD上。上位机接收到的信息会在串口助手上显示。 C语言程序如下: /*----------------------- FileName: UART.h Function: 头文件 Author: Zhang Kaizhou Date: 2019-6-10 11:33:35 ------------------------*/ #include reg52.h
[单片机]
<font color='red'>51单片机</font>串口通信(UART)
51单片机入门之静态数码管
LED数码管是单片机外围接口设备中常用的显示设备,有七段管和米字管两种,实验室中常用的是七段管。其工作方式有两种:共阴极和共阳极。所谓共阴极是把LED的com端都接地,而共阳极就是把com端都接高电平。其驱动显示方式也有两种:静态显示和动态显示。 静态显示中每个数码管占用单片机的一个八位口I/O口,工作时点亮的段常亮。于该种方式而言,硬件电路简单,编程简单,但是浪费单片机的I/O口。下面简单演示一下该种驱动方式。 P2口接一个数码管,数码管显示的数字每秒钟自动加一,加到9后清0,一直循环,本实验中数码管采用共阴极接法。 实验原理图如下: 实验程序如下: view plain copy #include #def
[单片机]
<font color='red'>51单片机</font>入门之静态数码管
自制51单片机常用头文件
#ifndef __COM_H__ #define __COM_H__ #define uchar unsigned char #define uint unsigned int #define XTAL 11059200 // CUP 晶振频率 #define baudrate 9600 // 通信波特率 void sendmsg(uint ps) { SBUF = ps; // 要发送的字符放入缓冲区 while(TI == 0); // 一直等等,直到发送完数据为止 TI = 0; } uint rcvmsg(void) //调用此函数前,要先调用RI,查看是否收到数据,
[单片机]
51单片机银行自动取款机模拟仿真
卡1卡2卡3键 表示插入的卡号 卡1密码是123456 余额20500 卡2密码654321余额2600 卡3密码111111 余额3700 准备钞票键表示系统以为用户准备好钞票取走钞票键表示用户取走钞票 有自动存储功能他已经存到iic中了 你没次打开的时候要初始化iic所以看不到 运行一下在再把始化的屏蔽掉在运行就行了 查询 取款 改密 退卡 都是旁边对应的键
[单片机]
<font color='red'>51单片机</font>银行自动取款机模拟仿真
采用MXT8051单片机实现基站温控仪的设计
引言 移动基站分布在全国各地,覆盖面广,各地气候差异大。解决好散热问题,是基站正常运作的关键因素之一。本文介绍的温控仪,利用温度传感器采集信号,然后通过单片机进行A/D转换、处理、运算得到室内外温度,并且根据当前室内外温差,计算出风机风速。然后利用PWM方式控制可控硅对交流220V斩波,实现风机风速调制。从而实现了利用自然冷源达到降低基站内部温度的目的。 系统设计 本温控仪是以MXT8051单片机为核心,整个硬件系统(如图1)分为温度信号采集、显示、键盘、控制输出、通信接口和存储模块。该仪表工作流程是:单片机通过集成的A/D采样室内室外温度,根据温差调制风机风速。键盘部分实现对温控仪参数的设置,如风机启动温度、停止温度等参数。
[单片机]
采用MXT80<font color='red'>51单片机</font>实现基站温控仪的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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