Autor Tema: no envio ni un solo bit por la usart , que estoy haciendo mal  (Leído 3595 veces)

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

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
no envio ni un solo bit por la usart , que estoy haciendo mal
« en: 13 de Mayo de 2007, 15:23:25 »
holas a todos ,
ya no se que hacer , para que el pic saque los datos por la usart ,mpf ...... creía haberla configurado bien ,pero algo debo estar haciendo mal :? y no se que es.
os dejo las lineas por si tiene alguien un ratín y me pueden explicar  que no he puesto o en que me he confundido

   LIST        p=16f73
             list       c=132
         #include   <p16f73>         
opcion       equ       0x01
step         equ       0x20
phrase       equ       0x21
play         equ       0x22
stop         equ       0x23
continue     equ       0x24
timming      equ       0x25
menos        equ       0x26
mas          equ       0x27
suma       equ       0x28
estado       equ       0x29

   org     0                   
   goto    empieza
    org     4
    goto    interrupcion
    org     5
empieza
   movlw   b'11111010' ;carga  a w
    movwf   play
    movlw   b'11111100' ;carga  a w
    movwf   stop
    movlw   b'11111011' ;carga  a w
    movwf   continue
   movlw   b'11111000' ;carga  a w
   movwf   timming
   movlw   b'10111000'   ;mueve a w
   movwf   intcon       
   bsf     status, 5     
   movlw   b'00010110'
   movwf   trisa
   movlw   b'11100001'
   movf   trisb   
   movlw   b'11000000'   
   movwf   trisc       ;configuro los puertos de c
        bcf        rcsta,cren     ;apago la recepcion ,no la necesito
   bsf      rcsta,spen   ;habilito rc6/out y rc7/in
    movlw   b'10110100' ;Se elige el modo asincrono (SYNC=1),dato de 8 bits
    movwf   txsta       ;y alta velocidad (BRGH=1)
    movlw   26          ;Se carga 26 en el registro SPBRG
    movwf   spbrg      ;con lo cual se trabaja a 31250baudios con 20 mgh de f.osc     
    bcf     status, 5
    goto    start
;----------------------- envio por la usart-----------------------------------------------
start
   movfw   timing, w
   movwf   TXREG      ; Movemos lo que queremos transmitir    
   bsf    STATUS,5   ; al registro TXREG y empezamos a transmitir
FIN   
   btfss   RCSTA,tmrt   ; Compruebo si el bit TMRT del registro esta
                        ; a '1' o a '0'.
   goto   FIN         ; Si esta a '0' es que esta lleno TMRT y no
                  ; ha terminado de transmitir,
                  ; para ello TRMT tiene que estar a 1, hasta
                  ; entonces esperamos.
   bcf   STATUS,5       ; Elegimos BANCO0      
;aqui hace un bucle que tarda 3 microsegundos antes de volver a transmitir(no lo he puesto)
   
   goto    start
             
                   
un saludo y gracias
« Última modificación: 14 de Mayo de 2007, 08:04:45 por alogic.on »

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: no envio ni un solo bit por la usart , que estoy haciendo mal
« Respuesta #1 en: 13 de Mayo de 2007, 18:38:54 »
tranquilo amigo debe ser solo un detalle, voy a buscar una rutina que tengo por ahi en ASM y lo comparas.  :-/
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: no envio ni un solo bit por la usart , que estoy haciendo mal
« Respuesta #2 en: 14 de Mayo de 2007, 17:26:22 »
Fijate lo siguiente:


      bsf    STATUS,5        ; al registro TXREG y empezamos a transmitir
FIN   
      btfss   RCSTA,tmrt     ; Compruebo si el bit TMRT del registro esta
                             ; a '1' o a '0'.
      goto   FIN             ; Si esta a '0' es que esta lleno TMRT y no
                             ; ha terminado de transmitir,
                             ; para ello TRMT tiene que estar a 1, hasta
                             ; entonces esperamos.
      bcf   STATUS,5         ; Elegimos BANCO0     
                             ;aqui hace un bucle que tarda 3 microsegundos
                             ; antes de volver a transmitir(no lo he puesto)
   
      goto    start



Tú haces bsf STATUS,5 con lo cual te pasas al banco 1 y luego luego verificas RCSTA que está en el banco 0.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
Re: no envio ni un solo bit por la usart , que estoy haciendo mal
« Respuesta #3 en: 15 de Mayo de 2007, 09:57:18 »
muchas gracias , he revisado los cambios de pagina y habia alguno mas que no estaba en la adecuada , creo haberlos puesto donde va cada uno , aun asi no funciona :( :( :( estoy empezando a pensar que algo no me funciona en el isis para simular el circuito, pero seguramente sea algun error mas que se me ha pasado.

y hasta el momento no funciona :x :x
         LIST       p=16f73
            list       c=132
         #include   <p16f73>
opcion      equ     0x81
step        equ     0x20
phrase      equ     0x21
play        equ     0x22
stop        equ     0x23
continue    equ     0x24
timming     equ     0x25
mas         equ     0x27
suma      equ     0x28
estado      equ     0x29
PDel0      equ      0x30
PDel1      equ      0x31
PDel2      equ      0x32
   org     0
   goto    empieza
    org     4
    goto    interrupcion
empieza
;--------------------carga de los valores en sus registros
   bcf      status, rp0   ;pagina 0
   movlw   b'11111000' ;cargo a w
   movwf   timing   ;y w a timing
   bcf      rcsta, cren ;desactiva la recepcion, por defecto estara a 0 pero por si acaso
   bsf      rcsta, spen   ;habilito rc6/out y rc7/in
   bsf     status, rp0   ;pagina 1
   movlw   b'00010110'
   movwf   trisa
   movlw   b'11100001'
   movf   trisb
   movlw   b'11000000'
   movwf   trisc       ;configuro los puertos de c como pone en el datasheet 11000000
    movlw   b'10110100' ;Se elige el modo asincrono (SYNC=1),dato de 8 bits
    movwf   txsta       ;y alta velocidad (BRGH=1)
    movlw   26          ;Se carga 26 en el registro SPBRG
    movwf   spbrg      ;con lo cual se trabaja a 31250baudios con 20 mgh de f.osc
   bsf      intcon, gie      ;activacion de las interrupciones
   bsf      intcon, toie   ;act. interrupcion del timer 0
   bsf      intcon, inte   ;act. interrupcion del pb0
   bsf      intcon, rbie   ;act. interrupcion del cambio de estado de la pb4-pb7
    bcf     status, rp0      ;pagina 0
    goto    start
start   
   movwf   timing, w
   movwf   TXREG      ; Movemos lo que queremos transmitir de w a TXREG
   call   FIN         ;mueve a la subrutina FIN
;---------------------------------------aqui, me pregunto yo, si no habra que activar algún bit para que comienze la transmisión

FIN   btfss   txsta, trmt   ; Compruebo si el bit TMRT del registro esta
                        ; a '1' o a '0'.
   goto   FIN         ; Si esta a '0' es que esta lleno TMRT y no
                  ; ha terminado de transmitir,
                  ; para ello TRMT tiene que estar a 1, hasta
                  ; entonces esperamos.
;---------------------------------------rutina de retardo de un tercio de segundo 333us aprox la he sacado
;---------------------------------------del programita tan guai que hay para descargar en este mismo foro, picdel 
DEMORA  movlw   8         ; 1 set numero de repeticion  (C)
        movwf   PDel0     ; 1 |
PLoop0  movlw   215       ; 1 set numero de repeticion  (B)
        movwf   PDel1     ; 1 |
PLoop1  movlw   241       ; 1 set numero de repeticion  (A)
        movwf   PDel2     ; 1 |
PLoop2  clrwdt            ; 1 clear watchdog
        decfsz  PDel2, 1  ; 1 + (1) es el tiempo 0  ? (A)
        goto    PLoop2    ; 2 no, loop
        decfsz  PDel1, 1  ; 1 + (1) es el tiempo 0  ? (B)
        goto    PLoop1    ; 2 no, loop
        decfsz  PDel0, 1  ; 1 + (1) es el tiempo 0  ? (C)
        goto    PLoop0    ; 2 no, loop
PDelL1  goto    PDelL2    ; 2 ciclos delay
PDelL2  clrwdt            ; 1 ciclo delay
        return            ; 2+2 Fin.
graciasmil y un saludo
« Última modificación: 16 de Mayo de 2007, 12:26:43 por alogic.on »

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: no envio ni un solo bit por la usart , que estoy haciendo mal
« Respuesta #4 en: 15 de Mayo de 2007, 12:13:38 »
pues yo implemente este codigo para un 16f628a que conversaba con su otro hermano gemelo 16f628a y lo unico que se necesita para hacer funcionar el modulo UART en este pic es lo siguiente:
Código: ASM
  1. INICIO      BSF         STATUS,RP0;banco 1
  2.                 BSF             PCON,3; cristal interno de 4mHz del pic628a
  3.                 MOVLW   0X30
  4.                 MOVWF   TRISA
  5.                 MOVLW   0X02
  6.                 MOVWF   TRISB
  7.                 MOVLW   0X87
  8.                 MOVWF   OPTION_REG
  9. INICIO_USART
  10.                 MOVLW   D'25'
  11.                 MOVWF   SPBRG;9000Kbaud con 4MHz para modo asincrono
  12.                 MOVLW   B'00100100'
  13.                 MOVWF   TXSTA;8 bits,asincrono,high speed,
  14.                 BCF             STATUS,RP0
  15.                 MOVLW   B'10010000'
  16.                 MOVWF   RCSTA;8 bits,recepcion continua,
  17.                 CLRF    PIR1

este bloque de codigo coloque en cada pic y listo, utilize los registros de carga y de lectura TXREGy RCREG como menciona el datasheet:
Código: ASM
  1. ENVIANDO_TRAMA;envio el valor 0XAA al pic receptor por el modulo UART
  2.                 MOVLW   0XAA
  3.                 MOVWF   TXREG
  4.                 BSF             STATUS,RP0
  5.                 BTFSS   TXSTA,TRMT
  6.                 GOTO    $-1
  7.                 BCF             STATUS,RP0             
  8.                 RETURN

Código: ASM
  1. ESPERANDO_TRAMA; espero llegada de trama enviada desde el pic transmisor
  2.                 BTFSS   PIR1,RCIF
  3.                 GOTO    $-1
  4.                 NOP
  5.                 ;BCF            PIR1,RCIF esta bandera se borra por si sola al leer el registro RCREG
  6.                 MOVFW   RCREG
  7.                 XORLW   0XAA
  8.                 BTFSS   STATUS,Z
  9.                 GOTO    ESPERANDO_TRAMA
  10.                 GOTO    LISTO

espero que te ayude a resolver tu codigo, comparalo y revisa el datasheet de tu pic, nos cuentas tus avances  :-/ :-/ :-/ :-/ :-/
« Última modificación: 15 de Mayo de 2007, 12:27:56 por micro_cadaver »
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
Re: no envio ni un solo bit por la usart , que estoy haciendo mal
« Respuesta #5 en: 16 de Mayo de 2007, 09:24:42 »
ooooooooooooooooo  :-/ :-/
por fín¡¡¡¡¡ ya esta , era mplab , que no se porque cuando le pongo el include , no salen errores en la escritura :shock: :shock:
podia poner, almoada P.ej. en cualquier linea del programa sin haberlo igualado a una direccion , que no daba error , no se que le pasa , pero lo he solucionado pegando parte del archivo include con las direcciones de los registros y poniendoles nº a todos los bits a los que se hacía referencia,  :mrgreen:
lo dejo aqui para las futuras generaciones de usuarios que tengan problemas con la configuracion de la usart en un 16f73
y gracias por vuestra ayuda
   
empieza    bsf     status, 5   ;pagina 1
;--------------------carga de los valores en sus registros
   movlw   b'00010110'
   movwf   trisa
   movlw   b'11100001'
   movf   trisb
;-----------------------------------configuracion de la usart-----------------------------------------
   movlw   b'11000000'
   movwf   trisc       ;configuro los puertos de c como pone en el datasheet 11000000
    movlw   b'10110100' ;Se elige el modo asincrono (SYNC=1),dato de 8 bits
    movwf   txsta       ;y alta velocidad (BRGH=1)
    movlw   26          ;Se carga 26 en el registro SPBRG
    movwf   spbrg      ;con lo cual se trabaja a 31250baudios con 20 mgh de f.osc
   bsf      intcon, 7      ;activacion de las interrupciones
   bsf      intcon, 5   ;act. interrupcion del timer 0
   bsf      intcon, 4   ;act. interrupcion del pb0
   bsf      intcon, 3   ;act. interrupcion del cambio de estado de la pb4-pb7
    bcf     status, 5      ;pagina 0
   movlw   b'11111000' ;cargo a w
   movwf   timing     ;y w a timing
   bcf      rcsta, 4 ;desactiva la recepcion, por defecto estara a 0 pero por si acaso
   bsf      rcsta, 7   ;habilito rc6/out y rc7/in
    goto    start
;-------------------------------------------envio de la usart---------------------------------------------------
start   bcf      status, 5
   movlw   b'11111000'
   movwf   TXREG      ; Movemos lo que queremos transmitir de w a TXREG
   goto   FIN         ;mueve a la subrutina FIN
;----------------------------------------------------espera hasta que transmita los datos, testando el bit TRMT------------

FIN   bsf      status, 5
   btfss   txsta, 1   ; Compruebo si el bit TMRT del registro esta
                        ; a '1' o a '0'.
   goto   FIN         ; Si esta a '0' es que esta lleno TMRT y no
                  ; ha terminado de transmitir,
                  ; para ello TRMT tiene que estar a 1, hasta
                  ; entonces esperamos.
   bcf      status,5
;---------------------------------------rutina de retardo de un tercio de segundo 333us aprox la he sacado
;---------------------------------------del programita tan guai que hay para descargar en este mismo foro, picdel 
DEMORA  movlw     .26       ; 1 set numero de repeticion  (B)
        movwf     PDel0     ; 1 |
PLoop1  movlw     .253      ; 1 set numero de repeticion  (A)
        movwf     PDel1     ; 1 |
PLoop2  clrwdt              ; 1 clear watchdog
        clrwdt              ; 1 ciclo delay
        decfsz    PDel1, 1  ; 1 + (1) es el tiempo 0  ? (A)
        goto      PLoop2    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) es el tiempo 0  ? (B)
        goto      PLoop1    ; 2 no, loop
        clrwdt              ; 1 ciclo delay
        return              ; 2+2 Fin.
   end
un saludo y muchisisisisisimas gracias


Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: no envio ni un solo bit por la usart , que estoy haciendo mal
« Respuesta #6 en: 16 de Mayo de 2007, 09:31:37 »
hola. jje antes de terminar con este hilo, a cual include te refieres? :-)
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
Re: no envio ni un solo bit por la usart , que estoy haciendo mal
« Respuesta #7 en: 16 de Mayo de 2007, 12:26:06 »

holas,es al include p16f73.inc

un saludo y gracias por la ayuda

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: no envio ni un solo bit por la usart , que estoy haciendo mal
« Respuesta #8 en: 16 de Mayo de 2007, 17:54:47 »
es que el include tiene en su codigo el normbre asigando por defecto de todos los registros del microcontrolador, por ejemplo gracias al archivo include el compilador sabe que PORTA = 0X05, si no estuviera ese include dentro del archivo entonce el compialdor no entenderia la palabra PORTA te daria un error, y en consecuencia tendrias que reemplazarlo por su nombre original o sea 0x05 imaginate programar todo sin el include  :? :? :? :? :?
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
Re: no envio ni un solo bit por la usart , que estoy haciendo mal
« Respuesta #9 en: 16 de Mayo de 2007, 18:58:47 »
ajap  , pero no se que le pasa al jordenador , que cuando utilizo el include puedo poner lo que me de la gana mas bien ,aunque sean palabras que no estan en el include  :shock: :shock:
no se el por que ??? pero vamos ni reinstalar ni nada ,asi que ,copio el include en el asm y de momento vale . seguramente sea algo que he tocado,mas que un fallo , ya daré con otra solucion, de momento anda que ya es, para ser mi primer programa :-) :-)
y de nuevo muchas gracias,  un saludo

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: no envio ni un solo bit por la usart , que estoy haciendo mal
« Respuesta #10 en: 16 de Mayo de 2007, 20:02:54 »
que? a ver puedes postear todo el codigo del que me hablas  :-/ ya me dio curiosidad
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
Re: no envio ni un solo bit por la usart , que estoy haciendo mal
« Respuesta #11 en: 17 de Mayo de 2007, 07:15:14 »
pues claro  :mrgreen: . es  mi primer programa , seguramente encuentres alguna que otra locura y aun mas locura para lo que lo estoy haciendo ,  puedes leerlo en el foro de midibox http://www.midibox.org/forum/index.php?topic=7393.0
si tienes alguna sugerencia siempre es bien recibida  :-)


un saludo y gracias por tu interés
« Última modificación: 17 de Mayo de 2007, 09:30:59 por alogic.on »


 

anything