找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2199|回复: 0
收起左侧

单片机串口通信笔记(中断复习)

[复制链接]
ID:424317 发表于 2020-2-22 13:59 | 显示全部楼层 |阅读模式
        把单片机当做一个APP,中断系统就是其中的一项功能。这个功能强不强大,是衡量一个APP的标准。
        这项功能的作用是帮助你处理突发事件的。我们做事都有个优先级。你放在中断系统里的事情肯定是要优先处理的事情,所以当中断触发的时候,单片机要停下它当前做的事,来处理中断中的事。也就是说,单片机要在中断触发时,停止运行主函数里的代码,转而运行中断里的代码。等到中断的代码运行完毕之后,再继续运行主函数的代码。
        中断这一项功能是要手动打开的,所以在主函数的一开始就要先打开中断系统的开关。也就是EA=1,
EA=0表示关掉所有的中断,EA=1表示打开。
        中断可以被6种方式触发,有以下六种。
        1.外部中断0,当P3.2口输入低电平时触发
        2.外部中断1,当P3.3口输入低电平时触发
        3.串行口中断,当串口完成一帧数据的传输时
        剩下的自己看书或者数据手册╮(╯▽╰)╭

        既然是六种触发方式,那你就要在主函数一开始就要告诉单片机是那种。比如你想用P3.2口低电平触发,那么就要写EX0=1,表示是外部中断0,再写IT0=1,表示低电平触发。
        如果你想要用串行口中断,你首先得把单片机串口这项功能打开。写下:
        EA=1;//打开总中断
        ES=1;//打开串口中断
        REN=1;//允许串口接收
理论上就可以使用串口中断。但是串口中断的方式也不止一种。最常用的一种就是工作方式1。
        将串口设置成工作方式1的代码是SM0=0; SM1=1; 这种方式下,单片机与计算机,或者单片机与单片机之间传输数据是一帧一帧的传输。一帧数据有十位,第一位和最后一位是标志位,用来告诉单片机发送的那一帧数据的开始和结束的,单片机会自动把这两位剔除。每一帧数据发送完毕之后,一个叫TI的参数就会被置1,这时串行口中断就会被触发;每一帧数据接收完毕之后,也会有一个参数被置1,叫RI,也会触发中断。
        下面看一段代码:
void main()
{
        TMOD=0x20;                   //用定时器设置串口波特率           9600
        REN=1;          //串口初始化
        SM0=0;
        SM1=1;
        EA=1;           //开启总中断
        ES=1;
        while(1)
        {
                if(num==1)    //判断是否有串口数据的传送
                {
                        ES=0;
                        num=0;
                        SBUF=a;                         //发送数据a到SBUF,即将单片机的数据发送到计算机
                        while(!TI);
                        TI=0;
                        ES=1;
                }
        }        
}
void ser() interrupt 4
{
        RI=0;
        P2=SBUF;                        //接收数据SBUF,即将计算机的数据接收。
        a=SBUF;
        num=1;
}

        这段程序会先进行初始化,把该打开的打开,把串口中断的模式设置好,然后进入while循环。while循环里的第一步,是计算机向单片机发送数据,此时单片机已经接收到了数据,RI被置1,程序进入中断,RI被清零,缓存在SBUF的数据赋值给a。然后跳出中断,执行if语句,关闭中断,再将a赋值给发送缓存区。当数据从发送缓存区进入计算机时,TI会被置1,进而通过while循环。然后在清零TI,打开中断,以便发送下一帧数据。

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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