初级会员

- 积分
- 58
- 金钱
- 58
- 注册时间
- 2012-12-23
- 在线时间
- 0 小时
|

楼主 |
发表于 2014-9-19 23:05:08
|
显示全部楼层
//定义的指令码
u8 CmdTab[][6]=
{
{ " ON\r" } , //0
{ " OF\r" } , //1
};
u8 CMD_PON[] = {" ON\r"};
u8 CMD_POF[] = {" OF\r"};
#define CODE_PON 0
#define CODE_POF 1
//函数功能:指令发送函数,用于发送需要执行的操作的对应指令
void CmdSend( u8 *CmdAddr )
{
u8 tmp;
u8 *ptmp;
ptmp = CmdAddr;
for (tmp=0; (tmp != 0x0d)&&(tmp != 0x20); ptmp++)
{
USART1_Send_Byte(*ptmp);
tmp = *ptmp;
}
}
u8 CmdSearch( void )
{
u8 i, j, tmp;
u8 tmpcmd[6];
for (i = 0,tmp = 0;(tmp != 0x0d)&&(tmp != 0x20)&&( i < 6); i++)//命令关键字大于6个字符为非法命令
{
tmpcmd = USART_ReceiveData(USART1);
tmp = tmpcmd;
}
for ( i = 0;i < NUM_OF_CMD;i++) //NUM_OF_CMD=69
for ( j = 0; tmpcmd[j] == CmdTab[j]; j++)
{
if ((tmpcmd[j] == SPACE)||(tmpcmd[j] == CR))
{
return( i ); //返回指令码数值编号
}
}
return(0xff); //返回0xff则为非法命令
}
//主机main函数
int main( void )
{
delay_init();
NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(9600); //串口初始化
BEEP_Init();
KEY_Init();
BEEP1=0;
while(1) //主循环
{
if(KEY0==0)
{
delay_ms(10);
if(KEY0==0)
{
CmdSend(CMD_PON);
delay_ms(200);
if (CmdSearch()== CODE_POF)
{
BEEP=0;
delay_ms(1000);
BEEP=1;
delay_ms(1000);
}
while(!KEY0);
}
}
}
}
//从机main函数
int main( void )
{
delay_init();
NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(9600); //串口初始化
BEEP_Init();
BEEP1=0;
while(1) //主循环
{
if (CmdSearch()== CODE_PON)
{
delay_ms(100);
CmdSend(CMD_POF);
BEEP=0;
delay_ms(1000);
BEEP=1;
delay_ms(1000);
}
}
}
主从机公用的中断服务程序
void USART1_IRQHandler(void) //串口1中断服务程序
{
u8 Res;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾)
{
USART_ClearITPendingBit(USART1,USART_IT_RXNE); //清除中断标志.
Res =USART_ReceiveData(USART1); //读取串口1接收到的数据
if((USART_RX_STA&0x8000)==0) //接收未完成
{
if(USART_RX_STA&0x4000) //接收到了0x0d
{
// if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始
//else
USART_RX_STA|=0x8000; //接收完成了
g_ucCmdCount++;
}
else //还没收到0X0D(/r)
{
if(Res==0x0d)
{
USART_RX_STA|=0x4000;
g_ucCmdCount++;
}
else
{
USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
USART_RX_STA++;
if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收
}
}
}
}
} |
|