回首頁ㄌ 向上一頁
8051簡介
                 基礎實習 串列埠實驗 時間中斷實驗 外部中斷實驗

串列埠擴充輸出埠中斷法 並列輸入串列輸出  模式0為輸出  模式1之發射程式 模式2之發送程式 模式3

                             串列埠擴充輸出埠輪詢法

實習目的

用串列埠來擴充輸出埠( 輪詢法 )

材料:

              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為輸出

實習目的:

瞭解串列埠模式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之發射程式

實習目的

瞭解串列埠( 模式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/32fosc/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=0P=RB8=1

                                                                                ;將接收到之資料(SBUF)由埠2

                                                                                ;送出

 

ERROR:           CLR         RECV                             ;設定RECV接收完畢之狀態

 

                        RETI

 

                        END

 

模式2之發送程式

實習目的

瞭解串列埠( 模式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/32fosc/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=0P=RB8=1

                                                                                ;將接收到之資料(SBUF)由阜2

                                                                                ;送出

 

ERROR:           CLR         RECV                             ;設定RECV接收完畢之狀態

 

                        RETI

 

                                                                                                                 END

模式3

實習目的

瞭解串列埠( 模式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                                                ;返回主程式