npn 发表于 2021-8-11 13:34 不用理会上电那一瞬间,因为中断是不断执行的 |
npn 发表于 2021-8-11 12:35 非常感谢,已经解决了问题。 |
lkc8210 发表于 2021-8-11 11:43 谢谢,我已经按照您的方法测试,中断执行时间是2ms。我把定时器的时间定为3ms的时候,就解决了问题,可以验证是因为中断函数占用的时间太长导致的。非常感谢。 |
lkc8210 发表于 2021-8-11 11:43 P17上电瞬间高电平,建议将电平反过来。 |
yermsir 发表于 2021-8-11 10:42 这个需要用逻辑分析仪捕捉一下 |
yermsir 发表于 2021-8-11 10:56 最好当然是在硬件上测量,我的做法是在中断第一行写P17 = 1;在中断尾写P17 = 0;然后用逻辑分析仪测量P17脚的高电平时间 |
Jiang_YY 发表于 2021-8-11 10:00 谢谢您的回复,您能否指教以下如何确认中断函数的处理时间?单是从Keil编译器自带的sec指标来看,进入中断和出中断中间只差0.6ms,这个时间准不准? |
Jiang_YY 发表于 2021-8-11 10:00 不好意思,中断函数的处理时间怎么来确认呢? |
| 中断服务函数里的两个函数延时加太长了 |
| 如果只是修改了定时时间,确认一下中断处理函数用的时间是多少,如果中断处理函数的时间超出或者很接近你定时的时间(1ms),程序会一直在响应中断,跑不到其它的地方,或者响应很慢。 |
lkc8210 发表于 2021-8-10 23:17 谢谢您详细的回复,非常感谢。我按照您的意见追加了Key_Value=4;的语句,并不是如预想的那样显示正弦波,不管按哪个键还是显示三角波。 另外,按键扫描用了长时间的延迟delay怎么会影响到中断函数呢?中断函数每个1ms理论上触发一次,只要按键值有变化,就会被捕捉到。 |
|
因为你的Switch没有Default case, 若Key_Data的值不在你预定的16个case内 Key_Value值会维持为零(因初值预设为零) 而你又用Key_Value是零作为输出三角波的条件 结果令你觉得按什么都是零 其实什么都不是 验证方法, if(0!=Key_Data) {Key_Value=4;//先为Key_Value附值 switch(Key_Data) 看看是否按什么都出正弦波 至于为什么会受中断时间影响 可能是你的按键扫描用了长时间(对单片机来说)的delay吧 |