欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 兩個定時器產生頻率固定為10hz的方波 求大神改下程序 [打印本頁]

作者: 淺憶,汐辰!    時間: 2017-9-26 09:53
標題: 兩個定時器產生頻率固定為10hz的方波 求大神改下程序
我利用兩個定時器產生頻率固定為10hz的方波,占空比隨著按鍵變化,但是觀察不到方波,請大神指出程序的錯誤
#include <reg52.h>
#define  uchar unsigned char
#define  uint unsigned int
#define  ALL  65536             //定時器工作方式1時,最大基數長度 65536;
#define  F_osc 12000000         //晶振頻率12M;

sbit PWM_out=P0^7;
sbit led=P2^0;
sbit duty_up=P3^0;    //占空比增加按鍵
sbit duty_down=P3^1;  //占空比減少按鍵
uint duty=1;                  //初始占空比為10%
float T=0.1;          //周期定為0.1s

uchar num;
/*****延時******/
void delay(uint z)
{
  uint i,j;
  for(i=z;i>0;i--)
     for(j=110;j>0;j--);
}
/*****鍵盤掃描******/
void key_scan()
{
   if(duty_up==0)
   delay(5);
   if(duty_up==0)
     {
            duty=duty+1;
                if(duty>9)
                duty=1;
         }
        if(duty_down==0)
        delay(5);
        if(duty_down==0)
          {
            duty=duty-1;
                if(duty<1)
                duty=9;
          }
}
/******主函數*******/
void main()
{
   TMOD=0x11;  //定時器0,工作方式1;定時器1,工作方式1;
   TH0=(65536-50000)/256;
   TL0=(65536-50000)%256; //定時0.1s,方波頻率10HZ
   TH1=(65536-duty*10000)/256;
   TL1=(65536-duty*10000)%256;         //計算脈寬時間,晶振頻率12
   EA=1;         //開總中斷
   ET0=1;    //開定時器0中斷
   ET1=1;
   TR0=1;    //啟動定時器0
   TR1=1;
   while(1) //程序在這里等待
   {
             key_scan();    //鍵盤掃描確定占空比
         
   }
}
/*****T0定時器中斷*****/
void T0_time() interrupt 1
{
   TH0=(65536-50000)/256;
   TL0=(65536-50000)%256;   //重裝定時器初值
   TR0=1;
   PWM_out=1;
   num=num++;
   if(num==4)
     {
                 led=~led;
                num=0;
         }
}
/****T1定時器中斷*****/
void T1_time() interrupt 3
{
   TH1=(65536-duty*10000)/256;
   TL1=(65536-duty*10000)%256;
   TR0=0;
   PWM_out=0;
}


作者: yzwzfyz    時間: 2017-9-27 06:53
12M晶振,傳統51:12分頻后,1us一個定時器CLK,定時器最大容量65536,即最大定時為65536us,樓主的0.1S從何處而來?
你想像一下,或畫一個PWM波的圖象,看一下PMW的上沿與上沿的時間間隔,再看一下下沿與下沿的時間間隔,它倆的周期一定是一樣的,且相位保持一下距離。你的T0置1,是一個時間間隔,T1清0又是另一個時間間隔,周期不一樣。
樓主構思設計錯誤,不是程序不會寫,是主導思想不正確。

作者: wulin    時間: 2017-9-27 08:55
/****T1定時器中斷*****/
void T1_time() interrupt 3
{
   TH1=(65536-duty*10000)/256;//duty不能大于6,否則邏輯錯誤
   TL1=(65536-duty*10000)%256;
   TR0=0;                                                        //T0關閉,哪來T0中斷工作?
   PWM_out=0;
}





歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1