188610329 发表于 2021-12-1 14:05 大侠,收下我的膝盖吧!( ![]() 我加了个TF2=0,就可以完美的运行了。一切正常。这样定时器1与定时器2就完美地切换过来了。 谢谢你! 你是不是对C8051F020单片机很熟悉啊,我提的问题你基本上都能解决,老厉害了。 |
定时器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() 需要跑多久? 时间久的话,程序被卡死就是必然的了。 |
npn 发表于 2021-12-1 10:17 是的,我现在知道是什么原因了。 |
lkc8210 发表于 2021-12-1 10:09 哦哦,果然高手再论坛里。四个字:醍醐灌顶 |
lkc8210 发表于 2021-12-1 10:09 定时器1溢出后TF1会被硬件置1,中断触发后又被硬件清0,如果只开计数,不开中断,就需要软件清0。 中断触发后会跳转到相应的向量地址,没有 interrupt 3 的中断入口函数就会导致程序跑飞。 |
你没有设置定时器0的初始化,也没有开通定时器0 但是你有设置定时器1的初始化和开通定时器1啊~ 而且你还取消了定时器1的中断函数 当单片机产生定时器1的中断时 没有中断函数响应 没有清零TF1 单片机就会当机了 |