Autor Tema: Me ayudan por favor gracias  (Leído 2678 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado DF38

  • PIC10
  • *
  • Mensajes: 20
Me ayudan por favor gracias
« en: 10 de Febrero de 2004, 14:20:00 »
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

Desconectado khasistos

  • PIC18
  • ****
  • Mensajes: 493
RE: Me ayudan por favor gracias
« Respuesta #1 en: 12 de Febrero de 2004, 15:35:00 »
Hola:
Bueno a ver si te sirve ,yo utilizaria un f628 o bien un 627 y le introduces esta instruccion en el comienzo,todos los comp quedaran desabilitados y tendras funcionamiento digital en todas las I/O ,es mas barato y tiene 2K de flash.TOTALMENTE compatible con F84

MOVLW 0x07      
MOVWF CMCON
Saludos
khasistos

Desconectado DF38

  • PIC10
  • *
  • Mensajes: 20
RE: Me ayudan por favor gracias
« Respuesta #2 en: 13 de Febrero de 2004, 06:48:00 »
muchas gracias lo provare asi como dises y despues te cuento gracias