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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機定時器PWM調光問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:499742 發表于 2019-3-30 10:44 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
下面的程序直接改成定時器1和定時器1中斷就不行,為什么呢?求高手指點


#include <reg52.h>


typedef unsigned char uint8;
typedef unsigned int  uint16;
sbit out=P2^1;     //LED輸出
//sbit POWER = P3 ^ 3; //ON/OFF開關鍵


sbit down = P3^0;
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:451718 發表于 2019-3-30 12:53 | 只看該作者
是我瀏覽器出問題了么? 怎么看不到你下面的代碼
回復

使用道具 舉報

板凳
ID:499742 發表于 2019-3-30 16:02 | 只看該作者
robinsonlin 發表于 2019-3-30 12:53
是我瀏覽器出問題了么? 怎么看不到你下面的代碼



#include <reg52.h>

typedef unsigned char uint8;
typedef unsigned int  uint16;

sbit out=P2^1;     //LED輸出
//sbit POWER = P3 ^ 3; //ON/OFF開關鍵
sbit down = P3^0;        // 增加亮度按鈕
sbit up = P3^1;                // 減小亮度按鈕


uint8 t = 0;
uint8 PWM_T = 0;   //占空比控制變量,亮暗快慢變量

void delay_1ms(uint16 t)
{
        uint16 x,y;
        for(x=t;x>0;x--)
                for(y=120;y>0;y--);
}

void Timer0Init()
{

    TMOD|=0x02;     //定時器0工作方式2,TH0是重裝值,TL0是初值
        TH0=200;//210;  //寫入預置初值(取值1-255,數越大PWM頻率越高)
        TL0=200;//210;  //寫入預置值 (取值1-255,數越大PWM頻率越高)
        TR0=1;       //啟動定時器
        ET0=1;       //允許定時器0中斷
        EA=1;        //允許總中斷               
//    TMOD|=0x02;     //定時器0工作方式2,TH0是重裝值,TL0是初值
//        TH1=200;//210;  //寫入預置初值(取值1-255,數越大PWM頻率越高)
//        TL1=200;//210;  //寫入預置值 (取值1-255,數越大PWM頻率越高)
//        TR1=1;       //啟動定時器
//        ET1=1;       //允許定時器0中斷
//        EA=1;        //允許總中斷
}
         
/****************************************************
                  主程序
****************************************************/

void main(void)      
{

    Timer0Init();
        out=1;         //初始化輸出端口
        PWM_T=20;//亮度初值;
         while(1)      
       
         {   
                   if(!up)
                         {
                                if(PWM_T<250)
                                        {
                                          PWM_T++;
                                        }
                               
                                delay_1ms(10);
                        }
                 if(!down)
                         {

                                if(PWM_T>2)
                                        {
                                          PWM_T--;

                                        }
                               
                                delay_1ms(10);
                        }

       
         }      
}
/****************************************************
               /定時器0中斷模擬PWM
****************************************************/

void tim0_isr (void) interrupt 1 //定時器0中斷服務函數
{
         t++;            //每次定時器溢出加1         
         if(t==50)       //PWM周期 100個單位
                 {
                  t=0;   //使t=0,開始新的PWM周期
                  out=0; //LED輸出0
                 }
         
         if(PWM_T==t)   //按照當前占空比切換輸出為高電平
                 {  
                         out=1;  //LED輸出1     //  
                 }
}
回復

使用道具 舉報

地板
ID:499742 發表于 2019-3-30 16:05
robinsonlin 發表于 2019-3-30 12:53
是我瀏覽器出問題了么? 怎么看不到你下面的代碼

第一次發帖不知道為啥看不見后面得程序,可以加個Q1105669801不,請教一下

5#
ID:56665 發表于 2019-3-30 16:47 | 只看該作者
只顯示這幾行
#include <reg52.h>


typedef unsigned char uint8;
typedef unsigned int  uint16;
sbit out=P2^1;     //LED輸出
//sbit POWER = P3 ^ 3; //ON/OFF開關鍵


sbit down = P3^0;
回復

使用道具 舉報

6#
ID:499742 發表于 2019-3-31 18:57 | 只看該作者
可以看到全部程序了
回復

使用道具 舉報

7#
ID:160500 發表于 2019-3-31 20:32 | 只看該作者
如果T0可以的話,T1也是可以的。不能運行是因為你設置的不對。參考下面的代碼:
  1. void Timer1Init(void)                //56微秒@12.000MHz
  2. {
  3.         AUXR &= 0xBF;                //定時器時鐘12T模式
  4.         TMOD &= 0x0F;                //設置定時器模式
  5.         TMOD |= 0x20;                //設置定時器模式
  6.         TL1 = 0xC8;                //設置定時初值
  7.         TH1 = 0xC8;                //設置定時重載值
  8.         TF1 = 0;                //清除TF1標志
  9.         TR1 = 1;                //定時器1開始計時
  10. }
復制代碼
回復

使用道具 舉報

8#
ID:160500 發表于 2019-3-31 20:34 | 只看該作者
AUXR是用STC的單片機時的設置,定時器中斷程序要改成T1的。
回復

使用道具 舉報

9#
ID:388197 發表于 2019-3-31 21:22 | 只看該作者
如果注釋掉的部分是配置T1的,應該寄存器配置有誤吧,傳統51 配置T1模式應該是TMOD高4位,具體多少不記得了,但應該不是配置低4位的0X02.像中斷設置這些最好還是用工具,省得自己去記.
回復

使用道具 舉報

10#
ID:160500 發表于 2019-4-1 13:05 | 只看該作者
這么短的定時時間,51忙的過來嗎?
回復

使用道具 舉報

11#
ID:499742 發表于 2019-4-1 19:25 | 只看該作者
liuzx66 發表于 2019-3-31 20:34
AUXR是用STC的單片機時的設置,定時器中斷程序要改成T1的。

謝謝,受教了
回復

使用道具 舉報

12#
ID:230975 發表于 2020-4-17 22:15 | 只看該作者
liuzx66 發表于 2019-3-31 20:32
如果T0可以的話,T1也是可以的。不能運行是因為你設置的不對。參考下面的代碼:

他的設置怎么不對的?你的這個設置沒有開總中斷,定時器1中斷也沒開
回復

使用道具 舉報

13#
ID:230975 發表于 2020-4-17 22:16 | 只看該作者
liuzx66 發表于 2019-4-1 13:05
這么短的定時時間,51忙的過來嗎?

51忙的過來。新的1T的單片機比這個時間還要短。
回復

使用道具 舉報

14#
ID:230975 發表于 2020-4-17 22:26 | 只看該作者
金滿堂 發表于 2019-3-30 16:02
#include

typedef unsigned char uint8;

這個程序你用定時器0,測試過沒有問題嗎。測試了你的程序有些問題。
回復

使用道具 舉報

15#
ID:230975 發表于 2020-4-17 22:32 | 只看該作者
void init()  //51 定時器1模式2 8位自動裝填,50US
{
  TMOD=0X20;
  TH1=0XCE;
  TL1=0XCE;
  EA=1;
  ET1=1;
  TR1=1;
}
回復

使用道具 舉報

16#
ID:230975 發表于 2020-4-17 22:33 | 只看該作者
你這個程序我調試了一下,用T0,DOWN鍵按下有問題的。你可以試下
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美国产日韩精品 | 爱爱视频在线观看 | 欧美成人一区二区三区 | av免费电影在线 | 2018天天干天天操 | 在线视频亚洲 | 国产精品久久久久国产a级 欧美日韩国产免费 | 欧美精品三区 | 色婷婷精品国产一区二区三区 | 特黄色一级毛片 | 欧美福利| 国产精品一区二区视频 | 啪一啪 | 久久久久久久久久久久久久久久久久久久 | 国产三区视频在线观看 | 亚洲综合区| www97影院 | 亚洲福利一区二区 | 在线91| 久久伊人影院 | 毛片在线视频 | 毛片视频网站 | 免费观看一级黄色录像 | 日本一道本视频 | 狠狠躁夜夜躁人人爽天天高潮 | 国产99久久久久 | 在线亚洲人成电影网站色www | 亚洲色欲色欲www | 亚洲一区中文 | 午夜精品久久久久久久99黑人 | 亚洲中字在线 | 中文字幕不卡一区 | 国产精品自产拍在线观看蜜 | 91在线免费观看网站 | 欧美精品导航 | 精品久久免费 | 国产欧美一区二区三区久久 | 成人在线免费网站 | 超碰人人91| 久久免费大片 | 色视频成人在线观看免 |