SoloCodigo
Programación Específica => Microcontroladores => Mensaje iniciado por: angelesahu en Jueves 4 de Octubre de 2007, 21:30
-
Que tal gente necesito ayuda por favor he manejado el pic 16f84 ahora tengo un trabajo con el pic 18f452 sencillo un contador descendente del 0 al 9 mostrado en un display 7 seg por medio del puerto b como salida este programa ya lo tengo para el 16f84 pero en el 18f452 no funciona me imagino que tengo mal direcciona
do el puerto a mal configurado si alguien me puedde ayudar de antemano gracias
este es el programa para el 16f84
list p=18f452
radix hex
status equ 0x03
portb equ 0x06
trisb equ 0x06
cont equ 0x0c
pc equ 0x02
ret1 equ 0x08
org 0x00
inicio clrf portb
bsf status,5 ; cambiamos al banco 1
movlw 0x00 :configuramos puerto b como salida
movwf trisb
bcf status,5 ;regresamos al banco 0
com movlw 0x0a
movwf cont ;ponemos el valor 10 en la variable cont
call segmento ;llamamos a segmento
movwf portb ;ponemos el valor de w en el puerto b
call retardo
decf cont ;decre cont
movf cont,0 ;movemos el valor de cont a f
btfsc status,2
goto com
goto nuevo
segmento addwf pc ;sumamos al contador el valor de f
nop
retlw 0x3f
retlw 0x06
retlw 0x5b ; retlw al regresar se lleva el valor en este caso 5b en w
retlw 0x4f
retlw 0x66
retlw 0x6d
retlw 0x7d
retlw 0x07
retlw 0x7f
retlw 0x67
retardo movlw 0xff
movwf ret1
otra decfsz ret1,1
goto otra
return
end
-
Hola! Si, las direcciones de los registros están mal... fíjate en la hoja de datos del 452.
Como en la familia 16F, la 18F siempre tiene las mismas direcciones para los registros comunes entre un micro y otro... Una buena idea es escribir un archivo declarando todos estos registros, y luego incluirlo en nuestros programas; se reduce la posibilidad de errores, además de agilizar el trabajo...
La familia 18F también tiene una forma especial de acceder a los registros... ;)
Saludos
-
Muchas gracias huquen haus tirol me es de gran ayuda tu respuesta
voy a checar la hoja de datos y espero y me sigas ayudando :hola: :hola:
-
Saludos..
Yano utilises el cambio de banco o salto de banco, no es necesario.
Te recomiendo que utilices la libreria y cuando te funcione
declaralos a tu conveniencia:
LIST p=18F452
include<p18F452.inc>
Las declaraciones de registros generales son desde la cero
cont1 EQU 00
cont2 EQU 01
;Ejemplo
; Cristal de 16Mhz
; Calculos para 1 seg = 15625 = 3D09
; Preescaler 256
; como debe ser negativo => 0xFF - 0x3D = C2
0xFF - 0x09 = F6
; Ojo en la conversion me equivoque y coloque valor_TMR0L EQU 0xF7
list P=18F452
INCLUDE<P18F452.INC>
__CONFIG _CONFIG1H, _OSCS_ON_1H & _HSPLL_OSC_1H
;XT OSCILATOR
__CONFIG _CONFIG2L, _BOR_OFF_2L & _BORV_45_2L & _PWRT_ON_2L
;BROWN OUT RESET-BOWN OUT VOLTAGE-POWER UP TIMER
__CONFIG _CONFIG2H, _WDT_OFF_2H & _WDTPS_128_2H
;WATCHDOG_TIMER
__CONFIG _CONFIG4L, _STVR_ON_4L & _LVP_OFF_4L & _DEBUG_OFF_4L
;LOW VOLTAGE PROGRAM
__CONFIG _CONFIG5H, _CPB_ON_5H & _CPD_ON_5H
;DATA EE MEMORY
__CONFIG _CONFIG6L, _WRT0_OFF_6L & _WRT1_OFF_6L & _WRT2_OFF_6L & _WRT3_OFF_6L
;FLASH PROGRAM WRITE
__CONFIG _CONFIG6H, _WRTC_OFF_6H & _WRTB_OFF_6H & _WRTD_OFF_6H
;FLASH PROGRAM WRITE
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
cont100 EQU 0x2A
valor_TMR0H EQU 0xC2
valor_TMR0L EQU 0xF7
org 0
goto start
org 8
goto rstimer
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
start bcf TRISC,0 ;Salida indicadora de LED
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;@@@@@@@@@@@@@@@@@@@@@@@@@@@ INICIO DEL PROGRAMA @@@@@@@@@@@@@@@@@@@@@@@@@
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
clrf PORTC
movlw 0XA0
movwf INTCON
movlw B'00000111'
movwf T0CON
movlw valor_TMR0H
movwf TMR0H
movlw valor_TMR0L
movwf TMR0L
bsf T0CON,TMR0ON ;Enable TMR0
nada goto nada
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ T I M E R @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
rstimer bcf INTCON,TMR0IF
movlw valor_TMR0H
movwf TMR0H
movlw valor_TMR0L
movwf TMR0L
btfsc PORTC,0
goto apaga
goto prende
apaga bcf PORTC,0
retfie
prende bsf PORTC,0
retfie
END
-
:hola: gracias Alternative es bueno saber que no es necesario cambiar de banco
como te digo solo he utilizado el 16f84 y ahora que veo el 18f452 tiene mucho mas funciones que no conosco y mucho mas registros de funciones especiales
pero espero poco a poco ir aprendiendo; Por cierto ya logre tener salida en el puerto b (configurar el puerto b como salida), mi error era que tenia mal direccionado el puerto pero ahora configuro el puerto E como salida de la misma manera que el puerto b pero no tengo ninguna señal si tienes algun fragmento de programa donde se configure el puerto E te lo agradeceria mucho :whistling:
y si puedes decirme como usar las librerias ya que definitivamente soy nuevo en esto de antemano Gracias
-
SAludos.
Yo te recomendaria que antes de saltar al 18F452 utilices el 16F877, ya que por ejemplo ahorita no te funciona el PORTE, ni tampoco te va a funcionar el PORTA, ya que estos los tienes que configurar como salidas Digitales.
Con respecto a manuales, nunca he visto uno en español para el uso del 18F452, los unicos que he visto de manuales son para el 16F84, lo unico que vas a encontrar el el datasheet asi que te recomiendo que tomes tu diccionario y a machetearle, no hay de otra, asi empece tambien.
Mira te coloco un ejemplito para sacar un dato por el PORTB, PORTE
Haa yo utilizo sus librerias, nunca he declarado registros, no me acomodo
;@@@@@@@@@@@@@@@@@@@@@
LIST p=18F452
include<p18F452.inc>
org 0
goto start
;@@@@@@@@@@@@@@@@@@@@@
; DECLARACIONES
;@@@@@@@@@@@@@@@@@@@@@
start clrf TRISB
clrf TRISE
movlw 0x07 ;PORTA y PORTE Out/Inp Digital
movwf ADCON1
;@@@@@@@@@@@@@@@@@@@@@
; INICIO DE PROGRAMA
;@@@@@@@@@@@@@@@@@@@@@
movlw 0x01
movwf PORTB
movlw 0x02
movwf PORTE
sleep
END
SALUDOS Y AHORA SI TOMA TU DICCIONARIO
Y HA ESTUDIAR, PORQUE NO HAY DE OTRA
BYE :hola:
-
En estos micros, después de un reset las entradas con función analógica quedan activadas. En los registros del conversor hay que configurar las entradas (o salidas) como digitales, salvo que usemos alguna como analógica. Las entradas analógicas abarcan el puerto A y el E, de hay el problema que tienes...
Es algo que siempre pasa...
Saludos
-
:D Muchas gracias a Alternative y a huguen_aus_tirol sus comentarios me han sido de mucha ayuda ya tengo salida en los puertos y Pues si no hay mas que
la hoja de datos ya he buscado por otro lado algo en español del 18f y no encuentro nada y gracias nuevamente :hola: