奶爸业余单片机学习之:UART串口通信学习笔记(一)

UART串口通信,全名:异步串口通信

UART的四种工作模式:(0,1,2,3)

模式1:SM0 = 0; SM1 = 1;REN = 1  //由SCON(串行口控制寄存器)控制,可位寻址。10位异步收发(8位数据),波特率可变(由定时器1的溢出率控制)

模式1功能:以TXD为例,平时没数据时,TXD为高电平,需要发送数据时,先发送一个起始位0,然后发送八位数据位(一个字节),最后发送一位停止位1;

REN位为允许串行接收位:REN = 1:允许串行口接收数据;REN = 0:禁止串行口接收数据。

TI:发送中断标志位。发送停止位开始时,T1由硬件置1,向CPU发送中断请求,不管中断打开与否,都必须进行软件清零。

RI:接收中断标志位。接收停止位的中间时,RI由硬件置1,向CPU发送中断请求,不管中断打开与否,都必须进行软件清零。

定时器1,及其工作方式2:TMOD = 0x20;//TMOD位(89H不可位寻址),即M1 = 1;M0 = 0;功能定时器1工作方式2:8位初值自动重装定时器/计数器

TR1 = 1;//定时器/计数器控制寄存器,TR1 = 1时,定时器1启动。

定时器1初值:由于使用定时器工作方式2(8位初值自动重装),即TL1 = TH1 ;

THL计算方法:

  公式1:波特率 = (2SMOD/32)×T1溢出率;

  公式2:T1溢出率 = 时钟频率/[12×(256-TH1)];其中SMOD由电源管理寄存器控制,串口方式1、2、3时,SMOD = 0为正常波特率,=1时波特率加倍,

由此可见,又公式1及公式2可得:TH1 = 256-[时钟频率/(波特率×12×32)].

使用串口中断时:EA = 1;ES = 1;

SBUF:串口数据缓冲寄存器,发送数据时,只要将数据送入SBUF就能自动发送,如:SBUF = AA;接收数据时,则将SBUF数据读出来即可,如:AA = SBUF;

总结:

UART配置(使用定时器1时):

1、确定T1的工作方式:TMOD = 0X20;

2、计算T1定时器初值TH1\TL1:TH1 = 256-[时钟频率/(波特率×12×32)];

3、打开定时器1:TR1 =1 ;

4、确定串口工作方式(方式1):SM0 = 0;SM1 =1;//或者SCON = 0x50;

5、打开接收允许REN:REN = 1;

6、打开中断 EA = 1;ES = 1(当需要时)

举例:单片机向电脑发送数据

/*************************************
* 串口通信实验
* 晶振11.0592MHz
* 波特率9600bps
* 分为中断及非中断方式实现
*
**************************************/

#include<reg52.h>

/**********串口通信配置*******************/
void UART_CONFIG(unsigned long baud,cy)//baud波特率,cy晶振
{
  TMOD = 0x20;//定时器1工作方式2,8位初值自动重装
  TH1 = 256-(cy/(12*32*baud));
  TL1 = 256-(cy/(12*32*baud));
  TR1 =1;//打开定时器1
  SM0 = 0;//SM0,SM1的值确定串口工作方式
  SM1 = 1;
  REN = 1;//允许接收数据
}
/********数据发送函数*****************/
void UART_DATA(unsigned int dat)
{
  SBUF = dat;//数据送入SBUF,自动发送
  while(!TI);//TI = 1,发送停止,!T1即等待TI发送完成
}
/********发送延时函数*****************/
void delay_xms(unsigned int xms)
{
  unsigned x, y;
  for(x = 0;x<xms;x++)
  {
    for(y = 0;y<110;y++);
  }
}

int main()
{
  UART_CONFIG(9600,11059200);
  while(1)
  {
    UART_DATA(0);//发送数据
    delay_xms(1000);//1秒延时
  }
  return 0;
}

时间: 2024-08-27 02:55:00

奶爸业余单片机学习之:UART串口通信学习笔记(一)的相关文章

奶爸业余单片机学习之:UART串口通信学习笔记(二)

/************************************** 串口通信实验* 晶振11.0592MHz* 波特率9600bps* 中断方式实现:单片机接收电脑数据,加1后发送回电脑***************************************/ #include<reg52.h> unsigned char dat; /**********串口通信配置*******************/void UART_CONFIG(unsigned long baud

奶爸业余单片机学习之:定时器使用方法——非中断,TF值软件重置法

============定时器使用方法——非中断,TF值软件重置法======== 第一:设置特殊功能寄存器TMOD,配置好工作模式. 第二:设置计数寄存器TH0和TL0的初值. 第三:设置TCON,通过TR0置1来让定时器开始计数. 第四:判断TCON寄存器的TF0位,监测定时器溢出情况.  实例: //LED由三极管及73HC138控制//用定时器0实现亮与灭之间的1秒时 # include <reg52.h> sbit led2 = P0^0; sbit addr0 = P1^0;sbi

奶爸业余单片机学习之:用数码管及LED实现交通灯(初版)

/* * 人行道交通灯程序:LED2(红灯).LED3(黄灯).LED4(绿灯)* 红灯30秒,绿灯3秒,绿灯15秒,倒计时 灯亮时间显示在数码管上* 晶振11.0592MHz,LED.数码管由三八译码器控制,T0中断 *程序思路:由于三八译码器每次只能输出一个低电平,因此必须用动态扫描方式点亮数码管及LED,中断间隔1ms *亮灯时间倒数,红灯60秒,绿灯20秒,黄灯3秒,顺序:红 - 绿 -黄 -红循环,因此每经历1000次中断,实现数字递减. */ #include<reg52.h>un

奶爸业余单片机学习之:C语言基础——指针(指针变量)学习笔记

指针变量的定义: 存放地址的变量称为指针变量 1. 定义指针变量的一般形式如下: 类型名 * 指针变量名1,* 指针变量名2,... * 指针变量名n ; 例如:  int * X, *Y, *Z; 等同于: int * X; int * Y; int * Z; 实例: #include<stdio.h>void main(){    int x = 1;    int y = 2;    int* A;        //声明一个指向整形变量的指针变量A    int* B;        

奶爸业余单片机学习之:定时器中断的使用方法——进入中断TF0(TF1)值硬件自动重置

/*============定时器中断的使用方法—---TF0(TF1)值硬件重置法======== 第一:打开总中断第二:打开定时器 中断第三:设置特殊功能寄存器TMOD,配置好工作模式. 第四:设置计数寄存器TH0和TL0的初值. 第五:设置TCON,通过TR0置1来让定时器开始计数.*/ //LED由三极管及73HC138控制//用定时器0实现亮与灭之间的1秒延时 # include <reg52.h> sbit led2 = P0^0; sbit addr0 = P1^0;sbit a

【C51】UART串口通信

我们常需要单片机和其他模块进行通信,数据传输,常用的方式就是串口通信技术. 常用来 单片机<-->电脑,  单片机<-->单片机之间通信. 串行通信 versus 并行通信 并行传输:将字节的各个 bit 用多条传输线路同时发送出去.每个bit使用一条线路. 优点:速度相对快,控制简单. 缺点:控制线路多,耗费的硬件资源多. 串行传输:将一个字节的数据的各个 bit 在一条线路上 分时发送.一个字节8位,则至少需要分8次发送完. 优点:需要的线路少,成本低. 缺点:控制复杂,因为它

嵌入式Linux裸机开发(七)——UART串口通信

嵌入式Linux裸机开发(七)--UART串口通信 一.UART串口通信简介 通用异步收发器简称UART,即UNIVERSAL ASYNCHRONOUS RECEIVER AND TRANSMITTER, 它用来传输串行数据.发送数据时, CPU 将并行数据写入UART,UAR按照一定的格式在一根电线上串 行发出:接收数据时, UART检测另一根电线的信号,将串行收集在缓冲区中, CPU 即可读取 UART 获得这些数据. 在 S5PV210中, UART提供了 4 对独立的异步串口I/O端口,

51单片机GPIO口模拟串口通信

51单片机GPIO口模拟串口通信 标签: bytetimer终端存储 2011-08-03 11:06 6387人阅读 评论(2) 收藏 举报 本文章已收录于: 分类: 深入C语言(20) 作者同类文章X 1 #include "reg52.h" 2 #include "intrins.h" 3 #include "math.h" 4 #include "stdio.h" 5 sbit BT_SND =P1^5; 6 sbit

Win10 IoT C#开发 4 - UART 串口通信

原文:Win10 IoT C#开发 4 - UART 串口通信 Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,既可以开发设备UI与用户交互式操作,又可以控制GPIO等接口,使得原来嵌入式繁琐的开发变得简单.通过Remote Debug功能可以进行断点追踪调试.C#语言本身也有很好的用户基础,相信Win10 IoT 不远的将来会火起来.上个月帮朋友解决了关于Win10 IoT 的一些技术问题,当前也有很多公司在尝试采用Win10 IoT进行开发,可能也会遇到这些问题,