TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: rodri_go100 en 01 de Febrero de 2009, 16:20:30
-
Hola, estoy intentando hacer un programa en ensamblador para el pic 16F876 pero hace mucho que no tocaba nada de programacion y a lo mas que llegue fue a programar el 16F84A.
He mirado muchos post y programas de ejemplo para copiar o intuir como se hace la configuracion de los registros y puertos de este pic, vamos, todo lo que precede al programa en si.
Alquien me puede echar un cable o decirme que tendria que poner, para activar el puerto A como entrada, el B como salida y el C mitad entrada y mitad salida?
En lo que es el programa no tengo muchas dudas de momento, pero claro si no lo tengo bien configurado esta claro que no funcionara nada.
Os dejo el trozo de la configuracion que tengo a ver que me decis.
Un saludo!
-
Hola Rodrigo,
Antes de configurar losm puertos como entradas o salidas tienes que configurar el registro ADCON diciendo al micro que lo vas a utilizar como digital.
Por lo que comentas, lo normal es que para recuperar recuerdos te cojas el datasheet del micro que estas utilizando y le pegues un pequeño repaso.
Si mal no recuerdo el registro ADCON hay que configurarlo con el valor 0x06 y asi configuras todos los puertos como i/o digitales y luego ya configuaras los puertos de forma individual.
Aqui te pongo el link del datasheet y en la pag31 puedes ver como se configura el puerto A para el resto es de forma similar.
http://ww1.microchip.com/downloads/en/DeviceDoc/30292c.pdf
Fer.
-
Se me olvidó ponerte que el registro a configurar es el ADCON1.
Un ejemplo basico
clrf PORTA
bsf STATUS,RP0 ;Selecciona banco 1
movlw b'00000110'
movwf ADCON1 ;Puerta A E/S digitales
clrf TRISB ;Puerta B se configura como salida
clrf TRISA ;Puerta A salidas
movlw b'11111111'
movwf TRISC ;Puerta C entrada
bcf STATUS,RP0 ;Selecciona banco 0
Fer.
-
Muchisimas Gracias Fer.
Era eso lo que fallaba, ahora va perfectamente, ahora solo queda depurar bien el programa para que funcione como yo quiero.
Un saludo! y gracias de nuevo
-
de esta manera se configura como quieres puerto A como entrada, puerto B como salida, y Puerto C mitad entrada mitad salida
bsf STATUS,RP0 ;Selecciona banco 1
movlw b'00000110'
movwf ADCON1 ;Puerta A E/S digitales
clrf TRISB ;Puerta B se configura como salida
movlw b'11111111'
movlw TRISA ;puerto A como entrada
movlw b'11110000'
movlw TRISC ;puerto C mitad entrada(RC7-RC4), mitad salida(RC5-RC0)
bcf STATUS,RP0 ;Selecciona banco 0
aunque tengo una duda, q pasa cuando los puertos tienen menos de 8 bit, para configurarlos como entrada o salida es necesario especificar 8 bits?
de todas maneras puedes mirar en este pdf con varios ejemplos con el 876 y el 877
ejemplo PIC16F87X (http://www.4shared.com/file/83461414/6e50e0a/varios_programas.html)
-
de esta manera se configura como quieres puerto A como entrada, puerto B como salida, y Puerto C mitad entrada mitad salida
bsf STATUS,RP0 ;Selecciona banco 1
movlw b'00000110'
movwf ADCON1 ;Puerta A E/S digitales
clrf TRISB ;Puerta B se configura como salida
movlw b'11111111'
movlw TRISA ;puerto A como entrada
movlw b'11110000'
movlw TRISC ;puerto C mitad entrada(RC7-RC4), mitad salida(RC5-RC0)
bcf STATUS,RP0 ;Selecciona banco 0
aunque tengo una duda, q pasa cuando los puertos tienen menos de 8 bit, para configurarlos como entrada o salida es necesario especificar 8 bits?
de todas maneras puedes mirar en este pdf con varios ejemplos con el 876 y el 877
ejemplo PIC16F87X (http://www.4shared.com/file/83461414/6e50e0a/varios_programas.html)
Hola jhozate creo que tienes un error cuando escribes en los registros TRISA y TRISC la instruccion deberia de ser movwf TRISA y movwf TRISB
y respecto a tu duda de los puertos menores a 8 bits, simplemente se ignoranporque no tiene nada conectado porque no existen, saludos :-)
-
Hola jhozate creo que tienes un error cuando escribes en los registros TRISA y TRISC la instruccion deberia de ser movwf TRISA y movwf TRISB
y respecto a tu duda de los puertos menores a 8 bits, simplemente se ignoranporque no tiene nada conectado porque no existen, saludos :-)
Lo normal es que si no los utilizas, los dejes configurados como entradas. Si los dejas como salidas si tienes algun problema con el pin se puede trasladar al pic. Por ejemplo que caiga algun resto de algo entre alguna parte de tu circuito y tu ic de salida ya que las señales no sean compatibles.
-
Fer a lo que se refiere jhozate es a los bits que no existen en los puertos incompletos como PORTA que solo tiene 5 bits, y cerece de ls tres de mayor peso.
111 11111 los 3 primeros bits no existen en PORT A, daria igual poner 0XFF que poner 0X1F para la configuracion como entradas, eso creo yo.
saludos desde Ferrol tapi8
-
de esta manera se configura como quieres puerto A como entrada, puerto B como salida, y Puerto C mitad entrada mitad salida
bsf STATUS,RP0 ;Selecciona banco 1
movlw b'00000110'
movwf ADCON1 ;Puerta A E/S digitales
clrf TRISB ;Puerta B se configura como salida
movlw b'11111111'
movlw TRISA ;puerto A como entrada
movlw b'11110000'
movlw TRISC ;puerto C mitad entrada(RC7-RC4), mitad salida(RC5-RC0)
bcf STATUS,RP0 ;Selecciona banco 0
aunque tengo una duda, q pasa cuando los puertos tienen menos de 8 bit, para configurarlos como entrada o salida es necesario especificar 8 bits?
de todas maneras puedes mirar en este pdf con varios ejemplos con el 876 y el 877
ejemplo PIC16F87X (http://www.4shared.com/file/83461414/6e50e0a/varios_programas.html)
Hola jhozate creo que tienes un error cuando escribes en los registros TRISA y TRISC la instruccion deberia de ser movwf TRISA y movwf TRISB
y respecto a tu duda de los puertos menores a 8 bits, simplemente se ignoranporque no tiene nada conectado porque no existen, saludos :-)
:D :D :D no creas..efectivamente es un error garrafal...gracias por la correcion
-
Tengo algunas dudas ya que busco en el foro ejemplo y no lo veo nada claro, SAN GOOGLE no esta conmigo buscando tampoco.
a ver el pic16F876 tiene 6 PuertoA y silo configuro como entrada deberi ser asi
clrf PORTA
bsf STATUS,RP0 ;Selecciono banco 1
movlw b'00000110' ; aqui es donde selecionos los puerto que quiero usar como entrada?
movwf ADCON1 ;Puerto A E/S digitales
clrf TRISB ;Aqui quiero usar los puertos RB0,RB1,RB2,RB3 como salida y el resto como entrada
y aqui es lo que no comprendo porque como salida si estan a 1
clrf TRISA ;Puerta A salidas
movlw b'11111111'
movwf TRISC ;Puerta C entrada
bcf STATUS,RP0 ;Selecciona banco 0
Alguien me podia aclarar esto?
-
movlw b'00000110' ; aqui es donde selecionos los puerto que quiero usar como entrada?
movwf ADCON1 ;Puerto A E/S digitales
no, ahi lo que haces es decirle que los pines que van a ser I/O digitales, pero todavia no le indicas si seran de entrada o salida
clrf TRISB ;Aqui quiero usar los puertos RB0,RB1,RB2,RB3 como salida y el resto como entrada
CLRF limpia todo el registro TRISB, pone ceros en el registro, es decir pone Todo el puerto como salida
clrf TRISA ;Puerta A salidas
si, se puso a 0 todo el TRISA
Rafa, seras que estas confundido con los Atmega? creo q en esos si es lo contrario, para poner como salida pones el registro a 1 y como entrada pones el registro a 0
-
Hola Jhozate, es que al haber hecho lo cambio en mi proyecto el puerto RB4 no se me pone a 1
pero creo que ya di con el problema, chequea
bsf STATUS,RP0
bcf STATUS,RP1 ;banco1 movlw 0xF0
movwf TRISB ;RB7:RB4 entradas y puerto RB3:RB0 como salida
movlw 0x0F
movwf ADCON1 ;Puerto A como e/s digitales
movlw 0xFF
movwf TRISA ; todos el puerto A como entranda
Todavia no lo he probado, se me cierrar los ojos de leer :smiley:
-
Gracias me sirvió para configurar puertos del 16F870.