串口通信+按键中断,行得通吗?

2019-03-24 17:31发布

本帖最后由 铛铛铛挡 于 2016-9-10 10:46 编辑

首先讲一下我的思路:1,按键外部触发中断,即INT0或者INT1
2,响应中断,通过串口发送字符到PC机,在串口助手上显示
然而就这样简单的程序,我却被难住了
第一个程序:串口中断收发,运行正常

void main()
{
        bstv51_init();
        TMOD=0X20;                          //先设置T1为工作方式2        ,工作方式2会自动重装

        TH1=0XFC;                          //  
        TL1=0XFC;                          //
        PCON=0X80;                          //倍增位赋1,1000 0000,以上3句设置波特率14400
        SCON=0X50;                          //设置串口工作方式,0101 0000

        EA=1;                                  //打开全局中断
        ES=1;                                  //打开串行口中断
        TR1=1;                                  //打开计数器1

        while(1)
        {
         }
}
void uart() interrupt 4
{
        uchar date;
        date=SBUF;                                //接受缓存区的值赋给date   ,接受完毕则中断标志位置1
        RI=0;                                        //缓存区的值提取完毕后,将接受中断标志位手动赋0
        SBUF=date;                                //将date的值赋给发送缓存区,等待发送完毕
        while(!TI);                                        //等到发送完毕,发送中断标志位会置1产生中断
        TI=0;                                        //发送完毕,手动赋0标志位

}


第二个程序:在第一个程序的基础上,在main里加了3行:

        P3=0X08;                         //0000 1000    P3.3(INT1)赋1,以接受第4排按键触发信号(下降沿触发)
        EX1=1;                                //INT1中断允许,按键中断 P3.3,第4排按键
        IT1=1;                                //INT1触发方式为下降沿触发        如果是沿触发,响应中断后,硬件自动清除中断标志。

        P1=0XF0;                                //1111 0000,LED灯一半亮一半灭

同时增加了INT1的中断服务函数
void KEY() interrupt 2
{

        uchar date[9]={"123456789"};
        uint i=0;
        P1=~P1;                                                 //LED灯变化   ,表明进入中断
        for(i=0;i<9;i++)
        {
                SBUF=date;;                                //将date的值赋给发送缓存区,等待发送完毕
                while(!TI);                                        //等到发送完毕,发送中断标志位会置1产生中断
                TI=0;                                        //发送完毕,手动赋0
        }                                       

}


串口助手设置波特率14400,数据位8位,停止位1位,没有校验位。
然而,在这里就跪了,串口助手发送字符没有收到返回,
按键可以触发中断(因为LED灯变化了),,串口助手却收不到date[9]={"123456789"},啥也没有。


各位大神,我就加了那么几句而已,找来找去都找不出问题,请帮帮小弟
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
铛铛铛挡
2019-03-25 19:49
深蓝恋风 发表于 2016-9-10 10:04
这跟INT0没关系,应该是一直为低,达不到产生下降沿的条件! 你不信吧P3挨着赋值:0x01,0x02,0x04,0x08, ...

所以INT0没有干扰咯。
但是很奇怪,问题就出在那一句,还是想不通

一周热门 更多>