|
在EM78系列單片機內(nèi)部沒有異步串行口,所以必須用軟件來完成這個工作。在很多實際應用中,我們已經(jīng)采用了軟件實現(xiàn)RS232標準的異步串行通信,結果證明工作非常穩(wěn)定可靠。用軟件完成串行通信,降低了芯片的硬件成本。 下面給出RS232的發(fā)送和接收的程序和流程,供讀者參考。 圖5.8 RS232的發(fā)送和接收流程 程序清單如下:
;定義 STATUS EQU 3 P5 EQU 5 P6 EQU 0X06
BUFFER EQU 0X11 COUNT EQU 0X12 BITNUM EQU 8 ;每字節(jié)數(shù)據(jù)為8位 ORG 0 JMP MAIN ;主程序 MAIN: MOV A,@0X40 ;置P6.5為輸出口,P6.6為輸入口 IOW P6 CLR BYTE MOV A,@BITNUM MOV COUNT,A ;傳送數(shù)據(jù)為每字節(jié)8位 ;以下為接收 TEST: JBC P6,6 ;檢測是否收到起始位 JMP TEST ;未測到 CALL DELAY ;測到起始位,下面準備接收 CALL DELAY ;延時 START: JBC P6,6 BS BYTE,7 ;收到高電平 JBS P6,6 BC BYTE,7 ;收到低電平 DJZ COUNT JMP L1 ;一個字節(jié)未收完,繼續(xù)收下一位 CALL DELAY JMP TRANSMIT ;一個字節(jié)收完,準備發(fā)送 L1: RRC BYTE CALL DELAY JMP START ;以下為發(fā)送 TRANSMIT:
MOV A,@BITNUM MOV COUNT,A BEGIN: BC P6,5 ;發(fā)送起始位 CALL DELAY1 ;延時 L2: RRC BYTE ;發(fā)送一位數(shù)據(jù) JBC STATUS,C BS P6,5 JBS STATUS,C BC P6,5 CALL DELAY1 ;延時 DJZ COUNT ;一個字節(jié)發(fā)送完否? JMP L2 ;否,繼續(xù)發(fā)送下一位 BS P6,5 ;是 CALL DELAY1 JMP TEST ;繼續(xù)循環(huán) ;延時子程序 DELAY: MOV A,@23 MOV BUFFER,A LOOP: DJZ BUFFER JMP LOOP RET DELAY1: MOV A,@30 MOV BUFFER,A LOOP1: DJZ BUFFER JMP LOOP1 RET
|