STC51串口

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
知识点:使用STC-ISP工具中的【串口波特率计算器】可以快速生成要使用的串口代码:
在这里插入图片描述

例1:IAP15W4K61S4中的串口1向电脑串口助手发送16进制数据,按键key1按一下发送0x66,按键key2按一下发送0x33:

#include <stc15.h>
#include "delay.h"

void Uart1_Init(void)	//115200bps@22.1184MHz
{
	SCON = 0x50;		//8位数据,可变波特率
	AUXR |= 0x40;		//定时器时钟1T模式
	AUXR &= 0xFE;		//串口1选择定时器1为波特率发生器
	TMOD &= 0x0F;		//设置定时器模式
	TL1 = 0xD0;			//设置定时初始值
	TH1 = 0xFF;			//设置定时初始值
	ET1 = 0;			//禁止定时器中断
	TR1 = 1;			//定时器1开始计时
	ES = 1;				//使能串口1中断
}

void uart1_send_byte(unsigned char byte){
    SBUF = byte;
    while(TI==0);
    TI = 0;		//清除串口1发送中断请求位
}

void main(){
    Uart1_Init();
    while(1){
        //板载按键key1按一下
        if(P32==0){
            Delay_ms(20);
            while(P32==0);
            uart1_send_byte(0x66);
        }
        //板载按键key2按一下
        if(P33==0){
            Delay_ms(20);
            while(P33==0);
            uart1_send_byte(0x33);
        }
    }
}

例2:IAP15W4K61S4中的串口1向电脑串口助手发送16进制数据,按键key1按一下发送发送的数据增加0x01,按键key2按一下发送的数据减少0x01:

#include <stc15.h>
#include "delay.h"

void Uart1_Init(void)	//115200bps@22.1184MHz
{
	SCON = 0x50;		//8位数据,可变波特率
	AUXR |= 0x40;		//定时器时钟1T模式
	AUXR &= 0xFE;		//串口1选择定时器1为波特率发生器
	TMOD &= 0x0F;		//设置定时器模式
	TL1 = 0xD0;			//设置定时初始值
	TH1 = 0xFF;			//设置定时初始值
	ET1 = 0;			//禁止定时器中断
	TR1 = 1;			//定时器1开始计时
	ES = 1;				//使能串口1中断
}

void uart1_send_byte(unsigned char byte){
    SBUF = byte;
    while(TI==0);
    TI = 0;		//清除串口1发送中断请求位
}

unsigned char send_data = 0;

void main(){
    Uart1_Init();
    while(1){
        //板载按键key1按一下
        if(P32==0){
            Delay_ms(20);
            while(P32==0);
            send_data += 0x01;
            uart1_send_byte(send_data);
        }
        //板载按键key2按一下
        if(P33==0){
            Delay_ms(20);
            while(P33==0);
            send_data -= 0x01;
            uart1_send_byte(send_data);
        }
    }
}

在STC-ISP工具中的【串口波特率计算器】中也可以打开串口中断,生成对应代码使用:
在这里插入图片描述

例3:IAP15W4K61S4中的串口1接收来自电脑串口助手发送的16进制数据,如果接收到的是0,则点亮板载led灯,接收到的是1,就熄灭板载led灯:

#include <stc15.h>
#include "delay.h"

unsigned char send_data = 1;

//串口中断
void Uart1_Isr(void) interrupt 4
{
	if (TI)				//检测串口1发送中断
	{
		TI = 0;			//清除串口1发送中断请求位
	}
	if (RI)				//检测串口1接收中断
	{
        if(SBUF==0){
            send_data=0;
        }else if(SBUF==1){
            send_data=1;
        }
		RI = 0;			//清除串口1接收中断请求位
	}
}

void Uart1_Init(void)	//115200bps@22.1184MHz
{
	SCON = 0x50;		//8位数据,可变波特率
	AUXR |= 0x40;		//定时器时钟1T模式
	AUXR &= 0xFE;		//串口1选择定时器1为波特率发生器
	TMOD &= 0x0F;		//设置定时器模式
	TL1 = 0xD0;			//设置定时初始值
	TH1 = 0xFF;			//设置定时初始值
	ET1 = 0;			//禁止定时器中断
	TR1 = 1;			//定时器1开始计时
	ES = 1;				//使能串口1中断
}

//串口发送一个字节
void uart1_send_byte(unsigned char byte){
    SBUF = byte;
    while(TI==0);
    TI = 0;		//清除串口1发送中断请求位
}

void main(){
    Uart1_Init();
    while(1){
        if(send_data==0){
            P53=0;
        }else{
            P53=1;
        }
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木子李2789

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值