PWM、通信、串口通信、UART、TTL、51单片机串口通信、定时器初值的计算公式

我要成为嵌入式高手之4月8日51单片机第三天!!
————————————————————————————

PWM

        脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。

有源蜂鸣器:有震荡源

无源蜂鸣器:没有震荡源

通信

概念

主机:

参与通信的设备(无论哪种主机都是数字电路)

单工模式:

(Simplex Communication)主机间通信时如果一方固定为发送端另外一方固定为接收端,通过一根总线实现数据通信,只能单向传递信息。

串行通信:

指将数据拆分成一个个比特,按照先后次序在一根总线上进行发送,串行通信有着系统占用资源少,结构简单等优点,是主机间通信的常用方式

并行通信:

指多个比特同时通过并行线进行传输,这种方式的传输速率较高,但会占用大量的芯片资源

全双工通信:

(Full-Duplex Communication)是一种通信方式,其中数据传输可以同时在两个方向进行,允许通信双方同时发送和接收数据,实现双向通信。

半双工通信:

(Half-Duplex Communication)是一种通信方式,其中数据传输可以在两个方向之间交替进行,但不能同时进行。(通信双方既可以发送数据又可以接收数据,但是不能同时发送数据或者接收数据)半双工通信常用于对话式交流和一些简单的通信场景中

串口通信

①属于串行通信的异步方式之一

②收发双方波特率必须事先约好,否则数据传输就会出现混乱

异步通信:

为了保证每个比特占用数据线的时间,发送放和接收放需要按照各自的系统计时且双方之间的误差不能太大(不能超过6%)。这种双方各自“计时”的方式称为异步(打字速度因人而异,没有规定打字时间要等多久,只要保证接收端能够正确识别并解析即可)

同步通信:

同步通信设备之间除了有数据线以外还有一条时钟线(SDA 和 SCL)其中SCL就是时钟线(serial clock)发送方负责控制时钟线的变化,每发送一个比特,都需要将始终线按规则进行改变。(例如合唱团的人员都遵从指挥员的指挥节奏)这种通信方式就称为同步通信,譬如IIC SPI等。

串口通信在不同主机间的数据格式:

UART:

统一的异步的接收器和发送器,为了将数据间通信的0 1落实到硬件上

TTL(Transistion-Transistion Logic)

通常指芯片引脚产生的电压,这个电压值跟选择的芯片有关,在51单片机系统下是5V;在2440下是3.3V等等。5V TTL通信距离通常被限制在10~20米之间(距离太短,怎么边长?)

IEEE(Institute of Electrical and Electronics Engineers)为了解决传输距离短的问题,颁布了两个标准:

RS232标准:

逻辑低(0):-3V ~ -15V

逻辑高(1):+3V ~ +15V

收、发主机之间有三根线,分别是收、发和地,因此RS232是全双工的。

理论上能够传输20~30米

RS485标准:

使用两根信号线(A和B)来传输数据,通过比较A和B之间的电压差来识别信息,这种差分信号传输方式提高了抗干扰能力。由于采用的是压差,RS485在传输数据的某一时刻,两根线都要用到,所以他是半双工的。

使得通信距离到达1200米

注:RS232 RS485是通过TTL变换的

51单片机串口通信

两个缓冲器统称为串行通信特殊功能寄存器SBUF

通信方式有四种

对应的硬件管脚是P3.0/RxD(收) 和 P3.1/TxD(发)



在此用方式1

SM2:多机控制,在此用不到,清0;

REN:允许接收,置1;

TB8:发送时第9位数据为奇偶校验位,在此没有,清0;

RB8:收到时第9位数据为奇偶校验位,在此没有,清0;

TI、RI:发送中断请求标志位,是用来查询的(必须用软件复位)

SMOD:波特率是否翻倍,置1翻倍

定时器初值的计算公式

2^8-2^smod * focs / 32 / bps / 12(2^8说明是8位自动重装定时器)

其中smod表示PCON的B7,根据实际情况带入,不是0就是1;

focs晶振频率,我们这是12M;

bps目标波特率我们这是1200

28 这里的8来自定时器的工作方式,因为我们使用的是8位自动重装方式,所以是8

按照我们的要求1200bps,smod=1时,该公式计算结果为:203.99。有小数表明有误差,取整得203。

  • 22
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很高兴为您解答关于51单片机串口通信的问题。下面是关于51单片机串口通信模板的详细介绍以及通信实例。 1. 51单片机串口通信模板 51单片机与外部设备进行串口通信,需要设置串口的一些参数,包括波特率、数据位、校验位和停止位等。以下是51单片机串口通信模板的代码: ```c #include <reg52.h> #include <stdio.h> #define FOSC 11059200L #define BAUD 9600 typedef unsigned char BYTE; typedef unsigned int WORD; sbit LED = P1^0; void UART_Init(); void SendData(BYTE dat); void SendString(char *s); void main() { UART_Init(); while(1) { LED = ~LED; SendString("Hello, world!\r\n"); delay(1000); } } void UART_Init() { TMOD &= 0x0F; TMOD |= 0x20; TH1 = TL1 = -(FOSC/12/32/BAUD); TR1 = 1; SCON = 0x50; ES = 1; EA = 1; } void SendData(BYTE dat) { SBUF = dat; while(TI == 0); TI = 0; } void SendString(char *s) { while(*s) { SendData(*s++); } } ``` 在上面的代码中,我们定义了一个LED灯,在主函数中通过串口发送“Hello, world!”字符串,并控制LED灯闪烁。在UART_Init()函数中,我们设置了串口的一些参数,包括波特率、数据位、校验位和停止位等。 2. 51单片机串口通信实例 以下是一个简单的51单片机串口通信实例,它通过串口接收PC机发送的数据,并将其原封不动地发送回去: ```c #include <reg52.h> #include <stdio.h> #define FOSC 11059200L #define BAUD 9600 typedef unsigned char BYTE; typedef unsigned int WORD; sbit LED = P1^0; void UART_Init(); void SendData(BYTE dat); void SendString(char *s); void main() { BYTE c; UART_Init(); while(1) { if(RI) { c = SBUF; RI = 0; SendData(c); LED = ~LED; } } } void UART_Init() { TMOD &= 0x0F; TMOD |= 0x20; TH1 = TL1 = -(FOSC/12/32/BAUD); TR1 = 1; SCON = 0x50; ES = 1; EA = 1; } void SendData(BYTE dat) { SBUF = dat; while(TI == 0); TI = 0; } void SendString(char *s) { while(*s) { SendData(*s++); } } ``` 在上面的代码中,我们定义了一个LED灯,在主函数中通过串口接收PC机发送的数据,并将其原封不动地发送回去。同时,每当接收到数据时,LED灯会闪烁一次。 以上就是关于51单片机串口通信模板和通信实例的介绍,希望能对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值