这个程序我研究了好久。与我平时编程的思路不一样,但也是说得通的。
那为什么不能进行控制呢?
我调试了好久,经过修改后,现在这个程序是可以进行控制的了,但还是有问题:
第一:我做的试验,总是在第一次(只在第一次)会多发送一个空字符。我也不知道为什么,反复调式没有成功消除它。
第二:正是由于第一次多了一个空字符占位,所以后来的判断比较,不再是开始的“-open-”,变成了“--open”。
程序在我自己的开发板调试的,可能与你的硬件不同,I/O口自己改一下。
另外:你确定你的晶振是11.0592?需要19200那么高的波特率吗?这个不匹配也是不行的。我的板子是12M,所以只能4800,再加倍。
调试串口通讯,软件用的STC-ISP中的串口调试功能。
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar i,j;
sbit led1=P2^0;
uchar sz[6]="";
void init()
{
TMOD=0x20;
// TH1=0xfd;//晶振11.0592MHz,19200波特率
// TL1=0xfd;
TH1=0xf3;//晶振12MHz,4800波特率
TL1=0xf3;
PCON=0X80;//波特率加倍
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
TR1=1;
}
void main()
{
init();
j=0;
while(1); //循环
}
void CK() interrupt 4
{
RI=0;
sz[j]=SBUF;
j++;
if(j==6)
{
j=0;
if(sz[0]=='-') {
if(sz[1]=='-') {
if(sz[2]=='o'){
if(sz[3]=='p'){
if(sz[4]=='e'){
if(sz[5]=='n'){
led1=~led1;
}
}
}
}
}
}
}
}
|