Hi
Mirá esta rutina es el transmisor:
Si te fijas está el código para cambiar las diferente velocidades de TX hasta 38400 baudios, está seteada la velocidad de 2.400 baudios, el cristal del micro es de 10Mhz.
******************************************************************
saca_caracter
ldx #9 ;Bits por caracter inculsive el INICIO
clc ;Borra el carry para el bit de INICIO
saca_bit
bcc saca_0 ;Si C=0 salta para sacar un 0
bset 7,Puerto_D ;Si no saca un 1
bra otro_bit
saca_0
bclr 7,Puerto_D
bra otro_bit
otro_bit
lda #baudios ;Carga la velocidad para los Baudios
jsr Tiempo_Bit ;Llama al temporizador
ror caracter ;Rota para el siguiente bit (pasa por el CARRY)
decx ;Se decrementa la cuenta de bits
bne saca_bit ;Saca el bit siguiente
bit_stop
lda #baudios ;Valor para calcular los baudios
lsra ;divido /2 los baudios
bset 7,Puerto_D
jsr Tiempo_Bit
rts
********************************************************************
baudios equ $8F ;2400 Baudios cristal de 9.8304 MHZ.
;baudios equ $20 ;9600 Baudios cristal de 9.8304 MHZ.
;baudios equ $0e ;19200 Baudios cristal de 9.8304 MHZ.
;baudios equ $05 ;38400 Baudios cristal de 9.8304 MHZ.
********************************************************************
* Rutina de demora, calcula el tiempo para la velocidad de comunicacion.
* En el acumulador viene el retardo
********************************************************************
Tiempo_Bit
nop
nop
tsta
deca
bne Tiempo_Bit
rts
********************************************************************
Y esta es la rutina del receptor:
En el receptor la cosa es como en el viejo PIC16F84 cuando recibias el bit de inicio a travez del RB0 o lo detectabas con una interrupción para luego leger uno a uno los bit´s que te llegaban, aca la cosa es parecida, en el modo captura del Timer uno se detecta el flanco de bajada del bit de inicio y lo demas es mas o menos lo mismo, leer bit a bit y rotarlos en un registro.
********************************************************************
; Rutina de servicio de la interrupción del modo captura del timer.
********************************************************************
Recibir
clr caracter
lda #baudios
lsra ;divido /2 los baudios
jsr Tiempo_Bit
brset 5,Puerto_D,sale
lda #$9
sta Bits
rx_otro
sec ;Pongo el carry a 1
brset 5,Puerto_D,rotar_directamente
clc ;Borrar el carry
rotar_directamente
ror caracter
lda #baudios
jsr Tiempo_Bit ;Espero el tiempo de un bit
dec Bits
bne rx_otro ;Cuando Bits es 0 el Z se afecta
brclr 5,Puerto_D,*
mov caracter,Numero_1
jsr BCD_ajuste
jsr saca_caracter
sale
bclr 7,TSC1
rti
******************************************************************
Saludos y suerte!!!!