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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3115|回復: 10
打印 上一主題 下一主題
收起左側(cè)

使用ch552芯片,設(shè)置脈沖輸出,按鍵改變脈寬,不能實現(xiàn),是什么問題呢,求解

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:858009 發(fā)表于 2021-9-13 11:30 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 qwettyuio 于 2021-9-14 15:09 編輯


#include "CH552.H"                                                  
#include "Debug.H"
#include "Timer.H"
#include "stdio.h"
#include "GPIO.H"
#pragma  NOAREGS

sbit LED1 = P3^4;
sbit led2 = P1^3;
sbit key = P1^4;
unsigned int condition=0;//這里高電平占一份
unsigned int cnt;                  //整個周期
void button();
void main( )
{
    CfgFsys( );                                                                //CH554時鐘選擇配置   
    mDelaymS(5);                                                               //修改主頻,建議稍加延時等待主頻穩(wěn)定         
        Port3Cfg(1,4);
        Port1Cfg(1,3);
        Port1Cfg(3,4);
    mTimer0Clk12DivFsys();                                                           //T0定時器時鐘設(shè)置
    mTimer_x_ModInit(0,2);                                                     //T0 定時器模式設(shè)置
    mTimer_x_SetData(0,0x5555);                                                       //T0定時器賦值
    mTimer0RunCTL(1);                                                          //T0定時器啟動        
    ET0 = 1;                                                                   //T0定時器中斷開啟               
    EA = 1;
    while(1)
        {
                if(cnt>=100)
                {
                        LED1=0;
                }
                if(cnt<condition)
                {
                        LED1=1;
                }
                else
                {
                        LED1=0;
                }
                button();
        }
}
void Time0Interrupt(void) interrupt INT_NO_TMR0 using 1
{
        mTimer_x_SetData(0,0x5555);                                                       //T0定時器賦值
    cnt++;
}
void button()
{
        if(key==0)
        {
                mDelaymS(5);
                if(key==0)
                {
                        condition=condition+30;         //調(diào)制脈寬
            led2=!led2;                                //led燈反轉(zhuǎn)
            if(condition>=90)                //如果脈寬等于總周期了等于0
                        {
                                condition=90;
            }
            while(!key);                          //等待按鍵松手
                }
        }
}


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

使用道具 舉報

沙發(fā)
ID:624769 發(fā)表于 2021-9-13 13:23 | 只看該作者
CH552 系統(tǒng)時鐘配置寄存器 不是 (CLOCK_CFG)么?
你那個    CfgFsys( );   哪里來的?  看你用的都是封裝函數(shù), 很多功能只能猜, 改變時鐘要進入安全模式,
你那個 CfgFsys( ); 里面有沒有包含  SAFE_MOD = 0x55;  SAFE_MOD = 0xAA;  如果沒有包含是改不了時鐘的。
回復

使用道具 舉報

板凳
ID:858009 發(fā)表于 2021-9-13 14:12 | 只看該作者
188610329 發(fā)表于 2021-9-13 13:23
CH552 系統(tǒng)時鐘配置寄存器 不是 (CLOCK_CFG)么?
你那個    CfgFsys( );   哪里來的?  看你用的都是封裝函 ...

void        CfgFsys( )  
{
//                 SAFE_MOD = 0x55;
//                 SAFE_MOD = 0xAA;
//     CLOCK_CFG |= bOSC_EN_XT;                          //使能外部晶振
//     CLOCK_CFG &= ~bOSC_EN_INT;                        //關(guān)閉內(nèi)部晶振   
                SAFE_MOD = 0x55;
                SAFE_MOD = 0xAA;
//                 CLOCK_CFG = CLOCK_CFG & ~ MASK_SYS_CK_SEL | 0x07;  // 32MHz       
//                 CLOCK_CFG = CLOCK_CFG & ~ MASK_SYS_CK_SEL | 0x06;  // 24MHz       
//                 CLOCK_CFG = CLOCK_CFG & ~ MASK_SYS_CK_SEL | 0x05;  // 16MHz       
                CLOCK_CFG = CLOCK_CFG & ~ MASK_SYS_CK_SEL | 0x04;  // 12MHz
//                 CLOCK_CFG = CLOCK_CFG & ~ MASK_SYS_CK_SEL | 0x03;  // 6MHz       
//                 CLOCK_CFG = CLOCK_CFG & ~ MASK_SYS_CK_SEL | 0x02;  // 3MHz       
//                 CLOCK_CFG = CLOCK_CFG & ~ MASK_SYS_CK_SEL | 0x01;  // 750KHz       
//                 CLOCK_CFG = CLOCK_CFG & ~ MASK_SYS_CK_SEL | 0x00;  // 187.5MHz               
                SAFE_MOD = 0x00;
}
回復

使用道具 舉報

地板
ID:858009 發(fā)表于 2021-9-13 14:12 | 只看該作者
188610329 發(fā)表于 2021-9-13 13:23
CH552 系統(tǒng)時鐘配置寄存器 不是 (CLOCK_CFG)么?
你那個    CfgFsys( );   哪里來的?  看你用的都是封裝函 ...

有這個設(shè)置的
回復

使用道具 舉報

5#
ID:624769 發(fā)表于 2021-9-13 14:24 | 只看該作者

所以,你的“不能實現(xiàn)”,到底怎么個意思?
回復

使用道具 舉報

6#
ID:858009 發(fā)表于 2021-9-13 15:54 | 只看該作者
188610329 發(fā)表于 2021-9-13 14:24
所以,你的“不能實現(xiàn)”,到底怎么個意思?

改變不了脈寬輸出,用示波器檢測,按鍵按下的時候,輸出的波形脈寬是不變的,就實現(xiàn)不了控制變速小電機控制
回復

使用道具 舉報

7#
ID:624769 發(fā)表于 2021-9-13 16:10 | 只看該作者
                if(key==0)
                {
                        condition=condition+30;         //調(diào)制脈寬
            led2=!led2;                                //led燈反轉(zhuǎn)
            if(condition>=90)                //如果脈寬等于總周期了等于0
                        {
                                condition=90;


以上這段, condition 每次 +30, 當 90 之后 就永遠是 90 了,
再來看看這段:
              if(cnt>=100)
                {
                        LED1=0;
                }
                if(cnt<condition)
                {
                        LED1=1;
                }
                else
                {
                        LED1=0;

因為你 condition 永遠 = 90  所以, cnt 要么 <= 100  LED1 = 0, 要么 cnt >100 就一定也 > 永遠
=90 的 condiction,LED1 還是 =0; 所以 LED1 也永遠= 0;

所以,我真看不出來, 你這段代碼,可以變化的地方……

最后,CH552 不是自帶 PWM 么, 為什么非要用定時器呢?
而且,CH552屬于“產(chǎn)品向”的MCU, 你作為初學者,還是用 “學習向”的MCU比較好,不然成本太高,你消耗不起。
回復

使用道具 舉報

8#
ID:858009 發(fā)表于 2021-9-14 10:00 | 只看該作者
188610329 發(fā)表于 2021-9-13 16:10
if(key==0)
                {
                        condition=condition+30;       ...

這是在學習型51單片機上試用成功,然后在使用ch552芯片的,想知道為什么不能實現(xiàn),哪里出了問題
回復

使用道具 舉報

9#
ID:624769 發(fā)表于 2021-9-14 13:06 | 只看該作者
qwettyuio 發(fā)表于 2021-9-14 10:00
這是在學習型51單片機上試用成功,然后在使用ch552芯片的,想知道為什么不能實現(xiàn),哪里出了問題

前面回復里,我已經(jīng)寫了,
你整個程序,唯一能動的地方就是 button ,
但是,你按下 button 之后 唯一的變化就是         led2=!led2;                                //led燈反轉(zhuǎn)
除此之外,沒有其他任何東西能改變。
所以你說之前在其他的51單片機上試用成功,我相當?shù)牟唤狻?br />
最后,我說的是“產(chǎn)品向”,和“學習向”  不是“型” ,任何單片機都可以學習,但是面向不同,CH552主要是針對產(chǎn)品生產(chǎn)的,所以用不了幾次,學習的話,非常不適合。我忘了是CH559 還是 CH554 的  更加適合學習,你可以看一下手冊。
回復

使用道具 舉報

10#
ID:858009 發(fā)表于 2021-9-14 15:08 | 只看該作者
188610329 發(fā)表于 2021-9-14 13:06
前面回復里,我已經(jīng)寫了,
你整個程序,唯一能動的地方就是 button ,
但是,你按下 button 之后 唯一 ...

這是51的控制,我也不知道什么原因
#include <REGX51.H>
unsigned int condition=0;//這里高電平占一份
unsigned int cnt;                  //整個周期
sbit pin=P2^0;                          //定義pwm輸出口
sbit led=P1^0;                          //定義了一個led燈判斷按鍵是否按下
sbit key=P3^0;                          //定義開關(guān)
void button();
void delay(unsigned int t)        //延時函數(shù)
{
        while(t--);
}
void main()
{
    TMOD=0x01;                                 //定時器初始化
    TL0 = 0xff;                //設(shè)置定時初值
    TH0 = 0xFF;
    EA=1;
    ET0=1;               
    TR0 = 1;
    while(1)
        {
                if(cnt>=100)//整個周期100
                {
                        cnt=0;
                }
        if(cnt<condition)   //如果脈寬大于總周期,輸出高電平      
        {
            pin=1;
        }
        else                           //否則輸出低電平
        {
            pin=0;
        }  
                button();           //按鍵檢測
    }
}
void Isr01() interrupt 1         //定時器時間到了進入中斷服務(wù)
{
        TL0 = 0xff;                //設(shè)置定時初值
    TH0 = 0xFF;
    cnt++;
}
void button()           //按下開關(guān)改變上升沿的時間
{
        if(key!=1)                        //檢測按鍵是否按下
        {
                delay(50);           //延時判斷
        if(key!=1)           //檢測按鍵是否按下
                {
                        condition=condition+30;         //調(diào)制脈寬
            led=!led;                                //led燈反轉(zhuǎn)
            if(condition>=100)                //如果脈寬等于總周期了等于0
                        {
                                condition=0;
            }
            while(!key);                          //等待按鍵松手
         }
     }
}
回復

使用道具 舉報

11#
ID:624769 發(fā)表于 2021-9-14 23:23 | 只看該作者
qwettyuio 發(fā)表于 2021-9-14 15:08
這是51的控制,我也不知道什么原因
#include
unsigned int condition=0;//這里高電平占一份

void Isr01() interrupt 1         //定時器時間到了進入中斷服務(wù)
{
        TL0 = 0xff;                //設(shè)置定時初值
    TH0 = 0xFF;
    cnt++;
}

你這定時器這樣設(shè)置,連出都出不了中斷…… 就死定時器里了。
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 免费成人在线网站 | 国产一区精品在线 | 九九热在线观看视频 | 伊人手机在线视频 | 日韩欧美在线观看 | 久久亚洲美女 | 国产精品久久久久久久久免费丝袜 | 免费观看视频www | 成人在线免费观看 | 国产一区二区激情视频 | 综合精品| 欧美一区二区在线观看视频 | 亚洲区一 | 在线色网| 亚洲欧美视频一区二区 | 激情a| 国产一级视屏 | 国产精品九九九 | 久久久久亚洲精品 | 国产精品性做久久久久久 | 中文字幕99| 青春草国产 | 国产午夜精品一区二区三区嫩草 | 在线免费毛片 | 中文字幕视频在线看 | 午夜免费观看 | 亚洲精品在线免费播放 | 黄片毛片免费看 | 亚洲最大看片网站 | 国产免费xxx | 久久免费精品视频 | 久久精品 | 日韩欧美在线播放 | 国产欧美一区二区三区在线播放 | 日本色婷婷| 亚洲福利| 久久久久久成人 | 精品国产一级片 | 国产一二区在线 | 国产精品久久久久一区二区 | 欧美精品在线观看 |