|
list p=16F84 ; list directive to define processor __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_OFF & _XT_OSC PIC84 equ H'000' ; PIC Reset Vector ; -- M2BUS proc -- ;--------------------------------------------------------------------- movlw 0xFF movlw 'H' repeat: ;-------------------------------------------------------------------- M2_TXloop: M2_RXloop: PauseW: ; T = [2]+5+(w-1)*3 cycles([] if call)
E-mail:
info@telesys.ru
#include
INTVEC equ H'004' ; PIC16C71/84 Interrupt Vector
_M2_IO equ 7 ; PORTB.7
BitCounter equ 0x17
PauseReg equ 0x18
DataRegM2 equ 0x19
ParityAccM2 equ 0x1A
; -- M2BUS proc --
org PIC84
goto Init
Init:
call PauseM2Rate
tris PORTA ; Define PORT A I/O
addlw 0x7F
option
tris PORTB ; Define PORT B I/O for input
movlw 0xFF
movwf PORTB
call M2_TX
movlw 'e'
call M2_TX
movlw 'l'
call M2_TX
movlw 'l'
call M2_TX
movlw 'o'
call M2_TX
movlw 0x00
call M2_TX
call M2_RX
call M2_TX
goto repeat
M2_TX:
movwf DataRegM2
movlw 0x32
call PauseW
movlw 0x7F
tris PORTB ; Define PORT B I/O
clrf ParityAccM2
bcf PORTB,_M2_IO
movlw 0x08
movwf BitCounter
call PauseM2Rate
movf DataRegM2,W
xorwf ParityAccM2,F
bcf PORTB,_M2_IO
btfsc DataRegM2,0
bsf PORTB,_M2_IO
rrf DataRegM2,F
decfsz BitCounter,F
goto M2_TXloop
call PauseM2Rate
bcf PORTB,_M2_IO
btfss ParityAccM2,0
bsf PORTB,_M2_IO
call PauseM2Rate
movlw 0xFF
tris PORTB ; Define PORT B I/O
movlw 0x4F
call PauseW
return
M2_RX:
btfsc PORTB,_M2_IO
goto M2_RX
movlw 0x2A ; 7+#29*3 [130T] ~
call PauseW
movlw 0x09
movwf BitCounter
bcf STATUS,C
btfsc PORTB,_M2_IO
bsf STATUS,C
rrf DataRegM2,F
call PauseM2Rate
decfsz BitCounter,F
goto M2_RXloop
rlf DataRegM2,F
movlw 0x0D ;//0x28 ;0x28=124T
call PauseW
movf DataRegM2,W
return
;----------------------------------------------------------------------------
; w = [(ETU/4)-12]/3 = [(F/38400)-12]/3; F - PIC oscillator frequency
;
; w = [(F/(BaudRate*4))-12]/3;
;
PauseM2Rate: ; T = 86 cycles
movlw 0x1B ; w=[(ETU/4) - 12]/3
movwf PauseReg
PauseLoop:
decfsz PauseReg,F
goto PauseLoop
retlw 0x00
;----------------------------------------------------------------------------
Ответы