找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3795|回復: 16
收起左側(cè)

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

[復制鏈接]
ID:826204 發(fā)表于 2021-5-11 17:01 | 顯示全部樓層 |閱讀模式
RL37T%RS_~0MPODFQCOVMK2.png
重載TM2的高位初始值  這條指令走了600多個機器周期 重載低位初始值也是   這合理嗎(First和FRE是全局變量,F(xiàn)irst是設(shè)定不變的初試值,F(xiàn)RE是計算好的儲存值)
回復

使用道具 舉報

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ù)型
回復

使用道具 舉報

ID:826204 發(fā)表于 2021-5-11 22:13 | 顯示全部樓層
花心的劉備 發(fā)表于 2021-5-11 21:33
First和fre是什么類型的?是不是float類型的?

不是  為unsigned int類型
回復

使用道具 舉報

ID:834651 發(fā)表于 2021-5-11 22:25 | 顯示全部樓層
確認First和FRE是否為浮點數(shù)據(jù)類型
回復

使用道具 舉報

ID:824490 發(fā)表于 2021-5-11 23:21 | 顯示全部樓層
這個要看C代碼展開后的匯編代碼是什么。。
一行C可能會編譯成N條匯編指令。。
回復

使用道具 舉報

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

使用道具 舉報

ID:420836 發(fā)表于 2021-5-12 07:45 | 顯示全部樓層
600個機器指令周期似乎是不可能的。
回復

使用道具 舉報

ID:592807 發(fā)表于 2021-5-12 08:24 | 顯示全部樓層
TTQ001 發(fā)表于 2021-5-12 07:45
600個機器指令周期似乎是不可能的。

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

使用道具 舉報

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

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

使用道具 舉報

ID:826204 發(fā)表于 2021-5-12 10:00 來自手機 | 顯示全部樓層
黃youhui 發(fā)表于 2021-5-12 08:24
是每個指令都600機器周期嗎?如果是的話就是單片機問題。

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

使用道具 舉報

ID:592807 發(fā)表于 2021-5-12 10:11 | 顯示全部樓層
旅途1 發(fā)表于 2021-5-12 10:00
不是  就這一個  所以很納悶

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

使用道具 舉報

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調(diào)用的時候   走了很多指令  
下面附上部分程序
回復

使用道具 舉報

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

使用道具 舉報

ID:130230 發(fā)表于 2021-5-12 18:11 | 顯示全部樓層
不合理,進debug看匯編代碼大概查一下。
回復

使用道具 舉報

ID:592807 發(fā)表于 2021-5-12 20:59 | 顯示全部樓層
旅途1 發(fā)表于 2021-5-12 16:59
uint curvalue;
uint error;
uint enlarge;

你在做PWM調(diào)節(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;技術(shù)交流QQ群281945664

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

快速回復 返回頂部 返回列表