⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 serial.c

📁 单片机的串口调试 单片机的串口调试 单片机的串口调试 单片机的串口调试
💻 C
字号:
/************************************************************
 * 文件名:   Serial.c                                       *
 * 文件说明: 读端口P0,如果数值改变,则将P0口读到的数送     *
 *           PC机显示。                                     *
 ************************************************************/

#include "REG51.h"

unsigned char data PreValue;		// 存放读P0口的先前值
unsigned char data ChangeFlag=0;	// P0口数据改变标志

/************************************************************
 * 函数原型: void Init_Serial(void)                         *
 * 函数描述: 初始化串口,晶振为11.0592MHz,波特率为19200bps *
 ************************************************************/
void Init_Serial(void)
{
	SCON = 0x50;				// 串口工作方式1
	TMOD = (TMOD&0x0F)|0x20;	// 选择定时器1方式2
	PCON = 0x80;					// 波特率倍增
	TH1 = 0xFD;					// 计数初值, 19200bps
	TR1 = 1;					// 启动定时器1
	ES = 0;
}

/***********************************************************
 * 函数原型: void Init_Time0(void)                         *
 * 函数描述: 初始化定时器0,定时到就读P0口,如果读到的数   *
 *           与上一次的不同,设置标志位                    *
 ***********************************************************/
void Init_Time0(void)
{
	TMOD = (TMOD&0xF0)|0x01;		// 定时器0工作方式1
	TH0 = 0x0;						// 装计数初值
	TL0 = 0x0;
	TR0 = 1;						// 启动定时器0
	ET0 = 1;						// 开定时器0中断
	EA = 1;							// 开总中断
}

//--------------------------------------------------------//
//---------------          主程序          ---------------//
//--------------------------------------------------------//
void main(void)
{
	Init_Serial();
	Init_Time0();
	while(1)
	{
		if(ChangeFlag==0x01)
		{
			SBUF = PreValue;		// 将P0口的值送PC显示
			while(TI == 0);
			TI = 0;
			ChangeFlag = 0;
		}
	}
}

/****************************************************
 * 函数原型: void Time0_isr() interrupt 1           *
 * 函数描述: 定时器0中断服务程序,读端口P0,然后    *
 *           与先前值比较,若不等则置标志位         *
 ****************************************************/
void Time0_isr() interrupt 1
{
	unsigned char Temp;
	TH0 = 0x0;
	TL0 = 0x0;
	P0 = P0|0xFF;
	Temp = P0;
	if(Temp != PreValue)
	{
		PreValue = Temp;
		ChangeFlag = 0x01;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -