单片机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;
} 
相关推荐
C++ 老炮儿的技术栈3 小时前
在C++ 程序中调用被 C编译器编译后的函数,为什么要加 extern “C”声明?
c语言·c++·windows·git·vscode·visual studio
代码游侠6 小时前
学习笔记——时钟系统与定时器
arm开发·笔记·单片机·嵌入式硬件·学习·架构
CQ_YM6 小时前
ARM--SDK、led、beep与链接脚本
c语言·arm开发·嵌入式硬件·嵌入式
xiaobobo33306 小时前
EIDE的最新版本已经默认只支持debug调试STM32单片机了
stm32·单片机·debug·eide
small_planet6 小时前
通过mqtt使用webhook转发消息实现远程查看单片机日志
单片机·运维开发
傻乐u兔8 小时前
C语音初阶————调试实用技巧2
c语言·开发语言
Porco.w8 小时前
STM32之ESP8266
stm32·单片机·嵌入式硬件
梁洪飞9 小时前
noc 片上网络
linux·arm开发·嵌入式硬件·arm
日更嵌入式的打工仔10 小时前
RS-485通讯协议
笔记·嵌入式硬件
蓝桥_吹雪10 小时前
HAL库深入了解--STM32与GPIO
单片机·嵌入式硬件