⑴ 單片機擴展外部存儲器時.控制信號有哪些分別有什麼作用
ALE地址鎖存wr寫通道rd讀通道CS片選,還要看你用lntel mode還是motorola mode
⑵ 51單片機wr/rd腳怎麼用的
51單片機wr/rd腳一般作為片外數據存儲器和I/O等介面晶元擴展時的數據寫或讀控制,在程序中不用你去控制。當程序在訪問片外數據存儲器時根據數據傳送到方向,單片機自動發出寫命令或讀命令,使wr引腳變為低電平或使rd引腳變為低電平,控制晶元進行寫操作或讀操作。
51單片機wr/rd腳,是P3.6P和3.7,是在擴展外部數據存儲器時才用得到,現在的單片機,都不需要外部擴展數據存儲器了,這兩個腳的功能就用不上了。但這兩個腳做I/O引腳來用。
(2)51單片機rdwr擴展閱讀:
同樣的一段程序,在各個單片機廠家的硬體上運行的結果都是一樣的,如ATMEL的89C51(已經停產)、89S51,PHILIPS,和WINBOND等,常說的已經停產的89C51指的是ATMEL公司的AT89C51單片機,同時是在原基礎上增強了許多特性,如時鍾,更優秀的是由Flash(程序存儲器的內容至少可以改寫1000次)存儲器取代了原來的ROM(一次性寫入),AT89C51的性能相對於8051已經算是非常優越的了。
⑶ LINUX串口程序忽好忽壞
while (STOP==FALSE)
{
//在此處補充填寫代碼?實現讀取串口數據、並將數據在標准終端上寫出來
if(read(fd, data, ENDMINITERM)==0)
return data;
}
while (STOP==FALSE)
{
c++;
c %= 255;
//在此處補充填寫代碼?實現寫入串口數據
if(write(fd, data, ENDMINITERM) < 0)
exit(1);
usleep(1000000);
}
//在此處補充填寫代碼?實現打開串口1的功能
fd = open(COM1,O_RDWR);
if(fd < 0)
exit(1);
//在此處補充填寫代碼?實現創建鍵盤監控、接收、發送三個線程,並等待線程結束 th_a, th_b, th_c;
if(pthread_create (&th_a, 0, keyboard, 0) != 0)
exit(1);
pthread_join(th_a,NULL);
if(pthread_create (&th_b, 0, receive, 0) != 0)
exit(1);
pthread_join(th_b,NULL);
if(pthread_create (&th_c, 0, send, 0) != 0)
exit(1);
pthread_join(th_c,NULL);
//在此處補充填寫代碼?實現關閉串口功能
close(fd);
請參考,希望能幫到你。
⑷ 51單片機WR和RD的是怎麼控制它來傳輸數據的。
就是我把一個數據 放在P0口之後 WR和RD的時序是通過什麼寄存器來控制的,如:
void sj(unsigned uchar aa)
{P0=aa;}
這個就是我要傳輸的數據,只要調用這個函數就完了嗎,我感覺有問題啊 這個P0口的數據是怎麼送出去的(我知道是通過WR和RD的時序送出去的),問題是怎麼操作WR和RD來觸發一次時序呢?
---------
WR、RD,不是這樣用的。
要想讓 WR 或 RD 發揮作用,必須使用《片外 RAM》。
當你對《片外 RAM》進行讀、寫的時候,WR 和 RD 才會工作。
讀寫片外 RAM 的匯編語言如下:
讀片外 RAM:MOVX A, @DPTR
寫片外 RAM:MOVX @DPTR, A
讀寫片外 RAM 的C 語言如下:
mem_w(0xb700, i);
k = mem_r(0xbb00);
事先要定義這兩個函數。
單片機執行上述的讀、寫指令時:
P0、P2 先輸出 16 位的地址,ALE 輸出正脈沖,令外接的 373 鎖存低八位地址後,
RD 或 WR,就會輸出低電平,令《片外 RAM》輸出或接收數據。
最後,數據,將從 P0 口輸入或輸出。
另外,和 WR、RD,協同工作的,還有 ALE。
P0、P2,前面已經說了,也是要用到的。
P1,是用不上的。
⑸ 51單片機WR、RD問題
51單片機上電復位後,各輸出口的狀態都是1。
當執行指令MOVX @DPTR, A時,這是51單片機寫,對應的WE為0;
當執行指令MOVX A, @DPTR時,這是51單片機讀,對應的RD為0;
這兩個0狀態,都是瞬間出現,不超過一個機器周期,馬上恢復為1。
看51單片機的時序圖,就可以看出這些。
教材上,都有時序圖,認真翻翻書,就可以了。
可以自己用SETB和CLR來改變它們的狀態。