C51軟復(fù)位分析
單片機復(fù)位的更好方法
帖子中匯編語言解釋如下:
clra//清除ACC=0
pushacc//壓0到堆?!?位
pushacc//再壓0到堆棧——再8位
reti//返回到0地址,從而執(zhí)行。
帖子作者的這種復(fù)位方法比較麻煩,更加簡單的復(fù)位寫法是(摘自《C缺陷與陷阱》):
(*(void(*)())0)();
本句的分析方法同上,但更加精煉,沒有多余的匯編語句。
上述復(fù)位的方法可稱為軟件復(fù)位。
軟件復(fù)位跟真正上電復(fù)位有很大差別:上電復(fù)位時大部分寄存器都有確定的復(fù)位值;軟件
復(fù)位則只相當于從0地址開始執(zhí)行而已,寄存器不會變?yōu)榇_定的復(fù)位值。
如果用戶要編程實現(xiàn)上電復(fù)位這種情況,在程序中不要踢看門狗即可。大部分單片機都有
看門狗吧。
附錄
筆者精于DSPC24xx,但不太懂C51;讀者應(yīng)能從函數(shù)指針的定義和引用中看出來,C語言的
設(shè)計哲學(xué)是使用形式和定義形式一致,雖然這一點飽受質(zhì)疑。
如果你覺得雞蛋好吃時,不必認識那只母雞;但如果你覺得本文不錯,請來筆者網(wǎng)站坐坐
吧www.1piao.com/wlg.asp。
2004年7月看到這個有意思的帖子,也干了一件蠢事——買了飛利浦的一款拍照手機,屏幕
有強烈閃爍感,飛利浦拒換,服務(wù)意識真是不敢恭維。
可來信免費轉(zhuǎn)載本文,請保持整篇文章的完整性,包括本句。
----------------2---------------
匯編中的ORG0X0000H在C51中如何實現(xiàn).
一般是在連接定位模塊中來進行地址分配
1、選擇"optionsfotarget"
2、選擇“BL51Locate”
3、在code欄填入?PR?MAIN?SS(0x800)
其中MAIN是你要定位的函數(shù)名,SS是函數(shù)所在的文件名,要是有多個函數(shù)需要定位,則在中間加
逗號。
功能強大的時鐘中斷
在單片機程序設(shè)計中,設(shè)置一個好的時鐘中斷,將能使一個CPU發(fā)揮兩個CPU的功效,大大方
便和簡化程序的編制,提高系統(tǒng)的效率與可***作性。我們可以把一些例行的及需要定時執(zhí)行的程
序放在時鐘中斷中,還可以利用時鐘中斷協(xié)助主程序完成定時、延時等***作。
下面以6MHz時鐘的AT89C51系統(tǒng)為例,說明時鐘中斷的應(yīng)用。
定時器初值與中斷周期 時鐘中斷無需過于頻繁,一般取20mS(50Hz)即可。如需要百分之一
秒的時基信號,可取10mS(100Hz)。這里取20mS,用定時器T0工作于16位定時器方式(方式1)。
評論