STM32对照51单片机控制LED

通过51单片机的4G模组来实现

直接上干货

#include "reg52.h"

#include "intrins.h"

#include <string.h>

 

 

#define SIZE 12

sfr AUXR = 0x8E;

sbit D5 = P3^7;

char cmd[SIZE];

 

void UartInit(void) //9600bps@11.0592MHz

{

 AUXR = 0x01;

 SCON = 0x50; //配置串口工作方式1,REN使能接收

 TMOD &= 0x0F;

 TMOD |= 0x20;//定时器1工作方式位8位自动重装

 

 TH1 = 0xFD;

 TL1 = 0xFD;//9600波特率的初值

 TR1 = 1;//启动定时器

 

 EA = 1;//开启总中断

 ES = 1;//开启串口中断

}

 

void Delay1000ms() //@11.0592MHz

{

 unsigned char i, j, k;

 

 _nop_();

 i = 8;

 j = 1;

 k = 243;

 do

 {

  do

  {

   while (--k);

  } while (--j);

 } while (--i);

}

 

void sendByte(char data_msg)

{

 SBUF = data_msg;

 while(!TI);

 TI = 0;

}

 

void sendString(char* str)

{

 while( *str != '\0'){

  sendByte(*str);

  str++;

 }

}

 

void main()

{

 

 D5 = 1;

 //配置C51串口的通信方式

 UartInit();

 

 while(1){

  Delay1000ms();

  //往发送缓冲区写入数据,就完成数据的发送

  //sendString("chenlichen shuai\r\n");

 }

}

 

void Uart_Handler() interrupt 4

{

 static int i = 0;//静态变量,被初始化一次

 char tmp;

 

 if(RI)//中断处理函数中,对于接收中断的响应

 {

   RI = 0;//清除接收中断标志位

   tmp = SBUF;

   if(tmp == ':'){

    i = 0;

   }

   cmd[i++] = tmp;

   

   if(cmd[0]== ':' && cmd[1] == 'o' && cmd[2]=='p'){

    D5 = 0;//点亮D5

    i = 0;

    memset(cmd,'\0',SIZE);

   }

   if(cmd[0]== ':' && cmd[1] == 'c' && cmd[2]=='l'){

    D5 = 1;//熄灭D5

    i = 0;

    memset(cmd,'\0',SIZE);

   }

   

   if(i == 12) i = 0;

 }

  

 if(TI);

}

 

  • 21
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值