找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 897|回复: 7
收起左侧

单片机中断函数程序调试的问题

[复制链接]
ID:450037 发表于 2021-12-1 09:05 | 显示全部楼层 |阅读模式
捕获.PNG 1.PNG 2.PNG

如图,程序里一共有两个中断,外部中断0(按键)和定时器1中断。初始化时让定时器中断级优先。本来想把定时器1中断换成定时器0中断的,但是出现了问题。程序无法执行了。主函数都不执行,好像一直处于终端中。连外部中断0(按键)按了都没有反应。然后没办法,把IP的优先级改了,改成外部中断优先。


3.PNG 4.PNG 5.PNG


改过外部中断优先以后,外部中断是可以执行,但是一松开按键,主程序还是不运行,好像又在运行定时中断了。问题在于虽然我把定时中断1改成定时中断0,但是我没有设置定时器0的初始化,也没有开通定时器0,怎么它也能产生中断吗?ET0=0也能产生中断?还是没有写ET0 和TR0  系统默认打开了啊。请高手帮我解答一下。


回复

使用道具 举报

ID:161164 发表于 2021-12-1 10:09 | 显示全部楼层
你没有设置定时器0的初始化,也没有开通定时器0
但是你有设置定时器1的初始化和开通定时器1啊~
而且你还取消了定时器1的中断函数
当单片机产生定时器1的中断时
没有中断函数响应
没有清零TF1
单片机就会当机了
回复

使用道具 举报

ID:57657 发表于 2021-12-1 10:17 | 显示全部楼层
lkc8210 发表于 2021-12-1 10:09
你没有设置定时器0的初始化,也没有开通定时器0
但是你有设置定时器1的初始化和开通定时器1啊~
而且你还 ...

定时器1溢出后TF1会被硬件置1,中断触发后又被硬件清0,如果只开计数,不开中断,就需要软件清0。
中断触发后会跳转到相应的向量地址,没有 interrupt 3 的中断入口函数就会导致程序跑飞。
回复

使用道具 举报

ID:450037 发表于 2021-12-1 13:12 | 显示全部楼层
lkc8210 发表于 2021-12-1 10:09
你没有设置定时器0的初始化,也没有开通定时器0
但是你有设置定时器1的初始化和开通定时器1啊~
而且你还 ...

哦哦,果然高手再论坛里。四个字:醍醐灌顶
回复

使用道具 举报

ID:450037 发表于 2021-12-1 13:17 | 显示全部楼层
npn 发表于 2021-12-1 10:17
定时器1溢出后TF1会被硬件置1,中断触发后又被硬件清0,如果只开计数,不开中断,就需要软件清0。
中断 ...

是的,我现在知道是什么原因了。
回复

使用道具 举报

ID:450037 发表于 2021-12-1 13:31 | 显示全部楼层
lkc8210 发表于 2021-12-1 10:09
你没有设置定时器0的初始化,也没有开通定时器0
但是你有设置定时器1的初始化和开通定时器1啊~
而且你还 ...

捕获.PNG 1.PNG 2.PNG 3.PNG 4.PNG 5.PNG 6.PNG 12.PNG 13.PNG 22.PNG 33.PNG
如图,我现在把它改成定时器2的设置,程序还是一样跑飞了。我设置的哪里不对吗?
开通定时器2的运行,开通中断,优先级最优,定时器2的高低字节也设置了。还是不行,PDF关于定时器2的文档我也截图了,定时器2可以用作波特率发送的我没截图,其他都截取了,请帮我看一下哪里设置不对。
回复

使用道具 举报

ID:624769 发表于 2021-12-1 14:05 | 显示全部楼层
定时器2 中断需要手动清除中断标志,
中断中需要加入:
TF2 = 0;

定时器2自动重载需要 设置 RCAP2L , RCAP2H 那么它就会自动重载,
所以,如果你的重装值是要变化的话,一般需要 把下一次的T2重装值提前写入RCAP2L , RCAP2H 让他自动重装,如果你要每次直接改写 TL2 TH2 的话, 需要先 TR2 = 0, 然后 改写TL2 TH2 之后再 TR2 = 1,
另外, TR2 必须独立驱动(TR2 = 1), 不能通过 T2CON |= 0x04 来启动, 原因不知道,也许是设计缺陷。

最后,其实你也不知道你到底是跑飞还是其他什么情况。
个人建议你确定一下 DATA_OUT() 这个函数, 看你的定时设置应该是 0.5毫秒 或者 1毫秒, 你这个DATA_OUT() 需要跑多久? 时间久的话,程序被卡死就是必然的了。
回复

使用道具 举报

ID:450037 发表于 2021-12-1 14:32 | 显示全部楼层
188610329 发表于 2021-12-1 14:05
定时器2 中断需要手动清除中断标志,
中断中需要加入:
TF2 = 0;

大侠,收下我的膝盖吧!(
我加了个TF2=0,就可以完美的运行了。一切正常。这样定时器1与定时器2就完美地切换过来了。
谢谢你!
你是不是对C8051F020单片机很熟悉啊,我提的问题你基本上都能解决,老厉害了。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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