rs232 op 4800baud ipv 9600
Posted: Fri Jul 30, 2010 12:31 pm
Als ik de RS232 op 4800baud wil gebruiken ipv 9600 is het dan goed om de tijden 2X zo lang te maken?
Dus de '26' te veranderen in 52 bijv.?
;=================================================================================
RS232_LEES_BYTE
clrf BYTE
rs232_lees_byte_1
btfsc TXD ;wachten tot TXD-lijn laag getrokken wordt
goto rs232_lees_byte_1
movlw D'26' ;130 us wachten tot eerste databit voorstaat
call WACHT_5us
movlw D'8' ;we gaan nu D0-D7 inlezen ...
movwf BIT_NR ;... en houden de teller hiervoor in BIT_NR bij
rs232_lees_byte_2
rrf BYTE,1 ;bits in BYTE 1 positie naar rechts schuiven
bcf BYTE,7 ;eerst linker bit leeg maken ...
btfsc TXD ;... en als DATA TXD niet '0' is ...
bsf BYTE,7 ;... dan linker bit aan zetten
movlw D'19' ;100 us wachten tot volgende databit voorstaat
call WACHT_5us
decfsz BIT_NR,1 ;aftellen tot BIT_NR=0
goto rs232_lees_byte_2
movf BYTE,0 ;BYTE klaar zetten in werkgeheugen
;met de stopbit doen we niets
rs232_lees_byte_eind
return
;=================================================================================
RS232_SCHRIJF_BYTE
bcf RXD ;startbit versturen
movlw D'19' ;95 us wachten (met overhead circa 104 us)
call WACHT_5us
movlw D'8' ;we gaan nu D0-D7 wegschrijven ...
movwf BIT_NR ;... en houden de teller hiervoor in BIT_NR bij
rs232_schrijf_byte_1
btfss RXD
goto rs232_schrijf_byte_2
btfss BYTE,0
bcf RXD
goto rs232_schrijf_byte_3
rs232_schrijf_byte_2
btfsc BYTE,0
bsf RXD
rs232_schrijf_byte_3
movlw D'19' ;100 us wachten tot volgende databit voorstaat
call WACHT_5us
rrf BYTE,1 ;bits in BYTE 1 positie naar rechts schuiven
decfsz BIT_NR,1 ;aftellen tot BIT_NR=0
goto rs232_schrijf_byte_1
bsf RXD
movlw D'20' ;100 us wachten voor stopbit (totaal 104 us)
call WACHT_5us
return
Dus de '26' te veranderen in 52 bijv.?
;=================================================================================
RS232_LEES_BYTE
clrf BYTE
rs232_lees_byte_1
btfsc TXD ;wachten tot TXD-lijn laag getrokken wordt
goto rs232_lees_byte_1
movlw D'26' ;130 us wachten tot eerste databit voorstaat
call WACHT_5us
movlw D'8' ;we gaan nu D0-D7 inlezen ...
movwf BIT_NR ;... en houden de teller hiervoor in BIT_NR bij
rs232_lees_byte_2
rrf BYTE,1 ;bits in BYTE 1 positie naar rechts schuiven
bcf BYTE,7 ;eerst linker bit leeg maken ...
btfsc TXD ;... en als DATA TXD niet '0' is ...
bsf BYTE,7 ;... dan linker bit aan zetten
movlw D'19' ;100 us wachten tot volgende databit voorstaat
call WACHT_5us
decfsz BIT_NR,1 ;aftellen tot BIT_NR=0
goto rs232_lees_byte_2
movf BYTE,0 ;BYTE klaar zetten in werkgeheugen
;met de stopbit doen we niets
rs232_lees_byte_eind
return
;=================================================================================
RS232_SCHRIJF_BYTE
bcf RXD ;startbit versturen
movlw D'19' ;95 us wachten (met overhead circa 104 us)
call WACHT_5us
movlw D'8' ;we gaan nu D0-D7 wegschrijven ...
movwf BIT_NR ;... en houden de teller hiervoor in BIT_NR bij
rs232_schrijf_byte_1
btfss RXD
goto rs232_schrijf_byte_2
btfss BYTE,0
bcf RXD
goto rs232_schrijf_byte_3
rs232_schrijf_byte_2
btfsc BYTE,0
bsf RXD
rs232_schrijf_byte_3
movlw D'19' ;100 us wachten tot volgende databit voorstaat
call WACHT_5us
rrf BYTE,1 ;bits in BYTE 1 positie naar rechts schuiven
decfsz BIT_NR,1 ;aftellen tot BIT_NR=0
goto rs232_schrijf_byte_1
bsf RXD
movlw D'20' ;100 us wachten voor stopbit (totaal 104 us)
call WACHT_5us
return