找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1527|回复: 5
收起左侧

请教51单片机串口中断程序问题

[复制链接]
ID:891939 发表于 2021-3-31 11:49 | 显示全部楼层 |阅读模式
程序如下:

void Usart() interrupt 4
{
        u8 re,dv;

        re=SBUF;
        RI = 0;
        
        i2c_eepromw(0xa0,1,re);
        dv=i2c_eepromr(0xa0,1);        


        SBUF=dv;        
        while(!TI);
        TI=0;



1、黄色底处把dv改成re,串口调试可以得到正确的返回值,即确定串口配置没问题。
2、用其它方法调用i2c_eepromr(0xa0,1);,可以得到串口输入的值,即确定IIC总线驱动没问题。


但像上面这样写程序,无论串口输入什么值,返回值都是FF。


请问这是什么原因


先谢了
未命名.JPG
回复

使用道具 举报

ID:390416 发表于 2021-3-31 12:33 | 显示全部楼层
代码不要这样写,串口就专门串口,IIC就专门IIC  EEPROM就调用IIC。不要在串口里面去调用EEPROM。多开一个缓存就行了。

评分

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

查看全部评分

回复

使用道具 举报

ID:390416 发表于 2021-3-31 12:34 | 显示全部楼层
给你参考我们的串口发送代码,不需要死等的。串口1可以打印3个十六位的变量http://www.51hei.com/bbs/dpj-201660-1.html
回复

使用道具 举报

ID:887371 发表于 2021-3-31 14:17 | 显示全部楼层
注意,51的函数不支持再入,所以中断代码尽量不要有函数,如必须有,请自行保证该函数不会在其它部分调用。
另外进入中断后要尽快退出。

评分

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

查看全部评分

回复

使用道具 举报

ID:47286 发表于 2021-3-31 14:56 | 显示全部楼层
同沙发

你这样弄声明的变量只能在函数内起作用 执行完毕就销毁了

评分

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

查看全部评分

回复

使用道具 举报

ID:883031 发表于 2021-3-31 16:11 | 显示全部楼层
eeprom写数据时,要先将页清掉,再写数据,否则,会出错。

评分

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

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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