serial_spbrg equ 129
endif
if mclock==1000
+serial_brgh equ (1<<BRGH)
+serial_spbrg equ 6 ; 7% error :-(
endif
bsc_txsta_brgh macro
;----------------------------------------------------------------------
; for i2c at 50kbit/s
-; baud rate = Fosc/(4*(SSPADD+1))
- if mclock==20000
-i2c_sspadd equ 100-1 ; Fosc=20MHz, so SSPADD==99 means 50kbit/s
- endif
- if mclock==1000
- endif
+i2c_sspadd equ (mclock/(50*4)) - 1 ; 50kbit/s
;----------------------------------------------------------------------
; NMRA at 50us per division
; for morse at 18wpm according to the PARIS standard
; (ie a unit time of 66ms) using timer0 (DS p108)
- if mclock==20000
-morse_t0scale equ 0011b ; 1:16 => PSout is 312.5kHz or 3.2us per period
-morse_t0cycles equ 20833 ; see by `waiting', below
+ if mclock==20000 ; Fosc=20MHz, Fcy=5MHz ie 200ns
+morse_t0scale equ 0011b ; 1:8 => 1.6us
+morse_t0cycles equ 41250 ; * 1.6us = 66ms
endif
- if mclock==1000
-;morse_t0scale equ 0011b ; 1:2 => PSout is 312.5kHz or 3.2us per period
-;morse_t0cycles equ 0
+ if mclock==1000 ; Fosc=1MHz ie 1us, Fcy=4us
+morse_t0scale equ 1000b ; do not use prescaler
+morse_t0cycles equ 16500 ; * 4us = 66ms
endif
bsc_morse_t0con_012 macro