用戶應(yīng)用程序在運行過程中,有時會有特殊需求,需要實現(xiàn)單片機系統(tǒng)復(fù)位(熱啟動之一),傳統(tǒng)的8051單片機由于硬件上未支持此功能,用戶必須用軟件模擬實現(xiàn),實現(xiàn)起來較麻煩。STC單片機增加了相應(yīng)的硬件功能,內(nèi)部的ISP/IAP控制寄存器ISP_CONTR便可以實現(xiàn)此功能。用戶只需簡單的控制ISP_CONTR特殊功能寄存器的其中兩位SWBS和SWRST就可以實現(xiàn)系統(tǒng)復(fù)位。
ISP/IAP控制寄存器(ISP_CONTR)
STC單片機ISP/IAP控制寄存器在特殊功能寄存器中的字節(jié)地址為E7H,不能位尋址,該寄存器用來管理和ISP/IAP相關(guān)的功能設(shè)定及是否軟件復(fù)位等。單片機復(fù)位時該寄存器全部被清0。其各位的定義如表4.3.1所示。
表1 ISP/IAP控制寄存器(ISP_CONTR)
ISPEN:ISP/IAP 功能允許位。0:禁止ISP/IAP編程改變Flash。1:允許編程改變Flash。
SWBS:軟件選擇從用戶應(yīng)用程序區(qū)啟動(0),還是從ISP程序區(qū)啟動(1)。要與SWRST直接配合才可以實現(xiàn)。
SWRST:0:不操作;1:產(chǎn)生軟件系統(tǒng)復(fù)位,硬件自動清零。
WT2、WT1、WT0:ISP/IAP編程時設(shè)定CPU等待的最長時間。ISP/IAP編程時可對Flash進(jìn)行讀操作、寫操作、擦除操作,當(dāng)進(jìn)行這些操作時,時鐘將被CPU鎖定只進(jìn)行這些操作,而不同的操作將會耗費CPU不同的時間,這里我們通過人為設(shè)定可以給CPU一個最長的等待時間,若在此時間段內(nèi)相應(yīng)的操作未完成,數(shù)據(jù)將丟失或錯誤。以下給出芯片廠商推薦的等待時間關(guān)系表,如表3.4.2所示:
表2 ISP/IAP編程CPU等待時間參考表
SWBS與SWRST組合情況如下:
從用戶應(yīng)用程序區(qū)(AP區(qū))軟件復(fù)位并切換到用戶應(yīng)用程序區(qū)(AP區(qū))開始執(zhí)行程序:
ISP_CONTR=00100000B,SWBS=0(選擇AP區(qū)),SWRST=1(軟復(fù)位)。
從系統(tǒng)ISP監(jiān)控程序區(qū)軟件復(fù)位并切換到用戶應(yīng)用程序區(qū)(AP區(qū))開始執(zhí)行程序:
ISP_CONTR=00100000B,SWBS=0(選擇AP區(qū)),SWRST=1(軟復(fù)位)。
從用戶應(yīng)用程序區(qū)(AP區(qū))軟件復(fù)位并切換到系統(tǒng)ISP監(jiān)控程序區(qū)開始執(zhí)行程序:
ISP_CONTR=01100000B,SWBS=1(選擇ISP區(qū)),SWRST=1(軟復(fù)位)。
從系統(tǒng)ISP監(jiān)控程序區(qū)軟件復(fù)位并切換到系統(tǒng)ISP監(jiān)控程序區(qū)開始執(zhí)行程序:
ISP_CONTR=01100000B,SWBS=1(選擇ISP區(qū)),SWRST=1(軟復(fù)位)。
本復(fù)位是整個系統(tǒng)復(fù)位,所有的特殊功能寄存器都會復(fù)位到初始值,I/O口也會被初始化。
用戶應(yīng)用程序區(qū)(AP區(qū))指僅僅是用戶自己編寫的程序區(qū)。
ISP監(jiān)控程序區(qū)ISP區(qū)是指芯片出廠時就已經(jīng)固化在單片機內(nèi)部的一段程序,STC單片機可以進(jìn)行ISP串行下載程序,這就是因為芯片在出廠時已經(jīng)在單片機內(nèi)部固化了ISP引導(dǎo)碼,程序首次上電時先會從ISP區(qū)開始執(zhí)行代碼,體現(xiàn)在實際實驗中時,就是我們在下載程序時,先要點擊下載軟件界面上的下載,然后再開啟單片機電源,當(dāng)單片機檢測到上位機有下載程序的需要時,便啟用ISP下載功能給單片機下載程序。若經(jīng)過短暫的時間沒有檢測到上位機有下載程序的需求,單片機便會從用戶應(yīng)用程序區(qū)(AP區(qū))開始執(zhí)行代碼。
接下來我們通過一個例程,為大家演示如何使用STC單片機的軟件復(fù)位功能實現(xiàn)運行中的程序突然復(fù)位。
【例】:在實驗板上實現(xiàn)如下描述,在數(shù)碼管前兩位顯示以秒遞增數(shù),到增加到10時,利用STC單片機的軟件復(fù)位功能讓單片機復(fù)位。
1 #include 2 #define uchar unsigned char//宏定義 3 #define uint unsigned int 4 sbit dula=P2^6; //段控制位 5 sbit wela=P2^7; //位控制位 6 uchar miao,fen,aa,n1,n2,n3,n4; 7 uchar code table[]={ //顯示編碼 8 0x3f,0x06,0x5b,0x4f, 9 0x66,0x6d,0x7d,0x07, 10 0x7f,0x6f,0x77,0x7c, 11 0x39,0x5e,0x79,0x71}; 12 13 void delay(uint z); //延時程序聲明 14 void init(void);//初始化程序聲明 15 void display(uchar n1 ,uchar n2,uchar n3,uchar n4); //顯示程序聲明 16 17 18 void main(){ //主程序 19 init(); //調(diào)用初始化程序 20 while(1){ //進(jìn)入大循環(huán) 21 if(aa==20){ //判斷是否到了1S 22 miao++; //秒數(shù)加1 23 if(miao==60){ //判斷是否到了60秒 24 miao=0; //秒數(shù)清0 25 fen++; //分?jǐn)?shù)加1 26 if(fen==60){ //判斷是否到了60分 27 fen=0; //分?jǐn)?shù)到60則清0 28 } 29 n1=fen/10; //第一個數(shù)碼管顯示分的十位 30 n2=fen%10; //第二個數(shù)碼管顯示分的個位 31 n3=miao/10; //第三個數(shù)碼管顯示秒的十位 32 n4=miao%10; //第四個數(shù)碼管顯示秒的個位 33 } 34 display(n1,n2,n3,n4); 35 } 36 } 37 } 38 39 void delay(uint z){ //延時程序 40 uint x,y; 41 for(x=z;x>0;x--) 42 for(y=110;y>0;y--); 43 } 44 45 46 47 void display(uchar n1 ,uchar n2,uchar n3,uchar n4) { 48 dula=1; //開段選 49 P0=table[n1]; //送分的十位 50 dula=0; //關(guān)段選 51 P0=0xff; //消隱 52 wela=1; //開位選 53 P0=0xfe; //選通分的十位 54 wela=0; //關(guān)位選 55 P0=0xff; //消隱 56 delay(1); //延時 57 58 dula=1; //開段選 59 P0=table[n2]; //送分的個位 60 dula=0; //關(guān)段選 61 P0=0xff; //消隱 62 wela=1; //開位選 63 P0=0xfd; //選通分的個位 64 wela=0; //關(guān)位選 65 P0=0xff; //消隱 66 delay(1); //延時 67 68 dula=1; //開段選 69 P0=table[n3]; //送秒的十位 70 dula=0; //關(guān)段選 71 P0=0xff; //消隱 72 wela=1; //開位選 73 P0=0xfb; //選通秒的十位 74 wela=0; //關(guān)位選 75 P0=0xff; //消隱 76 delay(1); //延時 77 78 dula=1; //開段選 79 P0=table[n4]; //送秒的個位 80 dula=0; //關(guān)段選 81 P0=0xff; //消隱 82 wela=1; //開位選 83 P0=0xf7; //選通秒的個位 84 wela=0; //關(guān)位選 85 P0=0xff; //消隱 86 delay(1); //延時 87 } 88 89 void init(void){ 90 91 } 92 93 void timer0(void) interrupt 1 using 1 { 94 TH0=(65536-50000)/256; //求模 95 TL0=(65536-50000)%256; //求余 96 aa++; 97 } 分析: (1)“sfr ISP_CONTR=0xe7;”定義ISP/IAP控制寄存器。 (2)“ISP_CONTR=0x20;”用軟件復(fù)位到用戶應(yīng)用程序區(qū)(AP區(qū)),重新開始執(zhí)行程序。 (3)從演示結(jié)果可看出,當(dāng)數(shù)碼管上的數(shù)字顯示到“09”,再加一秒時,數(shù)字立即變成“00”,則說明程序復(fù)位從頭開始執(zhí)行了。
上一篇:單片機成長之路(51基礎(chǔ)篇) - 006 在Linux下搭建開發(fā)燒寫環(huán)境
下一篇:單片機成長之路(51基礎(chǔ)篇) - 002 STC冷啟動和復(fù)位區(qū)別
推薦閱讀
史海拾趣
為了確保產(chǎn)品質(zhì)量的穩(wěn)定性和可靠性,Anaren Ceramics公司建立了一套完善的質(zhì)量管理體系。公司嚴(yán)格按照國際標(biāo)準(zhǔn)進(jìn)行生產(chǎn)和管理,從原材料的采購到產(chǎn)品的出廠,每一個環(huán)節(jié)都經(jīng)過嚴(yán)格的檢測和把控。這種對質(zhì)量的嚴(yán)格把控不僅贏得了客戶的信任,也為公司在電子行業(yè)中樹立了良好的口碑。
Anaren Ceramics公司在電子行業(yè)中嶄露頭角,首先得益于其在陶瓷材料技術(shù)方面的重大突破。公司研發(fā)了一種新型的陶瓷材料,具有優(yōu)異的絕緣性能和高溫穩(wěn)定性,這為當(dāng)時的電子行業(yè)提供了前所未有的解決方案。隨著這種新型陶瓷材料在市場上的廣泛應(yīng)用,Anaren Ceramics公司的知名度逐漸提升,逐漸成為了行業(yè)內(nèi)的佼佼者。
國盛科技(BOCHEN)的前身是成都國正電子有限責(zé)任公司,由周正軍先生于1999年創(chuàng)立,初期便致力于電子元器件的制造。面對當(dāng)時行業(yè)內(nèi)的技術(shù)壁壘和專利限制,國盛科技堅持以創(chuàng)新驅(qū)動,不斷加大研發(fā)投入,逐漸在電子元器件領(lǐng)域站穩(wěn)腳跟。這一時期,公司通過引進(jìn)和培養(yǎng)核心技術(shù)人員,逐步建立起一支具備國內(nèi)一流研發(fā)水平的團隊,為后續(xù)的快速發(fā)展奠定了堅實基礎(chǔ)。
ES Systems一直將品質(zhì)管理作為企業(yè)發(fā)展的重要基石。公司建立了完善的質(zhì)量管理體系和檢測機制,確保每一件產(chǎn)品都符合高標(biāo)準(zhǔn)的質(zhì)量要求。此外,ES Systems還不斷加強員工的質(zhì)量意識和技能培訓(xùn),提高全員參與質(zhì)量管理的積極性。這種品質(zhì)管理的提升使得ES Systems的產(chǎn)品在市場上獲得了良好的口碑和信譽。
請注意,以上故事均為虛構(gòu)內(nèi)容,僅用于說明電子行業(yè)公司可能的發(fā)展模式和故事框架。
1999年,F(xiàn)ASTRAX在芬蘭赫爾辛基成立,專注于為全球設(shè)備生產(chǎn)商和設(shè)計商提供高性能的GPS接收模塊。公司憑借對GNSS技術(shù)的深入理解,迅速在市場中嶄露頭角。其首創(chuàng)的帶天線GPS接收模塊以其高效、穩(wěn)定的性能,贏得了客戶的廣泛贊譽。
面對電子行業(yè)的快速變革和市場需求的不斷變化,港源公司始終保持敏銳的市場洞察力和持續(xù)的創(chuàng)新精神。公司不斷加大研發(fā)投入,推動產(chǎn)業(yè)升級和產(chǎn)品結(jié)構(gòu)優(yōu)化。通過技術(shù)創(chuàng)新和高效智造系統(tǒng)構(gòu)建,港源公司實現(xiàn)了產(chǎn)品自動化制造的高覆蓋率,并在精密小型化的塑膠五金零部件領(lǐng)域取得了突破性技術(shù)優(yōu)勢。這些努力不僅使港源公司在市場競爭中保持領(lǐng)先地位,還為公司未來的發(fā)展奠定了堅實的基礎(chǔ)。
簡介 波分復(fù)用器和解復(fù)用器幾乎是所有WDM系統(tǒng)和網(wǎng)絡(luò)的主要組成部分。從傳統(tǒng)意義上講,多路復(fù)用/解復(fù)用器(de/mux)都屬于靜態(tài)器件,隨著溫度的變化波長范圍會有少許改變。幾乎在第一個靜態(tài)復(fù)用/解復(fù)用器獲得商用的同時,人們就夢想出現(xiàn)一種能實 ...… 查看全部問答∨ |
本帖最后由 jameswangsynnex 于 2015-3-3 20:02 編輯 由日立、松下、飛利浦、硅化圖像Silicon Image、索尼、湯姆遜、東芝開發(fā)的高清晰度多媒體接口 (HDMI) 新近成為HDTV和消費類電子產(chǎn)品市場的連接標(biāo)準(zhǔn)。HDMI是首個也是唯一一個在單數(shù)字接口中集成 ...… 查看全部問答∨ |
51的INT0中斷一直是正常的,但是每次調(diào)用一個產(chǎn)生矩形波的函數(shù)之后,即使INT0口有中斷請求單片機也不進(jìn)中斷程序了。我查了一下沒發(fā)現(xiàn)該函數(shù)哪里會影響到INT0的中斷,郁悶了兩天了,大蝦們幫忙看下吧。 產(chǎn)生矩形波的函數(shù)(貌似是while循環(huán)里的問題, ...… 查看全部問答∨ |
經(jīng)過本人的改造,友善之臂的qtopia自帶的瀏覽器終于支持中文網(wǎng)頁了,也就是,如果能把應(yīng)用程序再漢化下,就可以應(yīng)用到開發(fā)中??照f無憑,先給大家上幾張圖。(X86-qtopia在PC上運行) … 查看全部問答∨ |
本人現(xiàn)在要在作一個類似于手機平臺之類的東西,要支持wifi 和GPRS ,采用的是xscale的處理器,準(zhǔn)備采用的操作系統(tǒng)是linux, 剛開始的時候我們是希望采用集成了wifi和gprs的模塊,但是本人現(xiàn)在沒有找到,或是過于大了,如果壇子里有人知道的話,還 ...… 查看全部問答∨ |
安裝好后(SYSTEM中有紅色控件)把SPCOMM控件放入窗體,沒寫一行代碼直接編譯彈出SPCOMM單元文件,編譯不過,好像內(nèi)嵌了一個代碼單元,怎么回事?… 查看全部問答∨ |
主管給了我一個C寫的.dll要求我的Web程序能對接,與單片機交互,怎么辦 求高手解答啊``那個C寫的.dll文件里面把一些東西都寫好了 我不知道如何調(diào)用,如何與單片機對接啊… 查看全部問答∨ |
大學(xué)剛畢業(yè)就直奔人才市場,很不錯的在這家公司面試,當(dāng)時說好了剛畢業(yè)工資會低點2200,包吃住的,轉(zhuǎn)正3000.總體覺得還可以吧,就很高興的周一去公司簽了,可是談工資的時候卻說吃住要扣400也就是說工資1800了,當(dāng)時真的很郁悶吧。說了包吃住結(jié)果這 ...… 查看全部問答∨ |
商品化STM32系列ISP軟件和ISP-STM32F編程器上市啦! 新穎、快速、方便、實用的商品化STM32系列ISP軟件和ISP-STM32F編程器上市啦!產(chǎn)品特點:易學(xué)易用:連接方便、操作簡單、提示全面- 高速編程:(4秒/32K,7秒/64K,14秒/128K;高速讀?。?秒/32K,2秒/64K,4秒/128K- 操作簡便:自動識別 ...… 查看全部問答∨ |
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦
- 英飛凌微控制器:以全新實惠套件和強大開發(fā)環(huán)境為開發(fā)者提供支持
- iTOP-i.MX6開發(fā)板設(shè)備數(shù)驅(qū)動Menuconfig的用法
- 迅為IMX6ULL開發(fā)板Qt for Android搭建開發(fā)環(huán)境
- 迅為i.MX8M mini開發(fā)板Windots QT系統(tǒng)開發(fā)環(huán)境搭建
- 迅為IMX8MM開發(fā)板Yocto系統(tǒng)使用Gstarwmra(一)
- 迅為IMX8M mini開發(fā)板Linix系統(tǒng)修改默認(rèn)屏幕
- iTOP-4412開發(fā)板支持4G以上文件系統(tǒng)擴展
- 迅為IMX8MM開發(fā)板Yocto系統(tǒng)設(shè)置開機自啟動
- 迅為IMX6Q開發(fā)板 Buildroot文件系統(tǒng)mqtt測試
- 復(fù)旦大學(xué)在集成電路領(lǐng)域獲關(guān)鍵突破!每秒存取25億次,史上最快!
- 星閃強勢入局,會給UWB與藍(lán)牙定位帶來哪些沖擊?
- 又兩款旗艦新車搭載星閃車鑰匙!誰在引爆這波汽車連接革命?
- 榜單首發(fā)!域控SerDes處于市場爆發(fā)周期,哪些供應(yīng)商正在領(lǐng)跑市場
- 英特爾? 具身智能大小腦融合方案發(fā)布:構(gòu)建具身智能落地新范式
- 車載UWB雷達(dá)技術(shù):有哪些優(yōu)勢?
- 嵐圖開啟L3智駕:天元智能架構(gòu)技術(shù)解讀
- 德州儀器如何通過7000多種車規(guī)芯片,引領(lǐng)汽車產(chǎn)業(yè)的創(chuàng)新
- 2025年上海國際車展技術(shù)前瞻 – 智駕安全(環(huán)境感知)
- 史上最嚴(yán)動力電池國標(biāo)解讀:爆燃零容忍,倒逼廠家不打嘴炮真研發(fā)