這個程序我研究了好久。與我平時編程的思路不一樣,但也是說得通的。
那為什么不能進行控制呢?
我調試了好久,經過修改后,現在這個程序是可以進行控制的了,但還是有問題:
第一:我做的試驗,總是在第一次(只在第一次)會多發送一個空字符。我也不知道為什么,反復調式沒有成功消除它。
第二:正是由于第一次多了一個空字符占位,所以后來的判斷比較,不再是開始的“-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;
}
}
}
}
}
}
}
}
|