1、本例使用單片機的序列槽,使序列槽工作于移位寄存器模式,165的串行輸出端口連接配接到單片機的串行資料輸入端,單片機的串行資料發送端負責發送移位時鐘脈沖,與165的CLK引腳相連。學要注意的是SH/LD引腳,為高時表示資料開始移位,為低時讀入8位資料。在開始移位之前,需要先從并行輸入端口讀入資料,這時SH/LD端口應置0.這時165的8位資料輸入端口的資料被讀入。然後将SH/LD端置高,鎖存這8位資料,開始移位操作,在TXD端的移位脈沖控制下,8位并行資料逐位串行發送到SO引腳。 2、在keil c51中建立工程ex60,編寫如下程式代碼,編譯并生成ex60.hex檔案 //利用序列槽讀取74HC165的串行輸出資料
#include <reg51.h> //
#include <intrins.h> //
sbit SPL = P3^2; //資料鎖存端口定義 //延時函數
void delay(unsigned int x)
{
unsigned char i;
while(x--)
{
for(i = 0;i < 120;i++);
}
} //主函數
void main(void)
{
SCON = 0x10; //設為序列槽模式0,允許序列槽接收資料
while(1)
{
SPL = 0; //鎖存端清0,讀入8位資料
SPL =1; //鎖存端置1,鎖存讀入的資料
while(RI == 0); // 等待接收中斷标志
RI = 0; // 清0中斷标志
P2 = SBUF; //接收到的字元送到P2口
delay(20); }
} 3、在proteus中建立仿真檔案ex60.dsn,電路原理圖如下所示

4、将ex60.hex檔案載入at89c51中,啟動仿真,按動撥碼開關,觀察運作結果。下圖是某一時刻程式運作結果。