一.守时器操作过程
二.工作办法操控寄存器TMOD
TMOD的低半字节(D0,D1,D2,D3)用来操控守时器/计数器0
TMOD的高半字节(D4,D5,D6,D7)用来操控守时器/计数器1
对TMOD中的内容阐明:
GATE——门操控
GATE=1时,由外部中止引脚INT0、INT1来发动守时器T0、T1。
当INT0引脚为高电平时TR0置位,发动守时器T0;
当INT1引脚为高电平时TR1置位,发动守时器T1。
GATE=0时,仅由TR0,TR1置位别离发动守时器T0、T1。
C/T——功用挑选位
C/T=0时为守时功用,
C/T=1时为计数功用。
M0、M1——办法挑选功用
由于有2位,因此有4种工作办法:
三.依据单片机晶振,所选TMOD的的工作办法,所要定的时刻,来确认THO和TLO所要赋予的初值:
(以12M晶振,工作办法1即16位计数器为例,设所守时刻为Xus(16为计数器最大数65536,即65536us,若所守时刻大于65535,则要用if句子操控,现假定X<65535))
1.时钟周期的时刻t=1/12M=1/12 us
2.机器周期的时刻T=12*1/12=1 us
3.由于每通过一个机器周期计数器+1,所以,计数器+1,通过的时刻为 1 us。
若所守时刻为X,则要求通过Xus,中止呼应,又由于16位计数器要悉数置1(即到达65535)+1后,中止才会呼应,所以,初值=(65536-X)
4.将初值转化为16进制码,别离交给TH0和TL0
eg:所守时刻5ms
初值=(65536-5000)=60536=EC78
TH0=0xEC;TL0=0x78;
(当工作办法不一起,TH0/TL0的赋值也不同,个人觉得有了16位计数器了,其他的没什么用,不介绍了)
5.写程序时另一种THO/TLO赋值办法
TH0=(65536-20000)/256;
TL0=(65536-20000)%6;
这样设置,每通过20ms,产生一次中止,中止时刻一般以秒为单位,所以通过n次中止即可。
四.中止敞开
注:在用到中止时,必需要开总中止EA,即EA=1。 //开总中止
1.中止答应操控寄存器IE
EX0(EX1):外部中止答应操控位
EX0=1 外部中止0开封闭合 //开外部中止0
EX0=0 外部中止0开关断开
ET0(ET1):守时中止答应操控位
ET0=1 守时器中止0开封闭合 //开内部中止0
ET0=0 守时器中止0开关断开
ES: 串口中止答应操控位
ES=1 串口中止开封闭合 //开串口中止
ES=0 串口中止开关断开
2.守时器操控寄存器 TCON //操控外部中止和守时器中止
外部中止:
IE0(IE1):外部中止恳求标志位
当INT0(INT1)引脚呈现有用的恳求信号,此位由单片机主动置1,cpu开端呼应,处理终端,而当入中止程序后由单片机主动置0.
//外部中止,即外部中止相应的引脚接入低电平或下降沿信号时,中止开端呼应。
IT0(IT1):外部中止触发办法操控位 //挑选有用信号
IT0(IT1)=1:脉冲触发办法,下降沿有用。
IT0(IT1)=0:电平触发办法,低电平有用。
内部中止:
TF0(TF1):内部守时器/计数器溢出中止标志位
当守时器、计数器计数溢出的时分,此位由单片机主动置1,cup开端呼应,处理中止,而当进入中止程序后由单片机主动置0.
//内部中止实际上便是使用内部的计数器,只不过供给计数的脉冲来自单片机本身。
TR0(TR1):守时器/计数器发动位 //发动守时器
TR0(TR1)=1;发动守时器/计数器0
TR0(TR1)=0; 封闭守时器/计数器0