小弟的要求很简单,就是通过串口助手发送命令控制不同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 ,你注释里面都写了的