|
在EM78系列單片機(jī)內(nèi)部沒(méi)有異步串行口,所以必須用軟件來(lái)完成這個(gè)工作。在很多實(shí)際應(yīng)用中,我們已經(jīng)采用了軟件實(shí)現(xiàn)RS232標(biāo)準(zhǔn)的異步串行通信,結(jié)果證明工作非常穩(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 ;檢測(cè)是否收到起始位 JMP TEST ;未測(cè)到 CALL DELAY ;測(cè)到起始位,下面準(zhǔn)備接收 CALL DELAY ;延時(shí) START: JBC P6,6 BS BYTE,7 ;收到高電平 JBS P6,6 BC BYTE,7 ;收到低電平 DJZ COUNT JMP L1 ;一個(gè)字節(jié)未收完,繼續(xù)收下一位 CALL DELAY JMP TRANSMIT ;一個(gè)字節(jié)收完,準(zhǔn)備發(fā)送 L1: RRC BYTE CALL DELAY JMP START ;以下為發(fā)送 TRANSMIT:
MOV A,@BITNUM MOV COUNT,A BEGIN: BC P6,5 ;發(fā)送起始位 CALL DELAY1 ;延時(shí) L2: RRC BYTE ;發(fā)送一位數(shù)據(jù) JBC STATUS,C BS P6,5 JBS STATUS,C BC P6,5 CALL DELAY1 ;延時(shí) DJZ COUNT ;一個(gè)字節(jié)發(fā)送完否? JMP L2 ;否,繼續(xù)發(fā)送下一位 BS P6,5 ;是 CALL DELAY1 JMP TEST ;繼續(xù)循環(huán) ;延時(shí)子程序 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
|