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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

一條MCU指令走600多個機器周期正常嗎?新手求答

[復制鏈接]
跳轉到指定樓層
樓主
ID:826204 發(fā)表于 2021-5-11 17:01 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式

重載TM2的高位初始值  這條指令走了600多個機器周期 重載低位初始值也是   這合理嗎(First和FRE是全局變量,F(xiàn)irst是設定不變的初試值,F(xiàn)RE是計算好的儲存值)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:57657 發(fā)表于 2021-5-11 17:55 | 只看該作者
請確認First和FRE是否為浮點數(shù)據(jù)類型。
回復

使用道具 舉報

板凳
ID:684049 發(fā)表于 2021-5-11 21:33 | 只看該作者
First和fre是什么類型的?是不是float類型的?
回復

使用道具 舉報

地板
ID:826204 發(fā)表于 2021-5-11 22:13 | 只看該作者
npn 發(fā)表于 2021-5-11 17:55
請確認First和FRE是否為浮點數(shù)據(jù)類型。

不是  無符號整數(shù)型
回復

使用道具 舉報

5#
ID:826204 發(fā)表于 2021-5-11 22:13 | 只看該作者
花心的劉備 發(fā)表于 2021-5-11 21:33
First和fre是什么類型的?是不是float類型的?

不是  為unsigned int類型
回復

使用道具 舉報

6#
ID:834651 發(fā)表于 2021-5-11 22:25 | 只看該作者
確認First和FRE是否為浮點數(shù)據(jù)類型
回復

使用道具 舉報

7#
ID:824490 發(fā)表于 2021-5-11 23:21 | 只看該作者
這個要看C代碼展開后的匯編代碼是什么。。
一行C可能會編譯成N條匯編指令。。
回復

使用道具 舉報

8#
ID:889094 發(fā)表于 2021-5-12 01:13 來自手機 | 只看該作者
寫的timer1實際上是定時器0。。。。一個加法減法除法應該用不了那么多,仔細檢查一下
回復

使用道具 舉報

9#
ID:420836 發(fā)表于 2021-5-12 07:45 | 只看該作者
600個機器指令周期似乎是不可能的。
回復

使用道具 舉報

10#
ID:592807 發(fā)表于 2021-5-12 08:24 | 只看該作者
TTQ001 發(fā)表于 2021-5-12 07:45
600個機器指令周期似乎是不可能的。

是每個指令都600機器周期嗎?如果是的話就是單片機問題。
回復

使用道具 舉報

11#
ID:826204 發(fā)表于 2021-5-12 10:00 來自手機 | 只看該作者
名字不是重點 發(fā)表于 2021-5-11 23:21
這個要看C代碼展開后的匯編代碼是什么。。
一行C可能會編譯成N條匯編指令。。

用keil5仿真  可以看匯編語言嗎
回復

使用道具 舉報

12#
ID:826204 發(fā)表于 2021-5-12 10:00 來自手機 | 只看該作者
黃youhui 發(fā)表于 2021-5-12 08:24
是每個指令都600機器周期嗎?如果是的話就是單片機問題。

不是  就這一個  所以很納悶
回復

使用道具 舉報

13#
ID:592807 發(fā)表于 2021-5-12 10:11 | 只看該作者
旅途1 發(fā)表于 2021-5-12 10:00
不是  就這一個  所以很納悶

這樣試試看,你初始化時不要計算(65536-1000)/256這些,你就直接TH0 = 252;TH1 = 24;.可能是你的單片機不具備多位數(shù)的算法(浮點算法)
回復

使用道具 舉報

14#
ID:826204 發(fā)表于 2021-5-12 16:57 | 只看該作者
黃youhui 發(fā)表于 2021-5-12 10:11
這樣試試看,你初始化時不要計算(65536-1000)/256這些,你就直接TH0 = 252;TH1 = 24;.可能是你的單片機 ...

謝謝您的回答   
這個  我試了下  定時器0 寫(65536-1000)/256和直接寫“256”這樣都是兩個機器周期
TM2定時器直接寫“256”這樣的也是兩個機器周期    而(65536-(First+FRE))/256這樣寫就600多個機器周期   不知道是不是First 和FRE調用的時候   走了很多指令  
下面附上部分程序
回復

使用道具 舉報

15#
ID:826204 發(fā)表于 2021-5-12 16:59 | 只看該作者
黃youhui 發(fā)表于 2021-5-12 10:11
這樣試試看,你初始化時不要計算(65536-1000)/256這些,你就直接TH0 = 252;TH1 = 24;.可能是你的單片機 ...

uint curvalue;
uint error;
uint enlarge;
uint FRE=0;
uint First=500;
uint setvalue=20;     //數(shù)據(jù)類型  uint為"unsigned int"


void time1()
{
  TMOD |=0X01;
        TH0=(65536-2000)/256;
        TL0=(65536-2000)%256;
        EA=1;
        ET0=1;
        TR0=1;
}
void TIM2Inital()
{
        T2MOD=0;
        TH2=(65536-(First+FRE))/256;      //設置定時初值
        TL2=(65536-(First+FRE))%256;      //設置定時初值
  RCAP2H = (65536-(First+FRE))/256; //設置定時重載值
  RCAP2L = (65536-(First+FRE))%256; //設置定時重載值
        EA=1;                             //打開總中斷
  ET2=1;                           //打開定時器中斷                    
  TR2=1;                           //打開定時器開關
}
void timer1(void)interrupt 1
{
  TH0=(65536-2000)/256;
        TL0=(65536-2000)%256;
        RCAP2H = (65536-(First+FRE))/256; //設置定時重載值
  RCAP2L = (65536-(First+FRE))%256; //設置定時重載值
}
void TM2(void) interrupt 5 using 1
{
        TF2=0;                           //自動清零
        if(curvalue<=20)
        {
        error=setvalue-curvalue;         //偏差,靠近設定值時遞減
        enlarge=50*error;                //放大
        FRE=1000-enlarge;                             //靠近設定值時FRE遞增,脈沖頻率變大,速度變慢
        DIR=1;
          if(error<3)                    
          {
            ET2=0;
          }
  }
        else
        {
                DIR=0;
                error=curvalue-setvalue;        //同上
                enlarge=5*error;
                FRE=1000-enlarge;
        }
        shudu2=~shudu2;
}
回復

使用道具 舉報

16#
ID:130230 發(fā)表于 2021-5-12 18:11 | 只看該作者
不合理,進debug看匯編代碼大概查一下。
回復

使用道具 舉報

17#
ID:592807 發(fā)表于 2021-5-12 20:59 | 只看該作者
旅途1 發(fā)表于 2021-5-12 16:59
uint curvalue;
uint error;
uint enlarge;

你在做PWM調節(jié)嗎?
1 確定鍵全局變量換成普通數(shù)字是否會恢復正常   
2 中斷是否會嵌套  例如TIM1中斷里面觸發(fā)TIM2中斷
3 你的全局變量是否在主函數(shù)頻繁出現(xiàn)  例如if(First > 0){delay_ms(10);這里是中斷{First = 0;}First = First - 100;}
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品免费看 | 久久精品国产久精国产 | 中文字幕在线一 | 鸳鸯谱在线观看高清 | 亚洲国产二区 | 精品一区精品二区 | 中文字幕亚洲国产 | 欧洲高清转码区一二区 | 狠狠操你| 激情欧美一区二区三区中文字幕 | 国产激情自拍视频 | 欧美精品在线免费观看 | 亚洲国产精品福利 | 亚洲精品成人网 | 日韩精品一区二区三区免费视频 | 色999视频 | 国产成都精品91一区二区三 | 成人av在线网站 | av不卡一区 | 草久久久 | 夜夜精品浪潮av一区二区三区 | 中文字幕在线一区 | 国产一区二区在线播放 | 久久久久久久久久久久久9999 | 亚洲精选久久 | 国产精品视频不卡 | 日韩一区二区三区视频 | 欧美一级精品片在线看 | 欧美一区二区三区四区视频 | 国产精品日本一区二区在线播放 | 久久中文字幕视频 | 精品视频一区二区三区 | 日本久久精品视频 | 在线免费观看黄网 | 国产精品久久福利 | 国产成视频在线观看 | 91观看| 一区二区三区精品在线 | 成人在线小视频 | 国产精品国产精品国产专区不片 | 黄色片免费看 |