教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 专业资料 >

PC与51单片机串口通信

来源:网络收集 时间:2026-04-28
导读: PC与51单片机串口通信。包括单片机内运行的程序,及MATLAB调试助手简易程序等! PC与51单片机串口通信 串行通信是计算机和外设进行通讯、对外设进行监控并获取由外设采集到的监测数据的一个非常重要的手段。由于其所用的传输线少,成本低,实现起来方便易行,

PC与51单片机串口通信。包括单片机内运行的程序,及MATLAB调试助手简易程序等!

PC与51单片机串口通信

串行通信是计算机和外设进行通讯、对外设进行监控并获取由外设采集到的监测数据的一个非常重要的手段。由于其所用的传输线少,成本低,实现起来方便易行,因而得到广泛的应用。STC89C52RC有一个可编程的全双工串行通信接口,可以方便的实现PC机与其之间的串行通信。

一、总体方案

系统中采用STC89C52RC/STC89C54RD+单片机作为下位机,PC机为上位机,二者通过CH340将PC的USB口转成RS232的串行口接收或上传数据。单片机部分的程序采用C语言编程,用Keil uVision4编译后产生HEX文件下载到单片机内,从而实现数据收发。PC端采用一个串口调试助手(sscom4.2)或MATLAB GUI实现数据的收发。

二、具体方案

1、简单通信测试程序

本程序为了测试通信方式是否合适,以便于下一步增加程序的内容。

(1)利用STC提供STC-ISP-V4.83软件检查MCU选项

MCU Type is: STC89C54RD+ MCU Firmware Version: 3.2C Chinese:MCU 固件版本号: 3.2C

Double speed / 双倍速: 12T/单倍速 振荡放大器增益: full gain 下次下载时 P1.0/P1.1 与下载无关

内部扩展AUX-RAM: 允许访问(强烈推荐) 下次下载用户应用程序时将数据Flash区擦除: NO 用户软件启动内部看门狗后: 复位关看门狗 ALE pin 仍为 ALE

内部时钟频率:11.061806M 外部时钟频率:11.061806M

(2)串行口初始参数设定

串行口工作方式为方式1(10位异步收发),波特率为9600bps,用定时器1作波特率发生器,选用定时器模式2,其它详见程序及说明。

PC与51单片机串口通信。包括单片机内运行的程序,及MATLAB调试助手简易程序等!

(3)程序功能说明

通过串口调试助手,向单片机发送字符,发送字符的末尾需加“!”,让单片机识别数据接收完毕,返回“Wait command!”字符串。当单片机接收一个字符时,发光二极管端引脚取反一次,所以其亮、灭的状态改变一次。

例如:初始状态为灭。当发送“12!”时,取反三次,发光二极管变亮,返回“Wait command!”字符串(如图(1)所示);当发送“123!”时,取反四次,发光二极管状态不变,但返回“Wait command!”字符串(如图(2)所示)。

图(1)a 图(1)b

图(2)a 图(2)

b

PC与51单片机串口通信。包括单片机内运行的程序,及MATLAB调试助手简易程序等!

(4)单片机内运行的程序

#include <reg51.h>

sbit P1_2=P1^2; //接发光二极管

bit flag; //单片机数据发送标志位 bit flag_inter; //单片机数据接收完标志位 unsigned char a;

void SendData(char dat);//发送字符 void SendString(char *s);//发送字符串

void main() {

SCON=0x50; //串行通信方式1,接收允许 PCON=0x00; //单倍频

TMOD = 0x20; //设置定时器T1为模式2,定时方式 TH1=TL1=0xFD; //波特率为9600,晶振11.0594MHz TR1=1; //定时器T1开始计数 EA=1; //中断允许

ES=1; //串行口中断开放

while(1) { if(flag_inter==1) { flag_inter=0; //标志位清0 SendString("Wait command!\n"); } } }

//串口接收发送中断

void Uart_Isr() interrupt 4 using 1 {

if (RI) {

RI=0; //接收中断标志 a=SBUF;

P1_2=!P1_2; //数据送到P0口 if(a=='!') {

PC与51单片机串口通信。包括单片机内运行的程序,及MATLAB调试助手简易程序等!

flag_inter=1; //数据接收完毕,置1 } } if(TI) {

TI=0; //发送中断标志 flag=0; //标志位清0 } }

//向串口发送字符

void SendData(char dat) {

while(flag); ACC=dat;

flag=1; SBUF=ACC; }

//向串口发送字符串 void SendString(char *s) {

while(*s) {

SendData(*s++); } } //等待数据发送 //标志位置1 //数据装入SBUF //字符串发送完否 //发送字符,并指针指向下一字符

PC与51单片机串口通信。包括单片机内运行的程序,及MATLAB调试助手简易程序等!

2、利用串口调试助手实现串行口数据收发

本程序可以实现PC机与单片机之间数据双向传输、互发

(注:由CH37X451电路板原理图可知CH452数码管驱动及键盘控制芯片为四线接口,CH452_DCLK=P1^7,CH452_DIN=P1^6,CH452_LOAD=P1^5,CH452_DOUT=P3^3。)

(1)利用STC提供STC-ISP-V4.83软件检查MCU选项

MCU Type is: STC89C52RC

MCU Firmware Version: 3.2C Chinese:MCU 固件版本号: 3.2C

Double speed / 双倍速: 12T/单倍速 振荡放大器增益: full gain 下次下载时 P1.0/P1.1 与下载无关

内部扩展AUX-RAM: 允许访问(强烈推荐) 下次下载用户应用程序时将数据Flash区擦除: NO 用户软件启动内部看门狗后: 复位关看门狗 ALE pin 仍为 ALE

内部时钟频率:24.011256M. 外部时钟频率:24.011256M.

(2)串行口初始参数设定

串行口工作方式为方式1(10位异步收发),波特率为4800bps,用定时器1作波特率发生器,选用定时器模式2,其它详见程序及说明。

(3)程序功能说明

通过串口调试助手,向单片机发送字符,发送字符的末尾需加“!”,让单片机识别数据接收完毕。当单片机接收到PC机发来的数据时,先存入数组,当检测到结束标志“!”时,调用显示函数,从左至右,两个LED数码管表示一位字符的ASCII码(注:为了显示出特殊字符,所以用ASCII码表示)。一次最多只能表示四个字符,当超过四个时,延时一段时间,再显示下面的字符。数码管显示结束后,返回“Wait command!”字符串。当按下按键时,将按键对应的键值返回给PC机。

例如:当在串口调试助手中发送“a=1,b=3,b>a!”时,数码管将依次显示对应的十六进制ASCII码如下:61H(a)、3dH(=)、31H(1)、2cH(,)、62H(b)、3dH(=)、33H(3)、2cH(,)、62H(b)、3EH(>)、61H(a)、21H(!),具体见图(3)。当从左至右,从上到下依次按下键盘上的三行按键时,返回键值到PC机,具体见图(4)。

PC与51单片机串口通信。包括单片机内运行的程序,及MATLAB调试助手简易程序等!

图(3)a 图(3)b

图(3)c 图(3)d

图(4)a 图(4)b

PC与51单片机串口通信。包括单片机内运行的程序,及MATLAB调试助手简易程序等!

(4)单片机内运行的程序

主程序如下:

#include <reg51.h> #include <intrins.h>

#include <CH452CMD.h> #include <pin.h>

bit flag; //标志位

bit flag_inter; //P …… 此处隐藏:3138字,全部文档内容请下载后查看。喜欢就下载吧 ……

PC与51单片机串口通信.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/269551.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)