新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STC89C52單片機直流電機調試

        STC89C52單片機直流電機調試

        作者: 時間:2016-11-21 來源:網絡 收藏
        /////////////////////////////////////////////////////////////////////////

        實現功能: 配置定時器1,讓其每隔1毫秒產生一次中斷,通過對中斷的次數的統計,
        讓定義的P2口的第0個引腳產生占空比為70%的PWM,通過它來驅動直流
        電機
        實驗板型號:BS-XYD-C52
        實驗名稱:直流電機測試實驗
        編寫人: 謝應東
        編寫日期: 2012-4-30
        /////////////////////////////////////////////////////////////////////////
        #include

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

        #define uchar unsigned char
        #define uint unsigned int

        #define FOSC 12000000L
        #define TIMS (65535-FOSC/12/1000) //在12T模式下定時器中斷1秒的計算方法

        uchar cCount; //定義定時器中斷的次數,依次為根據產生PWM

        sbit PWM=P2^0; //定義直流電機相連的引腳為PWM
        /////////////////////////////////////////////////////////////////////////
        函數名稱:毫秒延時函數
        函數功能:實現毫秒級的延時
        參數介紹:Delay_MS: 定義需要延時的毫秒的數值
        iNumber: 記錄Delay_MS的數值,以for語句實現所要求的延時
        iValue: 要延時毫秒所要進行的循環數值,本數值為實際測得
        返回值:
        注意事項:本實驗是在所用晶振為12M的前提下實現的毫秒延時,本函數是通過循環的形
        式完成,所以如果改變了晶振的頻率,請做相應的改變
        /////////////////////////////////////////////////////////////////////////
        void DelayMs(uint Delay_MS)
        {
        uint iNumber,iValue;
        for(iNumber=0;iNumber{
        iValue=107;
        while(iValue--);
        }
        }
        /////////////////////////////////////////////////////////////////////////
        函數名稱:Init_System
        函數功能:配置定時器,讓其產生每1毫秒產生一次中斷,以此為根據生成相應的PWM
        參數介紹:無
        返回值:
        注意事項:無
        /////////////////////////////////////////////////////////////////////////

        void Init_System()
        {
        DelayMs(50); //穩定系統
        TMOD|= 0x10; //設置定時器1為模式1(16bit)
        //PWM
        TL1 = TIMS; //給定時器1低字節寄存器賦初值
        TH1 = TIMS>>8; //給定時器1高字節寄存器賦初值
        TR1 = 1; //讓定時器1開始工作
        ET1=1; //打開定時器1的中斷允許位
        EA=1; //允許全局中斷

        cCount=0; //給全局變量賦初值
        }
        /////////////////////////////////////////////////////////////////////////
        函數名稱:main
        函數功能:讓定義的P2口的第0個引腳產生PWM,產生占空比為70%的PWM
        參數介紹:無
        返回值:
        注意事項:無
        /////////////////////////////////////////////////////////////////////////
        void main()
        {
        Init_System(); //系統初始化函數
        while(1)
        {
        if(cCount>100) //定義cCount的上限
        cCount=0;
        if(cCount<30) //定義占空比
        PWM=0;
        else PWM=1;
        }
        }
        /////////////////////////////////////////////////////////////////////////
        函數名稱:Timer1_Routine
        函數功能:定時器1中斷服務函數,實現重新給定時器賦值,改變計數變量的值
        參數介紹:無
        返回值:
        注意事項:無
        /////////////////////////////////////////////////////////////////////////

        void Timer1_Routine(void) interrupt 3
        {
        TL1 = TIMS; //重新給定時器1的低字節寄存器賦值
        TH1 = TIMS>>8; //重新給定時器1的高字節寄存器賦值
        cCount++; //
        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 沙河市| 商城县| 门源| 临邑县| 栾城县| 米泉市| 郸城县| 宁明县| 大竹县| 仪陇县| 渭南市| 白朗县| 新乐市| 金昌市| 宕昌县| 南溪县| 双桥区| 天等县| 姚安县| 扶沟县| 凤阳县| 牡丹江市| 冀州市| 阳城县| 大城县| 定边县| 永丰县| 曲松县| 莱西市| 拉孜县| 唐山市| 阳朔县| 江达县| 曲沃县| 巴中市| 离岛区| 贡山| 旅游| 九江县| 兰西县| 浙江省|