根据提供的文件信息,本文将详细解析“51单片机串口调试程序(C语言)”中的关键技术点及其工作原理。此程序主要围绕51系列单片机的串口通信功能进行编写,采用C语言实现,特别关注了串口中断处理机制。 ### 一、程序结构与配置 #### 1. 宏定义 程序开始通过宏定义设置串口的工作模式。其中,`#define INTERSENDSTR` 宏用于指定串口采用中断方式发送数据,这是为了提高系统的响应速度和效率。 ```c #define INTERSENDSTR ``` 此外,程序还定义了一个用于兼容8032芯片的宏,虽然在实际代码中并未启用,但展示了程序的可扩展性。 ```c //#define CHIP_8032 ``` #### 2. 头文件包含 程序中包含了多个头文件来支持其功能: - `#include <absacc.h>`:提供了对特殊寄存器的访问。 - `#include <reg51.h>`:定义了51单片机的寄存器。 - `#include <string.h>`:提供了字符串操作函数。 - `#include "err.h"`:自定义错误处理头文件,用于返回错误状态码。 ### 二、变量定义 #### 1. 缓冲区定义 程序定义了两个缓冲区,用于存储发送和接收的数据: - `unsigned char xdatas SendComBuf[256], sRecComBuf[256];`:定义了两个大小为256字节的缓冲区,分别用于存放发送和接收的数据。 - `unsigned char data bOut, bIn, bSout, bSin;`:四个数据类型为`unsigned char`的变量,用于跟踪缓冲区中的数据位置。 #### 2. 发送数据处理 对于非中断发送方式,程序定义了一个宏`#define DEFSENDCHAR`,用于发送一个字符并等待发送完成。 ```c #define DEFSENDCHAR TI=0; SBUF=ACC; while(!TI); TI=0; ``` ### 三、串口配置 #### 1. 设置波特率 `PSetBps` 函数用于设置串口的波特率,支持两种不同的单片机(8032和标准51)。 - 对于8032芯片,程序计算出定时器2的预设值,并设置定时器2的相关寄存器。 - 对于标准51芯片,则计算出定时器1的初值,并设置定时器1的相关寄存器。 #### 2. 发送与接收字符 - `PSendChar` 函数用于发送一个字符。它根据是否使用中断方式来选择不同的实现方法。 - `PGetChar` 函数用于接收一个字符。同样地,其实现方式取决于是否使用了中断方式。 - `PCharInCom` 函数用于检查是否有字符已准备好接收。 #### 3. 发送字符串和数组 - `PSendString` 函数用于发送字符串。 - `PSendArray` 函数用于发送数组。 ### 四、中断处理 当使用中断方式时,程序定义了一个中断服务子程序 `PSerialInt`,用于处理串口的发送和接收操作。 - 当`RI`标志被置位时,表示接收缓冲区有数据,此时读取接收的数据并更新接收指针。 - 当`TI`标志被置位时,表示数据发送完成,此时更新发送指针,并判断是否继续发送数据。 ### 五、总结 本文介绍了51单片机串口调试程序的关键技术点,包括宏定义、变量定义、串口配置、数据发送接收以及中断处理等方面的内容。通过这些知识点的学习,可以更好地理解如何在51单片机上实现串口通信的功能。






























文章来源:不详 点击数: 更新时间:2008-5-5 【字体:小 大】
(欢迎光临中国IEEE,希望本文能对您有所帮助http://www.cnieee.com)
/*定义为中断方式串口处理*/
#define INTERSENDSTR
/*不为8032系列芯片 */
//#define CHIP_8032
#include <absacc.h>
#include <reg51.h>
#include <string.h>
#include "err.h"
#ifdef INTERSENDSTR
unsigned char xdata sSendComBuf[256],sRecComBuf[256];
unsigned char data bOut,bIn,bSout,bSin;
#else
#define DEFSENDCHAR TI=0;SBUF=ACC;while(!TI);TI=0;
#endif
//bps设置 9600就是 PSetBps(96)(11.0592Mhz)
unsigned char PSetBps(unsigned int bps) SMALL
{
unsigned int t1;
unsigned char t2;
#ifdef INTERSENDSTR
/*如果使用中断方式发送数据,必须等待发送数据完毕才能更换波特率 */
while(bSin!=bSout)
;
}
ES=0;
#endif
#ifdef CHIP_8032
if(3456%bps)
{
return ERR_SET_BPS;
}
t1=3456/bps;
t1--;t1=~t1;
RCAP2H=t1/256;RCAP2L=t1;
T2MOD=0x00;
/*使用定时器2做波特率发生器 */
T2CON=0x34;/*TF2=0;EXF2=0;RCLK=1;TCLK=1;EXEN2=0;TR2=1;C/T2=0;CP/RL2=0
*/
#else
t1=576/bps;
if((576%bps)||((t1==0))||(t1>=2*256))
{
return ERR_SET_BPS;
}
if(t1>256)
{
PCON=00;
t2=256-(288/bps);
}
else
剩余5页未读,继续阅读


- 粉丝: 0
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 小米企业网站推广方案.ppt
- 不合格不符合信息汇总表.doc
- 材料管理手册.docx
- 护岸工程栅栏板预制施工技术.docx
- 【精华】小学作文三篇.doc
- 沉浸式漫游学习系统在计算机教学改革中的应用.docx
- 第二章-水体特性及水体中的物质循环.ppt
- 公路隧道施工技术规范监控量测.doc
- 微型计算机基本结构.ppt
- 【EHS流程图】项目安全环保部部门工作流程(38页).docx
- 住宅小区工程质量、安全文明管理汇报讲义(多图).ppt
- Asp研发设计方案(-源码-答辩PPT-开题研究报告-中期检查研究报告-任务书-文献资料).doc
- 玻璃钢管道安装方案.doc
- 计算机技术在档案管理中的应用研究.docx
- 知名房企工程项目成本管控分析.docx
- 房地产开发公司万里小区号住宅楼施工组织设计.doc


