串列埠擴充輸出埠中斷法
並列輸入串列輸出
串列埠擴充輸出埠輪詢法
實習目的:
用串列埠來擴充輸出埠( 輪詢法 )
材料:
8051模擬板,電腦,74LS164一顆。
說明::
模式 0串列資料的傳送與接收都是利用RXD接腳進行,TXD接腳則固定輸出移位脈波。CPU每次傳送或接收
8 Bits的資料,鮑率為 1/12 fosc,傳送資料時只要執行。
程式:
ORG 00H ; ORG宣告
MOV SCON,#00H ; 設定串列埠為模式 0 , TI = 0:
LOOP :
MOV SBUF,P1 ; 將 P1資料發射出去
WAIT :
JBC TI , DELAY ; 等待資料發射完畢( TI = 1 )跳延時且清除 TI = 0
JMP WAIT
DELAY :
MOV R6,#250 ; 延時 0.1秒
DL1 :
MOV R7,#200
DL2 :
DJNZ R7,#200
DJNZ R6,DL1
JMP LOOP ; 重覆執行
END
實習目的:
用串列埠來擴充輸出埠( 中斷法 )
材料:
8051模擬板,電腦,74LS164一顆。
說明::
一個資料寫入SBUF的指令,資料傳送完畢,CPU會將SCON中的TI位元設定為1,通知中斷系統 產生串列中斷。
在接收資料方面,一開始必須以軟體設定SCON中的REN位為1,執行RI=0,當資料接收完畢,CPU會將SCON中的RI位元設定為1,通知中斷系統產生串列中斷。
模式0通常不使用在串列通訊方面,而是做為I/O的擴充
程式:
ORG 00H ; ORG宣告
JMP START
ORG 23H
JMP UART_INT
ORG 50H
START:
MOV SCON,#00H ; 設定串列埠為模式0,TI=0準備傳送資料
MOV IP,#00010000B ; 設定串列埠中斷為高優先權
MOV IE,#10010000B ; 致能串列不中斷
MOV SBUF,P1
JMP $
UART_INT :
JBC TI,OK_Transmit ; 判斷是否為資料傳送
JMP END_UART ; 完畢所引發的中斷
OK_Transmit :
MOV SBUF,P1 ; 將埠1的資料由串列埠傳送出去
CALL DELAY ; 延遲0.1秒
END_UART :
RETI
DELAY :
MOV R6,#250 ; 延遲0.1秒
DL1 :
MOV R7,#200
DL2 :
DJNZ R7,#200
DJNZ R6,DL1
RET
END
實習目的:
並列輸入串列輸出
材料:
8051模擬板,電腦,74LS165一顆。
說明::
74LS165的SH/CD接腳接收一個負脈波,會從AH腳載入並列資料。當SH/CD接腳為Hi,CLK接腳接收一個負脈波時,會從QH或/QH輸出串列資料
程式:
ORG 00H
JMP START
ORG 23H
JMP UART_INT
ORG 50H
START:
MOV SCON,#10 ;工作在 mode 0 ,REN=1準備接收資料
MOV IP,#00010000B ; 串列不中斷為優先權
MOV IE,#10010000B ;致能串列埠中斷
CLR P3.7 ;啟動74LS165,A-H腳載入並列資料
SETB P3.7
CLR RI ;串列埠開始接收資料
JMP $
UART_INT:
CLR P3.7 ;啟動74LS165
SETB P3.7
JBC RI,Is_Recive ;判斷是否為資料接收完畢所引發的中斷
CLR TI ;清除TI旗標
JMP END_UART
Is_Recive:
MOV A,SBUF ;串列埠接收的資料載入ACC中
CPL A ;將ACC中的資料相反
MOV P1,A ;將ACC的資料從埠1輸出
END_UART:
RETI
END
實習目的:
瞭解串列埠模式0擴接74LS164成為輸出埠原理方法
材料:
8051模擬板,電腦,74LS165一顆。
說明::
1. 通知組譯器下面的程式由程式記憶體位址0000H處開始存放
2. 跳到標記START處執行程式
3. 通知組譯器下面的程式由程式記憶體位址0023H處開始存放
4. 跳到標記UART-INT處執行串列阜中斷副程式
5. 通知組譯器下面的程式由程式記憶體位址0050H處開始存放
6. 標記START
7. 設定串列阜工作在模式0,並設定REN位元準備進行串資料接收
9. 設定串列阜中斷為最高優先權
10. 致能串列阜中斷
11~12. 啟動74LS165準備送資料
13. 清除RI旗標,啟動串列阜開始接收資料
14. 執行無窮迴圈
15~16. 串列阜中斷副程式
15. 標記UART-INT,作為串列阜中斷副程式的副程式名稱
17~18. 啟動74LS165準備傳送資料
19. 判斷RI旗標的值是否無1,若為1則清除RI旗標的值並跳到標記
IS-RECIVE處執行程式:若不為1則繼續執行下一個指令
20. 清除TI旗標的值
程式:
ORG 00H
JMP START
ORG 23H
JMP UART-INT
ORG 50H
START:
MOV SCON,#10H ;設定串列阜工作在Mode0,並設
;定ren準備接收資料
MOV IP,#00010000B ;設定串列阜中斷為高優先權
MOV IE,#10010000B ;致能串列中斷
CLR P3,7
SETB P3,7
CLR RI ;串列阜開始接收資料
JMP $
UART-INT:
CLR P3,7 ;啟動74LS165
SETB P3,7
JBC RI,IS-RECIVE ;判斷是否為資料接收完畢所
;引發的中斷
CLR TI ;清除TI旗標
JNB END-UART
IS-RCIVE:
MOV A,SBUF ;串列阜接收到的資料載入ACC
CPL A ;將ACC中的資料反向
MOV P1,A ; 將ACC中的資料從阜1輸出
END-UART:
RETI
實習目的:
瞭解串列埠( 模式1 )的運作方式。
材料:
8051模擬板,電腦,74LS165一顆。
說明:
串列傳輸( 模態1)之發射程式
程式:
ORG 0000H
MOV TMOD,#00100000B ; 令計時器工作於模式2
MOV TH1,#230 ; 設定計數值(baudrate=1200)
MOV TH,#230 ; 起動計時器發射資料
MOV SCON,#01000000B ; 設定串列埠為摸式1
LOOP: CLR TI ; 清除發射中斷旗林
MOV SBUF,P1 ; GUAP1的資料發射出去
WAIT: JNB TI,WAIT ; 等待資料發射完畢(TI=1)等待
CALL DELAY ; 延時
JMP LOOP ; 不斷發射P1的最新資料
DELAY: MOV R6,#250 ; 延時副程式 ; 延時0.1秒
DL1: MOV R7,#200
DJNC R7,$
DKME R6,DL1
RET
END
模式1之接收程式
實習目的:
瞭解串列埠( 模式1 )的運作方式。
材料:
8051模擬板,電腦,74LS165一顆。
說明:
功能: 串列傳輸(模態1)之接收程式
(1) 一圖框資料為11位元,比模態1多了第九資料位元,可做同位偵錯,鮑率固
定為fosc/32或fosc/64
(2) RECV為接受完畢與否知旗號,RECV=1表正在接收中,RECV=0表接收完
畢
(3) 接收完一圖框資料硬體會設定RI=1,同時程式跳至SERIAL中斷服務程式,
執行完中斷服務程式而返回時硬體不會自動清除RI=0,固須在服務中斷程
式內使用軟體指令清除RI=0
程式:
RECV: REG 20H.0
ORG 00H
JMP START
ORG 23H
JMP SERIAL
START: MOV IE,#10010000B
MOV SCON,#01111111B ;設定串列埠工作於模態1
; REN=1
ANL PCON,#01111111B ;致能串列埠中斷
CLR RECV ;設定RECV為”接收完畢”
;之起始狀態
WAIT: JB RECV,$ ;若一圖框之資料尚未接收
;完畢,滯留WAIT處等待
SET RECV ;設定RECV為”正在接收中”
;狀態
JB
JMP WAIT
中斷服務程式: SERIAL(當接收完一圖框資料即執行此程式)
SERIAL: CLR RI ;清除RI=1
MOV A,SBUF
JB P,CHK-RB8 ;此行開始以下四行指令其目
;的為同位偵錯
JB RB8,ERROR ;P=0 RB8=1
JMP CORRECT
CHK-RB8: JNB RB8,ERROR ; P=1 RB8=0
CORRECT: MOV P2,A ;P=RB8=0或P=RB8=1
;將接收到之資料(SBUF)由埠2
;送出
ERROR: CLR RECV ;設定RECV為”接收完畢”之狀態
RETI
END
實習目的:
瞭解串列埠( 模式2 )的運作方式。
材料:
8051模擬板,電腦,74LS165一顆。
說明 :
串列傳輸(模態2)之發送程式
(1)一圖框資料為11位元,比模態1多了第9資料位元,可做同位偵錯,鮑率固
定為fosc/32或fosc/64
(2)TRANS為發送完畢與否知旗號,TRANS=1表正發送中,TRANS=0表發送
完畢
(3)發送完一圖框資料硬體會設定TI=1,同時程式跳去SERIAL中斷服務程
式,執行完中斷服務程式而返回時硬體不會自動清除TI=0,固需在中斷
服務程式內使用軟體指令清除TI=0
程式 :
TRANS REG 20H.0
OLD EQL 30H ; OLD用以儲存由埠2讀
入之舊值
NEW EQU 31H ; OLD用以儲存由埠2讀
入之新值
ORG 00H
JMP START
ORG 23H
START: JMP SERIAL
MOV IE,#10010000B ; 致能串列埠中斷
MOV SCON,#10000000B ; 設定串列埠工作於模態2
ANL PCON,#01111111B ; 設定SMOD=0,鮑率為 fosc/64
CLR TRANS ; 設定TRANS為發送完畢之起始狀態
MOV A,P2 ; 由埠2讀入指撥開
且存入NEW
MOV NEW,A
XRL A,OLD ; 檢查指撥開關狀態是否改變
JZ AGAIN
WAIT : JB TRANS ; 若一圓框之資料尚未發送完
; 畢,則滯留WAIT處等待
MOV A,NEW
MOV C,P ; 此行開始以下2行指令其目
地為同位偵錯
MOV TB8,C
MOV SBUF,A ; 將指撥開關狀態值由串列埠
發送出
SETB TRANS ; 設定TRANS為"正在發送中"
狀態
JMP AGAIN
中斷服務程式 : SERIAL(當發送一圖框資料即執行此程式)
SERIAL: CLR TI ; 清除 TI=0
CLR TRANS ; 設定TRANS為"發送完畢"狀
態
MOV OLD,NEW ; 將剛發送出隻資料視為舊值
存入OLD
RETI ; 返回主程式
模式2之接收程式
實習目的:
瞭解串列埠( 模式2 )的運作方式。
材料:
8051模擬板,電腦,74LS165一顆。
說明:
功能: 串列傳輸(模態2)之接收程式
(1) 一圖框資料為11位元,比模態1多了第九資料位元,可做同位偵錯,鮑率固
定為fosc/32或fosc/64
(2) RECV為接受完畢與否知旗號,RECV=1表正在接收中,RECV=0表接收完
畢
(3) 接收完一圖框資料硬體會設定RI=1,同時程式跳至SERIAL中斷服務程式,
執行完中斷服務程式而返回時硬體不會自動清除RI=0,固須在服務中斷程
式內使用軟體指令清除RI=0
程式:
RECV: REG 20H.0
ORG 00H
JMP START
ORG 23H
JMP SERIAL
START: MOV IE,#10010000B
MOV SCON,#01111111B ;設定串列阜工作於模態
; 2H-REN=1
ANL PCON,#01111111B ;致能串列阜中斷
CLR RECV ;設定RECV為”接收完畢”
;之起始狀態
WAIT: JB RECV,$ ;若一圖框之資料尚未接收
;完畢,滯留WAIT處等待
SET RECV ;設定RECV為”正在接收中”
;狀態
JB
JMP WAIT
中斷服務程式: SERIAL(當接收完一圖框資料即執行此程式)
SERIAL: CLR RI ;清除RI=1
MOV A,SBUF
JB P,CHK-RB8 ;此行開始以下四行指令其目
;的為同位偵錯
JB RB8,ERROR ;P=0 RB8=1
JMP CORRECT
CHK-RB8: JNB RB8,ERROR ; P=1 RB8=0
CORRECT: MOV P2,A ;P=RB8=0或P=RB8=1
;將接收到之資料(SBUF)由阜2
;送出
ERROR: CLR RECV ;設定RECV為”接收完畢”之狀態
RETI
實習目的:
瞭解串列埠( 模式3 )的運作方式。
材料:
8051模擬板,電腦,74LS165一顆。
說明 :串列傳輸(模態3)之發送程式
(1) 一圖框資料為11位元,比模態1多了第九資料位元,可做同位偵錯,鮑率1
可變且由TIMER1產生
(2) TRANS為發送完畢與否知旗號, =1表正在發送中, TRANS=0表發送完畢
(3) 發送完一圖框資料硬體會設定TI=1,同時程式跳去SERIAL中斷服務程式,
執行完中斷服務程式而返回時硬體不會自動清除TI=0,固須在服務中斷程
式內使用軟體指令清除TTI=0
程式:
TRANS: REG 20H.0
OLD: EQU 30H ;OLD用以儲存由串列埠2讀入
;之舊值
EQU 31H ; OLD用以儲存由串列埠2讀入
;之新值
ORG 00H
JMP START
ORG 23H
JMP SERIAL
START: MOV IE,#10010000B ;致能串列埠中斷
MOV SCON,#11000000B ;設定串列埠工作於模態3
ANL PCON,#01111111B ;設定=SMOD=0,鮑率為fosc/64
MOV TMOD,#20H ;設定用以產生鮑率之TIMER 1
;工作於模態1
MOV TH1,230 ;設定鮑率值
MOV TL1,230 ;
SETB TR1 ;啟動TIMER1
CLR TRANS ;設定TRANS為”發送完畢”
;之起始狀態
AGAIN: MOV A,P2 ;由阜2讀入指撥開關狀態值
;且存入NEW
MOV NEW,A
XRL A,OLD ;檢查指撥開關狀態值且存入
;NEW
JZ AGAIN
WAIT: JB TRANS,WAIT ;若一圖框之資料尚未發送完
;畢,滯留WAIT等待
MOV SCON,#01010000B ;設定串列埠工作於模態1且
;=REN=1
ANL PCON,#01111111B ;設定SMOD=0
MOV TMOD,#20H ;設定用以產生鮑率之TIMER1
;工作在模態2
MOV TH1,#00H ;設定鮑率值
MOV TL1,#00H
SETB TR1 ;啟動TIMER1
LR SCV ;設定RECV為”發送完畢”之
;起始
WAIT: JB RECV,$ ;若一圖框之資料尚未完留WAIT
;處等待
SETB ECV ;設定RECV為”正在接收中”
;狀態
JMP WAIT
中斷服務程式: SERIAL(當接收完一圖框資料及執行此程式)
SERIAL: CLR RI ;清除RI=0
MOV A,SBUF ;將接收到之資料(SBUF)由阜2
;送出
MOV P2,A
CLR RECV ;設定RECV為”接收完畢”之
;狀態
RETI
;返回主程式