2025-11-08 06:13:12
要搞懂51单片机延时函数为啥会被中断,得先看定时器没关和外部干扰这两个关键点。比如你写延时函数的时候,如果定时器没关,外部信号一扰动,定时器计数就乱套,延时时间肯定不准。就像你刚烧录完程序,结果突然来个强电脉冲,芯片内部电路跟着晃悠,定时器自然就卡壳了。
为啥是这个答案?因为数据手册写明,51单片机有4个定时器,每个定时器有不同工作模式。以定时器0为例,在模式1下是16位计数器,8MHz晶振的话每秒计数65536次。假设你设定延时100ms,需要计数6553次。但如果定时器没禁用,比如之前跑的程序没关闭它,外部干扰导致计数器乱跳,比如突然跳到30000次,延时就会变成4.6ms,差得离谱。更惨的是,如果定时器被配置成模式2(8位自动重装),中断后计数器会重置,延时函数根本算不准时间。就像你买了个精准的电子表,结果电池没电自动跳成闹钟模式,时间当然错乱。所以得看定时器配置,关掉不用的定时器,加个软件锁,再拿示波器测一下中断引脚波形,确保外部干扰不超过±50mV。
本题链接: