TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: pacocable en 06 de Junio de 2010, 04:34:24
-
la diferencia entre MOVWF PORTB y MOVWF TRISB la tengo clara los bancos, pero he modificado un asm de la red cambiando TRIS PORTB por MOVWF PORTB he creado el hex con mpsamwin y no funciona.
¿Me lo podria explicar??
-
Que pic es???
Porque TRIS PORTB es muy muy viejo.
Para manipular el puerto , ya sea leerlo o escrbir(enviar 1-0) se usa el PORT
Para configurar dichos pines ya sean entrada-salida se usa el registro TRIS
la diferencia entre MOVWF PORTB y MOVWF TRISB la tengo clara los bancos, pero he modificado un asm de la red cambiando TRIS PORTB por MOVWF PORTB he creado el hex con mpsamwin y no funciona.
¿Me lo podria explicar??
Creo que lo deberia cambiar por MOVWF TRISB
-
exacto. la instruccion tris PORTB es mas bien utilizada en la serie 12Fxxx.
y aunque cambies esta instrucion,deberias inspeccionar bien el codigo.ya que al haberse hecho para diferentes pic,es posible que tengas mas diferencias.
no solo de la configuracion de los puertos.
-
Nunca he usado esta instruccion, gracias a Dios, porque nunca la entendi muy bien, esta es la explicacion que viene en el DATA SHEET del 12F508/509/16F505, sigo sin entenderla del todo, pero estos PICs ya los tango fichados, nunca los usare.
Operation: (W) → TRIS register f ; deduzco que esto es igual a "movwf TRIS F", verdad???
PIC12F508/509/16F505
DS41236E-page 64 © 2009 Microchip Technology Inc.
TRIS Load TRIS Register
Syntax: [ label ] TRIS f
Operands: f = 6
Operation: (W) → TRIS register f
Status Affected: None
Description: TRIS register ‘f’ (f = 6 or 7) is
loaded with the contents of the W register
-
antes estaba asi:
MOVLW 0xE0
TRIS PORTA
MOVLW 0xFF
TRIS PORTB
y ahora asi:
BSF STATUS , RP0
BCF STATUS , RP1
MOVLW 0xE0
MOVWF TRISA
MOVLW 0xFF
MOVWF TRISB
BCF STATUS , RP0
BCF STATUS , RP1
pero ahora no funciona
-
El programa original ya estaba hecho para el 16f628? O estaba hecho para otro PIC y tu lo has adaptado?
-
Aparentemente estaria todo bien.
Para el 16F628 los registros TRISA y TRISB estan en el Banco 1, y para acceder al ese banco necesitas tener RP0=1 y RP1=0
Que es lo que no te funciona especificamente?
Con esto lo que haces es solo configurar los puertos como entrada o salidas, nada mas.
Para poder leer o escribir a los puertos debes usar los registros PORTA y PORTB, y tener en cuenta que estan en el Banco 0.
leer el estado de los puertos
BCF STATUS,RP0
BCF STATUS,RP1
MOVF PORTA, W ; hace que W = PORTA
escribir en un puerto
BCF STATUS,RP0
BCF STATUS,RP1
MOVWF PORTB ; hace que PORTB = W
no lo he prbado, lo he escrito de memoria nomas. Espero te sirva, saludos
-
Lo digo mas que nada porque la configuracion aparte de los TRIS, hay que configurarlos en el CMCON, y tambien puede haber variaciones en el CBLOCK, por citar dos errores muy corrientes.
Asi recomtenda microchip hacerlo para i/O DIGITALES.
CLRF PORTA ;Initialize PORTA by
;setting
;output data latches
MOVLW 0x07 ;Turn comparators off and
MOVWF CMCON ;enable pins for I/O
;functions
BCF STATUS, RP1
BSF STATUS, RP0 ;Select Bank1
MOVLW 0x1F ;Value used to initialize
;data direction
MOVWF TRISA ;Set RA<4:0> as inputs
;TRISA<5> always
;read as ‘1’.
;TRISA<7:6>
;depend on oscillator