/**************************************************************************************
功能: 在串口调试助手上输入 c1k001、c1k010或者c1k100三种命令串口反馈 OK! 单片机控制I/O
做相应动作 ,输入其他字符串串口反馈 Error! I/O口全部置零
***************************************************************************************/
#include <reg52.h>
#include <string.h>
#include <stdio.h>
#define uchar unsigned char
uchar bur[8]={0},flag0,flag1,flag2;
uchar f[5] = "OK!" ;
uchar g[8] = "Error!" ;
uchar buf1[8] = "c1k001", buf2[8] = "c1k010", buf3[8]= "c1k100" ;
int c,d,i=0;
uchar dat;
void UART_Init() //串口初始化,PC串口端设置:波特率19200,8,无,1,无
{
EA = 1;
ES = 1;
SCON = 0x50; //UART工作于模式1,REN=1
TMOD = 0x20; //Timer1工作于模式2
PCON = 0x80; //SMOD1 = 1
TH1 = 0xFD; //波特率19200 Bds at 11.0592MHz
TL1 = 0xFD;
TR1 = 1; //启动Timer1
}
void Uart_SendData(uchar dat) //串口输出函数
{ SBUF=dat;
while(TI==0);
TI=0;
}
//主函数
void main(void)
{
UART_Init(); //串口初始化
P1=0x00;
P2=0x00;
while(1)
{flag0=strcmp(buf1,bur); //比较输入字符串是不是“c1k001”
flag1=strcmp(buf2,bur); //比较输入字符串是不是“c1k010”
flag2=strcmp(buf3,bur); //比较输入字符串是不是“c1k100”
if(i>0) //如果串口有字符输入则进入下面的判断
{
if (flag0==0) // 如果输入字符串是“c1k001”
{ i=0;c=0;
P1=0x01;
P2=0x00;
for (c=0;c<5;c++)
{
dat=f[c];
Uart_SendData(dat); //输出 "OK!"
}
break;
}
else if (flag1==0) // 如果输入字符串是“c1k010”
{ i=0;c=0;
P1=0x02;
P2=0x00;
for (c=0;c<5;c++)
{
dat=f[c];
Uart_SendData(dat); //输出 "OK!"
}
break;
}
else if (flag2==0) // 如果输入字符串是“c1k100”
{ i=0; c=0;
P1=0x04;
P2=0x00;
for (c=0;c<5;c++)
{
dat=f[c];
Uart_SendData(dat); //输出 "OK!"
}
break;
}
else //输入与任何命令不符
{ i=0; d=0;
P1=0x00;
P2=0x00;
for (d=0;d<8;d++)
{
dat=g[d];
Uart_SendData(dat); //输出 "Error!"
}
break;
}
}
}
}
void INT_UartRcv(void) interrupt 4 using 1 //串口接收中断
{uchar key;
if(RI)
{
key=SBUF; bur
=key;i++;if(i>=8) i=0; //串口输入字符串放入 数组bur[7]
RI = 0; }
}
此帖出自小平头技术问答
/**************************************************************************************
功能: 在串口调试助手上输入 c1k001、c1k010或者c1k100三种命令串口反馈 OK! 单片机控制I/O
做相应动作 ,输入其他字符串串口反馈 Error! I/O口全部置零
***************************************************************************************/
#include <reg52.h>
#include <string.h>
#include <stdio.h>
#define uchar unsigned char
uchar bur[8]={0},flag0,flag1,flag2;
uchar f[5] = "OK!" ;
uchar g[8] = "Error!" ;
uchar buf1[8] = "c1k001", buf2[8] = "c1k010", buf3[8]= "c1k100" ;
int c,d,i=0;
uchar dat;
void UART_Init() //串口初始化,PC串口端设置:波特率19200,8,无,1,无
{
EA = 1;
ES = 1;
SCON = 0x50; //UART工作于模式1,REN=1
TMOD = 0x20; //Timer1工作于模式2
PCON = 0x80; //SMOD1 = 1
TH1 = 0xFD; //波特率19200 Bds at 11.0592MHz
TL1 = 0xFD;
TR1 = 1; //启动Timer1
}
void Uart_SendData(uchar dat) //串口输出函数
{ SBUF=dat;
while(TI==0);
TI=0;
}
//主函数
void main(void)
{
UART_Init(); //串口初始化
P1=0x00;
P2=0x00;
while(1)
{flag0=strcmp(buf1,bur); //比较输入字符串是不是“c1k001”
flag1=strcmp(buf2,bur); //比较输入字符串是不是“c1k010”
flag2=strcmp(buf3,bur); //比较输入字符串是不是“c1k100”
if(i>0) //如果串口有字符输入则进入下面的判断
{
if (flag0==0) // 如果输入字符串是“c1k001”
{ i=0;c=0;
P1=0x01;
P2=0x00;
for (c=0;c<5;c++)
{
dat=f[c];
Uart_SendData(dat); //输出 "OK!"
}
break;
}
else if (flag1==0) // 如果输入字符串是“c1k010”
{ i=0;c=0;
P1=0x02;
P2=0x00;
for (c=0;c<5;c++)
{
dat=f[c];
Uart_SendData(dat); //输出 "OK!"
}
break;
}
else if (flag2==0) // 如果输入字符串是“c1k100”
{ i=0; c=0;
P1=0x04;
P2=0x00;
for (c=0;c<5;c++)
{
dat=f[c];
Uart_SendData(dat); //输出 "OK!"
}
break;
}
else //输入与任何命令不符
{ i=0; d=0;
P1=0x00;
P2=0x00;
for (d=0;d<8;d++)
{
dat=g[d];
Uart_SendData(dat); //输出 "Error!"
}
break;
}
}
}
}
void INT_UartRcv(void) interrupt 4 using 1 //串口接收中断
{uchar key;
if(RI)
{
key=SBUF; bur =key;i++;if(i>=8) i=0; //串口输入字符串放入 数组bur[7]
RI = 0; }
}
[ 本帖最后由 austin555 于 2013-10-9 16:17 编辑 ]
一周热门 更多>