標(biāo)題: MSP430狀態(tài)寄存器SR的使用實(shí)驗(yàn)及小結(jié) [打印本頁]
作者: f556 時(shí)間: 2020-3-19 17:22
標(biāo)題: MSP430狀態(tài)寄存器SR的使用實(shí)驗(yàn)及小結(jié)
研究LCD128128驅(qū)動(dòng)程序時(shí),看到一個(gè)語句LCD_SDA = CY; 當(dāng)時(shí)明白C51中CY是進(jìn)位標(biāo)志,這種寫法有點(diǎn)意思,好象很簡潔。原程序見下:
//傳送指令
voidtransfer_command_lcd(unsigned char cmd)
{
int k;
LCD_CS = 0;
LCD_RS= 0;
for (k=0; k<8; k++)
{
cmd = cmd<<1;
LCD_SCL = 0;
LCD_SDA = CY;
LCD_SCL = 1;
}
LCD_CS=1;
}
因?yàn)橐肕SP430驅(qū)動(dòng),很多語句要改,這個(gè)CY也估計(jì)要改。查msp430的h文件,是用C代替CY,但感覺不對(duì)。改完其它語句后,來實(shí)測這MSP430狀態(tài)存器STATUS REGISTER BITS(SR)這個(gè)C是否能正常使用。
找到的SR定義及說明僅有如下的內(nèi)容:
狀態(tài)寄存器SR的位定義:
C :進(jìn)位標(biāo)志位,發(fā)生進(jìn)位時(shí)置1
Z :零位
N :負(fù)數(shù)位
GIE :通用中斷允許位,1開全部中斷,0關(guān)全部中斷。
CPUOFF :CPU關(guān)閉位,既除RAM內(nèi)容,端口、寄存器和特別允許的外圍模塊保持活動(dòng)外,全部停止活動(dòng),所有允許的中斷可以喚醒。
OSCOFF :晶震關(guān)閉位,既除RAM內(nèi)容,端口和寄存器保持活動(dòng)外,全部活動(dòng)停止,只可能在GIE置位條件下有外部中斷或由NMI喚醒,如果不同時(shí)對(duì)CPUOFF置位,則不能對(duì)它置位;
SCG0/1 :系統(tǒng)時(shí)鐘發(fā)生器控制位0和1,控制系統(tǒng)時(shí)鐘發(fā)生器的4種狀態(tài);
V :溢出位,當(dāng)運(yùn)算結(jié)果超出有符號(hào)數(shù)范圍時(shí)置位,對(duì)字和字節(jié)格式均有效。
原來知道并使用的設(shè)置和清除SR的指令是bis、bic,見下例:
__bis_SR_register(LPM0_bits);
__bis_SR_register(LPM2_bits);
__bic_SR_register_on_exit(LPM2_bits);
先測試if(C)這樣的寫法,編譯執(zhí)行沒有問題,但C每次==1,error。原因是C僅僅是BIT0定義,不指定是誰的bit0,一直==1,并非指向SR地址。
當(dāng)然原來常用的寫法是if(data &0x80) ...;高位先,傳完一次再前移1位。
找SR的地址,不知道,后找到個(gè)函數(shù)。
__get_SR_register();
__get_SR_register_on_exit();
最初想到的作用:
1、如本文的作用,取C、Z、N的值等;
2、判斷CPU狀態(tài),如晶振是否正常,是在哪種LPM(LPM0、1、2、3),但不能用于LPM4(CPU全停,只有外部中斷可喚醒)。
3、其它作用,暫不知。
順便測試了一下網(wǎng)上找到的“ C :進(jìn)位標(biāo)志位,發(fā)生進(jìn)位時(shí)置1”這話的意思,描述對(duì)不對(duì)?中間有進(jìn)位時(shí),是否置1?測試結(jié)果:如0001+1=0010,C為0,重復(fù)加一直為0!只有0xff+1時(shí)才C==1,OK,測試完成。這話的描述有岐義!
總結(jié):
1、使用SRC=__get_SR_register()&C;if(SRC)...;與使用if(aa&0x80)...;需注意及關(guān)注的重點(diǎn)是,前者先在取值前data<<=1;移位(數(shù)據(jù)破壞),后者在判斷完MSB(最高位)后才data<<=1;移位(數(shù)據(jù)破壞)。
2、讀取SR相對(duì)復(fù)雜,沒有多少好處,語句多,稍不注意有可能出錯(cuò)。不如用&0x80來的方便,16位的則用&0x8000,也很方便直觀。
3、對(duì)各種編譯器而言,后的兼容性更好。所以大部分程序中和人員常用0x80這個(gè)很強(qiáng)悍的數(shù)。
如果反響好,改天上貼,再寫液晶驅(qū)動(dòng)調(diào)試的艱難歷程及UC1617s的驅(qū)動(dòng)程序。
-
1.jpg
(276.4 KB, 下載次數(shù): 182)
下載附件
2020-3-19 17:19 上傳
SR的定義僅是位,與BIT一樣,無SR的定義
-
2.jpg
(428.16 KB, 下載次數(shù): 176)
下載附件
2020-3-19 17:19 上傳
讀SR的C位成功交換數(shù)據(jù)
-
11.jpg
(246.26 KB, 下載次數(shù): 231)
下載附件
2020-3-19 17:19 上傳
錯(cuò)誤的做法
-
-
狀態(tài)寄存器 實(shí)驗(yàn).zip
2020-3-19 17:26 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
21.88 KB, 下載次數(shù): 6, 下載積分: 黑幣 -5
| 歡迎光臨 (http://www.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |