新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機產生掃頻信號400Hz~3KHz-----占空比50%的方波

        單片機產生掃頻信號400Hz~3KHz-----占空比50%的方波

        作者: 時間:2016-11-18 來源:網絡 收藏
        發一個產生掃頻信號的程序,大家參考一下

        //單片機晶振12MHz,這個程序如果要提高掃頻信號輸出的頻率關鍵的一句是

        本文引用地址:http://www.104case.com/article/201611/315780.htm

        //dataLoad=10000/(2*(4+i));//153個時鐘周期

        //記該指令的執行時間是N個時鐘周期

        //該程序可以輸出地掃頻信號的最高頻率為fosc/(2*N*12)

        //如果想要提高掃頻信號的最高頻率使用時鐘頻率更高的芯片,或者可以

        //更改這條語句,使之執行時間縮短

        //這個程序的編程思路如下:

        //定時器0負責輸出方波的定時,輸入指定頻率的方波

        //定時器1負責0.1秒定時,如果時間到,則改變

        //定時器0的控制的輸出方波的頻率

        #include
        sbit outWave=P0^0;
        #define uchar unsigned char
        #define uint unsigned int
        uchar t1Counter;//the times of t1 interrupt
        uint dataLoad; //the reset data of the time0, volatile variable.
        bit t1Int;// the flag of time1 interrupt

        //定時器0初始化
        void InitTimer0(){
        TMOD|=0x01;//定時器方式1
        ET0=1;//允許T0中斷
        TH0=(65536-dataLoad)/256;//定時器初值10ms
        TL0=(65536-dataLoad)%256;
        TR0=1;//啟動T0
        }
        //定時器0中斷
        void Time0Int() interrupt 1{
        TH0=(65536-dataLoad)/256;//定時器初值10ms
        TL0=(65536-dataLoad)%256;
        outWave=!outWave;
        }
        //定時器1初始化
        void InitTimer1(){
        TMOD|=0x10;//定時器方式1
        ET1=1;//允許T1中斷
        TH1=(65536-50000)/256;//定時50ms
        TL1=(65536-50000)%256;
        TR1=1;//啟動T1
        }
        //time1
        void Time1Int() interrupt 3{
        TH1=(65536-50000)/256;//定時50ms
        TL1=(65536-50000)%256;
        t1Counter++;
        }
        //主函數
        void main(){
        uchar i; //the number of the frequency
        dataLoad=1250;//400hz,2.5ms
        InitTimer0();//定時器0初始化
        InitTimer1();
        EA=1;//開總中斷
        PT1=1;
        while(1)
        {
        //if(t1Int)
        //{
        //t1Int=0;
        //t1Counter++;
        if(t1Counter==2){//3
        t1Counter=0; //2
        //change the dataLoad
        dataLoad=10000/(2*(4+i));//153個時鐘周期
        i++;
        i=i%26;
        }
        // }
        }
        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 罗平县| 同江市| 郁南县| 正蓝旗| 怀仁县| 黄平县| 蓝山县| 司法| 穆棱市| 仲巴县| 托里县| 昆山市| 泰顺县| 望城县| 秭归县| 宜川县| 密云县| 德钦县| 安西县| 措美县| 蒙山县| 桂林市| 宁德市| 宁海县| 高台县| 高州市| 启东市| 肥乡县| 冕宁县| 亚东县| 集贤县| 河西区| 永春县| 正宁县| 扬州市| 桓台县| 巩义市| 开平市| 绥德县| 华坪县| 大厂|