51单片机向PC端发送字符

51单片机向PC端发送字符

说明

打开串口,任意向单片机发送一字符,单片机向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"

#endif
  • 3
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值