基于51单片机异步串行通信程序 - 范文中心

基于51单片机异步串行通信程序

05/20

基于51单片机的异步串行通讯

1. 串行工作方式1,波特率与T1定时器的溢出率有关

2. 进行中断法的串行通讯

#include

#define uchar unsigned char

#define uint unsigned int

//------------------宏定义-------------------//

uchar code prefix[]="I get ";//前缀---字头

uchar flag,a_receive,i;

/*-------------------------------------------------------------------------------------------------------------------

-------本程序的思想:一串口通讯方式一进行单片机与上位机(串口调试助手)的实时通讯,反应异步串行通讯特点--------------

-------A:设置定时器1,形成波特率,进行中断形式的串口通讯--------------------------------------------------------------

-------B:单片机先发送字头(prefix),接收到调试助手发送来的数据后紧随发送回调试助手----------------------------------

-------C:本程序中进入中断是由串行接收中断标志(RI=1单片机接收到一帧数据后由硬件自身引起,后续软件复位,以接收下次中断)

-------D:发送完一帧数据,不进入中断程序,(复位发送中断标志,时间较短也不一定能进入中断,可能中断确认不能完成)-----

间歇肯定串口中断功能进行避免由发送中断标志引起的串口中断-------------------------------------------------------------

-------E:主程序中的delay()函数的应用原因,由于所采用的的波特率较低300,所以读取数据较慢,以延时函数等待数据的读取,--

读取时,是在T1定时器决定的波特率确定的,来一个周期,读一个位的数据,所以采用延时保证数据可读完。---------------------

-------F:采用波特率300的原因在于,本设备晶振频率12MHZ,在300波特率时其误差为零。-------------------------------------

-------G:在上位机中发送字符时,只能发送一个字节的数据,其原因在于,在中断程序中仅进行了一次读的操作,即只读到一个字节

的数据--------------------------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------------------------------*/ void init_timer1()

{

TMOD=0X20;

TH1=TL1=0X98;

TR1=1;

}

//---------------定时器设置----------------------------------------//

void init_serial()

{

REN=1;//------允许串行接收------------//

SM0=0;//------工作方式一--------------//

SM1=1;//-------------------------------//

}

//------------------串口工作方式设置SCON---------------------------//

void init_s_break()

{

EA=1;//总中断

ES=1;//串口中断允许位

}

// -----------------设置串口中断进行串口通信----------------------------//

void delay()

{

uint x,y;

for(x=1000;x>0;x--)

for(y=110;y>0;y--);

}

//-------------------------------------------------------------------//

void main()

{

init_timer1();

init_serial();

init_s_break();

while(1)

{

if(flag==1)

{

ES=0;

for (i=0;i

{

SBUF=prefix[i];

delay();

while(!TI)TI=0;

}

SBUF=a_receive;

delay();

while(!TI)TI=0;

ES=1;

flag=0;

}

}

}

//----------------------主程序----------------------------------------// void s_ri_break() interrupt 4

{

RI=0;

a_receive=SBUF;

delay();

flag=1;

}


相关内容

  • 串行数据通信
    第8章 串行数据通信 一.教学要求: 掌握:串行口结构与工作原理. 理解:串行通信方式. 了解:波特率设计,串行口应用. 二.教学内容: 8.1 串行通讯基础知识 8.2 单片机的串行口及控制寄存器 8.3 单片机串行通信工作方式 三.教学 ...
  • 单片机知识总结
    单片机知识总结 第1章 单片机概述 1. 单片机定义: 将处理器.存储器及各种输入输出接口集成在一个芯片上,就称之为单片微型处理器,简称单片机. 2.At89c51单片机引脚: 共有40引脚,按其功能可分为如下3类: (1)电源及时钟引脚( ...
  • 微机原理考试整理
    1.8086从功能上分成了EU 和BIU 两部分.这样设计的优点是什么? 答:传统计算机在执行程序时,CPU 总是相继地完成取指令和执行指令的动作, 即,指令的提取和执行是串行进行的.而8086CPU 在功能上分成了EU 和BIU 两 部分 ...
  • 遥控窗帘电路的设计-毕业设计
    遥控窗帘电路的设计 学生:XX 指导教师:XX 内容摘要:本文主要介绍了遥控窗帘的电路设计.电机工作的时候是否有鸣响提示,以及光控状态下环境亮度的控制参数的调整等等都可以通过遥控器随着电子技术和自动化技术的发展,人们对生活质量的要求越来越高 ...
  • 单片机硬件工程师面试试题
    单片机硬件工程师面试试题 一.现代通讯网络中广泛使用的交换方式有那两种? 分组和电路 二.通常所说的TCP/IP协议对应于OSI模型的哪层?你认为网络模型分层有什么好处?如果让你来制订网络体系架构,你认为应该遵循什么原则? 第四(传输)和第 ...
  • 交流电量同步采集
    河南机电高等专科学校 毕业设计(论文) 交流电量同步采集 系 部: 自动控制系 专 业: 电气自动化 班 级: xxxxx xx 姓 名: xxxx xxx xx 学 号: xxx xxx xx x 指导老师: xxx 二零一二年五月 第一 ...
  • 单片机原理及应用(答案)
    1:单片机8031的XTAL1和XTAL2引脚是()引脚. 1.外接定时器 2.外接串行口 3.外接中断 4.外接晶振 2:LU表示(). 1.累加器 2.程序状态字寄存器 3.计数器 4.算术逻辑部件 3:单片机上电复位后,PC的内容和S ...
  • 汽车总线系统通信协议分析与比较
    河南机电高等专科学校 <汽车单片机与局域网技术> 大作业 专业班级: 姓 名: 学 号: 成 绩: 指导老师: 2013年4月16日 汽车总线系统通信协议分析与比较 摘要:本文主要针对汽车总线系统通讯协议,探讨汽车总线通讯协议的 ...
  • 单片机名词解释
    单片机名词解释 总线: 指能为多个部件服务的信息传送线,在微机系统中各个部件通过总线相互通信. 地址总线: 它是传送由CPU发出的用于选择要访问的器件或部件的地址. 数据总线: 它是用来传送微型机系统内的各种类型的数据. 汇编: 是能完成一 ...