2018-02-13@单片机

定时器知识点

由于注释不知道怎么了,复制代码有问题,所以还是截图了,代码加解释,加油
郭天祥10天学会单片机系列

#include
#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;/*定时器0工作,工作方式为3仅有T0可以

                定时器/计数器工作方式寄存器
                TMOD特殊功能寄存器,不可以位寻址,89H复位即清零
                定时器1            定时器0
                GATA C/T非 M1 M0   同定时器1
                GATA
                原理图......即可
                GATA=0;仅有TCON寄存器TRX来控制
                GATA=1;有TCON TRX与外部中断INT0 INT1
                C/T非模式选择位
                M1M0方式选择位
                M1  M0
                0   0   方式0,13位定时器/计数器
                0   1       1,16
                1   1       2,8位初值自动重装,8位定时器/计数器
                1   1       3,仅T0分成8位计数器 T1停止计数

                定时器控制TCON寄存器
                特殊功能寄存器,88H-8FH可位寻址                  
                复位即清零
                TF1 TR1 TF0 TR0 用于定时器和计数器,
                IE1 IT1 IE0 IT0用于外部中断
                TF1:溢出标志;利用定时器中断不需要操作;
                    用查询需要软件清零
                TR1:GATE=1,INT1=1 TR1=1开启定时器1
                IE1:外部中断请求标志
                    IT1=0;电平触发方式INT1为低电平时置1否则IE1清零
                    IT1=0;跳变沿沿触发方式从高到底负跳变有效
                
                定时器初值问题
                时钟周期位12MHZ要计满2^16-1个数,溢出一次需要65536微妙
                约等于65.5ms,50ms,就是累加5000次就溢出,则1s即是20个
                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;
        }
    }
}


}

你可能感兴趣的:(2018-02-13@单片机)