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