电脑通过串口控制LED

一.串口与中断系统相结合

 通过接受数据然后进入中断系统,再对数据进行处理,处理完可以以LED形式表现出来。

二.相关代码

1.UART.c

#include <REGX52.H>

/**
  * @brief  串口初始化,4800bps@12.000MHz 波特率计算
  * @param  无
  * @retval 无
  */
void UART_Init()
{	
	//stc软件波特率计算自带代码
	SCON=0x50;		//0101 0000
	PCON |= 0x80;
	TMOD &= 0x0F;		//设置定时器模式
	TMOD |= 0x20;		//设置定时器模式
	TL1 = 0xF3;		//设定定时初值
	TH1 = 0xF3;		//设定定时器重装值
	ET1 = 0;		//禁止定时器1中断
	TR1 = 1;		//启动定时器1
	EA=1;			//串口中断开关闭合 发生中断后再处理数据
	ES=1;			//串口中断开关闭合 发生中断后再处理数据
}

/**
  * @brief  串口发送一个字节数据
  * @param  Byte 要发送的一个字节数据
  * @retval 无
  */
void UART_SendByte(unsigned char Byte)
{
	SBUF=Byte;		//SUBF在等号左边为发送信号
	while(TI==0);		//判断是否不断发送 等于0会一直循环 等于1会跳出循环
	TI=0;			//跳出循环后TI等于0 即得用软件进行复位
}

2.main.c

#include <REGX52.H>
#include "Delay.h"
#include <REGX52.H>
#include "Delay.h"
#include "UART.h"

void main()
{
	UART_Init();		//串口初始化
	while(1)
	{
		
	}
}

void UART_Routine() interrupt 4
{
	if(RI==1)					//如果接收标志位为1,接收到了数据
	{
		P2=~SBUF;				//读取数据,取反后输出到LED
		UART_SendByte(SBUF);	//将受到的数据发回串口
		RI=0;					//接收标志位清0
	}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现单片机串口控制LED闪烁,需要按照以下步骤进行: 1. 首先,需要在单片机上连接一个LED,将其设置为输出模式。 2. 然后,需要在单片机上配置串口,包括波特率、数据位、停止位等参数。 3. 在单片机程序中,需要编写一个串口接收函数,用于接收从电脑端发送的控制指令。 4. 接收到指令后,单片机可以根据指令控制LED的状态,比如控制LED闪烁。 下面是一个基于51单片机串口控制LED闪烁的示例代码: ```c #include <reg51.h> #define LED P1 #define FREQ_OSC 12000000UL #define BAUD_RATE 9600 void init_serial() { SCON = 0x50; //8位数据,可变波特率 TMOD &= 0x0F; //清零波特率高位 TH1 = TL1 = FREQ_OSC / (BAUD_RATE * 12UL); //设定波特率 TR1 = 1; //启动波特率发生器 ES = 1; //开启串口中断 EA = 1; //开启全局中断 } void send_serial(char ch) { SBUF = ch; //发送一个字符 while (!TI); //等待发送完成 TI = 0; //清除发送标志位 } void main() { unsigned char cmd; init_serial(); while (1) { if (cmd = getchar()) { if (cmd == '1') { LED = 0xFF; //LED亮 } else if (cmd == '0') { LED = 0x00; //LED灭 } else if (cmd == '2') { //LED闪烁 LED = 0xFF; delay(500); LED = 0x00; delay(500); } } } } void serial_isr() interrupt 4 { if (RI) { RI = 0; //清除接收标志位 send_serial(SBUF); //回显接收到的字符 } } ``` 在上面的代码中,我们先定义了LED连接的IO口为P1,串口波特率为9600。然后,我们编写了一个初始化串口的函数init_serial(),一个发送字符的函数send_serial(),以及一个主函数main()。 在主函数中,我们通过调用getchar()函数来接收从电脑端发送的控制指令,然后根据指令控制LED的状态。如果接收到字符'1',则LED亮;如果接收到字符'0',则LED灭;如果接收到字符'2',则LED闪烁。 最后,我们还编写了一个串口中断服务函数serial_isr(),用于接收从电脑端发送的控制指令,并将其回显到电脑端。其中,当RI(接收标志位)置位时,表示收到了一个字符,我们可以通过SBUF(串口缓冲寄存器)来获取它。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值