Autor Tema: rs232 - retardo entre bit y bit a 9600 baudios  (Leído 12054 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
rs232 - retardo entre bit y bit a 9600 baudios
« en: 04 de Agosto de 2008, 12:49:26 »
Hola amigos!!!
Les cuento q tengo q hacer un programa en ensamblador para recibir un byte por rs232. Estoy trabajando con un pic16f84a. El problema es q no se cuantos bps son 9600 baudios (creo q coinciden, pero no estoy seguro).
Esto es para calcular el tiempo entre bit y bit para leerlos.

Tengo este codigo q consegui por ahi... a mi parecer es el mas claro.

Código: [Seleccionar]
INCLUDE "P16F84A.Inc"

;*******DEFINICION DE REGISTROS**********************************

CBLOCK .12

REG1, REG2, REG3, RECEP, NBITS

ENDC

RX equ 0h ;PATILLA QUE RECIBE LOS DATOS

;*******DEFINICION DE DATOS**************************************

VALOR1 EQU .7 ;para controlar numero de ciclos del retardo bymedio

VALOR2 EQU .1 ;1246 CICLOS DE RETARDO

VALOR3 EQU .56

VALOR4 EQU .5 ;para controlar numero de ciclos del retardo by

VALOR5 EQU .1 ;830 CICLOS DE RETARDO

VALOR6 EQU .52

;*******PROGRAMA*************************************************

ORG 00

goto INICIO

org 05

INICIO

bsf STATUS,RP0 ;PASA AL BANCO 1

movlw b'00000001'

movwf TRISA

clrf TRISB

bcf STATUS,RP0 ;PASA AL BANCO 0

clrf PORTA

clrf PORTB

movlw b'00000101' ;Carga un dato por defecto en el puerto B

movwf PORTB

RECIBIR

nop

btfsc PORTA,RX ;linea de recepcion esta en bajo?

goto RECIBIR ;ciclo hasta recibir bit de comienzo

call BYMEDIO ;llama rutina de bymedio

movlw 8 ;carga contador con el numero de bits

movwf NBITS

clrf RECEP

RNEXT

bcf STATUS,C ;limpia carry

rrf RECEP,1

btfsc PORTA,RX ;pregunta por el estado de la linea

bsf RECEP,7 ;si rx esta en alto pone el bit 7 de RECEP

call BY

decfsz NBITS

goto RNEXT

movf RECEP,w ;pasa el dato del registro RECEP al PORTB

movwf PORTB

goto RECIBIR

BYMEDIO

movlw VALOR1 ;retardo de bit y medio

movwf REG1

TRES

movlw VALOR2

movwf REG2

DOS

movlw VALOR3

movwf REG3

UNO

decfsz REG3

goto UNO

decfsz REG2

goto DOS

decfsz REG1

goto TRES

retlw 0

BY

movlw VALOR4 ;retardo de bit

movwf REG1

TRES2

movlw VALOR5

movwf REG2

DOS2

movlw VALOR6

movwf REG3

UNO2

decfsz REG3

goto UNO2

decfsz REG2

goto DOS2

decfsz REG1

goto TRES2

retlw 0

end

Saludos y muchas gracias de antemano!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado sander

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 624
Re: rs232 - retardo entre bit y bit a 9600 baudios
« Respuesta #1 en: 04 de Agosto de 2008, 22:05:11 »
9600 baudios = 9600 bits por segundo, para saber el tiempo que dura bit solamente calcula la inversa de 9600.

Saludos
La electrónica es el arte de manipular señales eléctricas que transportan información
Jan Davidse

Visita mi blog
Visita mi canal de youtube

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: rs232 - retardo entre bit y bit a 9600 baudios
« Respuesta #2 en: 04 de Agosto de 2008, 22:12:23 »
Hola Gera, tendras que dividir 1 segundo por los BIT por segundo, es decir 1/9600, que te da un tiempo de cada BIT de 104 uS
Tendras que calcular bien el tiempo que tardas en la rutina, para compenzar en la demora...
Y ademas, en el arranque, tendras que temporizar medio BIT, para luego, ir leyendo practicamente en las mitades de cada bit, donde tienes el valor bien estable

Por ejemplo, para 1200 BPS, la demora es de 833 uS. (microsegundos)


Un abrazo

Norberto
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: rs232 - retardo entre bit y bit a 9600 baudios
« Respuesta #3 en: 04 de Agosto de 2008, 22:26:59 »
Genial!!! mil gracias amigos! ahora mismo me pongo a probar a ver si funciona ;)

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: rs232 - retardo entre bit y bit a 9600 baudios
« Respuesta #4 en: 04 de Agosto de 2008, 22:40:17 »
Gera, en esta misma seccion http://www.todopic.com.ar/foros/index.php?topic=5968.0
podes descargar un programita muy util para realizar demoras....

Lo ideal seria que trabajes en 20 mhz.. asi podes minimizar errores, o comprobarlo con el simulador del MPLAB  :mrgreen:

Norberto
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: rs232 - retardo entre bit y bit a 9600 baudios
« Respuesta #5 en: 05 de Agosto de 2008, 13:21:17 »
Hola, lo que te comento Norberto es la tecnica mas eficiente, tambien podrias programar un timer para que se dispare a ese tiempo ( 9600 ) y hacer justo la lectura la mitad del bit. La idea seria asi una vez que detectas el bit de Start, primero disparas el timer a la mitad de 9600 que seria algo asi como 52 us, eso es para entrar justo en la mitad del bit, una vez que ocurre ese evento programar el timer para que te interrumpa en 104 us y asi te sincronizas en la mitad de cada bit.

Saludos !

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: rs232 - retardo entre bit y bit a 9600 baudios
« Respuesta #6 en: 05 de Agosto de 2008, 19:15:46 »
Gracias a todos por sus consejos! Les cuento q ya tengo todo funcionando. El programa era para un proyecto de la facultad q voy a presentar mañana. Se trata de un controlador de potencias (hasta 220W) manejado desde la PC.
Esperemos q salga todo bien, mañana les cuento como me fue ;)
gracias de nuevo!!!

PD: esta de mas decir q nombre el foro como bibliografia jaja.

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein