微控制器的小問題,微控制器的一個小問題

2021-09-06 09:14:54 字數 1987 閱讀 6512

1樓:匿名使用者

1:第二個void是說明沒有形參,可以不寫就像void ds_reset_1()這樣,但各個c編譯器編譯效率和方式不一樣,有的編譯器會自作主張把()括號裡面加上寫看似沒有用的引數,但可能會對程式的正常執行造成影響。這點是在凱尼格的《c陷阱與缺陷》裡明確提出的一個c語言的漏洞,解決這個漏洞的方法就是不用形參的時候,括號內加一個void

2:在51微控制器中sbit是針對可位定址空間(20h~2fh)的一個位。sbit大部分是用在暫存器中的,方便對暫存器的某位進行操作的。

而bit是跟int char 等那樣,用來宣告30h~7fh的使用者ram區域的。

這裡的(void)還是參考上面第一個解釋,它是在函式沒有形參時候的一個防止掉入c漏洞的一個解決方法。

3:參考上面第二。

4,如上面一二的解釋,在函式的括號內加上void,說明了這個函式沒有形參。一般情況下等同於不寫void,但為了程式的健壯性和可靠性。貝爾實驗室的資深科學家凱尼格建議加上void。

多提一點就是,像主函式。如void main(void),而我們一般都寫 main(),這樣有兩個隱患,第一是main前面是宣告瞭返回值的資料形式,如果不寫,它應該等同於int main(),雖然在微控制器中,主函式不會給誰返回一個數,但如果程式後面不寫上一個return 0的話,有些編譯器就會亂編譯,致使程式可能出現跑飛的情況。而第二個void 也不要忽視,因為有的編譯器會預設給main幾個形參的。

這樣如果你下面的程式中寫了一個跟這個預設形參相同的變數名時候,就會出現問題了。

2樓:匿名使用者

void ds_reset_1(void)宣告一個函式,該函式無引數無返回值,

bit tmrbit_1(void) 宣告一個函式,該函式無引數,返回值是bit型,只有0,1,兩種取值範圍

bit testb; 這是定義一個位變數,只有0,1,兩種取值範圍

那麼就可以寫成

testb=tmrbit_1();

bit 是keil c 特有的資料型別,建議仔細看看書,在這幾句話也不好說清楚

sbit 和 sfr 這些是特殊功能暫存器定義用的,比如微控制器的 p1口引腳

在程式設計的時候可以寫成p1=0x33;

為什麼可以這樣寫,編譯器,或者說c語言它怎麼知道p1口在那裡?

這就要sfr來定義了

sfr p1=0x90;

因為在微控制器裡面p1口的地址就是0x90,

這樣就可以用p1口

如果要使用p1.0 引腳,比如要寫p1.0=0;

是不可以的,還需要定義

sbit p1_0=p1^0;

只有定義後,就可以使用語句p1_0=0; 這樣p1.0引腳就拉低了

建議仔細看看書

sbit sfr 的定義方法有很多

sbit還有一個非常適用的功能,不防拿出來和大家分享

微控制器有位定址區,位定址區也可以位元組定址,當某程式需要很多的bit變數,但又希望這些bit變數管理起來比較方便,比如微控制器a定義了8個bit變數,收集a內部的某些資訊,現需要將這8個邏輯資訊傳送給微控制器b,

就可這樣使用

char bdata sbuf_t;

sbit sbuf_t0=sbuf_t^0;

sbit sbuf_t1=sbuf_t^1;

sbit sbuf_t2=sbuf_t^2;

sbit sbuf_t3=sbuf_t^3;

.............

這樣8個bit變數sbuf_t0~sbuf_t8 就使用方便了

sbuf_t=0x00;

8個bit變數就全部等於0了

3樓:匿名使用者

引數中寫void的,是無引數的意思,一般是可以省略的,但有些編譯器會有警告,所以建議沒有引數時寫void。

2,3看不太懂。標準c裡是沒有bit這個資料型別的,可能是在程式中作了位定義。sbit也不懂了。你的問題不是很明確,補充一下吧

4樓:匿名使用者

回答的很充分了。佩服!

微控制器的問題,微控制器的問題有哪些?

問題補充 我把晶振直接焊到微控制器18 19兩引腳上,結果電壓就為2.02 2.告訴你一個判斷ic好壞的方法,一般ic引腳都有二極體特性,你可以用數字萬用 放在外面叫全域性變數,從程式的開始到結尾一直存在,在main 函式裡,作用範圍只在主函式裡,nop 是延時,大約1us,當 a 不為零時,執行 ...

微控制器的種類,微控制器的分類

按微控制器機器字長可分為 4位 很少用 8位,16位,32位按微控制器核心可分為 mcs51 avr pic msp ht arm等等 按微控制器廠家分就更多了,mcs51核心的廠家就有多種 如sst atmel stc winbond等 學習微控制器,電子知識,請到 電子設計網dzsj 種類太多了...

有關51實驗版微控制器的問題,關於51微控制器的問題

初步瀏覽了一下,動態顯示的話delay時間太長就會閃爍。你好 初步看一眼,數碼管閃爍的原因無非是時間間隔太長,先建議你縮短延時時間,再事實。希望我的回答能幫助到你。像是串列埠驅動的數碼管,靜態顯示。這樣的電路,不宜頻繁的顯示,一秒鐘,顯示一次就可以了。把顯示部分,移到定時中斷裡面,即可 main v...