找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于MCU SUBF串口发送的问题求大佬解释

[复制链接]
跳转到指定楼层
楼主
如图所示,用pcf8591通过AD转换获取数值并通过串口返回,图为样例程序现在不懂的点在于连写了四个SUBF,在第一个SUBF操作完成后,发送中断不就置1了吗,这个程序是如何执行的。
此外,如果我只想通过串口返回D0光敏电阻值,此程序应该如何改写。
小白虚心求教,感激不尽。

qq_pic_merged_1555397767402.jpg (42.88 KB, 下载次数: 23)

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

使用道具 举报

沙发
ID:158375 发表于 2019-4-16 16:38 | 只看该作者
没看全你的程序:估计程序不管发送中断,就靠延时来发送;
延时发送不可取,应该用中断发送,写好发送中断即可;这里面有好多工作要做。
回复

使用道具 举报

板凳
ID:123289 发表于 2019-4-16 16:56 | 只看该作者
在第一个SUBF操作完成后,需要等一段时间(串行发送需要时间的),串行完数据后,才将发送标记置1!然而,中断是否发生还取决于,你让不让它中断(中断允许位是否已被你置1)。
程序中DELAY(200),就是等待它串行完成,而后再发第二个。可以猜到,“中断允许位是被清0的,即不允许中断”。
回复

使用道具 举报

地板
ID:213173 发表于 2019-4-16 17:04 | 只看该作者
/**********串口发送函数*************/
void SendOneByte(unsigned char c)
{
    SBUF = c;                //发送数据
    while(!TI);        //等待发送完成
    TI = 0;                        //发送中断请求标志位清0
}
//发送字符串(这里4个字节:D[0]~D[3])
void xxxx()
{
        unsigned char i;
        //其它语句
        //........
        ES=0;                        //关串口中断(如果使用了串口中断)
        for(i=0;i<4;i++)
        {
                SendOneByte(D[i]);//调用串口发送函数
        }
        ES=1;                //开串口中断(如果使用了串口中断)
}
回复

使用道具 举报

5#
ID:94031 发表于 2019-4-16 17:18 | 只看该作者
程序不全不好判断。
回复

使用道具 举报

6#
ID:513688 发表于 2019-4-22 21:43 来自手机 | 只看该作者
非常感谢以上大佬,问题已经解决了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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