|
发表于 2017-9-27 16:31:48
|
显示全部楼层
本帖最后由 飞蟾 于 2017-9-27 16:35 编辑
LZ的问题解决没有?解决了就不用往下看了。
你的汇编程序本意是上电后先用yanshi_350ms子程序延时,再调用I2C_WRITE子程序一次,对RDA5807进行配置,然后就进入正常使用了(调用完I2C_WRITE之后是SETB SCL和SETB SDA,这是让I2C总线空闲),是吧?
问题在于你的程序接下来就没有然后了,再往下就是I2C_WRITE和其他子程序了。恕我直言,这是初学编程的新手最常见的失误之一。你的主程序执行完之后,你以为配置完了就可以正常使用了,可单片机还会继续往下走,就会进入到I2C_WRITE子程序,然后在这个子程序末尾碰到返回指令RET。那么问题来了,这次执行I2C_WRITE并不是主程序调用的,是因为你的疏忽导致单片机自己掉进来的,那么它会RET去哪呢?天知道。除非你把单片机拔了。
要改正也很简单,在LCALL I2C_WRITE、SETB SCL和SETB SDA这三句后面,I2C_WRITE之前,加一句:
LP1:SJMP LP1;
然后就会像你把单片机拔了一样,彻底清净了。
|
评分
-
1
查看全部评分
-
|