久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4524|回復: 0
打印 上一主題 下一主題
收起左側

stc8a8k單片機+編碼器控制PWM輸出測試程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:111376 發表于 2021-7-7 12:01 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

stc8a8k單片機+AB相編碼器控制PWM輸出測試程序,


#include "stc8.h"
#include "intrins.h"

//測試工作頻率為11.0592MHz

//sfr          INTCLKO  = 0x8f;
#define      EX2        0x10
#define      EX3        0x20
#define      EX4        0x40

#define    CYCLE       30000

int val = 0;
int val1 = 200;
int val2 = 5;
bit dir = 0;
bit ccw = 0;
bit cw  = 0;

void PWM_init(void);
void exint_init(void);
/*****************************************************************/
void Delay100us()                //@11.0592MHz
{
        unsigned char i, j;

        _nop_();
        _nop_();
        i = 2;
        j = 15;
        do
        {
                while (--j);
        } while (--i);
}

void Delay500us()                //@11.0592MHz
{
        unsigned char i, j;

        _nop_();
        _nop_();
        i = 6;
        j = 93;
        do
        {
                while (--j);
        } while (--i);
}
/**********************************************************************/
void exint_init()       //外部中斷初始化
{
              //   IT0 = 0; //使能INT0上升沿和下降沿中斷

         IT0 = 1;  //使能INT0下降沿中斷

         EX0 = 1; //使能INT0中斷


       //  IT1 = 0; //使能INT1上升沿和下降沿中斷

      // IT1 = 1;  //使能INT1下降沿中斷

      //   EX1 = 1; //使能INT1中斷


         INTCLKO  = EX2; //使能INT2下降沿中斷

         //INTCLKO |= EX3; //使能INT3下降沿中斷

         //INTCLKO |= EX4; //使能INT4下降沿中斷

        // EA = 1;
}


void PWM_init()     //PWM初始化設置
{
          P_SW2  = 0x80;
    PWMCKS = 0x00; // PWM時鐘為系統時鐘

    PWMC   = CYCLE; //設置PWM周期為

    PWM0T1 = 0x0000;
    PWM0T2 = 0x0001;
    //PWM0CR = 0x88; //使能PWM0-P1.0輸出                               
    //PWM0CR = 0x80; //使能PWM0-P2.0輸出               
    PWM0CR = 0x90; //使能PWM0-P6.0輸出
               
       
          PWM1T1= 0x0000;
    PWM1T2= 0x0001;
    //PWM1CR = 0x88; //使能PWM1-P1.1輸出                       
    //PWM1CR = 0x80; //使能PWM1-P2.1輸出               
    PWM1CR = 0x90; //使能PWM1-P6.1輸出

          PWM2T1 = 0x0000;
    PWM2T2 = 0x0001;
                //PWM2CR = 0x88; //使能PWM2-P1.2輸出       
    //PWM2CR = 0x80; //使能PWM2-P2.2輸出               
    PWM2CR = 0x90; //使能PWM2-P6.2輸出

          PWM3T1 = 0x0000;
    PWM3T2 = 0x0001;
    //PWM3CR = 0x88; //使能PWM2-P1.3輸出                       
    //PWM3CR = 0x80; //使能PWM2-P2.3輸出               
    PWM3CR = 0x90; //使能PWM2-P6.3輸出

          PWM4T1 = 0x0000;
    PWM4T2 = 0x0001;
                //PWM4CR = 0x88; //使能PWM4-P1.4輸出       
    //PWM4CR = 0x80; //使能PWM4-P2.4輸出               
    PWM4CR = 0x90; //使能PWM4-P6.4輸出
               
          PWM5T1 = 0x0000;
    PWM5T2 = 0x0001;
                //PWM5CR = 0x88; //使能PWM5-P1.5輸出
    //PWM5CR = 0x80; //使能PWM5-P2.5輸出               
    PWM5CR = 0x90; //使能PWM5-P6.5輸出
               
          PWM6T1 = 0x0000;
    PWM6T2 = 0x0001;
                //PWM6CR = 0x88; //使能PWM5-P1.6輸出
    //PWM6CR = 0x80; //使能PWM6-P2.6輸出               
    PWM6CR= 0x90; //使能PWM6-P6.6輸出
               
          PWM7T1 = 0x0000;
    PWM7T2 = 0x0001;
                //PWM7CR = 0x88; //使能PWM7-P1.7輸出
    //PWM7CR = 0x80; //使能PWM7-P2.7輸出               
    PWM7CR = 0x90; //使能PWM7-P6.7輸出
               
    P_SW2 = 0x00;

    PWMCR = 0xc0; //啟動PWM模塊

    //EA = 1;
}               
/*************************************************************/               
void main()
{
          

//      P0M0 = 0x00;   P0M1 = 0x00;                             //設置P0.0~P0.7為雙向口模式      
//      P1M0 = 0xff;   P1M1 = 0x00;                             //設置P1.0~P1.7為推挽輸出模式      
//      P2M0 = 0x00;   P2M1 = 0xff;                             //設置P2.0~P2.7為高阻輸入模式      
//      P3M0 = 0xff;   P3M1 = 0xff;                             //設置P3.0~P3.7為開漏模式      
//      P4M0 = 0xff;   P4M1 = 0xff;                             //設置P4.0~P4.7為開漏模式               
//      P5M0 = 0xff;   P5M1 = 0xff;                             //設置P5.0~P5.7為開漏模式               
//      P6M0 = 0xff;   P6M1 = 0xff;                             //設置P6.0~P6.7為開漏模式               
//      P7M0 = 0xff;   P7M1 = 0xff;                             //設置P7.0~P7.7為開漏模式
       
       
            exint_init();
            PWM_init();
       
                        EA = 1;        
       
      PCON = 0x02;  //MCU進入掉電模式               
                                 
      _nop_(); //掉電喚醒后立即進入中斷服務程序

      _nop_();

     while (1)

  {       
                        if(P36==0)
         
        {
           val+=val2;
                                        Delay500us();
           if (val >=30000) val=0 ;
       }
   }
}

/***********************************************************************/

void PWM_Isr() interrupt 22
{
      //static bit dir = 1;
      //static int val = 0;

    if (PWMCFG & 0x80)

                {
        PWMCFG &= ~0x80; //清中斷標志
                                       
       _push_(P_SW2);
                                       
       P_SW2 |= 0x80;
                                       
       PWM0T2 = val;
                         PWM1T2 = val;
                         PWM2T2 = val;
                         PWM3T2 = val;
                         PWM4T2 = val;
                         PWM5T2 = val;
                         PWM6T2 = val;
                         PWM7T2 = val;
                                       
       _pop_(P_SW2);
    }
}
                 
         
/***********************************************************************/                 
void INT0_Isr() interrupt 0   
{
     if((P32==0)&&(P33==1)) ccw=1,cw=0;
           else ccw=0;

     if((P32==0)&&(P33==0)) cw=1,ccw=0;
                 else  cw=0;
       
                                if(ccw==1)                 
        {
           val+=val1;
           if (val >=30000) val=0 ;
        }
                         
        if(cw==1)
        {
                                  val-=val1;
          if (val <=0) val=30000;
        }
}


/*
void INT1_Isr() interrupt 2   
{

}
*/


void INT2_Isr() interrupt 10   

{        
       P50=!P50;
                         P51=!P51;
}

       
/*
       
void INT3_Isr() interrupt 11   
  {
     P60 = !P60; //測試端口
  }
       
       

void INT4_Isr() interrupt 16   
   {
     P60 = !P60; //測試端口
   }
*/

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂1 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天天操操| 精品国产一区二区三区久久久久久 | 一级毛片在线播放 | 夜夜操天天干 | 久久国产精品久久国产精品 | 97超碰人人草 | 久久久久国产视频 | 99久久免费精品视频 | 亚洲一区二区三区在线播放 | 亚洲国产aⅴ成人精品无吗 国产精品永久在线观看 | 99精品视频免费观看 | 福利视频网站 | 91高清视频 | 免费a网站 | 免费一级片 | 欧美a在线 | 亚洲va国产日韩欧美精品色婷婷 | 久久99国产精一区二区三区 | 欧美在线视频网 | 久久久免费毛片 | av大片在线观看 | 午夜影院普通用户体验区 | 天天影视网天天综合色在线播放 | 天天操天天插 | 黄色骚片| 一级特黄a大片 | 九九综合九九 | 91在线视频精品 | 91精品国产综合久久久亚洲 | 国产精品国产a级 | 国产精品久久久久久吹潮日韩动画 | 夜夜爽99久久国产综合精品女不卡 | 精品少妇一区二区三区在线播放 | 国产小视频在线 | 亚洲中国字幕 | 日韩毛片在线免费观看 | 国产精品久久久久久久久图文区 | 欧美激情视频一区二区三区在线播放 | 在线视频91| 一区二区在线 | 波多野结衣精品 |