新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 8051直流電機的開環控制程序

        8051直流電機的開環控制程序

        作者: 時間:2016-11-30 來源:網絡 收藏
        //-----------------------函數聲明,變量定義--------------------------------------------------------
        #include
        #include
        #include
        //-----------------------定義管腳--------------------------------------------------------
        sbit PWM=P1^0; //PWM波形輸出
        sbit DR=P1^1; //方向控制
        #define timer_data (256-100) //定時器預置值,12M時鐘是,定時0.1ms
        #define PWM_T 100 //定義PWM的周期T為10ms
        unsigned char PWM_t; //PWM_t為脈沖寬度(0~100)時間為0~10ms
        unsigned char PWM_count; //輸出PWM周期計數
        unsigned char time_count; //定時計數
        bit direction; //方向標志為
        //--------------------------------------------------------------------------------------------------
        // 函數名稱:timer_init
        // 函數功能:初始化設施定時器
        //--------------------------------------------------------------------------------------------------
        void timer_init()
        {
        TMOD=0x22; /*定時器1為工作模式2(8位自動重裝),0為模式2(8位自動重裝) */
        PCON=0x00;
        TF0=0;
        TH0=timer_data; //保證定時時長為0.1ms
        TL0=TH0;
        ET0=1;
        TR0=1; //開始計數
        EA=1; //中斷允許
        }
        //--------------------------------------------------------------------------------------------------
        // 函數名稱:setting_PWM
        // 函數功能:設置PWM的脈沖寬度和設定方向
        //--------------------------------------------------------------------------------------------------
        void setting_PWM()
        {
        if(PWM_count==0) //初始設置
        {
        PWM_t=20;
        direction=1;
        }
        }
        //--------------------------------------------------------------------------------------------------
        // 函數名稱:IntTimer0
        // 函數功能:定時器中斷處理程序
        //--------------------------------------------------------------------------------------------------
        void IntTimer0() interrupt 1
        {
        time_count++;
        DR=direction;
        if(time_count>=PWM_T)
        {
        time_count=0;
        PWM_count++;
        setting_PWM(); //每輸出一個PWM波調用一次
        }
        if(time_countPWM=1;
        else
        PWM=0;
        }
        //--------------------------------------------------------------------------------------------------
        // 函數名稱:main
        // 用戶主函數
        // 函數功能:主函數
        //--------------------------------------------------------------------------------------------------
        void main()
        {
        timer_init();
        setting_PWM();
        }
        admin2009-6-12 21:522#
        //-----------------------函數聲明,變量定義--------------------------------------------------------
        #include
        #include
        sbit SDA=P1^0; // 將p1.0口模擬數據口
        sbit SCL=P1^1; // 將p1.1口模擬時鐘口
        #define NUM 10 // 接收和發送緩存區的深度
        #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
        unsigned char idata sendbuf[NUM]; // 數據發送緩沖區
        unsigned char idata receivebuf[NUM]; // 數據接收緩沖區
        bit bdata SystemError; // 從機錯誤標志位
        //--------------------------------------------------------------------------------------------------
        // 函數名稱: iic_start()
        //函數功能: 啟動I2C總線子程序
        //--------------------------------------------------------------------------------------------------
        void iic_start(void)
        { EA=0; //時鐘保持高,數據線從高到低一次跳變,I2C通信開始
        SDA = 1;
        SCL = 1;
        delayNOP(); // 延時5us
        SDA = 0;
        delayNOP();
        SCL = 0;
        }
        //--------------------------------------------------------------------------------------------------
        // 函數名稱: iic_stop()
        // 函數功能: 停止I2C總線數據傳送子程序
        //--------------------------------------------------------------------------------------------------
        void iic_stop(void)
        {
        SDA = 0; //時鐘保持高,數據線從低到高一次跳變,I2C通信停止
        SCL = 1;
        delayNOP();
        SDA = 1;
        delayNOP();
        SCL = 0;
        }
        //--------------------------------------------------------------------------------------------------
        // 函數名稱: slave_ACK
        //函數功能: 從機發送應答位子程序
        //--------------------------------------------------------------------------------------------------
        void slave_ACK(void)
        {
        SDA = 0;
        SCL = 1;
        delayNOP();
        SDA = 1;
        SCL = 0;
        }
        //--------------------------------------------------------------------------------------------------
        // 函數名稱: slave_NOACK
        // 函數功能: 從機發送非應答位子程序,迫使數據傳輸過程結束
        //--------------------------------------------------------------------------------------------------
        void slave_NOACK(void)
        {
        SDA = 1;
        SCL = 1;
        delayNOP();
        SDA = 0;
        SCL = 0;
        }
        //--------------------------------------------------------------------------------------------------
        // 函數名稱: check_ACK
        //函數功能: 主機應答位檢查子程序,迫使數據傳輸過程結束
        //--------------------------------------------------------------------------------------------------


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 千阳县| 阿荣旗| 仲巴县| 林州市| 巩义市| 连江县| 酒泉市| 武邑县| 潜山县| 乐山市| 沁源县| 霍林郭勒市| 盈江县| 太仆寺旗| 阳曲县| 翁牛特旗| 阿城市| 芮城县| 白朗县| 平江县| 潜山县| 隆尧县| 宣汉县| 亳州市| 湾仔区| 弋阳县| 平定县| 石门县| 灵台县| 利辛县| 阿克陶县| 闽清县| 青铜峡市| 筠连县| 博客| 临猗县| 霍林郭勒市| 邛崃市| 华坪县| 井研县| 大悟县|