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

📄 5_4_5.c

📁 单片机学习的例程.rar 学习单片机要从最基本的学起。对于初学者来说很适合的单片机C程序
💻 C
字号:
//串口接收(中断)和发送例程,可以用来测试51单片机的中断接收和查询发送。 

#include <reg51.h>
#include <string.h>
#define length 4 				//数据长度

unsigned char inbuf[length];
unsigned char checksum,counter;
bit flag = 0;					//取数标记

main()
{ 
	init_serial(); 				//串行口初始化
	while (1)
	{
		if (flag!=0) 				//如果取数标志已置位,就将读到的数从串口发出
		{
		flag= 0; 					//取数标志清0
		send_string(inbuf,length);	//向串口发送字符串
		}
	}
}

/* 串行口初始化 */
void init_serial( void )	
{ 
	SCON = 0x50; 				//串行工作方式1, 8位异步通信方式
	TMOD |= 0x20; 				//定时器1, 方式 2, 8位自动重装
	PCON |= 0x80; 				//SMOD=1,表示波特率加倍
	TH1 = 0xF4;					//波特率:4800 fosc=11.0592MHz
	IE |= 0x90; 				//允许串行中断
	TR1 = 1; 					// 启动定时器1
} 

/* 向串口发送一个字符 */
void send_char( unsigned char x)
{ 
	SBUF=x; 
	while (TI== 0 ); 
	TI= 0; 
} 

/* 向串口发送一个字符串,string_length为该字符串长度 */
void send_string( unsigned char *s, unsigned int string_length)
{ 
	unsigned int i= 0;
	do
	{
		send_char(*(s + i));		//向串口发送一个字符
		i++;
	}
	while ( i<string_length);
} 

/* 串口接收中断函数 */
void serial () interrupt 4 using 3
{
	if (RI)
	{
		unsigned char x;
		RI = 0;
		x=SBUF;				//接收字符
		if ( x> 127 )
		{
			counter= 0;
			inbuf[counter]=x;
			checksum= x- 128;
		}
		else
		{
			counter++;
			inbuf[counter]=x;
			checksum ^= x;
			if ((counter==(length- 1)) && (!checksum))
			{
				flag= 1;		//如果串口接收的数据达到length个,且校验没错,
								//就置位取数标志
			}
		}
	} 
}

⌨️ 快捷键说明

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