SPI總線在51系列單片機系統中的應用
從X25F008的SPISO線上接收8位數據并放入寄存器R0中的應用子程序如下:
SPIIN:SETB P1.1 ;使P1.1(時鐘)輸出為1
CLR P1.2 ;選擇從機
MOV R1,#08H ;置循環(huán)次數
SPIIN1:CLR P1.1 ;使P1.1(時鐘)輸出為0
NOP ;延時
NOP
MOV C,P1.3 ;從機輸出SPISO送進位C
RLC A ;左移至累加器ACC
SETB P1.1 ;使P1.0(時鐘)輸出為1
DJNZ R1,SPIIN1 ;判斷是否循環(huán)8次(8位數據)
MOV R0,A ;8位數據送R0
RET
3.2 MCU串行輸出子程序SPIOUT
將MCS51單片機中R0寄存器的內容傳送到X25F008的SPISI線上的程序如下:
SPIOUT:SETB P1.1 ;使P1.1(時鐘)輸出為1
CLR P1.2 ;選擇從機
MOV R1,#08H ;置循環(huán)次數
MOV A,R0 ;8位數據送累加器ACC
SPIOUT1:CLR P1.1 ;使P1.1(時鐘)輸出為0
NOP ;延時
NOP
RLC A ;左移至累加器ACC最高位至C
MOV P1.0,C ;進位C送從機輸入SPISI線上
SETB P1.1 ;使P1.1(時鐘)輸出為1
DJNZ R1,SPIOUT1 ;判是否循環(huán)8次(8位數據)
RET
3.3 MCU串行輸入/輸出子程序SPIIO
將MCS51單片機R0寄存器的內容傳送到X25F008的SPISI中,同時從X25F008的SPISO接收8位數據的程序如下:
SPIIO:SETB P1.1 ;使P1.1(時鐘)輸出為1
CLR P1.2 ;選擇從機
MOV R1,#08H ;置循環(huán)次數
MOV A,R0 ;8位數據送累加器ACC
SPIIO1:CLR P1.1 ;使P1.1(時鐘)輸出為0
NOP ;延時
NOP
MOV C,P1.3 ;從機輸出SPISO送進位C
RLC A ;左移至累加器ACC最高位至C
MOV P1.0,C ;進位C送從機輸入
SETB P1.1 ;使P1.1(時鐘)輸出為1
DJNZ R1,SPIIO1 ;判斷是否循環(huán)8次(8位數據)
RET
4 結束語
本文介紹了通過SPI總線接口實現數據傳輸的實現方法,給出了用MCS51單片機匯編語言模擬SPI串行總線的輸入、輸出,輸入/輸出以傳送8位數據的子程序。實際上,也可以根據SPI串行總線的操作時序特點來在MCS96系列、ATMEL89系列等單片機上實現SPI總線的接口。
評論