单片机定时器使二极管1S闪烁的实验:TMOD=0x03;TH0=6;TL0=6;//装初值,问题是为什么等于6?

如题所述

TOMD=0x03,是定时器工作方式3,分为两个8为定时器,每个定时器计数最大值为255,计数到最大255,再加1,产生中断,相当于计数从0到256。
假设你的晶振频率为12M,机器周期为1M,那么机器一周期时间为1/f=1/1M=1微秒。定时器3的最大计数为255,最大的计数时间为256微秒,想要以1秒闪烁,TH0=6;TL0=6;每次计数都是记(256-6=250)微秒,中断次数1秒除以250微秒。现在明白为什么初值为6没追问

那怎么是到了中断3686次是一秒,中断1843次为半秒?

追答

晶振频率你没给,刚才是假设晶振为12M。中断3686次一秒,每次中断时间为1除以3686,大概271.3微秒。计数250次271.3为微秒,一次为1.0852毫秒。反推回去,频率为1/1.0852=0.9215M.
晶振频率是机器频率的12倍,为0.9215*12=11.058.因为这些计算值都是四舍五入的,所以推出你的晶振频率是11.0592.你说的3686次是一秒,不是严格意义的一秒,大概一秒

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-22
你的设置定时器0被分成两个8位计数器,初值设为6那么相当于累计250(256-250=6)溢出申请中断。12M晶振的话就是250微妙中断一次。1秒需要中断4000次。追问

那怎么是到了中断3686次是一秒,中断1843次为半秒?

追答

那证明你的晶振是11.0592M,4000是12M晶振