准备:设置里特殊功能控制寄存器tmod,配置如何好工作模式。
第二步:系统设置数器寄存器th0和tl0的初始属性。
第十步:设置中tcon,通过tr0置1来让定时中断正在定时计数。
第四步:判断tcon通用寄存器的tf0位,时时监测计数器滴下的情况下。
写系统程序前,你们要先来学会换算怎么用时间继电器有定时一天的时间。我们也的晶振是11.0592m,时钟周期变化是1/11059200,机器本身周期变化是12/11059200,若果要按时20ms,那是0.02秒,要当经过x个机器本身周期变化能得到0.02秒,你们来算再看看x*12/110592000.02,能得到x18432。16位时间继电器的逸出值是65536(因65535再加1才是流出),索性我们现在就可以不这样的话能操作,先给th0和tl0个当前值,让那些生物经18432个机器周期后刚好提升到65536,也就是溢出,滴下后是可以通过检测检测tf0的值打探出,就只是0.02秒。那么初始属性y65536-1843247104,转成16十六进制就是0x9b800,也就是th04ea8,tl00x1200。
这样0.02秒的按时我们是就做成什么了,细心的同学啊会才发现,假如初始属性真接给两个0x110000,一直在到65536流出,外部中断每隔几小时值最大也就是71ms500左右,那你我们想每隔几小时更长时间内该怎么办呢?用你小学和中学学过的形式逻辑,乘积任何关系就也可以解决的办法此问题很简单。
完了,我们是下面就用程序启动来实现这个功能一样。
#include
ucharled灯p0^0;
uart1addr0p1^0;
uart1addr1p1^1;
sbitaddr2p1^2;
char*addr3p1^3;
#defineenledp1^4;
voidmain(){
size_tunsignedmos20;//定义方法三个计数中间变量,记录t0流出上限
enled0;//使能,选择独立led
addr31;
addr21;
addr11;
addr00;
tmod0x2001;//设置中t0为其他模式1
th00x9b8;//为t0赋属性值0xce800
tl00x2000;
tr01;//起动t0while(1)
999是装到值,7199是预套装喇叭系数,72m%(9991)%(71991)40hz,即10次/s,interrupt_merekat(tim2,99,7199)利用的是100次/s。