STC90C516 晶振12M 波特率9600 ,倍数时误差率6.99%,不倍数时误差率8.51%,数据肯定会出错。 这也就是串口通信时大家喜欢用11.0592MHz晶振的原因,在波特率倍速时,最高可达到57600,误差率0.00%。 用12MHz,最高也就4800,而且有0.16%误差率,但在允许范围,所以没多大影响。
#include <reg52.h>
void ConfigUART(unsigned int baud);
void main(){
EA = 1; //使能总中断
ConfigUART(9600); //配置波特率为 9600
while (1);
}
/* 串口配置函数,baud-通信波特率 */
void ConfigUART(unsigned int baud){
SCON = 0x50; //配置串口为模式 1
TMOD &= 0x0F; //清零 T1 的控制位
TMOD |= 0x20; //配置 T1 为模式 2
TH1 = 256 - (11059200/12/32)/baud; //计算 T1 重载值
TL1 = TH1; //初值等于重载值
ET1 = 0; //禁止 T1 中断
ES = 1; //使能串口中断
TR1 = 1; //启动 T1
}
/* UART 中断服务函数 */
void InterruptUART() interrupt 4{
if (RI){ //接收到字节
RI = 0; //手动清零接收中断标志位
SBUF = SBUF + 1; //接收的数据+1 后发回,左边是发送 SBUF,右边是接收 SBUF
}
if (TI){ //字节发送完毕
TI = 0; //手动清零发送中断标志位
}
}
分享到:
相关推荐
51单片机通过串口发送字符串数据,晶振为11.0592M,串口助手发送一个字符串,单片机便会返回一个字符串
51串口通讯 C语言程序 用STC单片机实现的
51单片机UART通讯驱动代码,使用的是51单片机自带UART资源,可以实现单字节的发送和接收(?),11.0592Mhz外部晶振(0.9216Mhz主频)下测试通过,12Mhz出错率有点玄学
51单片机的所有串口程序集合,多串口双串口通讯,单串口通讯,
51单片机的UART通信源程序,完整, 可直接使用
51单片机的基础程序之一,串口通讯,有兴趣的可以下载玩一下,里面包含了串口通信工具,方便快捷
51单片机的串口通讯,简明易懂,有详细的注释。
可以使用keil软件,利用51单片机实现串口通讯
89C51单片机,串口多机通讯,主机和从机程序。
PC机与51单片机之间的串口通讯,VB编的,分PC和单片机两部分.rar VB Modbus RTU源码,其中协议部分已生成DLL,可直接调用.rar VB.net实现串口编程,希望大家有用.rar VB.net开发的串口调试程序.rar VB6的串口通信程序,...
用51单片机写的一个单线半双工的模拟串口通信程序,同时支持两线全双工,目前只做了1位起始位,1、1.5、2位起始位,没做校验。上一个版本的代码已经用在产品上了,这个版本的还没怎么用过,就拿了块板子验证了一下,...
ESP8266-01S 使用例程与说明(51单片机、UART串口通讯)
本文主要讲了单片机串口通讯RXD与TXD连接方法,希望对你的学习有所帮助。
使用两个51单片机,利用串口进行双机通信,接收对方传来的数据,并及时显示。对于51单片机串口的学习及开发,有一定的辅导作用,提供KEIL及PROTEUS仿真文件,装有PROTEUS的话,可以直接运行,看到仿真效果。
基于STC51单片机使用UART串口模块通讯例子
此文档为C51单片机串口通讯学习程序(中断+FIFO)
设计内容和要求 1.1设计内容 本设计采用AT89S52单片机以及MAX232通信芯片配合使用与上位机(计算机)进行串口通讯,根据上位机所发送的不同请求数据来判断计算机所要求单片机所返回的数据。上位机软件采用串口调试...
我们以51单片机为例。51中一般针对串口通讯编程,通常采取中断接受查询发送的方式。中断函数在接受数据到达时被重复调用,其实是个重复入栈的过程,所以不宜将函数写的太长,函数太长一般会导致栈太深占用系统资源,...
51单片机串行通信,使用串口USART/UART进行双机通信,收发数据,包括发送端程序和接收端程序
单片机与PC机串口通讯仿真 单片机之间双向通信 单片机向PC发送数据 单片机向主机发送字符串 单片机接收PC发出的数据 单片机控制的电动自行车驱动系统 单片机数据发送程序 发一个用定时器做的PWM 基于1602+ds12b80+ds...