新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機做信號發生器實例編程

        51單片機做信號發生器實例編程

        作者: 時間:2014-01-16 來源:網絡 收藏

        //用,同時輸出四種頻率的方波。
        //要求:晶振為12MHz,用T0做定時器,在P1的低四位輸出四種頻率的方波:

        // P1.3 = 1.25kHz、P1.2 = 2.5kHz、P1.1 = 5kHz、P1.0 = 10kHz

        //另外,上述四個頻率要求用一個四選一數據選擇器,再選出其中的一個輸出出去。
        //P1.6、P1.7的輸出用來控制四選一數據選擇器的選擇位,它們由P3.0按鍵控制。
        //懸賞分:10 - 解決時間:2009-12-5 10:45
        //===================================================
        //最佳答案:
        //本題目早在一年前就回答完畢,現在增加了PROTEUS仿真圖片發上博客。
        //題目要求在相鄰四條接口線輸出的四種頻率,恰有二倍的關系,這就可以利用一個定時中斷來完成。
        //題目還要求使用一個數據選擇器,通過按鍵選擇一個頻率來輸出。
        //利用PROTEUS仿真的截圖如下所示。
        //圖中在輸出端接上了一個頻率計和一個揚聲器,進行頻率檢測。
        //當按下按鍵時,輸出頻率可以輪番轉換。
        //圖中把四種頻率的檢測結果都截圖顯示,可以看出,輸出的頻率十分理想。
        //PC的揚聲器也能聽到聲音,10kHz的頻率,比較刺耳。

        //以下程序已經仿真成功。
        //---------------------------------------------------
        #include reg52.h>
        #define uchar unsigned char
        #define TL_0SET (256 - 50) //定時時間選為50us
        //輸出的方波周期將為100us, 10kHz
        sbit P3_2 = P3^2; //用于按鍵
        sbit P1_0 = P1^0; //四個頻率輸出
        sbit P1_1 = P1^1; //
        sbit P1_2 = P1^2; //
        sbit P1_3 = P1^3; //
        sbit P1_6 = P1^6; //兩個選擇控制輸出
        sbit P1_7 = P1^7; //

        bdata uchar x = 0;
        sbit p16 = x^0;
        sbit p17 = x^1;

        uchar i, j;
        //---------------------------------------------------
        void e0int() interrupt 0 //外部中斷0作開關,控制四選一數據選擇器
        {
        while(P3_2 == 0) {;} //等待按鍵釋放
        x++;
        if(x == 4) x = 0; //改變當前輸出的選擇
        P1_7 = p16;
        P1_6 = p17;
        }
        //---------------------------------------------------
        void time0() interrupt 1 //T0的中斷服務程序
        { //T0工作在方式2,自動裝入初始值
        i++;
        j = i % 16; //取i的低四位
        j += x 6; //組合上數據選擇器的控制信號
        P1 = j; //輸出四種頻率的方波以及控制信號
        }
        //---------------------------------------------------
        void main()
        {
        TMOD = 0x02; //T0定時方式2
        TH0 = TL_0SET; //自裝入式的定時初始值
        TR0 = 1; //啟動T0
        ET0 = 1;
        IT0 = 1; //外部中斷0由下降沿觸發
        EX0 = 1; //外部中斷0允許
        EA = 1;
        while(1) {;}
        }
        //---------------------------------------------------

        信號發生器



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 石狮市| 台东县| 家居| 沁阳市| 克山县| 榕江县| 张家港市| 浦县| 察隅县| 根河市| 东丰县| 施甸县| 浪卡子县| 格尔木市| 宁城县| 吉木乃县| 石狮市| 济南市| 双鸭山市| 东海县| 徐水县| 祁连县| 嘉禾县| 敦化市| 台北市| 青海省| 卫辉市| 文化| 蓬莱市| 大姚县| 海宁市| 通海县| 康平县| 南充市| 集安市| 诏安县| 神农架林区| 百色市| 定兴县| 石家庄市| 临沂市|