一、實驗目的
1、掌握雙機通信的原理和編程方法。
2、學習8251A的使用方法
二、實驗內容
1、實驗原理圖:
?
?
2.實驗內容?
如圖所示,TXC和RXC分別為8251A的發送時鐘和接收時鐘。它由片外8253A的OUT1提供。本實驗要求以查詢方式進行收發。要完成本實驗,需2臺DVCC系列實驗系統。其中一臺為串行發送,一臺為串行接收,在1號機上裝串行發送程序,在2號機上裝串行接收程序,則在1號機上鍵入的字符顯示在2號機的顯示器上。
?
由于本系統監控中未對8253A、8251A進行初始化,因此本實驗開始必須對8253、8251進行初始化,然后才可以直接進入對串行口狀態的查詢。
三、程序
系統晶振是 6.0 MHz
?
?????????? ORG? 07F0H
START:
?????????? MOV??? SP,#60H
?????????? mov?????????? A,#02H
?????????? MOV???????? R0,#79H
?????????? MOV??? @R0,A
?????????? INC????????? R0
?????????? MOV??? A,#10H
?????????? MOV?? @R0,A
?????????? INC????????? R0
?????????? MOV?? A,#01H
?????????? MOV?? @R0,A
?????????? INC????????? R0
?????????? MOV??? A,#03H
?????????? MOV?? @R0,A
?????????? INC????????? R0
?????????? MOV?? A,#00H
?????????? MOV??? @R0,A
?????????? INC????????? R0
?????????? MOV???????? A,#08H
?????????? MOV?? @R0,A
?????????? MOV??? A,#7EH
?????????? MOV???????? DPTR,#1FFFH
?????????? MOVX @DPTR,A
??????? MOV??? 87H,#80H
?????????? MOV??? SCON,#50H??????????? ;串口 方式 1
?????????? MOV???????? TMOD,#20H??????????? ;T1 方式 1
?????????? MOV??? TL1,#0F3H??????? ;波特率 9600 的常數
?????????? MOV??? TH1,#0F3H
?????????? SETB??? TR1?????????????????????? ;開中斷
?????????? CLR????????? ET1
?????????? CLR????????? ES
WAIT:
??????????? JBC??? RI,DIS_REC?????????? ;是否接收到數據
??????????? LCALL? DISP???????????? ;
??????????? SJMP? WAIT?????????????? ;
DIS_REC:
?????????? MOV??? A,SBUF????????????????? ;讀串口接收到的數據
?????????? LCALL? DATAKEY??????????? ;顯示輸入的數字(0-F)
?????????? DB 79H,7EH
?????????? AJMP?? WAIT
?
DATAKEY: MOV?? R4,A
???????????? MOV?? DPTR,#1FFFH
???????????? MOVX? A,@DPTR
???????????? MOV?? R1,A
???????????? MOV?? A,R4
???????????? MOV?? @R1,A
??????????? CLR??? A
?????????????? POP???? 83H
?????????????? POP???? 82H
?????????????? MOVC? A,@A+DPTR
?????????????? INC???? DPTR
?????????????? CJNE? A,01H,DATAKEY2
??????????? DEC?? R1
?????????????? CLR???? A
?????????????? MOVC?????? A,@A+DPTR
DATAKEY1: PUSH? 82H
????????????? PUSH? 83H
????????????? MOV?? DPTR,#1FFFH
????????????? MOVX? @DPTR,A
????????????? POP??? 83H
????????????? POP??? 82H
????????????? INC????????? DPTR
????????????? PUSH?? 82H
????????????? PUSH?? 83H
????????????? RET
DATAKEY2: DEC??? R1
????????????? MOV?? A,R1
????????????? SJMP?? DATAKEY1
?
DISP:??????? SETB? 0D4H
???????????? MOV? R1,#7EH
???????????? MOV? R2,#20H
???????????? MOV? R3,#00H
DISP1:
????????????? MOV?? DPTR,#DATACO
????????????? MOV?? A,@R1
????????????? MOVC? A,@A+DPTR
????????????? MOV?? DPTR,#0FF22H
????????????? MOVX? @DPTR,A
????????????? MOV?? DPTR,#0FF21H
????????????? MOV?? A,R2
????????????? MOVX? @DPTR,A
????????????? LCALL? DELAY
????????????? DEC??? R1
????????????? CLR??? C
????????????? MOV??????? A,R2
????????????? RRC??? A
????????????? MOV?? R2,A
????????????? JNZ??? DISP1
????????????? CLR??? 0D4H
????????????? RET
DELAY:??? MOV?? R7,#03H
DELAY0:?? MOV?? R6,#0FFH
DELAY1:?? DJNZ?? R6,DELAY1
????????? DJNZ?? R7,DELAY0
????????? RET
?DATAC? DB? 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
????????????? DB? 88H,83H,0C6H,0A1H,86H,8EH,0BFH,0CH,89H,0DEH
????????????? END
四、 實驗步驟?
1、準備2臺DVCC系列實驗儀,確定1號為發送,2號為接收。?
2、將1號RXD插孔和2號的TXD插孔相連。?
3、將1號TXD插孔和2號的RXD插孔相連。?
4、將1號GND插孔和2號的GND插孔相連(共地)。?
5、將8253CS插孔和Y4插孔相連,8251CS和Y5插孔相連。?
6、將SIO區D0—D7和BUS2區 XD0—XD7相連。?
7、先運行2號機,在2號機提示符“P.....”狀態下,輸入0D00后,再按EXEC鍵進入等待接收狀態,顯示器顯示“8251—2”。
8、再運行1號機,在1號機處于提示符“P.....”狀態下,輸入0E00H后,按EXEC鍵,進入串行發送狀態。顯示器顯示“8251—1”。
9、在1號機的鍵盤上輸入數字鍵,應在2號機顯示器上顯示對應數字值。?
10、輸入數字鍵后再按MON鍵,1號機顯示“8251 good”。如果不輸入數字鍵直接按MON鍵,則顯示“Err”,如果雙機通信不能正常進行,也顯示“Err”。
評論
查看更多