單片機雙機并行通信中所遇問題及解決方法
4.2 上位機輸出數據
如圖3所示在輸出數據以前,通過對U1 (74173)給U3(D觸發(fā)器)進行初始化,即對U3的PRN端輸入一上升沿的脈沖,使U3輸出置1。此時上位機的SCZB端經反相器輸出低電平,U3 的Q端為高電平。此時為發(fā)送數據做好準備。當上位機的SCYX端接收輸入的上升沿脈沖時,U3的Q端為低電平,當CPU檢測到Q端為低電平時,就可以發(fā)送數據到鎖存器中,緊接著通過上位機的SCZB端向下位機SRZB端輸出一個上升沿脈沖。表示已發(fā)送數據,接著通過對U1給U2進行進行初始化。完成對一個字節(jié)的輸出,并為輸出下一個字節(jié)做好準備,上位機輸出數據信號波形圖如圖4所示。
5 軟件設計
5.1 程序流程設計
圖6示出輸入數據流程圖,圖7示出輸出數據流程圖。
圖6 輸入數據流程
圖7 數據輸出程序流程圖
5.2 部分程序清單
(1) 輸入數據程序清單
ORG 0000H
JMP START
ORG 0003H
JMP RESEVE
START: MOV TCON,#0 ;設置中斷INT0
MOV TMOD,#11H
CALL SZSRDK ;設置輸入端口
MOV IE,#81H
MOV IP,#1 ;開中斷
..
..
..
RESEVE: CLR EA ;開中斷
PUSH PSW
PUSH DPH
PUSH DPL
RESEV1: JB ZDQQ,RESEV1
;判ZDQQ是否為低
MOV DPTR,#ADDR0
;為U5(輸入數據端口)的地址
MOVX A, @DPTR
..
..
CALL SZSRDK
POP DPL
POP DPH
POP PSW
SETB EA
RETI
SZSRDK: CLRN EQU 2CH.0
CLR CLRN ;
MOV DPTR,#ADDR1
;為U1的地址
MOV A,2CH
MOVX @DPTR,A
SETB CLRN
MOV A,2CH
MOV DPTR,#ADDR1
MOVX @DPTR,A
RET
(2) 輸出數據程序清單
SEND: MOV DPTR,#ADDR3
MOVX A,@DPTR
JB ACC.0,SEND
;為U3的Q端輸出
MOV DPTR,#ADDR4
;為U4(輸出端口)的地址
MOVX @DPTR,A
CALL SZSCDK
RET
SZSCDK: PRN EQU 2CH.1
SETB PRN
MOV DPTR,#ADDR1
;為U1的地址
MOV A,2CH
MOVX @DPTR,A
CLR PRN
MOV DPTR,#ADDR1
MOV A,2CH
MOVX @DPTR,A
RET
6 結束語
設計中采用了AT1504AS器件,該器件實現了硬件設計軟件化,方便了硬件設計,縮短了設計周期,降低了設計成本,應用也十分方便,該系統經過采取以上措施后,以達到最初的設計要求。現產品已投放市場,市場的反映良好。
評論