2条回答 默认 最新
- Defy Gravity 2021-06-01 20:12关注
#include <reg52.h>
#include "uart.h"
#include <string.h>#define u8 unsigned char
#define u16 unsigned inttypedef struct uart
{
u8 RX_BUFF[30];
u8 TX_BUFF[20];
u16 RX_COUNT;
u8 RX_OKFlag;
};struct uart Uart = {0};
void UART_Configure(u16 BaudRate);
void UART_SendByte(u8 dat);
void UART_SendStr(u8* str);void main(void)
{
UART_Configure(9600);
while(1)
{}
}void UART_Configure(u16 BaudRate)
{
u8 TH1_Dat;switch(BaudRate)
{
case 1200: TH1_Dat=0xF8; break;
case 2400: TH1_Dat=0xF4; break;
case 4800: TH1_Dat=0xFA; break;
case 9600: TH1_Dat=0xFD; break;
case 14400: TH1_Dat=0xFE; break;
}
TMOD &= 0X0F;
TMOD |= 0X20;SM0 = 0;
SM1 = 1;REN = 1;
TH1 = TH1_Dat;
TL1 = TH1;PCON |= 0X00;
EA = 1;
ES = 1;
TR1 = 1;
}void UART_SendByte(u8 dat)
{
SBUF=dat;
while(!TI);
TI=0;
}void UART_SendStr(u8* str)
{
while(1)
{
if (*str=='\0') break;
SBUF=*str++;
while(!TI);
TI=0;
}
}void UART_IRQHandler(void) interrupt 4
{
char xbuff[20];
if(RI==1)
{
RI=0;
Uart.RX_BUFF[Uart.RX_COUNT++]=SBUF;
if(Uart.RX_BUFF[Uart.RX_COUNT-1]=='/')
{
strcpy(xbuff,Uart.RX_BUFF);
if(strcmp(xbuff,"开灯/")== 0)
{
P1=0x00;
UART_SendStr("LEN_ON \r\n");
}
if(strcmp(xbuff,"关灯/")== 0)
{
P1=0xFF;
UART_SendStr("LEN_OFF \r\n");
}Uart.RX_COUNT=0;
Uart.RX_OKFlag=0;
Uart.RX_COUNT=0;}
}
}解决 无用评论 打赏 举报
悬赏问题
- ¥15 Altair EDEM中生成一个颗粒,并且各个方向没有初始速度
- ¥15 系统2008r2 装机配置推荐一下
- ¥500 服务器搭建cisco AnyConnect vpn
- ¥15 用大厂网站防红自己网站
- ¥15 悬赏Python-playwright部署在centos7上
- ¥15 psoc creator软件有没有人能远程安装啊
- ¥15 快速扫描算法求解Eikonal方程咨询
- ¥20 我的是道格手机,重置后屏幕右上角出现红色字的未写入tee key 和未写入google key请问怎么去掉啊
- ¥15 校内二手商品转让网站
- ¥20 高德地图聚合图层MarkerCluster聚合多个点,但是ClusterData只有其中部分数据,原因应该是有经纬度重合的地方点,现在我想让ClusterData显示所有点的信息,如何实现?