美文网首页
2018-02-13@单片机

2018-02-13@单片机

作者: ermaoHa | 来源:发表于2018-02-13 19:12 被阅读0次

    定时器知识点

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

    #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;/*定时器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@单片机

          本文链接:https://www.haomeiwen.com/subject/iwxstftx.html