|
#include#include //后面有一個(gè)比較函數(shù)
#define uchar unsigned char
#define uint unsigned int
bit UART_Flag=0; //定義串口接收標(biāo)志位
uchar str[50]; //定義一數(shù)組
uchar length=0; //數(shù)組長(zhǎng)度從0開(kāi)始
void init() //初始化uart
{
TMOD=0X20; //定時(shí)器1定時(shí)器方式 工作模式2,可自動(dòng)重載的8位計(jì)數(shù)器常把定時(shí)/計(jì)數(shù)器1以模式2作為串行口波特率發(fā)生器
SCON=0X50; //選擇工作模式1使能接收,允許發(fā)送,允許接收
EA=1; //開(kāi)總中斷
ES=1; //打開(kāi)串口中斷
ET1=0; //打開(kāi)定時(shí)器中斷
PCON=0X80; //8位自動(dòng)重載,波特率加倍
TH1=0XFF; //用22.1184 mhz波特率
TL1=0XFF;
TR1=1; //打開(kāi)中時(shí)器
}
void UART_Putch(uchar dat) //輸出一個(gè)字符
{
SBUF=dat; //把數(shù)據(jù)送給sbuf緩存器中
while(TI!=1);//發(fā)送標(biāo)志位 TI如果發(fā)送了為1,沒(méi)發(fā)送為0,沒(méi)發(fā)送等待,到了退出循環(huán)
TI=0; //到了,TI清為0
}
void init1() interrupt 4 //uart中斷 ,4為串口中斷
{
if(RI==1) //收到數(shù)據(jù)
{
uchar m=SBUF; //m為計(jì)算機(jī)發(fā)送給串口的數(shù)據(jù),例,open //總體思想是,計(jì)算機(jī)通知串口,我要發(fā)數(shù)據(jù)了
RI=0; //收到清0
if(m==' ') //判斷m這位數(shù)據(jù)有無(wú)
{
UART_Putch(' '); //回車(chē)
UART_Putch(' '); // 換行
str[length]=''; //數(shù)據(jù)最后位加0標(biāo)志位表示發(fā)完了數(shù)據(jù)
UART_Flag=1; // 傳 完 標(biāo) 志 位
}
else if(m==' ')
{
}
else if(m=='')//b表退格 //下面幾句表刪鋤
{
UART_Putch('');
UART_Putch(' ');
UART_Putch('');
length=length-1; //刪鋤了后總長(zhǎng)度減一
}
else
{
str[length++]=m; //比如m為open,先傳0后傳p,length加一
UART_Putch(m); //輸出 比如open
}
}
}
void check(char *str) //計(jì)算機(jī)發(fā)一數(shù)據(jù),我來(lái)檢查,
{
if( strcmp("open",str)==0 ) //比較兩數(shù)是否相同,相同為0,不同為1 //要加string.h頭文件
{
UART_Putch('o'); //計(jì)算機(jī)中寫(xiě)入open我回復(fù)ok
UART_Putch('k');
UART_Putch(' '); //回車(chē)是跑到這一行的最前 UART_Putch(' '); //換行是跳到下一行
}
else if( strcmp("close",str)==0 )
{
UART_Putch('o');
UART_Putch('k');
UART_Putch(' ');
UART_Putch(' ');
}
else //否則出錯(cuò)
{
UART_Putch('e');
UART_Putch('r');
UART_Putch('r');
UART_Putch('o');
UART_Putch('r');
UART_Putch('!');
UART_Putch(' ');
UART_Putch(' ');
}
}
void main()
{
init();
while(1)
{
if(UART_Flag==1) //接收標(biāo)志位表示接收完成
{
check(str);//檢查
length=0; //長(zhǎng)度清0
UART_Flag=0;//標(biāo)志位清0
}
}
}
|
|