1、在使用串口之前,应对其进行初始化,步骤如下:
(1)定时器1工作模式,设置TMOD寄存器
(2)装载TH1,TL1,决定波特率的值
(3)启动定时器1
(4)串口工作模式设置,SCON
(5)如需中断,开总中断,开串行中断
2、如需奇偶校验:
偶校验:就是发送的8个数据位的1的个数为偶数时,TB8=0;为奇数时,TB8=1;
奇校验:与偶校验相反的TB8。
用软件产生奇偶校验位是根据51系列单片机的状态寄存器PSW的定义:当累加器ACC中为1的个数为奇数时,P=1,否则P=0。
3、程序(采用偶校验)
#include
#define uchar unsigned char
#define uint unsigned int
uchar rcvd_num;
bit chk_error;
bit rcvd_ok;
void init(void);
void main(void)
{
init();
while(1)
{
if(rcvd_ok)
{
rcvd_ok=0;
ES=0;
if(chk_error)
{
ACC='e';
TB8=P;
SBUF='e';
while(!TI);
TI=0;
}
else
{
P0=rcvd_num;
ACC='c';
TB8=P;
SBUF='c';
while(!TI);
TI=0;
}
ES=1;
}
}
}
void init(void)
{
TMOD=0x20; //定时器1工作模式2
TH1=0xfd; //初值装载,波特率9600
TL1=0xfd;
SCON=0x50; //串口工作模式3
EA=1; //开总中断
ES=1; //开串行中断
TR1=1; //启动定时器1
}
void serial() interrupt 4
{
rcvd_num=SBUF;
ACC=rcvd_num; //将数据送入累加器中算出1奇偶个数,奇数时P为1,偶数时P为0;
if(RB8==P)chk_error=0; //1奇偶个数与发送的相同,则数据无错
else chk_error=1;
RI=0;
rcvd_ok=1; //接收完成标志位
}
关键字:C51单片机 串口通信 初始化
引用地址:
C51单片机串口通信
推荐阅读最新更新时间:2024-03-16 13:53
裸机系列——2440串口通信2程序代码
关于一些串口通信的知识已经在上一篇文章中做了总结,这里主要讲程序的问题。 首先是直接通信,即不使用 FIFO 和中断的通信 代码 #define GLOBAL_CLK 1 #include stdlib.h #include string.h #include def.h #include option.h #include 2440addr.h #include 2440lib.h #include 2440slib.h #include mmu.h #include profile.h #include memtest.h #define baud 115200 void led_port_init() {
[单片机]
基于Virtools 和串口通信的界面交互性的设计与实现
摘 要:本文介绍了一种采用Virtools 和串口通信实现人机界面交互的设计方法。下位机通过 串口通信的方式将采集的数据传给上位机,上位机通过Virtools 的行为模组对这些数据进行处理, 并根据处理结果做出响应,从而实现人机界面的交互。
1 引言
用户界面设计是屏幕产品的重要组成部分,它为人机交互构建了一个沟通环境。其中交互性设 计是用户界面设计中的重要内容之一。交互设计的目的是让用户能够简单方便地使用产品,任何产 品功能的实现都是通过人机交互完成的。现以单片机为核心的嵌入式应用中界面交互性设计为例具 体介绍其实现方法。
2 总体设计方案
总体设计方案
[网络通信]
STM32笔记(五)RTC的初始化
RTC这东西晕晕的,因为一个模块涉及到了RTC,BKP,RCC多个模块,之间的关系让人有点模糊 入门的知识请大家看手册,我来总结: 总之,RTC只是个能靠电池维持运行的32位定时器over! 所以,使用时要注意以下问题: 1.上电后要检查备份电池有没有断过电。如何检查?恩,RTC的示例代码中已经明示: 往备份域寄存器中写一个特殊的字符,备份域寄存器是和RTC一起在断电下能保存数据的。 上电后检查下这个特殊字符是否还存在,如果存在,ok,RTC的数据应该也没丢,不需要重新配置它 如果那个特殊字符丢了,那RTC的定时器数据一定也丢了,那我们要重新来配置RTC了 这个过程包括时钟使能、RTC时钟源切换、设置分频系数等等,这个可以参考FW
[单片机]
基于VB6.0的MSP430单片机与PC机串口通信设计
1 引言 随着计算机技术的不断发展,计算机应用在其发展过程中逐步形成两大分支,一是通用计算机,PC机为代表,着眼于高速数值运算和数据处理,但实时测控能力较弱。二是嵌入式微机,以单片机为代表,着重发展测控技术,但其数值运算和数据处理能力较弱。目前,在工业控制以及数据采集和数据处理的大型系统中,由于PC 机软件资源丰富,人机交互方便等优点。以PC机作为上位机,以单片机组成的控制单元作为下位机,较好地实现测控及显示,又能较快地实现数据采集和处理。逐渐成为现代工业控制领域的一个优化方案。 故提出了基于VB6.0 的PC 机与MSP430单片机串行通信的实现方法。以RS485 接口为基础,以PC机为上位机,以MSP430 系列单片机
[单片机]
MSP430串行写入BOOTSTRAP与加密熔断功能
摘要 BOOTSTRAP用于在MSP430设计开发及系统更新时对Flash存储器的编程。它可以用经串口协议的命令来激活,使得用户可以通过PC控制MSP430,并实现数据交换。烧断Flash的熔丝是用来保护用户在Flash中的程序代码。本文主要介绍我们制作的BOOTSTRAP这一开发工具的功能、软硬件结构以及熔断工具的制作方法。 关键词 MSP430 BOOTSTRAP 熔断 引言 对于MSP430单片机的开发调试有多种技术方案,例如EPROM方式、OTP方式、仿真开发系统方式、JTAG和BOOTSTRAP方式。BOOTSTRAP(又名BootStrap Loader,简称BSL)可与另一种Fla
[嵌入式]
C51单片机微调SH-20504程序
/******************************************************************************************************************* * 版权归huaer所有 ** * 功能:SH-20504控制56BYG250C的单片机程序 ** * 输出:PWM
[单片机]
labview实现串口通信(三)
在调试的过程中,我们经常会发现有收到的数据延迟的现象,现在提出几点解决的方法: (1)在循环中加入适量的延时,通过一个简单的例子看, 你会发现在cpu的占用率在加延时和不加的时候有很大的区别,当加的时候基本不占,而不加延时的时候达到100%。我在调试串口通信时候,发现while loop里加一个延时会有很好的效果(假如有一个或某几个线程占用了 100% 的 CPU,此时系统对其他线程就会反应迟钝。例如,程序的执行线程占用了100% 的 CPU,那么用户对界面的操作就会迟迟得不到响应,甚至于用户会误认为程序死锁了。所以在程序中要尽量避免出现 100% 占用 CPU 的情况。 目前大多数的计算机还是单核单个 CPU 的,因此要避
[测试测量]
MSP430F2619单片机时钟初始化故障始末
初次使用该芯片,问题说大不大,说小也折腾了挺久,写出来,让后来者能避免此类简单错误。 项目需要,使用MSP430F2619捕获功能对待测频率信号进行采样计算。 待测信号由信号发生器给出。 硬件上,MSP430F2619单片机XIN和XOUT并未按手册建议接入32.768kHz低频时钟,仅在XT2IN和XT2OUT引脚接入8MHz高频时钟。(此处是导致错误的根源) 在后期调试时,有尝试使用MSP430FG439芯片最小系统进行测试,因此查阅用户指南时,在时钟模块章节,有阅读到一句“If there is only one crystal in the system it should be connected to
[单片机]