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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3772|回復(fù): 7
收起左側(cè)

這個(gè)單片機(jī)函數(shù)功能是16位自動(dòng)重載模式中給定時(shí)器設(shè)定初值的,賦值給8位寄存器TL0

[復(fù)制鏈接]
ID:224104 發(fā)表于 2020-9-25 08:45 | 顯示全部樓層 |閱讀模式
廢話不多說(shuō),先上代碼

/************************* 定時(shí)器設(shè)定計(jì)數(shù)(16位) *************************
        
                變量名                |                        取值范圍                |                        變量含義
                NUM                        |                        0 ~ 4                        |                        定時(shí)器編號(hào)
                COUNT                |                0 ~ 65535                |                        定時(shí)器計(jì)數(shù)值
        
*/


void _TIMER_COUNT_16_(uint8_t NUM, uint16_t COUNT){
        
        uint16_t Temp;
        Temp = 65536 - COUNT;
        
        switch (NUM){
                case 0 :
                        TL0 = Temp;
                        TH0 = _crol_(Temp,8);
                        break;
                case 1 :
                        TH1 = Temp;
                        TH1 = _crol_(Temp,8);
                        break;
                case 2 :
                        T2L = Temp;
                        T2H = _crol_(Temp,8);
                        break;
                case 3 :
                        T3L = Temp;
                        T3H = _crol_(Temp,8);
                        break;
                case 4 :
                        T4L = Temp;
                        T4H = _crol_(Temp,8);
                        break;
        }
        
}


我本來(lái)想寫一個(gè)庫(kù)函數(shù),做一個(gè)長(zhǎng)期的積累,結(jié)果就出怪事了。


這段代碼里的兩個(gè)變量在上面注釋里有,編譯之后單步運(yùn)行,發(fā)現(xiàn)變量監(jiān)視器里發(fā)生“靈異事件”。


這個(gè)函數(shù)功能是16位自動(dòng)重載模式中給定時(shí)器設(shè)定初值的。假定 NUM = 0(給定時(shí)器0設(shè)定初值)。Temp是一個(gè)16位無(wú)符號(hào)變量,用來(lái)存放定時(shí)器初始值(65536 - 計(jì)數(shù)值COUNT)。賦值給8位寄存器TL0,直接將低8位送進(jìn)去,沒(méi)有任何問(wèn)題。然后Temp右移8位,幅值給TH0,但這中間發(fā)生了幾個(gè)奇怪的問(wèn)題。


1、測(cè)試,Temp(定時(shí)器初值) = 65536 - COUNT(計(jì)數(shù)值)。但這條語(yǔ)句執(zhí)行完之后,COUNT的值也發(fā)生了變化,雖說(shuō)運(yùn)算結(jié)果是正確的,而且COUNT是局部變量不影響主函數(shù),但哪有把操作數(shù)改變的道理?萬(wàn)一我下面再需要用到COUNT呢?那不全亂套了?
截圖2.png



2、一開始我用的是 “>>” 右移運(yùn)算符,但無(wú)論怎么改都沒(méi)有效果,Temp變量并沒(méi)有右移8位。后來(lái)改用 intrins.h 的庫(kù)函數(shù) _cror_(),不用不要緊,一用更邪門了。_cror_(Temp,8)操作之后連NUM這個(gè)數(shù)都改變了,但這可是NUM!這是定時(shí)器編號(hào)啊,函數(shù)里沒(méi)有修改,也根本不需要修改,怎么莫名其妙地就被改了呢?而且說(shuō)好的移位呢?也沒(méi)實(shí)現(xiàn)啊……
截圖1.png



希望前輩答疑解惑,多謝啦!



回復(fù)

使用道具 舉報(bào)

無(wú)效樓層,該帖已經(jīng)被刪除
無(wú)效樓層,該帖已經(jīng)被刪除
ID:47286 發(fā)表于 2020-9-25 20:13 | 顯示全部樓層
用宏定義寫不好么 你這么寫是挺方便 但編譯后文件大 運(yùn)行速度也有影響 畢竟要走一個(gè)switch

#define FOC 1 //1=11.0592 2=22.1148

#if FOC==1 //如果 頻率設(shè)置=1 編譯以下內(nèi)容
THV=0x??; //高8位
THL=0x??; //低8位
#elif FOC==2 //如果 頻率設(shè)置=2 編譯以下內(nèi)容
THV=0x??; //高8位
THL=0x??; //低8位
#endif 結(jié)束編譯

TL0 = THV;
TH0 = TLV;

這樣寫編譯的時(shí)候?qū)嶋H上只編譯實(shí)際值 沒(méi)有額外運(yùn)算 而且 也可以實(shí)現(xiàn)靈活配置
回復(fù)

使用道具 舉報(bào)

ID:224104 發(fā)表于 2020-9-26 15:33 | 顯示全部樓層
dzbj 發(fā)表于 2020-9-25 20:13
用宏定義寫不好么 你這么寫是挺方便 但編譯后文件大 運(yùn)行速度也有影響 畢竟要走一個(gè)switch

#define FOC  ...

只是單純想寫個(gè)庫(kù),而且初始化只有一次,不是循環(huán)調(diào)用,應(yīng)該不影響運(yùn)行效率
回復(fù)

使用道具 舉報(bào)

ID:311846 發(fā)表于 2020-9-27 16:46 | 顯示全部樓層
本帖最后由 權(quán)威人物 于 2020-9-27 16:51 編輯

親,移位操作這邊建議加括號(hào)哦!對(duì)于一些符號(hào)類型不匹配的也建議手動(dòng)加強(qiáng)制轉(zhuǎn)換,對(duì)于_cror_建議仔細(xì)看看的函數(shù)說(shuō)明,以后對(duì)函數(shù)有異議麻煩請(qǐng)自行找度娘,一般不會(huì)重現(xiàn)偏差。
回復(fù)

使用道具 舉報(bào)

ID:311846 發(fā)表于 2020-9-27 16:49 | 顯示全部樓層
對(duì)于NUM驗(yàn)證直接,固定NUM的值,在其他所有地方的NUM使用屏蔽掉
回復(fù)

使用道具 舉報(bào)

ID:224104 發(fā)表于 2020-9-28 10:45 | 顯示全部樓層
權(quán)威人物 發(fā)表于 2020-9-27 16:46
親,移位操作這邊建議加括號(hào)哦!對(duì)于一些符號(hào)類型不匹配的也建議手動(dòng)加強(qiáng)制轉(zhuǎn)換,對(duì)于_cror_建議仔細(xì)看看的 ...

剛剛查了一下才知道,_cror_ 是字節(jié)變量右移,謝謝啦
回復(fù)

使用道具 舉報(bào)

ID:224104 發(fā)表于 2020-9-28 10:48 | 顯示全部樓層
權(quán)威人物 發(fā)表于 2020-9-27 16:49
對(duì)于NUM驗(yàn)證直接,固定NUM的值,在其他所有地方的NUM使用屏蔽掉

請(qǐng)問(wèn)具體代碼怎么實(shí)現(xiàn)呢?
回復(fù)

使用道具 舉報(bào)

ID:224104 發(fā)表于 2020-9-28 11:37 | 顯示全部樓層
問(wèn)題已經(jīng)完全解決了,經(jīng)測(cè)試是編譯器的鍋。 2.png

選擇8(默認(rèn))就會(huì)出現(xiàn)各種各樣莫名其妙的問(wèn)題。改成3之后所有的錯(cuò)誤都沒(méi)了。

評(píng)分

參與人數(shù) 1黑幣 +40 收起 理由
admin + 40 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表