Autor Tema: Tx serial  (Leído 4181 veces)

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

Desconectado natalia_mouse

  • PIC10
  • *
  • Mensajes: 42
Tx serial
« en: 28 de Abril de 2004, 20:16:00 »
Hola...
EStoy haciendo un proyecto donde tengo que mandar datos al pc por puerto serial... gracias a una serie de ejemplos que me encontre en el foro hice un programita para pic16f84... sin embargo aun no funciona...
Si alguien tiene un ejemplito sencillo donde se envie algo bajo estas caracteristicas (rs232) me lo podria enviar por favor???
 para que yo pueda revisar mi codigo y así encontrar mi error...
Gracias
NATALIA

Desconectado huro

  • PIC10
  • *
  • Mensajes: 36
RE: Tx serial
« Respuesta #1 en: 29 de Abril de 2004, 13:18:00 »
HOLA NATALIA:
  Aqui te envio una rutina en assembler para transmitir y recibir datos por software desde un PIC al PC. Lo que tienes que hacer es cargar el registro: xmtreg con el dato que quieres enviar a la PC y luego llamar a asyxmt y listo. Esta configurado para enviar 8 bits de datos a 4800 baudios por el pin del puertoA que declares como salida (xmit). Espero te sirva. Saludos desde Peru.;====== HALF.GRP ==========================================================
;
asyrec  bcf     comflag,1      
        bcf     comflag,0      
        movlw   09              
        movwf   bitctr
asyrec1 btfsc   porta,rec      
        goto    asyrec1        
        call    half            
        btfss   porta,rec      
        goto    asyrec3        
        bsf     comflag,1      
        goto    asyrecx        
asyrec3 call    full            
        decfsz  bitctr,f        
        goto    asyrec4        
        btfss   porta,rec      
        bsf     comflag,0      
        goto    asyrecx        
;
asyrec4 bsf     status,c        
        btfss   porta,rec      
        bcf     status,c        
        rrf     recreg,f        
        goto    asyrec3        
;
asyrecx retlw   0              
;
;-------------------------------------------------------------------------
asyxmt  bcf     porta,xmit      
        call    full            
        movlw   08              
        movwf   bitctr          
asyxmt1 rrf     xmtreg,f        
        btfsc   status,c        
        goto    asyxmt2        
        bcf     porta,xmit      
        goto    asyxmt3        
asyxmt2 bsf     porta,xmit      
;
asyxmt3 call    full            
        decfsz  bitctr,f        
        goto    asyxmt1        
;
        bsf     porta,xmit      
        call    full            
        retlw   0              
;---------------------------------------------------------------------------
vdly    movf    bcount,w        
        movwf   cntrb
vdly0   movf    acount,w        
        movwf   cntra
vdly1   decfsz  cntra,f        
        goto    vdly1          
        decfsz  cntrb,f        
        goto    vdly0          
        retlw   0              
;--------------------------------------------------------------------------
half    movlw   d"3"            
        movwf   bcount
        movlw   d"20"
        movwf   acount
        call    vdly
        retlw   0
;-------------------------------------------------------------------------
full    movlw   d"3"            
        movwf   bcount
        movlw   d"43"
        movwf   acount
        call    vdly
        retlw   0



Desconectado huro

  • PIC10
  • *
  • Mensajes: 36
RE: Tx serial
« Respuesta #2 en: 17 de Mayo de 2004, 11:09:00 »
RE: Tx serial[/b]

<

Desconectado huro

  • PIC10
  • *
  • Mensajes: 36
RE: Tx serial
« Respuesta #3 en: 17 de Mayo de 2004, 12:12:00 »
   Veo que en mi anterior mensaje he metido mucha información y por eso no ha salido los datos que envié, bueno aqui va de nuevo algo mas comprimido.
    Decía que la configuración anterior esta bien excepto la velocidad de la rutina, esta configurada a 2400 baudios. En el hiperterminal configurar de la siguente manera: 8 bits de datos, 1 bit de inicio, 1 bit de parada, sin paridad y 2400 baudios.
    Esta rutina esta preparada para trabajar con un cristal de 4 MHZ, osea 1us por ciclo de instrucción.
    Pero aqui les envío mas datos para manejar mejor dicha rutina.
    Declarar los siguientes registros: bitctr, acount, bcount, comflag, cntra, cntrb, recreg y xmtreg. Declarar los siguientes bits: xmit(salida de datos al PC), dtr, rec (entrada de datos desde el PC).
    Pero si quieren cambiar a otras velocidades , hacer los siguientes cambios en el modulo de retardo: vdly de la rutina mas arriba mostrado dentro de las subrutinas: half y full.

     BAUDIOS            SUBRUTINA half              SUBRUTINA full
                              bcount     acount            bcount       acount
        110                   13            231                 13             115
        300                   13              81                 13               41
        600                   12              44                   6               44
       1200                    3              89                   3               42
       2400                    3              43                   3               20
       4800                    2              29                   2               13
       9600                    1              27                   1               11
      19200                   1                9                   1                 1

   Espero que los amantes del diseño con microcontroladores aprecien estas notas y los apliquen a sus aplicaciones. Saludos desde Perú.

Desconectado huro

  • PIC10
  • *
  • Mensajes: 36
RE: Tx serial
« Respuesta #4 en: 18 de Mayo de 2004, 09:16:00 »
    Estos editores no ayudan a visualizar bien lo que envié mas arriba, por espero que esto se vea mejor.

BAUDIOS******SUBRUTINA half******SUBRUTINA full
*************bcount**acount*****bcount**acount
***110*********13*****231********13****115
***300*********13******81********13*****41
***600*********12******44*********6*****44
**1200**********3******89*********3*****42
**2400**********3******43*********3*****20
**4800**********2******29*********2*****13
**9600**********1******27*********1*****11
*19200**********1*******9*********1******1


Desconectado neosud

  • PIC12
  • **
  • Mensajes: 51
RE: Tx serial
« Respuesta #5 en: 18 de Mayo de 2004, 11:17:00 »
hola amigo, tambien soy de peru y en el tiempo q vengo aprendiendo aun no he utilizado estos rcursos de tx serial de los pics, podrias enviarme información alrespecto para poder hacer algunas pruebas de estos recursos?
Gracias por tu ayuda, saludos.

e-mail: jcotrinamatta@eresmas.com (espacio 30 mb)

Desconectado huro

  • PIC10
  • *
  • Mensajes: 36
RE: Tx serial
« Respuesta #6 en: 18 de Mayo de 2004, 11:32:00 »
HOLA JACMSUD: Dime exactamente que es lo que quieres hacer para ver si lo ponemos en este foro para beneficio de todos  los que entran aqui. Saludos.

Desconectado huro

  • PIC10
  • *
  • Mensajes: 36
RE: Tx serial
« Respuesta #7 en: 24 de Mayo de 2004, 11:55:00 »
Aqui voy con mas notas, para los principiantes y los no principiantes que aun no saben manejar rutinas. Vamos a sacarle el maximo provecho a esta rutinita que por supuesto no es mia, pues la baje de la red. Incluir esta rutina dentro de vuestro código a partir de la dirección 0x005 (recomiendo usarla en todos los microcontroladores de la gama media). Pero como se darán cuenta esta rutina esta escrita todas en minusculas, por eso es necesario declarar todas las variables que aparecen en el. pero si quieren usar los include de MICROCHIP, poner en mayusculas todos los registros especiales. Lo excelente de esta rutina es que podemos usarla por cualquier pin del micro que nosotros deseemos, haciendole los cambios necesarios en el mismo. Les dejo ese reto. Tambien podemos utilizarlo como un include, por ejemplo como indica su nombre: half.grp y lo llaman desde su código fuente de la siguiente manera <include half.grp>.

Desconectado huro

  • PIC10
  • *
  • Mensajes: 36
RE: Tx serial
« Respuesta #8 en: 26 de Mayo de 2004, 12:01:00 »
Aqui tienen un ejemplito de aplicación. Disfrutenlo.
;--------------------------------------------------------------
;Programa que ilustra como realizar una transferencia de datos
;de tipo BCD y el resultado enviarlo en forma serial a una PC en
;formato ASCII  usando el protocolo RS232
;--------------------------------------------------------------
        list    p=16f84
        radix   hex
;--------------------------------------------------------------
c          equ     0      
z          equ     2      
w          equ     0      
f         equ     1      
rp0        equ     5      
;
;------------------------------------------------------------------------
pc   equ     0x02
status     equ     0x03
porta      equ     0x05
portb      equ     0x06
trisa      equ     0x85      
trisb      equ     0x86      
;
;-------------------------------------------------------------------------
chartr     equ     0x0c      
bitctr     equ     0x0d      
acount     equ     0x0e      
bcount     equ     0x0f      
comflag    equ     0x10      
cntra      equ     0x11      
cntrb      equ     0x12      
recreg     equ     0x13      
xmtreg     equ     0x14
count   equ     0x15
ctr   equ     0x16
cont1   equ     0x17
cont2   equ     0x18
cont3   equ     0x19
cuatro   equ     0x1b
optreg   equ     0x81      
;--------------------------------------------------------------------------
xmit       equ     0x07    
dtr        equ     0x02  
rec        equ     0x03    
;------------------------------------------------------------
        org     0x000
   goto   inicio

;------------------------------------------------------------
;   cabecera para iniciar el envio de dato
;------------------------------------------------------------
tabla1   addwf   pc,f   
   retlw   a" "       ;ASCII " " a ser enviado
   retlw   a"E"        ;ASCII "E" a ser enviado   
   retlw   a"T"       ;ASCII "T" a ser enviado
   retlw   a"E"        ;ASCII "E" a ser enviado
                retlw   a"H"       ;ASCII "H" a ser enviado
   retlw   a" "        ;ASCII " " a ser enviado
   retlw   a"0"        ;ASCII "0" a ser enviado
   retlw   a"0"       ;ASCII "0" a ser enviado
   retlw   a"0"        ;ASCII "0" a ser enviado   
   retlw   a"0"       ;ASCII "0" a ser enviado
   retlw   a"0"        ;ASCII "0" a ser enviado
   retlw   0x0D       ;ASCII "$" a ser enviado
   retlw   a"E"        ;ASCII "E" a ser enviado   
   retlw   a"T"       ;ASCII "T" a ser enviado
   retlw   a" "        ;ASCII " " a ser enviado
                retlw   a"H"       ;ASCII "H" a ser enviado
   retlw   a" "        ;ASCII " " a ser enviado
   retlw   a" "        ;ASCII " " a ser enviado
   retlw   a" "       ;ASCII " " a ser enviado
   retlw   a"7"        ;ASCII " " a ser enviado   
   retlw   a"3"       ;ASCII " " a ser enviado
   retlw   a"1"        ;ASCII " " a ser enviado
;------------------------------------------------------------
;   final y puntero a la izquierda
;------------------------------------------------------------
tabla2   addwf   pc,f   
   retlw   0x0d       ;puntero a la izquierda       
;   retlw   0x0a        ;siguiente linea
;------------------------------------------------------------
;   tabla de conversión de BCD a códigos ASCII
;------------------------------------------------------------
ASCII   addwf   pc,f           ;Calcula desplazamiento sobre la tabla
   retlw   0x30      ;Codigo ASCII del dígito 0
   retlw   0x31      ;Codigo ASCII del dígito 1
   retlw   0x32      ;Codigo ASCII del dígito 2
   retlw   0x33      ;Codigo ASCII del dígito 3
   retlw   0x34      ;Codigo ASCII del dígito 4
   retlw   0x35      ;Codigo ASCII del dígito 5
   retlw   0x36      ;Codigo ASCII del dígito 6
   retlw   0x37      ;Codigo ASCII del dígito 7
   retlw   0x38      ;Codigo ASCII del dígito 8
   retlw   0x39      ;Codigo ASCII del dígito 9
;------------------------------------------------------------
;   pausa de 1 segundo
;------------------------------------------------------------
UN_SEG   
   decfsz   cont1,f
                goto   UN_SEG   
   decfsz   cont2,f
   goto   UN_SEG
   decfsz   cont3,f
   goto   UN_SEG
   movlw   5
   movwf   cont3
   return       
;------------------------------------------------------------
;   programa principal
;------------------------------------------------------------
inicio        bsf     status,rp0     ;banco1
   movlw   b"11111111"    ;porta entrada/salida
                movwf   trisa
   movlw   0x7f
   movwf   trisb
   bcf   status,rp0    ;banco0
   bsf   portb,xmit     ;marcar la salida
   clrf   cont1      ;cargar contadores 1,2 y 3
   clrf   cont2
   movlw   0x05
   movwf   cont3
;   clrf   cuatro
otro   clrf   ctr      ;limpiar ctr
botar   movf   ctr,w      ;inicializar ctr
   call   tabla1     ;traer el caracter de la tabla1
   movwf   xmtreg          ;almacenar en este registro
                call    asyxmt      ;tx al pc
   incf   ctr,f      ;incrementar ctr
   movf   ctr,w      ;llevarlo al registro de trabajo
   sublw   0x16      ;ver si se envió toda la cabezera
   btfss   status,2     
   goto   botar      ;no
   movf   portb,w
   call   ASCII
   movwf   xmtreg
   call    asyxmt      ;tx al pc
COMA   movlw   a","      ;Enviar coma
   movwf   xmtreg      ; a la PC
   call    asyxmt      ;tx al pc
final   clrf   ctr      ;limpiar ctr
botar1   movf   ctr,w      ;inicializar ctr
   call   tabla2     ;traer el caracter de la tabla2
   movwf   xmtreg      ;almacenar en este registro   
   call    asyxmt      ;tx al pc
   incf   ctr,f      ;incrementar ctr
   movf   ctr,w      ;llevarlo al registro de trabajo
   sublw   0x01      ;ver si se envió la tabla2
   btfss   status,2     
   goto   botar1      ;Aún no
   call   UN_SEG      ;Esperar un segundo
   goto    otro      ;Traer nuevo dato
;-------------------------------------------------------------------------
        include half.grp
;------------------------------------------------------------
        end
;------------------------------------------------------------