当前位置: 代码迷 >> 单片机 >> 串口控制LED,该怎么解决
  详细解决方案

串口控制LED,该怎么解决

热度:97   发布时间:2016-04-28 16:10:13.0
串口控制LED
小弟的要求很简单,就是通过串口助手发送命令控制不同LED的闪烁,比如发送 LED0亮,发送LED0灭,发送3,LED0闪烁。自己写了个小代码,不过没有反应
C/C++ code
#include<reg52.h>#define uchar unsigned char#define uint  unsigned int uchar LED_Buffer[2] = {0};      //从串口接收的数据/********************************************************************* 名称 : Delay_1ms()* 功能 : 延时子程序,延时时间为 1ms * x* 输入 : x (延时一毫秒的个数)* 输出 : 无***********************************************************************/void Delay_1ms(uint i)//1ms延时{    uchar x,j;    for(j=0;j<i;j++)    for(x=0;x<=148;x++);    }/********************************************************************* 名称 : Com_Int()* 功能 : 串口中断子函数* 输入 : 无* 输出 : 无***********************************************************************/void Com_Int(void) interrupt 4{    static uchar i = 0;        EA = 0;    if(RI == 1)   //当硬件接收到一个数据时,RI会置位    {        LED_Buffer[i] = SBUF ; //这里减去48是因为从电脑中发送过来的数据是ASCII码。        RI = 0;          if(i==1) i = 0;          i++;            }    EA = 1;}/********************************************************************* 名称 : Com_Init()* 功能 : 串口初始化,晶振11.0592,波特率9600,使能了串口中断* 输入 : 无* 输出 : 无***********************************************************************/void Com_Init(void){     TMOD = 0x20;     PCON = 0x00;     SCON = 0x50;                 TH1 = 0xFd;    //设置波特率 9600     TL1 = 0xFd;     TR1 = 1;        //启动定时器1     ES = 1;        //开串口中断     EA = 1;        //开总中断        }void Main(){//    uchar i = 0;    Delay_1ms(100);    Com_Init();    P2 = 0xff;  //这里把P2口的最高为置1,进入循环后 循环左移 一位正好是P2 最低为置1    while(1)    {        if(LED_Buffer[0]==0x30)   P2=0x00; //我想从串口发送的是16进制吧,0X30=1        else if(LED_Buffer[1]==0x31)  P2=0xff;    }}                           


感觉不管发送什么,LED都没反应啊

------解决方案--------------------
到处是广告
------解决方案--------------------
串口设置的问题
------解决方案--------------------
你先实现不通信状况下的LED流水灯,在来考虑这个,感觉你中断接收后的处理过程的问题吧,没注意看。
------解决方案--------------------
你没有减去48 ,你注释里面都写了的
  相关解决方案