标题:
帮我看下程序,想用串口中断接收一个字符串然后比较下,但是接受不到啊
[打印本页]
作者:
917106794
时间:
2017-4-1 15:09
标题:
帮我看下程序,想用串口中断接收一个字符串然后比较下,但是接受不到啊
#include "includes.h"
#define S2RI 0x01 //′®¿ú2½óêÕÖD¶ÏÇëÇó±ê־λ
#define S2TI 0x02 //′®¿ú2·¢ËíÖD¶ÏÇëÇó±ê־λ
#define comm_putc(x) SendData(x)
//′®¿úÖDóÃμ½μĸ÷ÖÖ±ê־λ
//′®¿úÖDéæ¼°μ½μÄêyÖμ
unsigned char rcnt,rcnt2;
unsigned char flag1;
extern unsigned char rbuff[9];
static INT8U Send_buf[10] = {0} ;
/******************************************************************************
¡¾oˉêyÃû3Æ¡¿sysUtilsUSecDelay(U32 Timed)
¡¾1|ÄüÃèêö¡¿Ñóê±
¡¾êä¡¡ èë¡¿Ñóê±ê±¼äÖμ
¡¾êä¡¡ 3ö¡¿N
¡¾è«¾Ö±äá¿¡¿N
¡¾Ëμ Ã÷¡¿N
******************************************************************************/
void sysUtilsUSecDelay(uint Timed)
{
while(Timed--);
}
void UART1_Init(void)
{
PCON &= 0x7F; //2¨ìØÂê2»¼ó±¶
SCON = 0x50; //8λêy¾Y
AUXR &= 0xFB; //¶àá¢2¨ìØÂê·¢éúÆ÷12TÄ£ê½
BRT = 0xFA; //éèᢶàá¢2¨ìØÂê·¢éúÆ÷μÄÖØ×°ÔØÖμ
AUXR |= 0x01; //′®¿úò»ê1óöàá¢2¨ìØÂê·¢éúÆ÷
AUXR |= 0x10; //Æô¶ˉ¶àá¢2¨ìØÂê·¢éúÆ÷
EA=1; //¿aÆô諾ÖÖD¶Ï
ES=1; //¿aÆô′®¿úÖD¶Ï
}
/********************************************************************************************
- 1|ÄüÃèêö£o ′®¿ú1·¢Ëíò»¸ö×Ö½úμÄêy¾Y
- á¥êôÄ£¿é£o
- 2ÎêyËμÃ÷£oÖ±½ó°Ñêy¾Y·¢3ö襾íOKáË
- ·μ»ØËμÃ÷£o
- ×¢£o
********************************************************************************************/
void SendData(unsigned char c)
{
SBUF = c;
while(!TI); //èôTI=0,Ôú′Ëμè′y
TI = 0;
sysUtilsUSecDelay(2000);
}
void SendStr(unsigned char *s)
{
while(*s!='\0')
{
SendData(*s);
s++;
}
}
//1|Äü £o ′®¿ú1ÖD¶Ï
void UART_1Interrupt() interrupt 4
{
unsigned char rrbuff[9];
if(TI==1)
TI=0;
if(RI==1)
{
RI=0;
rrbuff[rcnt]=SBUF;
rcnt++;
if((rrbuff[0]=='o')&&(rrbuff[1]=='k'))
{
flag1=1;
}
}
}
#include "includes.h"
sbit JRT =P2^0;
void GPIO_INIT(void)//GPIO¿ú
{
P2M0=0xff;
P2M1=0x00;//íÆíìêä3ö
P1M0=0x00;
P1M1=0x00;
JRT=0;
}
void main()
{
UART1_Init();
GPIO_INIT();
while(1)
{
if(flag1==1)
{
flag1=0;
SendData(0x56);
}
}
}
作者:
917106794
时间:
2017-4-1 15:10
急等,希望大神们帮我看下
作者:
imxuheng
时间:
2017-4-1 20:20
估计是你串口中断程序UART_1Interrupt() 有问题, if(TI==1) TI=0;这句没看明白,为什么要加上
作者:
917106794
时间:
2017-4-5 11:25
加上的意思的防止有发送的数据影响他,加不加都没关系的,就是把他屏蔽掉,也不影响结果,现在该了一下,但是发送的东西,有时候能接收到,有时候接受不到,再帮我看看,3gu
这是中断,
void UART_1Interrupt() interrupt 4
{
unsigned char i;
if(RI)
{
RI=0;
Buffer[i++]=SBUF;
if(i>=5)
{
i=0;
}
if(Buffer[0]=='o'&&Buffer[1]=='n')
{
flag1=1;
flag2=0;
}
else if(Buffer[0]=='o'&&Buffer[1]=='f'&&Buffer[2]=='f')
{
flag1=0;
flag2=1;
}
}
}
这是主函数
void main()
{
UART1_Init();
GPIO_INIT();
while(1)
{
if(flag1)
{
flag1=0;
JRT=1;
sysUtilsUSecDelay(500);
SendStr("ok");
}
if(flag2)
{
flag2=0;
JRT=0;
sysUtilsUSecDelay(600);
SendStr("power");
}
}
}
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1