找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1549|回复: 2
打印 上一主题 下一主题
收起左侧

51单片机向PC端发送字符程序

[复制链接]
跳转到指定楼层
楼主
本帖最后由 KeepYn 于 2021-6-27 13:24 编辑

## 说明
打开串口,任意向单片机发送一字符,单片机向PC端返回一段字符“HELLO”,每发送一次便返回一次。以下直接放代码,有什么地方错误欢迎大家指出讨论,一起进步。
### 程序部分
老样子,还是基于模块化
以下是主程序

#include "init.h"               //自定义的头文件,此头文件以包erg51.h头文件,因此不用在此声明

uchar code array[]="HELLO";     //定义一个数组用来储存发送的数据

void main()                     //主程序
{
        init();                     //初始化此函数
        while(1)//主循环
        {
                if(a == 1)              //主循环中检测a是否等于1
                {
                        ES = 0;             //当a等于1时,关闭串口中断
                        for(c=0;c<5;c++)    //通过5次循环将数组中的字符写入串口中
                        {
                                SBUF = array[c];
                                while(!TI);     //TI为发送中断标志位(相应中断后硬件置1)判断是否相应中断
                                TI = 0;         //相应中断后手动清零(否则会一直向主机申请中断)
                        }
                        SBUF = b;           //将b的字符写给串口
                        while(!TI);         //等待是否发送完毕
                        TI = 0;             //
                        ES = 1;             //允许串口中断
                        a = 0;              //将a清零,以便主程序下次判断串口是否发送数据
                }
        }
}



#include "init.h"

void init()    //配置定时器,串口
{
        TMOD = 0x20;//定时器/计数器工作方式寄存器(高4位配置T1,低4位反之)T1定时器工作方式2
        TH1  = 0xfd;//T1定时器装初值(9600bsp、晶振11.0592对应初值0XFD/SMOD=0情况下)
        TL1  = 0xfd;//T1定时器装初值
        TR1  = 1;   //T1定时器运行控制位(运行T1定时器运行)
        REN  = 1;   //串行接收位(允许串口接收数据)
        SM0  = 0;   //SM0、SM1配置串口工作方式
        SM1  = 1;   //串口工作方式1
        EA   = 1;   //打开总中断
        ES   = 1;   //串口中断允许位 (打开串口中断)
}

//#include "init.h"对应H文件

#ifndef __INIT_H__
#define __INIT_H__

#include <reg51.h>   //51单片机头文件


typedef unsigned int uint;    //给unsigned int定义新名字为uint
typedef unsigned char uchar;  //同上

extern uchar a,b,c;           //声明a、b、c数据类型 (无符号字符型)

extern void init(void);       //外部可调用此函数

#endif



#include "ser.h"

void UART_Routine(void) interrupt 4
{
        RI = 0;   //接收中断标志位,接收数据后必须手动清零
        b  = SBUF;//将串口中的字符写给b
        a  = 1;   //串口中断发送时将a置1,给主程序判断用
}

#include "ser.h" 对应H文件

#ifndef __SER_H__
#define __SER_H__

#include "init.h"

#endi

串口返回.jpg (225.27 KB, 下载次数: 61)

串口返回.jpg

模块化 串口向PC端返回字符.rar

22.88 KB, 下载次数: 8, 下载积分: 黑币 -5

评分

参与人数 1黑币 +30 收起 理由
admin + 30 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:889490 发表于 2021-6-26 10:35 | 只看该作者
没有图片啥的吗?
回复

使用道具 举报

板凳
ID:903848 发表于 2021-6-27 13:25 | 只看该作者

有的,上传了

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表