時(shÃ)間:2021-03-25 10:01:29來æºï¼š 21IC
  而ARM(甚至是x86)é€™ç¨®é¦®è«¾ä¾æ›¼çµ(jié)æ§‹(gòu)çš„MCU/CPU,它的地å€ç©ºé–“是統(tÇ’ng)一并且連續(xù)的,代碼å˜å„²(chÇ”)器/RAM/CPU寄å˜å™¨ï¼Œç”šè‡³PC機(jÄ«)的顯å˜ï¼Œéƒ½æ˜¯çµ±(tÇ’ng)一編å€çš„ï¼Œåªæ˜¯ä¸åŒåŠŸèƒ½çš„å˜å„²(chÇ”)å™¨å æ“š(jù)ä¸åŒçš„地å€å¡Šï¼Œå„自為政。
  好,說回MCS-51。
  å°(duì)于程åºå˜å„²(chÇ”)器,有片內(nèi)和片外兩部分。而且無論片內(nèi)程åºå˜å„²(chÇ”)器,還是片外程åºå˜å„²(chÇ”)å™¨ï¼Œä»–å€‘çš„åœ°å€æ˜¯å…±äº«çš„。如果片內(nèi)4k ROM的話,地å€å°±æ˜¯0x0000-0x0FFF,從0x1000-0xFFFF就是外部ROM的地å€ç©ºé–“。å¯å¤–部ROMçš„0x0000-0x0FFF的這一部分是å¦ä½¿ç”¨å‘¢ï¼Œé€™å–決于單片機(jÄ«)EA引腳的電平值。EA=1時(shÃ)就是使用內(nèi)部ROM的這一部分,外部ROM的這一部分浪費(fèi)ä¸ç”¨;EA=0時(shÃ)就是使用外部ROM的這一部分,內(nèi)部ROM浪費(fèi)ä¸ç”¨ã€‚從CODEæ®µè®€å–æ•¸(shù)據(jù)è¦ä½¿ç”¨åŒ¯ç·¨çš„MOVC指令,單片機(jÄ«)會(huì)æ ¹æ“š(jù)MOVC指令ã€EA狀態(tà i)ã€è¦è®€å–的地å€å€¼ï¼Œä¾†è‡ªå‹•(dòng)地判斷從什么å˜å„²(chÇ”)å™¨é‡Œå–æ•¸(shù)據(jù)。
  å°(duì)于數(shù)據(jù)å˜å„²(chÇ”)器,則分為內(nèi)部數(shù)據(jù)å˜å„²(chÇ”)器(IDATA/RAM)和外部數(shù)據(jù)å˜å„²(chÇ”)器(XDATA)兩個(gè)部分,但這兩個(gè)å˜å„²(chÇ”)器就ä¸åƒcodeå˜å„²(chÇ”)器那樣共享地å€ç©ºé–“的了。一般的8051芯片,內(nèi)部RAMåªæœ‰128B,從0x00-0x7F,而從0x80-0xFF則是SFR(CPU工作寄å˜å™¨å’Œå„種外è¨(shè)寄å˜å™¨éƒ½åœ¨æ¤)çš„å€(qÅ«)域。å°(duì)于8052來說,內(nèi)部RAM有256B,所以0x80-0xFF是高128Bçš„RAM在使用。å¯é€™éƒ¨åˆ†ä¸æ˜¯SFR專用的嗎?是SFR專用,但注æ„,SFR的訪å•åªèƒ½ä½¿ç”¨â€œç›´æŽ¥å°‹å€æ–¹å¼â€(使用特定的匯編指令來實(shÃ)ç¾(xià n)),å€(qÅ«)åˆ¥å°±åœ¨é€™é‡Œã€‚åªæœ‰é€šéŽç›´æŽ¥å°‹å€è¨ªå•çš„åœ°å€æ‰æ˜¯SFR,å¦å‰‡å°±æ˜¯æ™®é€šçš„RAM。至于外擴(kuò)çš„RAM(XDATA),地å€ä¹Ÿæ˜¯å¾ž0x0000-0xFFFF的,而且這里的0x0000和內(nèi)部RAMçš„0x00是ä¸åŒçš„,是完全ç¨(dú)立的兩個(gè)ç©ºé–“ã€‚ä»–å€‘çš„è¨ªå•æ–¹æ³•也是ä¸åŒçš„。MCS-51使用MOVX指令,來讀寫XDATAå€(qÅ«)。而且,訪å•XDATAå€(qÅ«),是需è¦DPTR寄å˜å™¨ä¾†è¼”åŠ©çš„ã€‚å› ?yà n)æ©¹æŒ¥è ¨PTRæ‰èƒ½è£å¾—下åå…ä½çš„XDATA地å€ã€‚
  所以說,MCS-51讀寫IDATAå€(qÅ«)çš„é€Ÿåº¦æ˜¯æœ€å¿«çš„ï¼Œè€Œä¸”è¨ªå•æ–¹æ³•也是最多的。訪å•XDATAå€(qÅ«)的速度相å°(duì)å°±è¦æ…¢å¾ˆå¤šã€‚MCS-51çš„å †æ£§è¦å„ª(yÅu)先開辟在IDATAå€(qÅ«)ä¸ï¼Œå¹¶ä¸”在IDATAå€(qÅ«)ä¸é–‹è¾Ÿçš„å †æ£§ï¼Œå¯ä»¥ä½¿ç”¨æ£§æŒ‡é‡å¯„å˜å™¨SP來控制。如果棧實(shÃ)在太大,åªèƒ½é–‹è¾Ÿåœ¨XDATAå€(qÅ«)ä¸ï¼Œé‚£ä¹ˆCPUçš„SP寄å˜å™¨å°±å¾ˆé›£å€ŸåŠ›ï¼Œåªèƒ½ç”±æˆ‘們自己來構(gòu)é€ å †æ£§çµ(jié)æ§‹(gòu)å’Œå †æ£§æŒ‡é‡ã€‚既然外部程åºç©ºé–“和數(shù)據(jù)空間都是0-64K(0x0000-0xFFFF),那么我實(shÃ)際上å¯ä»¥ç‚ºäº†çœäº‹/方便改寫程åºç‰åŽŸå› ï¼Œå¤–éƒ¨çš„CODEå’ŒDATAå°±å¯ä»¥å…±ç”¨ä¸€å€‹(gè)坿“¦å¯«å˜å„²(chÇ”)器了(比如å„種RAMä»€ä¹ˆå¯æ“¦å¯å¯«çš„)。比如系統(tÇ’ng)有64K的外擴(kuò)MEMORY,低32K我用作ä¿å˜CODE,并讓單片機(jÄ«)在這32K之ä¸è®€å–程åºé‹(yùn)行,高32K我作為用戶數(shù)據(jù)çš„ä¿å˜è™•,完全å¯ä»¥ã€‚åªæ˜¯æ¤æ™‚(shÃ)本來完全ç¨(dú)ç«‹çš„CODEå’ŒDATAç©ºé–“ï¼Œå› ?yà n)æ¨µè°Ÿå¸ƒî’—é…’îƒ¤çžŽç¿æ˜§è‰˜ç²‹â‚¬(gè)MEMORY,所以他們之間就å¯èƒ½äº’相影響了,程åºå°±èƒ½è‡ªå·±æ”¹å¯«ç¨‹åºäº†ã€‚比如0x0020處是一個(gè)指令,我通éŽMOVX把0x0020處改寫了,那么å†åˆ©ç”¨MOVC把0x0020處讀å–出來,數(shù)據(jù)就和原來ä¸ä¸€æ¨£äº†ã€‚
  易混淆的癥çµ(jié)在于,單片機(jÄ«)å˜å„²(chÇ”)空間是一個(gè)é‚輯上的概念,是人為劃分出來的兩個(gè)相互ç¨(dú)立的空間。而硬件電路上的MEMORY芯片則是ç¾(xià n)實(shÃ)ä¸çš„æ¦‚念,單片機(jÄ«)çš„å˜å„²(chÇ”)空間最終會(huì)è½å¯¦(shÃ)在電路層é¢çš„芯片上,所以é‚輯上的å˜å„²(chÇ”)空間會(huì)å› ?yà n)æ§²é”¢ç ©ç³»ç¢¾å¨æ„¤B接而發(fÄ)生é‡ç–Šã€‚但是在é‚輯層é¢ä¸Šï¼Œé€™å…©å€‹(gè)空間還是完全ç¨(dú)立的。
  附:å„類å˜å„²(chÇ”)空間å稱的定義:
  data:固定指å‰é¢0x00-0x7fçš„128個(gè)RAM,å¯ä»¥ç”¨a寄å˜å™¨ç›´æŽ¥è®€å¯«çš„,速度最快,生æˆçš„代碼也最å°ã€‚
  idata:固定指å‰é¢0x00-0xffçš„256個(gè)RAM,å…¶ä¸å‰128å’Œdataçš„128完全相åŒ,åªæ˜¯å› ?yà n)樵Lå•的方å¼ä¸åŒã€‚idata是用類似Cä¸çš„æŒ‡é‡æ–¹å¼è¨ªå•的。匯編ä¸çš„語å¥ç‚ºï¼šmov ACC,@Rx.(ä¸é‡è¦çš„補(bÇ”)充:cä¸idataåšæŒ‡é‡å¼çš„è¨ªå•æ•ˆæžœå¾ˆå¥½)xdata:外部擴(kuò)展RAM,一般指外部0x0000-0xffff空間,用DPTR訪å•。pdata:外部擴(kuò)展RAM的低256個(gè)å—節(jié),地å€å‡ºç¾(xià n)在A0-A7的上時(shÃ)讀寫,用movx ACC,@Rx讀寫。這個(gè)比較特殊,而且C51好象有å°(duì)æ¤BUG, 建è°å°‘用。但也有他的優(yÅu)點(diÇŽn),具體用法屬于ä¸ç´š(jÃ)å•題,我ä¸å¤ªæœƒ(huì)ï¼Œæ‰€ä»¥é€™é‡Œä¸æã€‚
ä¸åœ‹(guó)傳動(dòng)ç¶²(wÇŽng)版權(quán)與å…責(zé)è²æ˜Žï¼šå‡¡æœ¬ç¶²(wÇŽng)注明[來æºï¼šä¸åœ‹(guó)傳動(dòng)ç¶²(wÇŽng)]的所有文å—ã€åœ–片ã€éŸ³è¦–å’Œè¦–é »æ–‡ä»¶ï¼Œç‰ˆæ¬Š(quán)å‡ç‚ºä¸åœ‹(guó)傳動(dòng)ç¶²(wÇŽng)(www.hysjfh.com)ç¨(dú)家所有。如需轉(zhuÇŽn)載請(qÇng)與0755-82949061è¯(lián)系。任何媒體ã€ç¶²(wÇŽng)站或個(gè)人轉(zhuÇŽn)載使用時(shÃ)é ˆæ³¨æ˜Žä¾†æºâ€œä¸åœ‹(guó)傳動(dòng)ç¶²(wÇŽng)â€ï¼Œé•å者本網(wÇŽng)將追究其法律責(zé)任。
本網(wÇŽng)轉(zhuÇŽn)載并注明其他來æºçš„稿件,å‡ä¾†è‡ªäº’è¯(lián)ç¶²(wÇŽng)或æ¥(yè)å…§(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuÇŽn)載請(qÇng)ä¿ç•™ç¨¿ä»¶ä¾†æºåŠä½œè€…ï¼Œç¦æ¢æ“…自篡改,é•è€…è‡ªè² (fù)版權(quán)法律責(zé)任。
相關(guÄn)資訊