Autor Tema: consulta sobre usart de pic 16f873  (Leído 3419 veces)

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

Desconectado flecha

  • PIC10
  • *
  • Mensajes: 15
consulta sobre usart de pic 16f873
« en: 11 de Abril de 2007, 22:01:47 »
hola de nuevo si yo FLECHA con mis preguntas raras.

la de hoy y con urgencia es la sigte :

ya que tengo que terminar el proyecto del otro dia necesito me aclaren como hacer esto.
les recuerdo de que se trata mi proyecto, es sencillamente controlar una o dos salidas (a esta conectare un bombillo por elemplo) del pic 16f873 pero el control de encendido y apagado de la carga se debe hacer desde un PC(osea que debo usar el usart del pic ), el problema en resumidas cuentas es que tengo el codigo de una revista que encontre por alli en donde dice hace esa tarea pero no se como diseñarle la interfaz para que el PC  me reciba los datos del PIC y este a su vez tambien envie a la PC el estado de las salidas el codigo es el siguiente:
NOTA
 si alguien me puede colaborar le agrdeceria, aqui pongo el asm del pic 16f873 que encontre en la revista y tambien lo adjunto para que lo vean mas ordenado, yo entiendo hasta lo de la comunicacion serial pero me pierdo en como se envia y reciben los datos del PIC GRACIAS

03h    ;registro de estados
INTCON equ   0bh    ;registro INTCON
PIE1   equ   8ch    ;registro de interrupcion perifericos
PIR1   equ   0ch    ;Bandera de interrupcion
RCSTA  equ   18h    ;registro de Estado de Rx
TXSTA  equ   98h    ;registro de estado de Tx
SPBRG  equ   99h    ;registro generador de baud rate
TX     equ   19h
RX     equ   1Ah
OPCION equ   81h
PORTA  equ   05h    ;direccion en RAM
PORTB  equ   06h    ;direccion 06 de la RAM
PORTC  equ   07h
loops  equ   0dh    ;utilizado en retardos
loops2 equ   0eh    ;utilizado en retardos
TRISA  equ   85h    ;configuracion del puerto A
TRISB  equ   86h    ;configuracion puerto B
TRISC  equ   87h    ;configuracion puerto C
RX1    equ   20h    ;registro para los datos Rx
RX2    equ   21h
RX11   equ   22h
RX22   equ   23h
CONTARX equ  24h    ;contador de bytes recibidos
RXMEM   equ  25h    ;Guarda el ultimo Rx leido

z      equ   02h    ;bandera de 0 del registro de estados
c      equ   00h    ;bandera de carry del registro de estados
w      equ   00h    ;el resultado se guarda en w
r      equ   01h    ;el resultado se guarda enen registro

reset  org   00h    ;reset en la direccion 00
       goto  inicio ;se salta al inicio del programa

;---------------------interrupciones-----------------------
interrupcion
org      4               ;rutina de interrupcion
btfss    PIR1,5          ;verifica si hay int de USART
goto     saleint
movf     RX,w            ;lee el registro serial
movwf    RXMEM           ;lo guarda en memoria
incf     CONTARX,r       ;contador de bytes recibidos
movf     CONTARX,w       ;carga el contador de bytes
xorlw    01h             ;compara
btfsc    STATUS,z        ;si es cero(diferente)salta
goto     primerbyte      ;si es igual......
movf     CONTARX,w       ;carga el contador de bytes
xorlw    02h             ;compara
btfsc    STATUS,z        ;si es cero(diferente)salta
goto     segbyte         ;si es igual......
movf     CONTARX,w       ;carga el contador de bytes
xorlw    03h             ;compara
btfsc    STATUS,z        ;si es cero(diferente)salta
goto     tercerbyte      ;si es igual
goto     cuartobyte

primerbyte
movf    RXMEM,w        ;lee dato serial memorizado
movwf    RX1           ;lo guarda en el registro del dato1
goto    saleint

segbyte
movf    RXMEM,w        ;lee dato serial memorizado
movwf    RX2           ;lo guarda en el registro del dato2
goto    saleint

tercerbyte
movf    RXMEM,w         ;lee dato serial memorizado
movwf    RX11           ;lo guarda en el registro del dato3
goto    saleint

cuartobyte
movf    RXMEM,w         ;lee dato serial memorizado
movwf    RX22           ;lo guarda en el registro del dato4
clrf    CONTARX         ;pone en ceros el contador de bytes


movf    RX1,w           ;lee dato serial memorizado
xorwf   RX11,w          ;compara el 1er y 3er byte
btfss   STATUS,z        ;si la bandera es uno (iguales)

salta

goto    enviar
movf    RX1,w           ;tomar el 1er byte recibido
movwf   PORTA           ;LO TRANSFIERE AL PUERTO A

movf    RX2,W
xorwf   RX22,w          ;compara el 2do y 4to byte
btfss   STATUS,z        ;si la bandera es uno(1) (iguales)

salta
goto    saleint
movf    RX2,w           ;toma el 3er byte recibido
movwf   PORTC           ;lo transfiere al puerto c

enviar

movf    RX1,w
movwf   TX                ;envia el 1er byte hacia el Pc
call    retardo
comf    PORTB,w
movwf   TX                ;envia el puertoB hacia el Pc
call    retardo
movf    RX2,w
movwf   TX                ;envia el 3er byte hacia el Pc


saleint
       retfie             ;regresa de la interrupcion



;---------------PROGRAMA PRINCIPAL-----------------------

inicio bsf  STATUS,5     ;banco 2
      movlw B'00000000'  ;
      movwf TRISA        ;puerto A como salidas
      movlw B'11110111'  ;
      movwf TRISB        ;puerto B como entradas
      movlw B'10000000'  ;
      movwf TRISC        ;puerto C como salidas

      movlw 020h         ;en el registro PEI1 solo se
      movwf PIE1         ;SE PROGRAMA bit para interrupcion serial
      movlw B'00100100'  ;en el registro de estado de Tx se
      movwf TXSTA        ;programan TXENAB Y BRGH

      movlw D'25'        ;en el registro de baud rate se
      movwf SPBRG        ;para 9600 bps (clock=4MHZ)

      bcf   STATUS,5     ;BANCO 1
      movlw 0c0h         ;en el registro INTCON solo se
      movwf INTCON       ;bit PEIE y se habilita GIE

      movlw B'10010000'  ;en el registro de estado de RX
      movwf RCSTA        ;se programa bit SPENAB Y CRENAB
      movlw 00h
      movwf CONTARX      ;se pone en ceros el cont de bytes

 leer
      nop
      nop
      goto   leer        ;

;-------------------------------------------------------------------------
 retardo                   ;subrutina de retardo de 50 milisegundos

        movlw  D'10'      ;el registro loops contiene el numero
        movwf  loops      ;de milisegundos del  retardo
 top2   movlw D'110'      ;
        movwf loops2      ;
 top    nop
        nop
        nop
        nop
        clrwdt
        nop
        decfsz loops2    ;pregunta si termino 1 ms
        goto   top
        decfsz loops     ;pregunta si termina el retardo
        goto   top2
        retlw   0

end
;===================================================================================

;fusibles de programacion

;      osc       XT
;      watchdog  off
;      code protect   off
;      power-up-timer   ON
;      micro.  PIC16F873

;===================================================================================







































































Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: consulta sobre usart de pic 16f873
« Respuesta #1 en: 12 de Abril de 2007, 12:07:58 »
Amigo, te pido 2 cosas

1) Sube el código enmarcado con [ code ] y [ / code ] (sin espacios) .

2) Dinos exactamente qué parte del código es la que no entendes.

Te explico porqué.  Si no entiendes este software, muy difícil te será hacer la interfaz también de pc y que además esta interfaz interactúe con el pic. 

Tal vez te convenga usar C u otro lenguaje que te facilite las cosas.

- 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 groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: consulta sobre usart de pic 16f873
« Respuesta #2 en: 21 de Abril de 2007, 14:31:50 »
hola,este programa que te pongo aqui abjo es un proyecto que estoy desarroyando,que todabia no esta acabado,pero te puede serbir para que comprendas el funcionamiento de la transmision por usart.ademas si programas un pic con el te va a funcionar automaticamente.
porque lo estoy probando ahora mismo.
yo estaba estancado como tu y es que cometi un error al soldar la patilla de salida del max232.y me estaba volviendo loco.asi que me hice un circuito que mandase por el RC6"tx" los numeros del 1 al 0 ,y este conectarselo al interface hecha con el max232 hacia el pc.y eureca al instante tenia visualizandose los numeros en el hiperterminal.

luego conecte este circuito al pictrainer con el programa que te he puesto,y me salieron los datos 1 al 0 por el puerto b.

ten en cuenta que este asm solo es para recivir ,si lo termino pronto y lo quieres lo pones en este mismo canal.






;****************************************** http://www.x-robotics.com *******
; PROGRAMA : rs232.asm
; Funcion : comunicador pc-pic   
;           Serial port config: 9600 baudios,8 bits,paridad = none
;   
;  Revision : 1.0        7/2/2002            Programa para : PIC16F876
; CPU Clock : 4 MHz                      Reloj instruccion : 1 MHz = 1 us
;       WDT : Deshabilitado                  Tipo de reloj : XT 
; Code Prot : OFF           
;****************************************** http://www.x-robotics.com *******

      LIST   P=16F876   ;Se indica el modo de procesador
      
      RADIX   HEX      ;Sistema de numeracion hexadecimal

      INCLUDE   <P16f876.inc>   ;se incluye la definicion de los
               ;registros internos
      __CONFIG    _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC & _BODEN_OFF &_LVP_OFF &_CPD_OFF &_WRT_ENABLE_OFF
      ERRORLEVEL      -302
                  
CounterA   EQU   20h
CounterB   EQU   21h
CounterC   EQU   22h
KEY_1      EQU   23h

BANK0      MACRO
         BCF   STATUS,RP0
         BCF   STATUS,RP1
         ENDM

BANK1      MACRO
         BSF   STATUS,RP0
         BCF   STATUS,RP1
         ENDM


;<<<<<<---------------------- VECTOR DE RESET ------------------------>>>>>>>
         ORG   0x00      ;Inicio en el Vector de Reset
      
         goto   INICIO      ;Va a la primera instruccion del
               

;<<<<<<------------------- VECTOR DE INTERRUPCION -------------------->>>>>>>

         ORG   0x04      ;Vector de interrupcion

         goto   INTER

;<<<<<<----------------- INICIO PROGRAMA PRINCIPAL ------------------->>>>>>>
INICIO      ;goto   INICIO

         BANK1
         clrf   TRISB      ;Puerta B como salida
         movlw   b'10111111'   ;RC7/Rx entrada,
         movwf   TRISC       ;RC6/Tx   salida.
         movlw   0x00
         movwf   TRISA
         movlw   .25      ;9600 baudios
         movwf   SPBRG
         movlw   b'00100100'   ;Configuracion USART modo alta velocidad 9600 baud
         movwf   TXSTA      ;y activacion de transmision
         bsf      PIE1,RCIE   ;Habilitacion interrupcion RX
         ;bsf      PIE1,TXIE
         
         BANK0   ;Cambio al banco 0 -------------
         movlw   b'10010000'   ;Configuracion de la usart
         movwf   RCSTA      ;para recepcion continua y habilitacion de la usart
         movlw   b'11000000'   ;Habilitacion para las
         movwf   INTCON      ;interrupciones generales
         clrf   PORTA
      
            
BUCLE      goto   BUCLE      ;espera aqui hasta que salte la int.
         call   RETARDO
         bsf      PORTA,0
         call   RETARDO
         bcf      PORTA,0
         call   COMANDO
         incf   KEY_1,F
         movwf   TXREG      ; del codigo ascii
         xorlw   .13
         btfsc   STATUS,Z
         goto   INICIO   
         BANK1   ;Cambio al banco 1 -------------
         
COMP_TX      btfss   TXSTA,TRMT   ;comprueba si acabo de Tx.
         goto   COMP_TX
         BANK0   ;Cambio al banco 0 -------------
         goto    BUCLE

;<<<<<<----------------------- OTRAS RUTINAS ------------------------->>>>>>>
;PIC Time Delay = 1,0000020 s with Osc = 4 MHz
RETARDO      
         movlw   D'6'
         movwf   CounterC
         movlw   D'24'
         movwf   CounterB
         movlw   D'168'
         movwf   CounterA
loop      decfsz   CounterA,1
         goto   loop
         decfsz   CounterB,1
         goto   loop
         decfsz   CounterC,1
         goto   loop
         return
   
INTER      BANK0
         btfss   PIR1,RCIF
         retfie
         goto   LEEDATO
         
LEEDATO      movf   RCREG,W      ;Lectura dato recibido
         movwf   PORTB      ;Visualiza dato recibido
         call   RETARDO
VOLVER      retfie         ;retorna de la interrupcion.
      
   
;<<<<<<----------------- INICIO PROGRAMA PRINCIPAL ------------------->>>>>>
COMANDO      


KEY_TABLA   movf   KEY_1,W
         addwf   PCL,F
         retlw    "1"
            retlw    "2"
            retlw    "3"
            retlw    "4"
            retlw    "5"
            retlw    "6"
            retlw   "7"
            retlw    "8"
            retlw    "9"
            retlw    "0"
           
         return
            
         END


Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: consulta sobre usart de pic 16f873
« Respuesta #3 en: 21 de Abril de 2007, 14:38:54 »
ah hola maunix,el programa que he pueto arriva me funciona bien,pero solo si pulso las teclas del ordenado con el hiperterminal,no muy deprisa.

si lo hago rapido el pic se bloquea y tengo que reiniciarlo para que me lea las teclas que pulso.
esto puede se algun tipo de error que tenga que subsanar con los bit FERR y OERR.y como se subsanaria?

gracias.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: consulta sobre usart de pic 16f873
« Respuesta #4 en: 22 de Abril de 2007, 11:14:53 »
si lo hago rapido el pic se bloquea y tengo que reiniciarlo para que me lea las teclas que pulso.
esto puede se algun tipo de error que tenga que subsanar con los bit FERR y OERR.y como se subsanaria?

Un OERR se subsanda borrando y encendiendo el bit RCSTA,CREN

El FERR, leyendo el byte y nada más.

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)


 

anything