摸索了好久,居然忘記了利用部門的示波器好好測測。書上看到的畢竟是理論的東西,實際應用中總會碰上意外的或者說是不可預測的情況,與其在那瞎推理,還不如動手做點實際的工作。 說實話,在所里這幾個月工作還沒有正式啟動,現在還處于所謂的知識儲備階段,所以也沒什么機會動動示波器。今天才注意到這家伙是GHz級別的,4通道,捕捉單片機那幾個小信號那叫游刃有余,爽哉爽哉,于是乎夢想著哪天自家工作臺上也能擺個這玩意~-~,話扯遠了,言歸正傳。 特權同學用的是11.0592MHz的STC89C52做測試,C代碼也很簡單: #include [color=] #define uchar unsigned char [color=] #define uint unsigned int [color=] uchar xdata LD _at_ 0x7fff; [color=] void delay(uint cnt) [color=] { [color=] uint i; [color=] for(i=0;i [color=] } [color=] void main(void) [color=] { [color=] uchar i; [color=] delay(1000); [color=] while(1) [color=] { [color=] LD = 0x00; [color=] LD = 0xf0; [color=] LD = 0x73; [color=] // i = LD; [color=] delay(1000); [color=] LD = 0xff; [color=] delay(1000); [color=] } [color=] } LD就是擴展的外部RAM變量,地址是0x7fff,也就是說P2的最高位就是CS信號。示波器測試了P0口任意一個數據的變化、CS的變化、WR\RD信號的變化。大體整理了一下,波形基本如下: 另外,我還注意到除了第一次LD讀操作需要5個指令周期外(1.085us*5),以后每次LD讀操作都只要3個指令周期(1.085*3)。這也是從匯編的代碼里仿真后得出來的結論。而從上圖也可以知道CS有效時間其實是一個指令周期(1.085us)。平均3個指令周期完成一次數據傳輸(所謂的RAM方式讀寫數據),這應該是單片機和外部通信的最快速度了。 |