当前位置: 首页 > news >正文

嵌入式技术学习——c51——串口

一、串口介绍。

串口是一个 通讯接口。成本低,容易使用,通信线路简单,可实现两个设备的相互通信

单片机的串口可以实现单片机于单片机,单片机与电脑,单片机与其他模块相互通信。

51单片机内部自带UART,通用异步手法器,实现单片机的串口通信。

二、硬件电路

1、简单双向串口通信有两根通信线(发送端TXD和接收端RXD)

TXD和RXD要交叉连接,

当电平标准不一致时,需要加电平转换芯片。

通信必须需要txd和rxd和gnd三根线

三、电平标准

电平标准时数据1和数据0的表达式,时传输线缆中人为规定的电平与数据的对应关系,串口常用的标准三种:

TTL电平:-+5表述1,0V表示0                                     

RS232电平:-3~-15V表示1,+3~+15V表示0

RS485电平:两线压差+2~+6V表示1,-2~-6V表示0(差分信号)

TTL和RS232z最多可以输出十多米

RS485可以达到1000米

四、通信接口

(1)c51的单片机串口

名称:UART           引脚定义:TXD RXD          通信方式:全双工、异步        特点:点对点通信

(2)串行通信模式

        全双工:通信双方可以在同一时刻互相传输数据。

         半双工:通信双方可以互相传输数据,但必须分时复用一根数据线

         单工:通信只能一方发送给另一方。

(3)传输数据方式

        异步:通信双方各各自约定通信速率

       同步:通信双方靠一根时钟线来约定通信速率

(4)其他

总线:连接各个设备的数据传输线路(类似于一条马路,把路边各住户连接起来,让住户相互交流)

 波特率:串口通信的速率,单位时间内发送的比特率(bits\s)

 检验位:用于数据验证(奇校验与偶校验)

 停止位:用于数据帧间隔

 时序图

五、51单片机的UART

c51中只有1个UART

其有4种工作模式:

(1)模式0:同步移位寄存器

(2)模式1:8位UART,波特率可变(常用)

(3)模式2:9位UART, 波特率固定

(4)模式3:9位UART,波特率可变

六、串口模式图

SBUF:串口数据缓存寄存器。物理上时两个独立的寄存器,但占用的是相同的地址。写操作时,写入的是发送寄存器,读操作时,独处的时接收寄存器。

        在总线上接受数据和发送数据,靠定时器计数,T1的溢出率经过二分频或16分频控制收放的速率,通过SBUF写入发送数据。将数据放在SBUF,单片机自动读写数据,发送之后会申请TI这个发送中断,接收数据会生成RI接受中断。

七。寄存器

还有定时器,中断的寄存器看前面的文章。

七、课堂练习

发送数字,数码管输出相应的数字。

       uart.c

#include "reg51.h"
#include "utils.h"
#include "ledNum.h"
void uartInit(void)
{SCON |= 0x01<<6;  //选择uart 工作方式1 8位的uart SCON |= 0x01<<4;  //开启接收PCON |= 0x01<<7;  //波特率设置翻倍TH1  = 243;TL1  = 243;TMOD |= 0x01<<5;TCON |= 0x01<<6;  //开启定时器 //串口中断相关 IE |= 0x01<<7 | 0x01 << 4; // 开启总中断 和 串口中断
}void sendOneByte(unsigned char ch)
{SBUF=ch;	while (SCON&(0x01<<1) == 0);SCON &= ~(0x01<<1); //软件清零 
}void sendStr(const  char *s)
{int i = 0;while (s[i]){sendOneByte(s[i]);++i;delay(30000);}
}void uartHandler(void) interrupt 4
{if (SCON&0x01)//接收中断 {P2 = ~P2;displayNum(1,SBUF);SCON &= ~0x01<<0;}
}

                  uart.h

#ifndef _UART_H_
#define _UART_H_
void uartInit(void);
void sendOneByte(unsigned char ch);
#endif 

延迟 utils.c

void delay(unsigned int n )
{while(n)--n;
}

延迟   utils.h

#ifndef _UTILS_H_
#define _UTILS_H_void delay(int n);
#endif

       ledNum.c

#include <reg51.h>void displayNum(unsigned int dig,int n)
{unsigned char num[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d,0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c,0x39, 0x5e, 0x79, 0x71, 0x00};//位的选择 P1 = 0x01 << (dig-1); //1 2 3 4 //显示数据 --段的选择P0 = num[n];
}void display(int num)
{//1234 unsigned int k = 0;unsigned int i = 1;while(num){k = num % 10; //displayNum(i,k);num = num/10; //123i++;//	delay(500);}
}

main.c

#include "reg51.h"
#include "uart.h"
#include "utils.h"
#include <stdio.h>void main(void)
{uartInit();while (1){		sendOneByte(SBUF);delay(10000);}}

相关文章:

  • 【第15章】Vue实战篇之环境搭建
  • 详解 HBase 的常用 API
  • HTML5基础
  • STM32学习笔记(一)--时钟树详解
  • Git仓库中文件的状态
  • 高频谐振功放
  • [蓝桥杯真题]小计算器
  • 使用dockerfile能力构建制品并打包容器
  • WPF 上位机 Modbus 入门必备的信息 C# 开发对接
  • Unity与Android交互通信系列(6)
  • 自动化数据驱动?最全接口自动化测试yaml数据驱动实战
  • 搜索与图论:染色法判别二分图
  • LeetCode 58. 最后一个单词的长度
  • Debian/Ubuntu linux安装软件
  • 算法体系-22 第二十二节:暴力递归到动态规划(四)
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • CSS居中完全指南——构建CSS居中决策树
  • es6
  • flutter的key在widget list的作用以及必要性
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • 百度小程序遇到的问题
  • 对JS继承的一点思考
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 基于遗传算法的优化问题求解
  • 力扣(LeetCode)965
  • 悄悄地说一个bug
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 使用putty远程连接linux
  • 小程序button引导用户授权
  •  一套莫尔斯电报听写、翻译系统
  • 应用生命周期终极 DevOps 工具包
  • 与 ConTeXt MkIV 官方文档的接驳
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • 翻译 | The Principles of OOD 面向对象设计原则
  • 如何正确理解,内页权重高于首页?
  • ​​​【收录 Hello 算法】10.4 哈希优化策略
  • ‌前端列表展示1000条大量数据时,后端通常需要进行一定的处理。‌
  • #pragma once
  • #数据结构 笔记一
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • ${factoryList }后面有空格不影响
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (6)设计一个TimeMap
  • (Matlab)使用竞争神经网络实现数据聚类
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (三)终结任务
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (一) storm的集群安装与配置
  • (一)appium-desktop定位元素原理
  • (转)memcache、redis缓存
  • (转)winform之ListView
  • (转)母版页和相对路径
  • (转)拼包函数及网络封包的异常处理(含代码)