新聞中心

C51軟復(fù)位分析

作者: 時(shí)間:2012-07-04 來源:網(wǎng)絡(luò) 收藏


單片機(jī)復(fù)位的更好方法

帖子中匯編語言解釋如下:

clra//清除ACC=0

pushacc//壓0到堆?!?位

pushacc//再壓0到堆棧——再8位

reti//返回到0地址,從而執(zhí)行。

帖子作者的這種復(fù)位方法比較麻煩,更加簡(jiǎn)單的復(fù)位寫法是(摘自《C缺陷與陷阱》):

(*(void(*)())0)();

本句的分析方法同上,但更加精煉,沒有多余的匯編語句。



上述復(fù)位的方法可稱為軟件復(fù)位。

軟件復(fù)位跟真正上電復(fù)位有很大差別:上電復(fù)位時(shí)大部分寄存器都有確定的復(fù)位值;軟件
復(fù)位則只相當(dāng)于從0地址開始執(zhí)行而已,寄存器不會(huì)變?yōu)榇_定的復(fù)位值。

如果用戶要編程實(shí)現(xiàn)上電復(fù)位這種情況,在程序中不要踢看門狗即可。大部分單片機(jī)都有
看門狗吧。

附錄

筆者精于DSPC24xx,但不太懂;讀者應(yīng)能從函數(shù)指針的定義和引用中看出來,C語言的
設(shè)計(jì)哲學(xué)是使用形式和定義形式一致,雖然這一點(diǎn)飽受質(zhì)疑。

如果你覺得雞蛋好吃時(shí),不必認(rèn)識(shí)那只母雞;但如果你覺得本文不錯(cuò),請(qǐng)來筆者網(wǎng)站坐坐
吧www.1piao.com/wlg.asp。

2004年7月看到這個(gè)有意思的帖子,也干了一件蠢事——買了飛利浦的一款拍照手機(jī),屏幕
有強(qiáng)烈閃爍感,飛利浦拒換,服務(wù)意識(shí)真是不敢恭維。

可來信免費(fèi)轉(zhuǎn)載本文,請(qǐng)保持整篇文章的完整性,包括本句。


----------------2---------------


匯編中的ORG0X0000H在中如何實(shí)現(xiàn).
一般是在連接定位模塊中來進(jìn)行地址分配
1、選擇"optionsfotarget"
2、選擇“BL51Locate”
3、在code欄填入?PR?MAIN?SS(0x800)

其中MAIN是你要定位的函數(shù)名,SS是函數(shù)所在的文件名,要是有多個(gè)函數(shù)需要定位,則在中間加
逗號(hào)。

功能強(qiáng)大的時(shí)鐘中斷
  在單片機(jī)程序設(shè)計(jì)中,設(shè)置一個(gè)好的時(shí)鐘中斷,將能使一個(gè)CPU發(fā)揮兩個(gè)CPU的功效,大大方
便和簡(jiǎn)化程序的編制,提高系統(tǒng)的效率與可***作性。我們可以把一些例行的及需要定時(shí)執(zhí)行的程
序放在時(shí)鐘中斷中,還可以利用時(shí)鐘中斷協(xié)助主程序完成定時(shí)、延時(shí)等***作。
  下面以6MHz時(shí)鐘的AT89系統(tǒng)為例,說明時(shí)鐘中斷的應(yīng)用。
  定時(shí)器初值與中斷周期 時(shí)鐘中斷無需過于頻繁,一般取20mS(50Hz)即可。如需要百分之一
秒的時(shí)基信號(hào),可取10mS(100Hz)。這里取20mS,用定時(shí)器T0工作于16位定時(shí)器方式(方式1)。


關(guān)鍵詞: C51 軟復(fù)位分析

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉