Programación Específica > Microcontroladores
Pic 18f452 No Tengo Salida
angelesahu:
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
Huguen_aus_Tirol:
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
angelesahu:
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:
Alternative:
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
angelesahu:
: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
Navegación
[#] Página Siguiente
Ir a la versión completa