|
Ariel
|
 |
« : Marzo 31, 2009, 04:23:51 » |
|
Hola amigos! Este hilo es otro de mis delirios. Los que me conocen saben que cada tanto ataco un problema que me resulta desconocido en un hilo, como si "pensara en voz alta". Esto de redactar el problema me permite clarificar mis ideas, asi que......a aguantarme :) Dicho esto, vamos al tema:
¿Como generar una señal VGA de 640x480 puntos con TTL/PIC? ¿No seria estupendo tener una placa que nos permita usar un monitor VGA comun como pantalla de nuestros proyectos? ¿Pueden imaginarse el potencial que tendria a la hora de diseñar un pequeño osciloscopio casero, un analizador lógico, una especie de "publik" o simplemente para pasar anuncios en un escaparate?Bien, estoy seguro que la mayoria de uds. estan pensando en un "si!".La mala noticia es que no se trata de un tema sencillo de lograr. La buena es que es posible. El secreto está en obtener las señales de sincronismo adecuadas, y tener una lógica de control lo suficientemente rápida. Desde ya aclaro que personalmente creo que un PIC a menos de 20MHZ (e incluso a esa velocidad) no alcanza para esto. Sin embargo, algunos lo han hecho simplemente con compuertas TTL. VGA ( Video Graphics Array ) La señal VGA contiene 5 señales activas. Dos señales de sincronismo horizontal y vertical (HS y VS) compatibles con los niveles lógicos TTL y activas a nivel bajo. Respectivamente indican el cambio de línea (HS-Horizontal Sync.) y de cuadro (VS-Vertical Sync). Las restantes tres líneas RGB (Red-Green-Blue) son líneas analógicas cuyos valores oscilan 0 V (ausencia de señal) y 0,7 V (máxima intensidad de rojo, verde y azul respectivamente). De esta manera, combinando diversas intensidades de las componentes RGB se construyen los diferentes colores. En una pantalla VGA la pantalla contiene 640x480 pixels (picture elements). Los haces recorren la pantalla empezando por la esquina superior izquierda desde el punto de vista frontal de monitor. Para generar el cambio de línea y de pantalla el controlador VGA debe generar las señales de sincronismo.  Figura 1: la pantalla contiene 640x480 pixels En la figura 1 se ve la distribución de los puntos en la pantalla y la figura 2 muestra un esquema de los tiempos implicados para una frecuencia de refresco de 60Hz. ( 1 pantalla cada 16,6 ms) con una resolución de 640 x 480 pixels.  Figura 2: esquema de los tiempos implicados. Para generar una señal VGA se ha de llevar la cuenta de la posición de los haces RGB y en función de ésta consultar los valores gráficos que se deben mostrar. Un diseño típico incluiría: diversos contadores (de punto, de caracteres, de líneas y de columnas), una memoria de video (donde se almacena y actualiza la información que va a mostrarse y una memoria ROM que guarde la representación de los caracteres alfanuméricos. Este es el corazón de un eventual generador de imagenes VGA. El problema de los tiempos. Si miramos nuevamente la figura 2, vemos que disponemos de solo 25.17us para "encender/apagar" 640 veces los bits correspondientes al rojo, verde y azul. Ademas, se necesita un DAC (conversor digital/analogico) para obtener el tono de color deseado. Esto permite solo 25.17/640 = 0,039328125 uS por cada pixel. Luego hay que tener en cuenta los tiempos de los "bordes" de la imagen, etc. Pero esos 0,039328125uS son practicamente "ciencia ficcion" para un PIC ordinario. El "problema" del color Cada señal R, G o B que enviamos al monitor VGA debe tener una tension de entre 0 y 0,7V. 0 es "apagado", 0.7 es "maximo brillo". Si usamos (por ejemplo) 8 bits para representar cada posible tono de cada color, tendremos 256 tonos de verde, 256 de azul y 256 de rojo. La cantidad de colores de cada pixel serian 256x256x256 = 16.777.216 de colores. Sin embargo, (ver post siguiente), la norma original para VGA solo prevee un maximo de 6 bits para cada color, es decir, 64 tonos de R, 64 de G y 64 de B (64x64x64 = 262.144 colores en total). Obviamente, hace falta un DAC rápido (o tres, en realidad) para hacer esto. Y una memoria intermedia tambien rapida, de la que leer los valores a convertir y mostrar en la pantalla. (Continuare delirando pronto). Todo esto explica por que no vemos en todos lados proyectos que usen PICs conectados a pantallas VGAs. Sin embargo, en sitios como este The Great Z80 Computer Project uno descubre que hay genios capaces de obtener imagenes de 512x512 pixeles usando simplemente compuertas lógicas para generar las señales. Me gustaria soñar con diseñar algo asi alguna vez. ¿Ustedes no? 
|
|
|
« Última modificación: Marzo 31, 2009, 05:14:49 por Ariel »
|
En línea
|
Busco ordenadores antiguos: Commodore, Sinclair, Amstrad, Atari, etc. Si sabes de alguno....¿me avisas? 
|
|
|
|
Ariel
|
 |
« Respuesta #1 : Marzo 31, 2009, 05:13:10 » |
|
Las especificaciones VGA son las siguientes: * 256 KB Video RAM * Modos: 16-colores y 256-colores * 262144 valores de la paleta de colores (6 bits para rojo, verde y azul) * Reloj maestro seleccionable de 25.2 MHz o 28.3 * Máximo de 720 píxeles horizontales * Máximo de 480 líneas * Tasa de refresco de hasta 70 Hz * Interrupción vertical vacía (No todas las tarjetas lo soportan) * Modo plano: máximo de 16 colores * Modo pixel empaquetado: en modo 256 colores (Modo 13h) * Soporte para hacer scrolling * Algunas operaciones para mapas de bits * Barrel shifter * Soporte para partir la pantalla * 0.7 V pico a pico * 75 ohm de impedancia (9.3mA - 6.5mW) VGA soporta tanto los modos de todos los puntos direccionables como modos de texto alfanuméricos. Los modos estándar de gráficos son: * 640×480 en 16 colores * 640×350 en 16 colores * 320×200 en 16 colores * 320×200 en 256 colores (Modo 13h) Modos de texto estándar Los modos estándar de texto alfanumérico para VGA usan 80 × 25 o 40 × 25 celdas de texto. Cada celda puede elegir entre uno de los 16 colores disponibles para su primer plano y 8 colores para el fondo; los 8 colores de fondo son los permitidos sin el bit de alta intensidad. Cada carácter también podrá parpadear, y todos los que se configuren para parpadear parpadearán al unísono. La opción de parpadeo para toda la pantalla puede ser cambiada por la capacidad de elegir el color de fondo para cada una de las celdas de entre todos los 16 colores. Todas estas opciones son las mismas que las del adaptador CGA presentado por IBM. Por lo general los adaptadores VGA soportan el modo texto tanto en blanco y negro como en color, aunque el modo monocromo, casi nunca es utilizado. En blanco y negro en casi todos los adaptadores VGA modernos lo hacen con texto en color gris sobre fondo negro en el modo de color. Los monitores VGA monocromo se vendieron destinados principalmente para aplicaciones de texto, pero la mayoría de ellos trabajan de manera adecuada por lo menos con un adaptador VGA en el modo de color. De vez en cuando una conexión defectuosa entre un monitor moderno y una tarjeta de vídeo VGA causará que la la tarjeta detecte el monitor como en monocromo, y de esta forma, la BIOS y la secuencia de arranque inicial aparezcan en escala de grises. Por lo general, una vez que los controladores de la tarjeta de vídeo se han cargado (por ejemplo, mediante el arranque del sistema operativo) se sobrecargarán esta detección y el monitor volverá a color. En el modo de texto en color, cada carácter de la pantalla está, en realidad, representado por dos bytes. El menor, es el carácter real para el actual conjunto de caracteres, y el superior, o atributo byte es un campo de bit utilizado para seleccionar los diferentes atributos de vídeo, como el color, el parpadeo, el conjunto de caracteres, etc. Este esquema par-byte es una de las características que heredó en última instancia VGA de CGA. Paleta de colores de VGA El sistema de color VGA es compatible con los adaptadores EGA y CGA, y añade otro nivel de configuración en la parte superior. CGA fue capaz de mostrar hasta 16 colores, y EGA amplió éste permitiendo cada uno de los 16 colores que se elijan de una paleta de colores de 64 (estos 64 colores se componen de dos bits para el rojo, verde y azul: dos bits × tres canales = seis bits = 64 valores diferentes). VGA extiende aún más las posibilidades de este sistema mediante el aumento de la paleta EGA de 64 entradas a 256 entradas. Dos bloques de más de 64 colores con tonos más oscuros progresivamente se añadieron, a lo largo de 8 entradas "en blanco" que se fijaron a negro. Además de la ampliación de la paleta, a cada una de las 256 entradas se podía asignar un valor arbitrario de color a través de la DAC VGA. La BIOS EGA sólo permitió 2 bits por canal para representar a cada entrada, mientras que VGA permitía 6 bits para representar la intensidad de cada uno de los tres primarios (rojo, azul y verde). Esto proporcionó un total de 63 diferentes niveles de intensidad de rojo, verde y azul, resultando 262144 posibles colores, cualquiera 256 podrían ser asignado a la paleta (y, a su vez, de los 256, cualquiera 16 de ellos podrían ser mostradas en modos de vídeo CGA). Este método permitió nuevos colores que se utilizarán en los modos gráficos EGA y CGA, proporcionando un recordatorio de cómo los diferentes sistemas de paleta se establecen juntos. Para definir el texto de color a rojo muy oscuro en el modo de texto, por ejemplo, tendrá que ser fijado a uno de los colores CGA (por ejemplo, el color por defecto, n º 7: gris claro.) Este color luego se mapea a uno la paleta EGA - en el caso del color 7 de CGA, se mapea a la entrada 42 de EGA. El DAC VGA debe ser configurado para cambiar de color 42 a rojo oscuro, y luego de inmediato cualquier cosa que aparece en la pantalla a la luz de gris (color CGA 7) pasará a ser de color rojo oscuro. Esta función se utiliza a menudo en juegos DOS de 256 colores. Mientras que los modos CGA y EGA compatibles permitían 16 colores para ser mostrados de una vez, otros modos VGA, como el ampliamente utilizado modo 13h, permitía que las 256 entradas de la paleta se mostraran en la pantalla al mismo tiempo, y así en estos modos cualquier 256 colores podrían ser vistos de los 262144 colores disponibles.
|
|
|
|
« Última modificación: Marzo 31, 2009, 05:21:23 por Ariel »
|
En línea
|
Busco ordenadores antiguos: Commodore, Sinclair, Amstrad, Atari, etc. Si sabes de alguno....¿me avisas? 
|
|
|
|
Ariel
|
 |
« Respuesta #2 : Marzo 31, 2009, 05:16:41 » |
|
¿Cuales serian las especificaciones minimas de una placa hogareña que pueda utilizarse con un monitor VGA?
Para mi, estaria bien una resolucion de 640x480 con 8 colores (2 bits de R, 2 de G y 2 de B: 2x2x2 = 8 colores).
|
|
|
|
|
En línea
|
Busco ordenadores antiguos: Commodore, Sinclair, Amstrad, Atari, etc. Si sabes de alguno....¿me avisas? 
|
|
|
|
Bruno10
|
 |
« Respuesta #3 : Marzo 31, 2009, 06:17:36 » |
|
Tengo una saber electronica que aparece un circuito generador de barras y ese cosas para monitor con un pic16f84, pero nunca publicaron el .hex, fue mas bien como un "te muestro el circuito , gastamos hojas de la revista ( 2 numeros fueron ) en publicarlo pero si lo queres pone la moneda ( porque el autor lo vendia armado )"Si queres lo busco y lo escaneo pero si en hex no sirve de mucho Saludos
|
|
|
|
|
En línea
|
|
|
|
|
Ariel
|
 |
« Respuesta #4 : Marzo 31, 2009, 06:30:56 » |
|
Te lo agradezco. Pero con PIC -> TV hay varios proyectos publicos. Hay incluso juegos de Tetris y cosas asi. El problema es que al no darle el "cuero", la resolucion es pobre. Suelen verse 40 o 60 puntos por unos 25 o algo asi. Eso es insuficiente para texto. Y tampoco funcionaria con un monitor comun.
Mi idea es usar un monitor VGA (algun dia) para ver textos o imagenes enviadas desde el pic. Se que no tengo los conocimientos suficientes hoy, pero no me rindo :)
|
|
|
|
|
En línea
|
Busco ordenadores antiguos: Commodore, Sinclair, Amstrad, Atari, etc. Si sabes de alguno....¿me avisas? 
|
|
|
|
|
|
lmtreser
|
 |
« Respuesta #6 : Abril 01, 2009, 12:33:58 » |
|
Y aquí va una breve explicación y el HEX para el PIC.
|
|
|
|
En línea
|
|
|
|
|
Ariel
|
 |
« Respuesta #7 : Abril 01, 2009, 07:34:42 » |
|
Excelente! :) Eso es lo que me referia. Pero estoy seguro que con ese micro/circuito/soft no podes hacer 640 barras...a lo sumo podrás hacer un par de docenas. A mi me da vueltas la idea de tener texto legible o menues con iconos mas o menos decentes, algo como las viejas computadoras que se conectaban a un tele. Seria fantastico tener un proyecto con un LCD de 2x16 y un conector VGA....y que cuando necesites ver un grafico de los datos que registró o algo asi, le conectes el monitor de la PC y los veas en grande ¿No? 
|
|
|
|
|
En línea
|
Busco ordenadores antiguos: Commodore, Sinclair, Amstrad, Atari, etc. Si sabes de alguno....¿me avisas? 
|
|
|
Meta
PIC12F

Desconectado
Mensajes: 426
|
 |
« Respuesta #8 : Abril 01, 2009, 09:21:24 » |
|
Quizás esta web les pueda servir a alguien. ;MODO 0 --> MUESTRA UNA PANTALLA DE (X,Y) 20 x 8 CARÁCTERES ;MODO 1 --> MUESTRA UNA PANTALLA DE (X,Y) 7 x 11 CARÁCTERES ;TANTO EL MODO O COMO EL MODO 1 DISPONEN DE 31 CARÁCTERES ;DE 8x8 PIXELS INDEPENDIENTES PARA CADA MODO DE VIDEO.
;PARA CAMBIAR EL MODO DE VIDEO SE DEBE CAMBIAR EL VALOR DE ;LA ETIQUETA MODO_PANT, LOS VALORES QUE ACEPTA SON 0 Y 1 ;0=MODO DE VIDEO 0(20x8 CARÁCTERES) Y MODO DE VIDEO=1(7x11 CARÁCTERES)
;EL MODO 0 UTILIZA PARTE DE LOS REGISTROS DE MEMORIA DE LOS BANCOS 0 Y 1 DEL PIC, ;LA PANTALLA EN MODO 0 ESTÁ DIVIDIDA EN DOS PARTES, LA PARTE 0(PARTE SUPERIOR DE LA PANTALLA) ;QUE CONTIENE 80 REGISTROS DE MEMORIA DEL BANCO 0 Y LA PARTE 1(PARTE INFERIOR DE LA PANTALLA), ;QUE CONTIENE OTROS 80 REGISTROS DE MEMORIA, PERO DEL BANCO1
;EL MODO 1 UTILIZA 77 REGISTROS DE MEMORIA DEL BANCO 0
;LA MAYORIA DE LOS CARÁCTERES GRÁFICOS QUE REPRESENTA EL PROGRAMA ;EN LA TV HAN SIDO COPIADOS DEL MICROORDENADOR SINCLAIR ZX81
;------------------------------------------------------------------------------ ;CONFIGURACIÓN, REGISTROS Y ETIQUETAS DEL PIC
__CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_HS_OSC&_BODEN_OFF&_LVP_OFF list p=16f877A #include p16f877A.inc
LONG_X EQU .20; NUM. MAX. DE CARÁCTERES DE FILA EN MODO 0 LONG_Y EQU .8; NUM. MAX. DE LÍNEAS DE UN CARÁCTER EN MODO 0 CHARMAXXY EQU .4; NUM. MAX DE CARÁCTERES DE COLUMNA EN MODO 0
LONGX_MODE1 EQU .7; NUM. MAX. DE CARÁCTERES DE FILA EN MODO 1 LONGY_MODE1 EQU .8; NUM. MAX DE LÍNEAS DE UN CARÁCTER EN MODO 1 CHARMAXY_MODE1 EQU .11; NUM. MAX. DE CARÁCTERES DE COLUMNA EN MODO 1
;REGISTROS DE USO PARA EL PROGRAMA CBLOCK 20H CONT,LINE,BYTECHAR,NUMCHAR,NUMCOL CONTCHAR,LINECHAR,BUFFER,CONTLINEA,FLAGSTV INICPANT; DIRECCIÓN DE MEMORIA DONDE COMIENZA LA PARTE 0 DE LA PANTALLA EN MODO 0 Y 1 ENDC
PANT2 EQU 0A0H;DIRECCIÓN DE MEMORIA DONDE COMIENZA LA PARTE 1 DE LA PANTALLA EN MODO 0
MODO_PANT EQU .0; 0=PANTALLA EN MODO 0, 1=PANTALLA EN MODO 1
;------------------------------------------------------------------------------
ORG 00H GOTO START ORG 05H
;---------------------------JUEGO DE CARÁCTERES--------------------------------
;-------------------------SET 0 DE CARÁCTERES MODO 0--------------------------- BYTEPANT ADDWF BYTECHAR,W ADDWF PCL,F RETLW B'00000000' RETLW B'00000000' RETLW B'00000000' RETLW B'00000000' RETLW B'00000000'; SPACE 0 RETLW B'00000000' RETLW B'00000000' RETLW B'00000000' RETLW B'00000000' RETLW B'00111100' RETLW B'01000010' RETLW B'01000010' RETLW B'01111110';A 1 RETLW B'01000010' RETLW B'01000010' RETLW B'00000000'
RETLW B'00000000' RETLW B'01111100' RETLW B'01000010' RETLW B'01111100' RETLW B'01000010';B 2 RETLW B'01000010' RETLW B'01111100' RETLW B'00000000'
RETLW B'00000000' RETLW B'00111100' RETLW B'01000010' RETLW B'01000000' RETLW B'01000000';C 3 RETLW B'01000010' RETLW B'00111100' RETLW B'00000000'
RETLW B'00000000' RETLW B'01111000' RETLW B'01000100' RETLW B'01000010' RETLW B'01000010';D 4 RETLW B'01000100' RETLW B'01111000' RETLW B'00000000'
RETLW B'00000000' RETLW B'01111110' RETLW B'01000000' RETLW B'01111100' RETLW B'01000000';E 5 RETLW B'01000000' RETLW B'01111110' RETLW B'00000000'
RETLW B'00000000' RETLW B'01111110' RETLW B'01000000' RETLW B'01111100' RETLW B'01000000' RETLW B'01000000';F 6 RETLW B'01000000' RETLW B'00000000'
RETLW B'00000000' RETLW B'00111100' RETLW B'01000010' RETLW B'01000000' RETLW B'01001110' RETLW B'01000010';G 7 RETLW B'00111100' RETLW B'00000000'
RETLW B'00000000' RETLW B'01000010' RETLW B'01000010' RETLW B'01111110' RETLW B'01000010' RETLW B'01000010';H 8 RETLW B'01000010' RETLW B'00000000'
RETLW B'00000000' RETLW B'00111110' RETLW B'00001000' RETLW B'00001000' RETLW B'00001000';I 9 RETLW B'00001000' RETLW B'00111110' RETLW B'00000000'
RETLW B'00000000' RETLW B'00000010' RETLW B'00000010' RETLW B'00000010' RETLW B'01000010' RETLW B'01000010';J 10 RETLW B'00111100' RETLW B'00000000'
RETLW B'00000000' RETLW B'01000100' RETLW B'01001000' RETLW B'01110000' RETLW B'01001000';K 11 RETLW B'01000100' RETLW B'01000010' RETLW B'00000000'
RETLW B'00000000' RETLW B'01000000' RETLW B'01000000' RETLW B'01000000' RETLW B'01000000';L 12 RETLW B'01000000' RETLW B'01111110' RETLW B'00000000'
RETLW B'00000000' RETLW B'01000010' RETLW B'01100110' RETLW B'01011010' RETLW B'01000010';M 13 RETLW B'01000010' RETLW B'01000010' RETLW B'00000000'
RETLW B'00000000' RETLW B'01000010' RETLW B'01100010' RETLW B'01010010';N 14 RETLW B'01001010' RETLW B'01000110' RETLW B'01000010' RETLW B'00000000' RETLW B'00000000' RETLW B'00111100' RETLW B'01000010' RETLW B'01000010' RETLW B'01000010';O 15 RETLW B'01000010' RETLW B'00111100' RETLW B'00000000'
RETLW B'00000000' RETLW B'01111100' RETLW B'01000010' RETLW B'01000010';P 16 RETLW B'01111100' RETLW B'01000000' RETLW B'01000000' RETLW B'00000000'
RETLW B'00000000' RETLW B'00111100' RETLW B'01000010' RETLW B'01000010' RETLW B'01010010';Q 17 RETLW B'01001010' RETLW B'00111100' RETLW B'00000000'
RETLW B'00000000' RETLW B'01111100' RETLW B'01000010';R 18 RETLW B'01000010' RETLW B'01111100' RETLW B'01000100' RETLW B'01000010' RETLW B'00000000'
RETLW B'00000000' RETLW B'00111100' RETLW B'01000000' RETLW B'00111100';S 19 RETLW B'00000010' RETLW B'01000010' RETLW B'00111100' RETLW B'00000000'
RETLW B'00000000' RETLW B'11111110' RETLW B'00010000' RETLW B'00010000' RETLW B'00010000';T 20 RETLW B'00010000' RETLW B'00010000' RETLW B'00000000'
RETLW B'00000000' RETLW B'01000010' RETLW B'01000010' RETLW B'01000010' RETLW B'01000010';U 21 RETLW B'01000010' RETLW B'00111100' RETLW B'00000000'
RETLW B'00000000' RETLW B'01000010' RETLW B'01000010' RETLW B'01000010' RETLW B'01000010';V 22 RETLW B'00100100' RETLW B'00011000' RETLW B'00000000'
RETLW B'00000000' RETLW B'01000010' RETLW B'01000010' RETLW B'01000010' RETLW B'01000010';W 23 RETLW B'01011010' RETLW B'00100100' RETLW B'00000000'
RETLW B'00000000' RETLW B'01000010' RETLW B'00100100' RETLW B'00011000' RETLW B'00011000';X 24 RETLW B'00100100' RETLW B'01000010' RETLW B'00000000'
RETLW B'00000000' RETLW B'10000010' RETLW B'01000100' RETLW B'00101000' RETLW B'00010000';Y 25 RETLW B'00010000' RETLW B'00010000' RETLW B'00000000'
RETLW B'00000000' RETLW B'01111110' RETLW B'00000100' RETLW B'00001000' RETLW B'00010000';Z 26 RETLW B'00100000' RETLW B'01111110' RETLW B'00000000'
RETLW B'00000000' RETLW B'00111100' RETLW B'01000010' RETLW B'00000010' RETLW B'00111100';27 NÚMERO "2" RETLW B'01000000' RETLW B'01111110' RETLW B'00000000'
RETLW B'00000000' RETLW B'00111100' RETLW B'01000110' RETLW B'01001010' RETLW B'01010010';28 NÚMERO "0" RETLW B'01100010' RETLW B'00111100' RETLW B'00000000'
RETLW B'00000000' RETLW B'01111110' RETLW B'00000010' RETLW B'00000100' RETLW B'00001000';29 NÚMERO "7" RETLW B'00010000' RETLW B'00010000' RETLW B'00000000'
RETLW B'01111100' RETLW B'10000010' RETLW B'10011010' RETLW B'10100010' RETLW B'10100010';30 COPYRIGHT RETLW B'10011010' RETLW B'10000010' RETLW B'01111100' ;------------------------------------------------------------------------------ NOP NOP NOP ;--------------------------SET 1 DE CARÁCTERES MODO1--------------------------- BYTEPANT1 CLRF PCLATH BSF PCLATH,0 ADDWF BYTECHAR,W ADDWF PCL,F RETLW B'00000000' RETLW B'00000000' RETLW B'00000000' RETLW B'00000000' RETLW B'00000000'; SPACE 0 RETLW B'00000000' RETLW B'00000000' RETLW B'00000000'
RETLW B'00000000' RETLW B'00111100' RETLW B'01000010' RETLW B'01000010' RETLW B'01111110';A 1 RETLW B'01000010' RETLW B'01000010' RETLW B'00000000'
RETLW B'00000000' RETLW B'01111100' RETLW B'01000010' RETLW B'01111100' RETLW B'01000010';B 2 RETLW B'01000010' RETLW B'01111100' RETLW B'00000000'
RETLW B'00000000' RETLW B'00111100' RETLW B'01000010' RETLW B'01000000' RETLW B'01000000';C 3 RETLW B'01000010' RETLW B'00111100' RETLW B'00000000'
RETLW B'00000000' RETLW B'01111000' RETLW B'01000100' RETLW B'01000010' RETLW B'01000010';D 4 RETLW B'01000100' RETLW B'01111000' RETLW B'00000000'
RETLW B'00000000' RETLW B'01111110' RETLW B'01000000' RETLW B'01111100' RETLW B'01000000';E 5 RETLW B'01000000' RETLW B'01111110' RETLW B'00000000'
RETLW B'00000000' RETLW B'01111110' RETLW B'01000000' RETLW B'01111100' RETLW B'01000000' RETLW B'01000000';F 6 RETLW B'01000000' RETLW B'00000000'
RETLW B'00000000' RETLW B'00111100' RETLW B'01000010' RETLW B'01000000' RETLW B'01001110' RETLW B'01000010';G 7 RETLW B'00111100' RETLW B'00000000'
RETLW B'00000000' RETLW B'01000010' RETLW B'01000010' RETLW B'01111110' RETLW B'01000010' RETLW B'01000010';H 8 RETLW B'01000010' RETLW B'00000000'
RETLW B'00000000' RETLW B'00111110' RETLW B'00001000' RETLW B'00001000' RETLW B'00001000';I 9 RETLW B'00001000' RETLW B'00111110' RETLW B'00000000'
RETLW B'00000000' RETLW B'00000010' RETLW B'00000010' RETLW B'00000010' RETLW B'01000010' RETLW B'01000010';J 10 RETLW B'00111100' RETLW B'00000000'
RETLW B'00000000' RETLW B'01000100' RETLW B'01001000' RETLW B'01110000' RETLW B'01001000';K 11 RETLW B'01000100' RETLW B'01000010' RETLW B'00000000'
RETLW B'00000000' RETLW B'01000000' RETLW B'01000000' RETLW B'01000000' RETLW B'01000000';L 12 RETLW B'01000000' RETLW B'01111110' RETLW B'00000000'
RETLW B'00000000' RETLW B'01000010' RETLW B'01100110' RETLW B'01011010' RETLW B'01000010';M 13 RETLW B'01000010' RETLW B'01000010' RETLW B'00000000'
RETLW B'00000000' RETLW B'01000010' RETLW B'01100010' RETLW B'01010010';N 14 RETLW B'01001010' RETLW B'01000110' RETLW B'01000010' RETLW B'00000000' RETLW B'00000000' RETLW B'00111100' RETLW B'01000010' RETLW B'01000010' RETLW B'01000010';O 15 RETLW B'01000010' RETLW B'00111100' RETLW B'00000000'
RETLW B'00000000' RETLW B'01111100' RETLW B'01000010' RETLW B'01000010';P 16 RETLW B'01111100' RETLW B'01000000' RETLW B'01000000' RETLW B'00000000'
RETLW B'00000000' RETLW B'00111100' RETLW B'01000010' RETLW B'01000010' RETLW B'01010010';Q 17 RETLW B'01001010' RETLW B'00111100' RETLW B'00000000'
RETLW B'00000000' RETLW B'01111100' RETLW B'01000010';R 18 RETLW B'01000010' RETLW B'01111100' RETLW B'01000100' RETLW B'01000010' RETLW B'00000000'
RETLW B'00000000' RETLW B'00111100' RETLW B'01000000' RETLW B'00111100';S 19 RETLW B'00000010' RETLW B'01000010' RETLW B'00111100' RETLW B'00000000'
RETLW B'00000000' RETLW B'11111110' RETLW B'00010000' RETLW B'00010000' RETLW B'00010000';T 20 RETLW B'00010000' RETLW B'00010000' RETLW B'00000000'
RETLW B'00000000' RETLW B'01000010' RETLW B'01000010' RETLW B'01000010' RETLW B'01000010';U 21 RETLW B'01000010' RETLW B'00111100' RETLW B'00000000'
RETLW B'00000000' RETLW B'01000010' RETLW B'01000010' RETLW B'01000010' RETLW B'01000010';V 22 RETLW B'00100100' RETLW B'00011000' RETLW B'00000000'
RETLW B'00000000' RETLW B'01000010' RETLW B'01000010' RETLW B'01000010' RETLW B'01000010';W 23 RETLW B'01011010' RETLW B'00100100' RETLW B'00000000'
RETLW B'00000000' RETLW B'01000010' RETLW B'00100100' RETLW B'00011000' RETLW B'00011000';X 24 RETLW B'00100100' RETLW B'01000010' RETLW B'00000000'
RETLW B'00000000' RETLW B'10000010' RETLW B'01000100' RETLW B'00101000' RETLW B'00010000';Y 25 RETLW B'00010000' RETLW B'00010000' RETLW B'00000000'
RETLW B'00000000' RETLW B'01111110' RETLW B'00000100' RETLW B'00001000' RETLW B'00010000';Z 26 RETLW B'00100000' RETLW B'01111110' RETLW B'00000000'
RETLW B'00000000' RETLW B'00011000' RETLW B'00101000' RETLW B'00001000' RETLW B'00001000';27 NÚMERO "1" RETLW B'00001000' RETLW B'00111110' RETLW B'00000000'
RETLW B'00011110' RETLW B'00111111' RETLW B'00011010' RETLW B'00011111' RETLW B'00011110';28 JET SET WILLY(1) RETLW B'00001100' RETLW B'00011110' RETLW B'00111111'
RETLW B'01111111' RETLW B'11111111' RETLW B'11111111' RETLW B'11011110' RETLW B'00011111';29 JET SET WILLY(2) RETLW B'00111011' RETLW B'01100011' RETLW B'01110011'
RETLW B'10000000' RETLW B'11000000' RETLW B'11000000' RETLW B'11000000' RETLW B'00000000';30 JET SET WILLY(3) RETLW B'01000000' RETLW B'11000000' RETLW B'10000000' ;------------------------------------------------------------------------------ NOP NOP NOP ;------------------------------------------------------------------------------
TEXTO; EL SIGUIENTE TEXTO SE UBICARÁ EN LOS REGISTROS DE MEMORIA DEL BANCO 0 CLRF PCLATH BSF PCLATH,1 MOVF BYTECHAR,W ADDWF PCL,F DT " videopic " DT " " DT " este programa " DT " muestra caracteres "
TEXTO2; EL SIGUIENTE TEXTO SE UBICARÁ EN LOS REGISTROS DE MEMORIA DEL BANCO 1 CLRF PCLATH BSF PCLATH,1 MOVF BYTECHAR,W ADDWF PCL,F DT " en una pantalla de " DT " tv mediante un pic " DT " " DT " ".126,.123,.124,.124,.125," esteban pa "
;------------------------INICIALIZACIÓN DE LOS PUERTOS------------------------- START BSF STATUS,RP0 BCF STATUS,RP1 MOVLW B'11111110' MOVWF TRISB MOVLW B'00000110' MOVWF ADCON1 MOVLW B'00000110' MOVWF TRISA MOVLW B'11010111' MOVWF TRISC MOVLW B'00000000' MOVWF SSPSTAT BCF STATUS,RP0 CLRF PORTB
;---------RUTINA DE INICIALIZACIÓN Y ENLACE A LOS MODOS DE VIDEO---------------
MOVLW MODO_PANT MOVWF FLAGSTV MOVLW B'00100000' MOVWF SSPCON CALL BORRAPANT; INSERTA EN LOS REGISTROS DE MEMORIA EL VALOR "0" CALL CONV_CHAR; CONVIERTE LOS VALORES ASCII DE LOS TEXTOS A VALORES CALL CONV_CHAR2;PARA QUE PUEDAN SER UTILIZADOS POR EL PROGRAMA BTFSS FLAGSTV,0 GOTO START_MODE0; PONE LA PANTALLA EN MODO 0 GOTO START_MODE1; PONE LA PANTALLA EN MODO 1
;----------------------------------MODO DE VIDEO 0----------------------------- PAUSA2US NOP NOP NOP NOP NOP NOP RETURN STARTMODE0 NOP; ESTOS DOS NOP SON PARA SINCRONIZAR LOS 20 PRIMEROS NOP; CARACTERES CON EL RESTO DE LINEAS MODE0 CLRF SSPCON CLRF PORTC BCF PORTA,0; INICIO DEL PULSO DE SINCRONISMO HORIZONTAL NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP BSF PORTA,0; FIN DEL PULSO DE SINCRONISMO HORIZONTAL CALL PAUSA4US CALL PAUSA4US
CALL PAUSA2US BSF SSPCON,5 NOP MOVF INDF,W; COMIENZO DE LOS 20 CARÁCTERES CALL BYTEPANT MOVWF SSPBUF INCF FSR,F MOVF INDF,W CALL BYTEPANT MOVWF SSPBUF INCF FSR,F MOVF INDF,W CALL BYTEPANT MOVWF SSPBUF INCF FSR,F MOVF INDF,W CALL BYTEPANT MOVWF SSPBUF INCF FSR,F MOVF INDF,W CALL BYTEPANT MOVWF SSPBUF INCF FSR,F MOVF INDF,W CALL BYTEPANT MOVWF SSPBUF INCF FSR,F MOVF INDF,W CALL BYTEPANT MOVWF SSPBUF INCF FSR,F MOVF INDF,W CALL BYTEPANT MOVWF SSPBUF INCF FSR,F MOVF INDF,W CALL BYTEPANT MOVWF SSPBUF INCF FSR,F MOVF INDF,W CALL BYTEPANT MOVWF SSPBUF INCF FSR,F MOVF INDF,W CALL BYTEPANT MOVWF SSPBUF INCF FSR,F MOVF INDF,W CALL BYTEPANT MOVWF SSPBUF INCF FSR,F MOVF INDF,W CALL BYTEPANT MOVWF SSPBUF INCF FSR,F MOVF INDF,W CALL BYTEPANT MOVWF SSPBUF INCF FSR,F MOVF INDF,W CALL BYTEPANT MOVWF SSPBUF INCF FSR,F MOVF INDF,W CALL BYTEPANT MOVWF SSPBUF INCF FSR,F MOVF INDF,W CALL BYTEPANT MOVWF SSPBUF INCF FSR,F MOVF INDF,W CALL BYTEPANT MOVWF SSPBUF INCF FSR,F MOVF INDF,W CALL BYTEPANT MOVWF SSPBUF INCF FSR,F MOVF INDF,W CALL BYTEPANT MOVWF SSPBUF INCF FSR,F NOP NOP NOP NOP NOP NOP NOP BCF SSPBUF,5 CALL PAUSA4US CALL PAUSA2US NOP NOP NOP NOP NOP NOP INCF BYTECHAR,F DECFSZ NUMCHAR,F; CARACTERES 8*8 COMPLETOS? GOTO NOCOMPLETOS CLRF BYTECHAR MOVLW LONG_Y MOVWF NUMCHAR DECFSZ NUMCOL,F;COLUMNA COMPLETA DE CARACTERES? GOTO MODE0 NOP; COMIENZO DE LA SEGUNDA PARTE DE LA PANTALLA NOP MODE0_ZONA2 CLRF SSPCON CLRF PORTC BCF PORTA,0; INICIO SYNC BTFSS FLAGSTV,0 GOTO REG_ZONA2 NOP NOP NOP NOP NOP NOP NOP NOP NOP SIGUE_ZONA2 NOP NOP NOP NOP NOP NOP NOP BSF PORTA,0; FIN SYNC CALL PAUSA4US CALL PAUSA4US CALL PAUSA2US BSF SSPCON,5 NOP MOVF INDF,W; COMIENZO DE LOS 20 CARACTERES CALL BYTEPANT MOVWF SSPBUF INCF FSR,F MOVF INDF,W CALL BYTEPANT MOVWF SSPBUF INCF FSR,F MOVF INDF,W CALL BYTEPANT MOVWF SSPBUF INCF FSR,F MOVF INDF,W CALL BYTEPANT MOVWF SSPBUF INCF FSR,F MOVF INDF,W CALL BYTEPANT MOVWF SSPBUF INCF FSR,F MOVF INDF,W CALL BYTEPANT MOVWF SSPBUF INCF FSR,F MOVF INDF,W CALL BYTEPANT MOVWF SSPBUF INCF FSR,F MOVF INDF,W CALL BYTEPANT MOVWF SSPBUF INCF FSR,F MOVF INDF,W CALL BYTEPANT MOVWF SSPBUF INCF FSR,F MOVF INDF,W CALL BYTEPANT
Saludos.
|
|
|
|
|
En línea
|
|
|
|
Meta
PIC12F

Desconectado
Mensajes: 426
|
 |
« Respuesta #9 : Abril 01, 2009, 09:21:52 » |
|
Continuación del código. MOVWF SSPBUF INCF FSR,F MOVF INDF,W CALL BYTEPANT MOVWF SSPBUF INCF FSR,F MOVF INDF,W CALL BYTEPANT MOVWF SSPBUF INCF FSR,F MOVF INDF,W CALL BYTEPANT MOVWF SSPBUF INCF FSR,F MOVF INDF,W CALL BYTEPANT MOVWF SSPBUF INCF FSR,F MOVF INDF,W CALL BYTEPANT MOVWF SSPBUF INCF FSR,F MOVF INDF,W CALL BYTEPANT MOVWF SSPBUF INCF FSR,F MOVF INDF,W CALL BYTEPANT MOVWF SSPBUF INCF FSR,F MOVF INDF,W CALL BYTEPANT MOVWF SSPBUF INCF FSR,F MOVF INDF,W CALL BYTEPANT MOVWF SSPBUF INCF FSR,F MOVF INDF,W CALL BYTEPANT MOVWF SSPBUF INCF FSR,F NOP NOP NOP NOP NOP NOP NOP BCF SSPBUF,5 CALL PAUSA4US CALL PAUSA2US NOP NOP NOP NOP NOP NOP INCF BYTECHAR,F DECFSZ NUMCHAR,F; CARACTERES 8*8 COMPLETOS? GOTO NOCOMPLETOS_ZONA2 CLRF BYTECHAR MOVLW LONG_Y MOVWF NUMCHAR DECFSZ NUMCOL,F;COLUMNA COMPLETA DE CARACTERES? GOTO MODE0_ZONA2 RETURN
NOCOMPLETOS_ZONA2 NOP MOVLW LONG_X SUBWF FSR,F GOTO MODE0_ZONA2
REG_ZONA2 MOVLW CHARMAXXY MOVWF NUMCOL MOVLW PANT2 MOVWF FSR BSF FLAGSTV,0 GOTO SIGUE_ZONA2
NOCOMPLETOS NOP MOVLW LONG_X SUBWF FSR,F GOTO MODE0
;---------------------------SINCRONISMO VERTICAL------------------------------- PAUSA4P5 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP RETURN
PAUSA27P4 CALL PAUSA4P5 CALL PAUSA4P5 CALL PAUSA4P5 CALL PAUSA4P5 CALL PAUSA4P5 CALL PAUSA4P5 RETURN
PIGUALADORES BCF PORTA,0 CALL PAUSA27P4 BSF PORTA,0 CALL PAUSA4P5 BCF PORTA,0 CALL PAUSA27P4 BSF PORTA,0 CALL PAUSA4P5 BCF PORTA,0 CALL PAUSA27P4 BSF PORTA,0 CALL PAUSA4P5 BCF PORTA,0 CALL PAUSA27P4 BSF PORTA,0 CALL PAUSA4P5 BCF PORTA,0 CALL PAUSA27P4 BSF PORTA,0 CALL PAUSA4P5 BCF PORTA,0 CALL PAUSA27P4 BSF PORTA,0 CALL PAUSA4P5 RETURN
PVERTICALESALM BSF PORTA,0 CALL PAUSA27P4 BCF PORTA,0 CALL PAUSA4P5 BSF PORTA,0 CALL PAUSA27P4 BCF PORTA,0 CALL PAUSA4P5 BSF PORTA,0 CALL PAUSA27P4 BCF PORTA,0 CALL PAUSA4P5 BSF PORTA,0 CALL PAUSA27P4 BCF PORTA,0 CALL PAUSA4P5 BSF PORTA,0 CALL PAUSA27P4 BCF PORTA,0 CALL PAUSA4P5 BSF PORTA,0 CALL PAUSA27P4 BCF PORTA,0 CALL PAUSA4P5 RETURN
SYNCVERT CLRF SSPCON CLRF PORTC CALL PIGUALADORES CALL PVERTICALESALM CALL PIGUALADORES RETURN
PAUSA4US NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP RETURN
;----------------------------------LINEA NEGRA--------------------------------- LINEA64US CLRF SSPCON CLRF PORTC BCF PORTA,0 CALL PAUSA4US BSF PORTA,0 CALL PAUSA4US CALL PAUSA4US CALL PAUSA4US CALL PAUSA4US CALL PAUSA4US CALL PAUSA4US CALL PAUSA4US CALL PAUSA4US CALL PAUSA4US CALL PAUSA4US CALL PAUSA4US CALL PAUSA4US CALL PAUSA4US CALL PAUSA4US NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP RETURN
;---------------------GENERACION DE UN CUADRO DE TV EN MODO 0------------------ START_MODE0 PANTALLA CLRF FLAGSTV CLRF BYTECHAR MOVLW CHARMAXXY MOVWF NUMCOL MOVLW LONG_Y MOVWF NUMCHAR MOVLW INICPANT MOVWF FSR MOVLW .124 MOVWF LINE NL1 CALL LINEA64US DECFSZ LINE,F GOTO NL1 CALL STARTMODE0 MOVLW .124 MOVWF LINE NL3 CALL LINEA64US DECFSZ LINE,F GOTO NL3 BCF PORTA,0 CALL PAUSA4US BSF PORTA,0 CALL PAUSA4US CALL PAUSA4US CALL PAUSA4US CALL PAUSA4US CALL PAUSA4US CALL PAUSA4US CALL PAUSA4US CALL SYNCVERT GOTO PANTALLA
;-----------------GENERACION DE UN CUADRO DE TV EN MODO 1----------------------
START_MODE1 MOVLW B'00100001' MOVWF SSPCON PANTALLA_MODE1 CLRF BYTECHAR MOVLW CHARMAXY_MODE1 MOVWF NUMCOL MOVLW LONGY_MODE1 MOVWF NUMCHAR MOVLW INICPANT MOVWF FSR MOVLW .30 MOVWF LINE NM1 CALL LINEA64US DECFSZ LINE,F GOTO NM1 CALL MODE1 MOVLW .18 MOVWF LINE NM3 CALL LINEA64US DECFSZ LINE,F GOTO NM3 BCF PORTA,0 CALL PAUSA4US BSF PORTA,0 CALL PAUSA4US CALL PAUSA4US CALL PAUSA4US CALL PAUSA4US CALL PAUSA4US CALL PAUSA4US CALL PAUSA4US CALL SYNCVERT GOTO PANTALLA_MODE1
;------------------------------MODO DE VIDEO 1---------------------------------
MODE1 CLRF SSPCON CLRF PORTC BCF PORTA,0; INICIO DEL PULSO DE SINCRONISMO HORIZONTAL NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP BSF PORTA,0; FIN DEL PULSO DE SINCRONISMO HORIZONTAL CALL PAUSA4US NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP MOVLW B'00100001' MOVWF SSPCON MOVF INDF,W; COMIENZO DE LOS 7 CARACTERES CALL BYTEPANT1 MOVWF SSPBUF CALL DELAY_MODE1 INCF FSR,F MOVF INDF,W CALL BYTEPANT1 MOVWF SSPBUF CALL DELAY_MODE1 INCF FSR,F MOVF INDF,W CALL BYTEPANT1 MOVWF SSPBUF CALL DELAY_MODE1 INCF FSR,F MOVF INDF,W CALL BYTEPANT1 MOVWF SSPBUF CALL DELAY_MODE1 INCF FSR,F MOVF INDF,W CALL BYTEPANT1 MOVWF SSPBUF CALL DELAY_MODE1 INCF FSR,F MOVF INDF,W CALL BYTEPANT1 MOVWF SSPBUF CALL DELAY_MODE1 INCF FSR,F MOVF INDF,W CALL BYTEPANT1 MOVWF SSPBUF CALL DELAY_MODE1 INCF FSR,F; FIN DE LOS 7 CARACTERES NOP NOP NOP NOP NOP NOP NOP CLRF SSPBUF NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP INCF BYTECHAR,F NOP NOP NOP MOVLW LONGX_MODE1 SUBWF FSR,F DECF BYTECHAR,F NOP NOP ;REPITE LA LINEA CLRF SSPCON CLRF PORTC BCF PORTA,0; INICIO DEL SINCRONISMO HORIZONTAL NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP BSF PORTA,0; FIN DEL SINCRONISMO HORIZONTAL CALL PAUSA4US NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP MOVLW B'00100001' MOVWF SSPCON MOVF INDF,W; COMIENZO DE LOS 7 CARACTERES CALL BYTEPANT1 MOVWF SSPBUF CALL DELAY_MODE1 INCF FSR,F MOVF INDF,W CALL BYTEPANT1 MOVWF SSPBUF CALL DELAY_MODE1 INCF FSR,F MOVF INDF,W CALL BYTEPANT1 MOVWF SSPBUF CALL DELAY_MODE1 INCF FSR,F MOVF INDF,W CALL BYTEPANT1 MOVWF SSPBUF CALL DELAY_MODE1 INCF FSR,F MOVF INDF,W CALL BYTEPANT1 MOVWF SSPBUF CALL DELAY_MODE1 INCF FSR,F MOVF INDF,W CALL BYTEPANT1 MOVWF SSPBUF CALL DELAY_MODE1 INCF FSR,F MOVF INDF,W CALL BYTEPANT1 MOVWF SSPBUF CALL DELAY_MODE1 INCF FSR,F; FIN DE LOS 7 CARACTERES NOP NOP NOP NOP NOP NOP NOP CLRF SSPBUF NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP INCF BYTECHAR,F NOP NOP NOP MOVLW LONGX_MODE1 SUBWF FSR,F DECF BYTECHAR,F NOP NOP ;REPITE LA LINEA CLRF SSPCON CLRF PORTC BCF PORTA,0; INICIO DEL SINCRONISMO HORIZONTAL NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP BSF PORTA,0; FIN DEL SINCRONISMO HORIZONTAL CALL PAUSA4US NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP MOVLW B'00100001' MOVWF SSPCON MOVF INDF,W; COMIENZO DE LOS 7 CARACTERES CALL BYTEPANT1 MOVWF SSPBUF CALL DELAY_MODE1 INCF FSR,F MOVF INDF,W CALL BYTEPANT1 MOVWF SSPBUF CALL DELAY_MODE1 INCF FSR,F MOVF INDF,W CALL BYTEPANT1 MOVWF SSPBUF CALL DELAY_MODE1 INCF FSR,F MOVF INDF,W CALL BYTEPANT1 MOVWF SSPBUF CALL DELAY_MODE1 INCF FSR,F MOVF INDF,W CALL BYTEPANT1 MOVWF SSPBUF CALL DELAY_MODE1 INCF FSR,F MOVF INDF,W CALL BYTEPANT1 MOVWF SSPBUF CALL DELAY_MODE1 INCF FSR,F MOVF INDF,W CALL BYTEPANT1 MOVWF SSPBUF CALL DELAY_MODE1 INCF FSR,F; FIN DE LOS 7 CARACTERES NOP NOP NOP NOP NOP NOP NOP CLRF SSPBUF NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP INCF BYTECHAR,F DECFSZ NUMCHAR,F; CARACTERES 8*8 COMPLETOS? GOTO NOCOMPLETOS_MODE1 CLRF BYTECHAR MOVLW LONGY_MODE1 MOVWF NUMCHAR DECFSZ NUMCOL,F;COLUMNA COMPLETA DE CARACTERES? GOTO MODE1 RETURN
NOCOMPLETOS_MODE1 NOP MOVLW LONGX_MODE1 SUBWF FSR,F GOTO MODE1
DELAY_MODE1 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP RETURN ;------------------------------------------------------------------------------
;PONE A "0" LOS REGISTROS DE MEMORIA DEL BANCO 0 Y 1 ,QUE UTILIZA ;EL PROGRAMA PARA REPRESENTAR LOS CARACTERES EN PANTALLA. BORRAPANT BCF STATUS,RP0 BCF STATUS,RP1 MOVLW .80 MOVWF CONT MOVLW INICPANT MOVWF FSR BORRA MOVLW B'00000000' MOVWF INDF INCF FSR,F DECFSZ CONT,F GOTO BORRA BORRAPANT2 BCF STATUS,RP0 BCF STATUS,RP1 MOVLW .80 MOVWF CONT MOVLW PANT2 MOVWF FSR BORRA2 MOVLW B'00000000' MOVWF INDF INCF FSR,F DECFSZ CONT,F GOTO BORRA2 RETURN
;------------------------------------------------------------------------------
;CONVIERTE LOS CARACTERES ASCII DE LOS TEXTOS A CARÁCTERES PARA QUE PUEDAN SER UTILIZADOS POR EL PROGRAMA CONV_CHAR MOVLW .80; NUMERO DE CARACTERES A MOSTRAR EN EL BANCO0 MOVWF CONT MOVLW INICPANT MOVWF FSR CLRF BYTECHAR; CONTIENE EL PUNTERO DE LA POSICION DE TEXTO OTRAVEZ CALL TEXTO MOVWF INDF MOVLW .96 MOVWF LINE MOVF LINE,W SUBWF INDF,F BCF STATUS,C RLF INDF BCF STATUS,C RLF INDF BCF STATUS,C RLF INDF INCF BYTECHAR,F INCF FSR,F DECFSZ CONT,F GOTO OTRAVEZ CLRF PCLATH RETURN
CONV_CHAR2 MOVLW .80; NUMERO DE CARACTERES A MOSTRAR EN EL BANCO1 MOVWF CONT MOVLW PANT2 MOVWF FSR CLRF BYTECHAR; CONTIENE EL PUNTERO DE LA POSICION DE TEXTO OTRAVEZ2 CALL TEXTO2 MOVWF INDF MOVLW .96 MOVWF LINE MOVF LINE,W SUBWF INDF,F BCF STATUS,C RLF INDF BCF STATUS,C RLF INDF BCF STATUS,C RLF INDF INCF BYTECHAR,F INCF FSR,F DECFSZ CONT,F GOTO OTRAVEZ2 CLRF PCLATH RETURN
END
|
|
|
|
|
En línea
|
|
|
|
|
Ariel
|
 |
« Respuesta #10 : Abril 01, 2009, 09:31:06 » |
|
Hola Meta! Buen aporte  ¿Tienes el circuito? Supongo que se debe parecer al de más arriba, pero como de ASM no entiendo ni "J", no lo puedo deducir  Si es un proyecto libre, me gustraria meterlo en el Wiki 
|
|
|
|
|
En línea
|
Busco ordenadores antiguos: Commodore, Sinclair, Amstrad, Atari, etc. Si sabes de alguno....¿me avisas? 
|
|
|
Meta
PIC12F

Desconectado
Mensajes: 426
|
 |
« Respuesta #11 : Abril 01, 2009, 10:14:17 » |
|
Hola de nuevo. No se si es libre, pero es de una persona que no tengo nada que ver. Me olvidé poner su Web arriba.    Los códigos ASM y HEX lo puedes descargar en el enlace de abajo. Espero que les pueda ayudar esa web, repito que no es mía, sólo doy información para ayudar a este tema. Fuente: http://usuarios.lycos.es/zootronica/modules.php?name=News&file=article&sid=32Un cordial saludo.
|
|
|
|
|
En línea
|
|
|
|
|
ZeK005
|
 |
« Respuesta #12 : Abril 01, 2009, 12:26:44 » |
|
yo tengo el proyecto de Richar Gungee para mostrar señales en un televisor. Sirve de algo?
|
|
|
|
|
En línea
|
|
|
|
|
Ariel
|
 |
« Respuesta #13 : Abril 01, 2009, 01:08:24 » |
|
Todo sirve :) Por lo pronto, acabo de desoldar un conecto ISA para finalmente (si puedo librarme de dos o tres placas que tengo que hacer "para ayer") probar el monitor Hercules conectado a un PIC.
|
|
|
|
|
En línea
|
Busco ordenadores antiguos: Commodore, Sinclair, Amstrad, Atari, etc. Si sabes de alguno....¿me avisas? 
|
|
|
Meta
PIC12F

Desconectado
Mensajes: 426
|
 |
« Respuesta #14 : Abril 01, 2009, 06:16:11 » |
|
No sabía que carecía de conocimientos del ASM al igual que yo desconozco el C del PIC.
|
|
|
|
|
En línea
|
|
|
|
|