单片机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;
} 
相关推荐
tadus_zeng1 小时前
stm8s单片机(二)外部中断实验
单片机·嵌入式硬件
池央1 小时前
C语言数组详解:从基础到进阶的全面解析
c语言
大专生学编程1 小时前
基于ESP32-IDF驱动GPIO输出控制LED
嵌入式硬件·esp32·esp-idf
2401_843785232 小时前
C语言 指针_野指针 指针运算
c语言·开发语言
7yewh3 小时前
嵌入式知识点总结 ARM体系与架构 专题提升(四)-编程
arm开发·stm32·单片机·嵌入式硬件·mcu·物联网·51单片机
涅槃寂雨4 小时前
C语言小任务——寻找水仙花数
c语言·数据结构·算法
『往事』&白驹过隙;4 小时前
操作系统(Linux Kernel 0.11&Linux Kernel 0.12)解读整理——内核初始化(main & init)之缓冲区的管理
linux·c语言·数据结构·物联网·操作系统
就爱学编程4 小时前
从C语言看数据结构和算法:复杂度决定性能
c语言·数据结构·算法
涛ing4 小时前
23. C语言 文件操作详解
java·linux·c语言·开发语言·c++·vscode·vim
半桔4 小时前
栈和队列(C语言)
c语言·开发语言·数据结构·c++·git