找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1798|回复: 3
打印 上一主题 下一主题
收起左侧

帮我看下程序,想用串口中断接收一个字符串然后比较下,但是接受不到啊

[复制链接]
跳转到指定楼层
楼主
ID:94642 发表于 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);

}

}

}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:94642 发表于 2017-4-1 15:10 | 只看该作者
急等,希望大神们帮我看下
回复

使用道具 举报

板凳
ID:151348 发表于 2017-4-1 20:20 | 只看该作者
估计是你串口中断程序UART_1Interrupt() 有问题,  if(TI==1)  TI=0;这句没看明白,为什么要加上

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:94642 发表于 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");
        }
        }

}






回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表