定時(shí)器知識(shí)點(diǎn)
由于注釋不知道怎么了,復(fù)制代碼有問題,所以還是截圖了,代碼加解釋,加油
郭天祥10天學(xué)會(huì)單片機(jī)系列
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula =P2^6;
sbit wela=P2^7;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x5e,
0x76,0x79,0x38,0x3f,0
};
uchar temp,t0,t1,bai,shi,ge,flag,flag1;
uint shu;
void init();
void display(uchar,uchar,uchar,uchar,uchar,uchar);
void delay(uint z)
{
uint t1,y;
for (t1=z;t1>0;t1--)
for(y=110;y>0;y--);
}
void main()
{
init();
while(1)
{
if(flag!=1)
display(7,6,5,bai,shi,ge);
else
display(16,17,18,18,19,20);
}
}
void init()
{
shu=432;
temp=0xfe;
P1=temp;
TMOD=0x11;/*定時(shí)器0工作,工作方式為3僅有T0可以
定時(shí)器/計(jì)數(shù)器工作方式寄存器
TMOD特殊功能寄存器,不可以位尋址,89H復(fù)位即清零
定時(shí)器1 定時(shí)器0
GATA C/T非 M1 M0 同定時(shí)器1
GATA
原理圖......即可
GATA=0;僅有TCON寄存器TRX來控制
GATA=1;有TCON TRX與外部中斷INT0 INT1
C/T非模式選擇位
M1M0方式選擇位
M1 M0
0 0 方式0,13位定時(shí)器/計(jì)數(shù)器
0 1 1,16
1 1 2,8位初值自動(dòng)重裝,8位定時(shí)器/計(jì)數(shù)器
1 1 3,僅T0分成8位計(jì)數(shù)器 T1停止計(jì)數(shù)
定時(shí)器控制TCON寄存器
特殊功能寄存器,88H-8FH可位尋址
復(fù)位即清零
TF1 TR1 TF0 TR0 用于定時(shí)器和計(jì)數(shù)器,
IE1 IT1 IE0 IT0用于外部中斷
TF1:溢出標(biāo)志;利用定時(shí)器中斷不需要操作;
用查詢需要軟件清零
TR1:GATE=1,INT1=1 TR1=1開啟定時(shí)器1
IE1:外部中斷請(qǐng)求標(biāo)志
IT1=0;電平觸發(fā)方式INT1為低電平時(shí)置1否則IE1清零
IT1=0;跳變沿沿觸發(fā)方式從高到底負(fù)跳變有效
定時(shí)器初值問題
時(shí)鐘周期位12MHZ要計(jì)滿2^16-1個(gè)數(shù),溢出一次需要65536微妙
約等于65.5ms,50ms,就是累加5000次就溢出,則1s即是20個(gè)
50ms,65536-50000 /256 TH0 %TH0*/
void timer0()interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
T0++;
if(flag!=1)
{
if(t0==10)
{
t0=1;
temp=_crol_(temp,1);
P1=temp;
}
}
else
{
if(t0%4==0)
P1=~P1;
if(t0==60)
{
TR0=0;
p1=0XFF;
flag1=1;
}
}
}
void timer1()interrupt 3
{
TH1=(65536-50000)/256;
TL0=(65536-50000)%256;
t1++;
if(t1==2)
{
t1=0;
shu--;
bai=shu%100;
shi=shu%100/10;
ge=shu%10;
if(shu==398)
{
TR0=0;
TH0=(65536-50000);
TL0=(65536-50000);
TR0=1;
flag=1;
t0=0;
P1=0xff;
TR1=0;
}
}
}
}