51單片機與6264通信探討

程序描述:利用6264,擴展STC89C52的存儲空間,使接在P1口的數碼管從0到F循環顯示。

部分接線圖:



額外說明:

1、   由上圖的接法可知6264存儲空間爲0x2000-0x3FFF。

2、   由於P0與P2口已被用作第二功能,所以切記不可以再當普通的I/O使用。

3、   程序中用到了關於‘AUXR’特殊功能寄存器的使用,不熟悉它的讀者請自行參考STC89C52單片機手冊。簡言之,當AUXR=0x02時,可禁止物理上位於內部、邏輯上位於外部的EXTRAM的使用。當AUXR=0x00時,允許使用且上電時爲允許。

4、   當然,高三位地址P2^7、P2^6、P2^5也可以不接138,直接懸空,此時直接把’CE1非’接地。由於6264總共有8KB的空間,所以地址可以從0x0000到0x1fff,只不過選取的各個地址間可能有重疊,這沒多大關係。不過,建議最好把最低起始地址設爲0x0100,這樣可避免與EXTRAM地址00H-FFH重疊。

5、   下圖是可以修改存儲模式和片外RAM地址的對話框:




程序代碼:

 

主程序

#include <reg52.h>          

#include <intrins.h>

#include "delay.h"

#define uchar unsigned char

#define uint unsigned int

uchar codedpy_duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98,

0x88,0x83,0xc6,0xa1,0x86,0x8e};

sfr AUXR=0x8e;    //定義特殊功能寄存器AUXR

uchar xdata i;         //之後讀者會發現變量 i 的存儲類型是什麼會影響最後結果

void main()

{

       AUXR=0x02;                //之後讀者會發現,是否註釋掉此句,對最後結果很有影響

       while(1)

       {

              for(i=0;i<16;i++)

              {

                     P1=dpy_duan[i];    

                     delay(65535);

              }

       }

}


經驗總結:

   下表格是我調試時得出的一些結論,請讀者仔細看,最好自己親自驗證一下




1、‘Y’表示有數碼管反應正常或6264起了作用;‘N’表示數碼管沒反應或6264未起作用。如YY表示數碼管反應正常且6264起了作用。注意:這裏的6264未起作用是指在此程序中相當於沒用到,但一旦把程序寫複雜了,內部RAM不能滿足數據處理要求,則6264還是會起作用的。

2、這個表格結論是基於上面原理圖及6264地址的規定如上面的圖片option框中所示。

3、還有一種存儲模式pdata我沒調試,讀者有興趣可一試。

4、可以發現‘是否註釋掉AUXR’隻影響i 爲pdata時的情況。那是因爲,pdata是指外部數據存儲器的前256字節,請注意,這個外部不是片外,而是在邏輯上是外部但物理上是內部的空間,即EXTRAM。當AUXR=0x02時,EXTRAM已被禁止,i 爲pdata本身就不合理,所以數碼管沒反應;但未註釋掉AUXR時,i 就有了可以存儲的空間,故數碼管有反應。同時,不管存儲模式是data還是xdata,此空間不屬於片外空間,故6264未起作用,即接了相當於沒接。

5、在編譯時可知道所寫程序需要多少data空間,利用這一點可驗證之。比如我這程序需要約9個data空間,所以當我在‘option for target ‘target 1’’框中的‘off-chip Xdata memory ’第一行的兩個框中分別輸入0x1FF7和9時,最後發現數碼管顯示的出錯率很大;但稍微把這size擴大點的話,就好多了。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章