美文网首页
单片机小白学习之路(四十)---DAC转换编码

单片机小白学习之路(四十)---DAC转换编码

作者: 飞向深空 | 来源:发表于2018-10-31 09:14 被阅读0次

    目标:DA转换编码


    状态图

    count和timer1在同一个中断中一起自加,数值相同。count加到100后变为0并且value自加1。timer1在自加到1000后变成0,这时候一周期已经结束了,但此时的value才10。想要value到1000,那么timer1起码要到1000*100才行。
    就是value在一个周期里移到,而timer1不限它可以到1000不断重载。timer1在大范围里移动形成几个周期,而value移动慢在一个周期里移动,当然它也可以重载。

    #include<reg52.h>
    
    typedef unsigned int u16;
    typedef unsigned char u8;
    
    sbit PWM = P2^1;
    bit DIR;    //方向标志位
    
    u16 count ,value ,timer1;  //计数标志
    
    
    void Timer1Init()  //定时1us
    {
        TMOD |=0x10;  //设置模式是1
    
        TH1 = 0xff;
        TL1 = 0xff;  //初值
    
        ET1 = 1;  //定时器1中断标志位开启
        EA = 1;   //总中断开启
        TR1 = 1;  //开始计时
    }
    
    void main()
    {
        Timer1Init();
        while(1){
            if(count>100){  //每次count计数到100就变成0,然后value加1或减1
                count = 0;
                if(DIR==1){ //方向是正
                    value++;
                }
                if(DIR==0){  //方向是负
                    value--;
                }
            }
    
            if(value==1000){ //满一个PMW周期了
                DIR = 0;  //方向变负,高电平减少
            }
    
            if(value==0){  //value一开始默认是0
                DIR = 1;   //方向是正
            }
    
            if(timer1>1000){  //满以后周期了,清0
                timer1 = 0;
            }
    
            if(timer1 < value){ //如果timer1 <value那么在这个周期内value前部分是高电平
                PWM = 1;
            }else{
                PWM = 0;
            }
        }   
    }
    
    
    void Time1() interrupt 3
    {
        TH1 = 0xff;
        TL1 = 0xff;  //重新赋初值
    
        timer1++;
        count++;    //count和timer1一同自加,数值相同
    }
    
    

    相关文章

      网友评论

          本文标题:单片机小白学习之路(四十)---DAC转换编码

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