Hola a todos los del foro antes de todo quiero darle mi saludos y felicitarlo a todo y a cada uno de ustedes por ver yo como realmente ayudan . sin desmereser a nadie y eso vale un monton
gracias por ser como son con gente como yo y que somos mucho
gracis por sus paciensia
Bueno lo mio es porque yo tengo un sof que aqui dejo que fue
escrito para ser trabajado con un pic16f84 y con un cristal de 10mhz yo quiero llevar este .asm al pic16c621 pero me encuentro que este pic16c621 tiene un su puertoA unos comparadores que
yo no lo quiero utilisar y leyendo la hoja de data del pic16c621
me dise como desconetar o desavilitar a los comparadores y usar el puertoA como E/S pero yo ya voy quemando 3 y nada no me funca es por eso que devo poner o mejor dicho a donde ay que desirle al programa de los comparadores es por eso que le dejo el .asm para que me ayuden gracias a todo
PROCESSOR 16F84A
#include "p16f84a.inc"
__CONFIG _CP_OFF & _WDT_OFF & _HS_OSC
RADIX DEC
; Definicion de registros generales
VideoMode equ 20h
Loops equ 21h
LineaCnt equ 22h
SearchCnt equ 23h
CntSyncOk equ 24h
CntSyncErr equ 25h
DataSample equ 26h
; PORTB valores de salida para los diferentes modos
PASSVIDEO equ 00010011b
PASSINVER equ 00110010b
MAKEBLACK equ 10010000b
MAKESYNC equ 10000000b
PASSBURST equ 11010000b
; PORTB bits de entrada
NEG equ 2
POS equ 3
; VideoMode bits
DEC equ 0
INV equ 1
BLK equ 2
ERR equ 3
FIND equ 4
; PORTA osc control
OSCTRLON equ 00001000b
OSCTRLOFF equ 00001001b
ORG 0
goto MAIN
;*****************************************************************************
; HORLINEA
;
; Crea una linea de video.
; Adjusta la frequencia VCXO.
; Valores de entrada en LineCnt desde MAIN
; Valores de salida en DataSample hacia MAIN
;*****************************************************************************
HORLINEA ; t=-4.4
nop
movlw MAKEBLACK
btfss VideoMode,DEC
movlw PASSVIDEO
movwf PORTB ; Portico delantero=2.4us
; t=-2.4
nop
nop
movlw MAKESYNC
btfss VideoMode,DEC
movlw PASSVIDEO
movwf PORTB ; Ventana sync=4.4us
; t=0
nop
nop
nop
nop
nop
bcf PORTA,0
nop
movlw PASSBURST
btfss VideoMode,DEC
movlw PASSVIDEO
movwf PORTB ; t=4.4
; Ventana burst=5.6us
movf PORTB,W ;
movwf DataSample ; tomo muestra para re-sincronizacion
movlw OSCTRLON
btfsc DataSample,POS ; Si hay un flanco POS
movlw OSCTRLOFF ; subir frec.
tris PORTA ; habilitar osc. control
movlw PASSVIDEO
btfsc VideoMode,INV ; control de inversion
movlw PASSVIDEO ; PARA MC SIEMPRE ES DIRECTO
;movlw PASSINVER
btfsc VideoMode,BLK
movlw MAKEBLACK
btfss VideoMode,DEC
movlw PASSVIDEO
movwf PORTB ; comienzo de la linea de video
nop
movf PORTB,W ; tomo muestras al inicio de la
iorwf PORTB,W ; linea 23 y 622 para determinar
iorwf PORTB,W ; si el video esta invertido o no.
iorwf PORTB,W ; NO SIRVE DE NADA, MC NO CODIFICA ASI
btfss DataSample,POS ; Si no hay un flanco POS (seccion de BURST)
bsf PORTA,4 ; test port on
movwf DataSample ; guarda en DataSample info de inversion
movlw 33 ; delay
movwf Loops
L1 ; t=14.0
decfsz Loops,f ; 32*1.2+0.8=39.2
goto L1
nop
nop
movlw OSCTRLOFF
tris PORTA ; deshabilitar osc. control
bcf PORTA,4 ; test port off
decf LineaCnt,f
btfsc STATUS,Z ; Si LineaCnt=0
; t=56
retlw 1 ; retornar a MAIN
nop ; delay antes de recomenzar otra linea
nop
nop
nop
nop
nop
goto HORLINEA ; crear otra linea
;*****************************************************************************
; SEARCH
;
; Busca linea 3, para sincronizarse.
; Retorna hacia el final de la linea 6.
;*****************************************************************************
SEARCH
movlw 3
movwf SearchCnt
S1
btfsc PORTB,POS
goto SEARCH
btfsc PORTB,POS ; Detecta ausencia de flancos
goto SEARCH ; en VBI (nivel bajo)
btfsc PORTB,POS
goto SEARCH
btfsc PORTB,POS
goto SEARCH
btfsc PORTB,POS
goto SEARCH
btfsc PORTB,POS
goto SEARCH
decfsz SearchCnt,1 ; 2*6.0+5.6=17.6
goto S1
S2
btfss PORTB,POS ; Espera flanco POS (t=0)
goto S2
nop
movf PORTB,W ; Detecta ausencia de flancos
iorwf PORTB,W
iorwf PORTB,W ; en VBI (nivel alto)
movwf DataSample
btfsc DataSample,NEG ; si hay un flanco POS
goto SEARCH ; recomenzar
btfsc DataSample,POS ; si hay un flanco NEG
goto SEARCH ; recomenzar
movf PORTB,W ; Detecta si hay un flanco NEG (+4.4)
movwf DataSample
btfss DataSample,NEG ; si no es NEG
goto SEARCH ; recomenzar
nop
nop
movf PORTB,W ; Detecta si hay un flanco POS (+2.4)
movwf DataSample ; (inicio de pos-eq)
btfss DataSample,POS ; si no es POS
goto SEARCH ; recomenzar
movlw 49 ; delay
movwf Loops
S3
decfsz Loops,1 ; 48*1.2+0.8=58.4
goto S3
nop
nop
movf PORTB,W ; Detecta si hay un flanco NEG (+61.6)
movwf DataSample ; (Linea 4,5)
btfss DataSample,NEG ; si no es NEG
goto SEARCH ; recomenzar
movlw 78 ; delay
movwf Loops
S4
decfsz Loops,1 ; 77*1.2+0.8=93.2
goto S4
nop
movf PORTB,W ; Detecta si hay un flanco NEG (+96)
movwf DataSample ; (fin linea 5)
btfss DataSample,NEG ; si no es NEG
goto SEARCH ; recomenzar
movlw 46 ; delay
movwf Loops
S5
decfsz Loops,1 ; 45*1.2+0.8=54.8
goto S5
bcf VideoMode,FIND ; Linea 3 encontrada
retlw 1
;*****************************************************************************
; MODE
;
; Determina el modo de funcionamiento.
; Valores de entrada en VideoMode,ERR desde VBI
; Valores de salida en VideoMode,FIND hacia MAIN
;*****************************************************************************
MODE ; t=-4.4
btfss PORTA,3 ; habilitacion manual
bsf VideoMode,ERR ; si RA3=1
btfss VideoMode,ERR ; si no hay error de Vsync
clrf CntSyncErr ; borrar contador de cuadros malos
incf CntSyncErr,f ; incrementar contador de cuadros malos
btfsc CntSyncErr,2 ; si hay 4 cuadros malos consecutivos
bcf VideoMode,DEC ; dejar de decodificar
btfsc CntSyncErr,2 ; si hay 4 cuadros malos consecutivos
bsf VideoMode,FIND ; buscar Linea 3
btfsc CntSyncErr,2 ; si hay 4 cuadros malos consecutivos
clrf CntSyncErr ; recomenzar la cuenta de cuadros malos
incf CntSyncOk,f ; incrementar cuadros buenos
btfsc VideoMode,ERR ; si hay error de Vsync
clrf CntSyncOk ; recomenzar la cuenta de cuadros buenos
btfsc CntSyncOk,2 ; si hay 4 cuadros buenos consecutivos
bsf VideoMode,DEC ; comenzar la decodificasion
bcf VideoMode,ERR
bsf PORTA,1 ; prender LED
btfsc VideoMode,DEC ; si se habilita la decodificacion
bcf PORTA,1 ; apagar LED
bsf PORTA,2 ; deshabilitar deco de audio
btfsc VideoMode,DEC ; si se habilita la decodificacion
bcf PORTA,2 ; habilitar deco de audio
nop
nop
movlw 15 ; delay
movwf Loops
LOOPM ;
decfsz Loops,f ; 14*1.2+0.8=17.6
goto LOOPM
retlw 1
;*****************************************************************************
; MEDLINEA
;
; Crea media linea de video (1ra. mitad de 623).
;*****************************************************************************
MEDLINEA ; t=-4.4
movlw 2 ; delay
movwf Loops
ML1 ; t=-3.6
decfsz Loops,f ; 1*1.2+0.8=2
goto ML1
movlw MAKESYNC
btfss VideoMode,DEC
movlw PASSVIDEO
movwf PORTB ; Ventana sync=4.4us
; t=0.0
movlw 2 ; delay
movwf Loops
ML2 ; t=0.8
decfsz Loops,f ; 1*1.2+0.8=2
goto ML2
movlw PASSBURST
btfss VideoMode,DEC
movlw PASSVIDEO
movwf PORTB ; Ventana burst=5.6us
; t=4.4
movlw 3 ; delay
movwf Loops
ML3 ; t=5.2
decfsz Loops,f ; 2*1.2+0.8=3.2
goto ML3
movlw MAKEBLACK
btfss VideoMode,DEC
movlw PASSVIDEO
movwf PORTB ; Black video
nop
movlw 11 ; delay
movwf Loops
ML4 ; t=11.2
decfsz Loops,f ; 10*1.2+0.8=12.8
goto ML4
retlw 1
;*****************************************************************************
; VBI
;
; Crea retroceso vertical y pulsos de pre/pos-ecualizacion.
; Verifica si se esta correctamente sincronizado.
; Valores de entrada en LineaCnt desde MAIN
; Valores de salida en VideoMode,ERR hacia MODE
;*****************************************************************************
; Comienzo con 5 pulsos de pre-equaliz.(PAL Lineas 623.5 a 1)
VBI ; t=-4.4
movlw 2 ; delay
movwf Loops
V1
decfsz Loops,f ; 1*1.2+0.8=2
goto V1
PREEQ
movlw MAKESYNC
btfss VideoMode,DEC
movlw PASSVIDEO
movwf PORTB ; Ventana SYNC=2.4us
; t=0
nop
nop
movlw MAKEBLACK
btfss VideoMode,DEC
movlw PASSVIDEO
movwf PORTB ; Black video=29.6us
nop
nop
movlw 21
movwf Loops
V2 ; t=4
decfsz Loops,f ; 20*1.2+0.8=24.8
goto V2
movlw 5 ; cantidad de pulsos proximos
decfsz LineaCnt,f
goto PREEQ
movwf LineaCnt
; Proximos 5 pulsos de sync vertical (PAL Lineas 1 a 3.5)
; Durante estos 5 pulsos se muestrea para determinar si se esta en Vsync.
VSYNC
movlw MAKESYNC
btfss VideoMode,DEC
movlw PASSVIDEO
movwf PORTB ; Ventana SYNC=27.2us
movf PORTB,W
iorwf PORTB,W
nop
movwf DataSample
btfss DataSample,NEG ; si no es NEG
bsf VideoMode,ERR ; error de sincronismo
movlw 19 ; delay
movwf Loops
V3
decfsz Loops,f ; 18*1.2+0.8=22.4
goto V3
movlw MAKEBLACK
btfss VideoMode,DEC
movlw PASSVIDEO
movwf PORTB ; Black video=4.8us
nop
nop
nop
nop
movlw 5 ; cantidad de pulsos proximos
decfsz LineaCnt,f
goto VSYNC
movwf LineaCnt
; Ultimos 5 pulsos de post-equaliz. (PAL Lineas 3,5 a 6)
POSEQ
movlw MAKESYNC
btfss VideoMode, DEC
movlw PASSVIDEO
movwf PORTB ; Ventana SYNC=2.4us
; t=0
nop
nop
movlw MAKEBLACK
btfss VideoMode,DEC
movlw PASSVIDEO
movwf PORTB ; Black video=29.6us
movlw 17 ; delay
movwf Loops
V4 ;
decfsz Loops,f ; 16*1.2+0.8=20
goto V4
decf LineaCnt,f
btfsc STATUS,Z
retlw 1 ; sale de VBI
movlw 4 ; delay
movwf Loops
V5
decfsz Loops,f ; 3*1.2+0.8=4.4
goto V5
goto POSEQ
;*****************************************************************************
; MAIN
;
; Inicializacion de los puertos
; o Port B como : oooo iioo
; o Port A como : oooo iooi
;*****************************************************************************
MAIN
movlw 00001001b
tris PORTA ; Def. port A
movlw 00001100b
tris PORTB ; Def. port B
movlw PASSVIDEO ;
movwf PORTB ; Video normal
bsf PORTA,1
clrf VideoMode
bsf VideoMode,DEC
bsf VideoMode,FIND
movlw 1
goto START
;*****************************************************************************
; LOOP principal
;
; Valores de entrada en DataSample desde HORLINEA
; Valores de salida en VideoMode y LineaCnt
;*****************************************************************************
LOOP1
nop
movlw 5 ; 5 pulsos de pre,sync y pos-equaliz.
movwf LineaCnt
call VBI ; comienzo de CAMPO 2, Lineas 311 a 318,5
nop
nop
nop
nop
nop
call MODE ; seleccion de MODO, Linea 318,5 a 319
nop
nop
nop
movlw 17
movwf LineaCnt
call HORLINEA ; Lineas 319 a 335
nop
nop
bcf VideoMode,BLK ; deshabilito black video
movlw 200
movwf LineaCnt
call HORLINEA ; Lineas 336 a 535
nop
nop
nop
movlw 82
movwf LineaCnt
call HORLINEA ; Lineas 536 a 617
nop
nop
bsf VideoMode,BLK ; habilito black video
movlw 5
movwf LineaCnt
call HORLINEA ; Lineas 618 a 622
nop
nop
nop
btfsc DataSample,NEG ; si se detecto flanco NEG (inico linea 622)
bcf VideoMode,INV ; no invertir video
call MEDLINEA ; Linea 623 a 623,5
nop
nop
nop
movlw 5
movwf LineaCnt
call VBI ; comienzo CAMPO 1, Lineas 623,5 a 5
nop
nop
nop
nop
movwf LineaCnt
call HORLINEA ; Linea 6
START nop
btfsc VideoMode,FIND ; si hay error de sync
call SEARCH ; re-sync
movlw 16
movwf LineaCnt
call HORLINEA ; Lineas 7 a 22
nop
nop
nop
bcf VideoMode,BLK ; deshabilito black video
movwf LineaCnt
call HORLINEA ; Linea 23
bcf VideoMode,INV ; no invertir video
btfsc DataSample,POS ; Auto-inversion (inico linea 23)
bsf VideoMode,INV ; si hay flanco POS=>invertir video
movlw 200
movwf LineaCnt
call HORLINEA ; Lineas 24 a 223
nop
nop
nop
movlw 82
movwf LineaCnt
call HORLINEA ; Lineas 224 a 305
nop
nop
bsf VideoMode,BLK ; habilito black video
movlw 5
movwf LineaCnt
call HORLINEA ; Lineas 306 a 310
goto LOOP1 ; al CAMPO 2
END
Saludo a todo y espero pronta contestacion SUERTE EN TODO