|
這個(gè)程序我研究了好久。與我平時(shí)編程的思路不一樣,但也是說得通的。
那為什么不能進(jìn)行控制呢?
我調(diào)試了好久,經(jīng)過修改后,現(xiàn)在這個(gè)程序是可以進(jìn)行控制的了,但還是有問題:
第一:我做的試驗(yàn),總是在第一次(只在第一次)會多發(fā)送一個(gè)空字符。我也不知道為什么,反復(fù)調(diào)式?jīng)]有成功消除它。
第二:正是由于第一次多了一個(gè)空字符占位,所以后來的判斷比較,不再是開始的“-open-”,變成了“--open”。
程序在我自己的開發(fā)板調(diào)試的,可能與你的硬件不同,I/O口自己改一下。
另外:你確定你的晶振是11.0592?需要19200那么高的波特率嗎?這個(gè)不匹配也是不行的。我的板子是12M,所以只能4800,再加倍。
調(diào)試串口通訊,軟件用的STC-ISP中的串口調(diào)試功能。
1.jpg (37.73 KB, 下載次數(shù): 64)
下載附件
2017-10-27 12:48 上傳
#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); //循環(huán)
}
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;
}
}
}
}
}
}
}
}
|
|