📄 mcs51_list_10_5.asm
字号:
; =======================================================================
;
; Tomasz Starecki: "Mikrokontrolery 8051 w praktyce"
; Wydawnictwo BTC - http://www.btc.pl
;
; =======================================================================
; procedura programowego odbiornika lacza RS
; musi byc wywolywana z czestotliwosca l_szpilek x baud rate
; bit sygnalizujacy Frame Error zwracany jest stanem wskaznika F0 (PSW.5)
; udostepniane sa procedury jak w deklaracji PUBLIC
; wymagane zdefiniowanie (typowo w module glownym) parametr體 jak w EXTERN
; niszczy ACC, PSW (CY, F0)
; =======================================================================
EXTERN RX_gotowy, l_szpilek, polowa_l_szpilek
EXTERN RX_aktywny, RX_pin, RX_buf, RX_temp, nr_szpilki
PUBLIC odbior_RS
ORG 1400H
odbior_RS:
MOV A, RX_aktywny
JNZ obsluga_RX ; jesli RX_aktywny <> 0 to obsluga
; jak nie, to moze bit startu?
JB RX_pin, koniec ; powrot jesli brak bitu startu
MOV RX_aktywny, #10 ; do odbioru jest 10 bitow
MOV nr_szpilki, #l_szpilek
RET
obsluga_RX:
DJNZ nr_szpilki, dalej_RX ; -1 i skok jesli nr_szpilki <> 0
MOV nr_szpilki, #l_szpilek
koniec: CLR F0 ; zerowanie wskaznika Frame Error
RET
dalej_RX:
MOV A, nr_szpilki
CJNE A, #polowa_l_szpilek, koniec ; powrot jesli nie polowa bitu
DJNZ RX_aktywny, wczytaj_bit_danych ; -1 i skok jesli RX_aktywny <> 0
JNB RX_pin, blad_ramki ; test bitu stopu, jesli OK to
MOV RX_buf, RX_temp ; RX_temp do bufora odbiornika
CLR F0 ; sygnalizacja, ze stop OK
SETB RX_gotowy ; i ze dane czekaja w buforze
RET
blad_ramki:
SETB F0 ; sygnalizacja Frame Error (bledu ramki)
RET
wczytaj_bit_danych:
MOV A, RX_aktywny
CJNE A, #9, nie_bit_startu ; skok jesli RX_aktywny <> 9
JNB RX_pin, koniec ; poprawny bit startu
MOV RX_aktywny, #0 ; zaklocenie, a nie bit startu
RET
nie_bit_startu: ; doklejenie kolejnego odebranego bitu
MOV A, RX_temp
MOV C, RX_pin
RRC A
MOV RX_temp, A
CLR F0 ; i zerowanie wskaznika bledu ramki
RET
END ; koniec modulu
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -