单片机C语言实例:23、串口通讯

一、轮询发送

程序实例1:

cpp 复制代码
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义                        
#include"delay.h"
/*------------------------------------------------
                   函数声明
------------------------------------------------*/
void SendStr(unsigned char *s);
/*------------------------------------------------
                    串口初始化
------------------------------------------------*/
void InitUART  (void)
{

    SCON  = 0x50;		        // SCON: 模式 1, 8-bit UART, 使能接收  
    TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit 重装
    TH1   = 0xFD;               // TH1:  重装值 9600 波特率 晶振 11.0592MHz  
    TR1   = 1;                  // TR1:  timer 1 打开                         
    EA    = 1;                  //打开总中断
    //ES    = 1;                  //打开串口中断
}                            
/*------------------------------------------------
                    主函数
------------------------------------------------*/
void main (void)
{

	InitUART();

    while (1)                       
    {
		SendStr("UART test!");
		DelayMs(240);//延时循环发送
		DelayMs(240);
    }
}

/*------------------------------------------------
                    发送一个字节
------------------------------------------------*/
void SendByte(unsigned char dat)
{
	SBUF = dat;
	while(!TI);
		TI = 0;
}
/*------------------------------------------------
                    发送一个字符串
------------------------------------------------*/
void SendStr(unsigned char *s)
{
	while(*s!='\0')// \0 表示字符串结束标志,
                //通过检测是否字符串末尾
	{
		SendByte(*s);
		s++;
	}
}

二、中断收发

程序实例2:

cpp 复制代码
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义                        

/*------------------------------------------------
                   函数声明
------------------------------------------------*/
void SendStr(unsigned char *s);

/*------------------------------------------------
                    串口初始化
------------------------------------------------*/
void InitUART  (void)
{

    SCON  = 0x50;		        // SCON: 模式 1, 8-bit UART, 使能接收  
    TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit 重装
    TH1   = 0xFD;               // TH1:  重装值 9600 波特率 晶振 11.0592MHz  
    TR1   = 1;                  // TR1:  timer 1 打开                         
    EA    = 1;                  //打开总中断
   // ES    = 1;                  //打开串口中断
} 

                           
/*------------------------------------------------
                    主函数
------------------------------------------------*/
void main (void)
{

	InitUART();

	SendStr("UART test!");

	ES    = 1;                  //打开串口中断
	while (1)                       
    {
    
    }
}

/*------------------------------------------------
                    发送一个字节
------------------------------------------------*/
void SendByte(unsigned char dat)
{
	SBUF = dat;
	while(!TI);
		TI = 0;
}

/*------------------------------------------------
                    发送一个字符串
------------------------------------------------*/
void SendStr(unsigned char *s)
{
	while(*s!='\0')// \0 表示字符串结束标志,通过检测是否字符串末尾
	{
		SendByte(*s);
		s++;
	}
}

/*------------------------------------------------
                     串口中断程序
------------------------------------------------*/
void UART_SER (void) interrupt 4 //串行中断服务程序
{
    unsigned char Temp;          //定义临时变量 
   
	if(RI)                        //判断是接收中断产生
    {
		RI=0;                      //标志位清零
		Temp=SBUF;                 //读入缓冲区的值
		P1=Temp;                   //把值输出到P1口,用于观察
		SBUF=Temp;                 //把接收到的值再发回电脑端
	}
	if(TI)                        //如果是发送标志位,清零
		TI=0;
} 
相关推荐
Asa3193 分钟前
STM32-按键扫描配置
stm32·单片机·嵌入式硬件
南城花随雪。22 分钟前
单片机:实现驱动超声波(附带源码)
单片机·嵌入式硬件
嵌入式科普22 分钟前
十三、从0开始卷出一个新项目之瑞萨RZN2L串口DMA接收不定长
c语言·stm32·瑞萨·e2studio·rzn2l
小林熬夜学编程2 小时前
【Linux网络编程】第十四弹---构建功能丰富的HTTP服务器:从状态码处理到服务函数扩展
linux·运维·服务器·c语言·网络·c++·http
Jackey_Song_Odd2 小时前
C语言 单向链表反转问题
c语言·数据结构·算法·链表
A懿轩A3 小时前
C/C++ 数据结构与算法【数组】 数组详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·数组
半盏茶香3 小时前
在21世纪的我用C语言探寻世界本质 ——编译和链接(编译环境和运行环境)
c语言·开发语言·c++·算法
字节高级特工4 小时前
【C++】深入剖析默认成员函数3:拷贝构造函数
c语言·c++
计算机学长大白5 小时前
C中设计不允许继承的类的实现方法是什么?
c语言·开发语言
yutian06069 小时前
Keil MDK下载程序后MCU自动重启设置
单片机·嵌入式硬件·keil