STC單片機(jī)外擴(kuò)RAM及8255需要注意的問題
因?yàn)橐粋€(gè)小小的疏忽會(huì)讓人陷入僵局(分享給用STC89C52單片機(jī)的同行們,不要再次在此類問題上浪費(fèi)不必要時(shí)間):
今晚與以往一樣,還是為那個(gè)一直解不開的問題愁眉苦腦著,其它的材料也已經(jīng)搜了上百份,理論對(duì)的已經(jīng)不能再對(duì)了,但是在做起來就是沒反應(yīng)。以前花了10元買了一片8255,為了實(shí)現(xiàn)它的操作,搜了大量資料,終于明白原來是用到類似外擴(kuò)的程序,于是慢慢的搞懂了外擴(kuò)的時(shí)序以及程序,自己試寫了一個(gè),下載進(jìn)去,令我出乎意料的時(shí),竟然一點(diǎn)反應(yīng)也沒有,第一個(gè)懷疑的就是可能硬件設(shè)置出了問題了吧,于是重新設(shè)計(jì)了一個(gè),繼續(xù)把程序下載進(jìn)去,令我失望的還是那個(gè)結(jié)局。我不得不懷疑可能是程序出了問題了,于是到圖書館把所有用C語言編程的課本借回來,精讀了所有外擴(kuò)這一塊。終于把程序搞的沒問題了,很自信的又寫了一個(gè),下載進(jìn)去,竟然還是那個(gè)結(jié)局,我又不得不懷疑難道這一塊必須用匯編才行嗎,我對(duì)匯編可是一點(diǎn)也不懂啊,可是看了很多資料這個(gè)程序,用匯編寫的外擴(kuò)程序都有對(duì)應(yīng)的C語言代碼,C語言代碼百分之百可行啊,一時(shí)陷入了僵局,一僵就是兩個(gè)月,每天開電腦的第一件事就是找資料找資料。
最后的一個(gè)月又開始按照原來的思路重新布置了一下硬件,希望能有奇跡發(fā)生,最后還是失望,每次都想撂下這一塊但總是沒舍得,幾次試驗(yàn),最后我懷疑應(yīng)該是STC89C52有問題吧,但對(duì)自己的懷疑又很快作了否定。為什么其他所有的51單片機(jī)都能實(shí)現(xiàn)這個(gè)功能,這個(gè)宏晶公司生產(chǎn)的STC就不行呢,難道有什么特殊地方嗎。一時(shí)不知所措,還是絞盡腦汁來證明這類片子確實(shí)有問題,終于想了很多方法,最能確定額問題存在的就是用DAC0832雙緩沖方式和用外部中斷的負(fù)跳變沿方式來觸發(fā)中斷并確定有高向低的電平是否的存在,猜想與試驗(yàn)完全相符。
終于確定是片子的原因,既然找不出來,以后還是不想再研究這方面的原因了,還是繼續(xù)安安穩(wěn)穩(wěn)的學(xué)我的AVR單片機(jī)吧,終于把這塊放棄了,但是每次開電腦好似習(xí)慣了這三個(gè)月的一個(gè)動(dòng)作,就是到www.51hei.com找技術(shù)文檔看。今晚的一個(gè)偶然的機(jī)會(huì)看了看STC89C52的官方中文資料,一個(gè)讓人都不懂的地方,也經(jīng)常被略過去的方引起了我的注意。就是在文檔的中部講到“禁止內(nèi)部擴(kuò)展的EXTRAM”找到了答案,原來想現(xiàn)在AT89C5X和STC89C5X跟以前相比的51單片機(jī)都是增強(qiáng)型的,里面又增加了很多寄存器單元和功能,針對(duì)STC89C52內(nèi)部有EXTRAM的擴(kuò)展部分,默認(rèn)時(shí)寄存器的值為零,不能訪問外部64K空間,或者說訪問的時(shí)候不對(duì)此進(jìn)行設(shè)置,會(huì)發(fā)生沖突。造成工作的異常。必須先對(duì)AUXR進(jìn)行位定義,sfr AUXR=0x8e,然后賦值A(chǔ)UXR=0x02;將EXTRAM的控制位設(shè)置為1,禁止EXTRAM的訪問,以防沖突。寫完程序下載到里面一看,期待已久的奇跡終于發(fā)生了,P0和P2口作為數(shù)據(jù)地址總線是終于有數(shù)據(jù)輸出了。所謂的英特爾總線的操作終于實(shí)現(xiàn)了。我的用STC89C52學(xué)習(xí)單片機(jī)的同學(xué)們,以后千萬注意了不要忽視這一點(diǎn),外擴(kuò)設(shè)置一下寄存器,寫上“sfr AUXR=0x8e;AUXR=0x02;”這兩句。并且用這種所謂英特爾總線的方法操作外部設(shè)備程序極為簡便,同學(xué)們趕緊學(xué)學(xué)吧!
評(píng)論