#define _PULSO_VSINC 60 // 0,06 ms
#define _PULSO_HSINC 4 // +- 3.77 us
#define _lineas_periodo 525
#define _lineas_superior 26
#define _lineas_Video 480
#define _Bytes_por_linea (640/2) // pixel de 4 bits
#define PULSO_HORIZONTAL() { \
HORIZONTAL_SINC_BIT = 0; \
delay_us(_PULSO_HSINC); \
HORIZONTAL_SINC_BIT = 1; }
unsigned long Linea,Offset_Bytes;
/******************************************************/
void main(void){
/******************************************************/
Configuramos_laInterrupcion__del_Timer1( para que salte cada 31,75 us -> 31500 Hz +-);
while(1){ /* pintamos caracteres en la ram etc */ }
}
/******************************************************/
void __ISR(_TIMER_1_VECTOR, ipl2) Timer1Handler(void){
/******************************************************/
// Borramos el flag de interrupcion
mT1ClearIntFlag();
if (Linea++ == _lineas_periodo){/* nueva pantalla */
VERTICAL_SINC_BIT = 0; /* pulso vertical */
PULSO_HORIZONTAL(); /* aprovechamos y le damos el pulso Horizontal */
VERTICAL_SINC_BIT = 1;
Linea=0;
Offset_Bytes=0; /* offset de la ram o flash a cero*/
goto sal;
}
PULSO_HORIZONTAL();
if(Linea < _lineas_superior)goto Fin_Linea; /* respeta Top Border */
if(Linea > _lineas_Video + _lineas_superior)goto Fin_Linea; /* respeta Bottom Border */
Display_video_time:
/* delay(x) si es necesario para left border */
/* Aqui cuanto mas corramos mas pixels pintaremos */
/* hay que usar asm y ahorrar el maximo de ciclos */
/* Ejemplo 4 pixels en los pines PORTx 7..4 */
valor = ram[Offset_Bytes++]
PORT_VIDEO = valor; /* pixel 1 */
valor = valor >> 4;
PORT_VIDEO = valor; /* pixel 2 */
valor = ram[Offset_Bytes++]
PORT_VIDEO = valor; /* pixel 3 */
valor = valor >> 4;
PORT_VIDEO = valor; /* pixel 4 */
PORT_VIDEO = 0; /* Bottom Border , Right Border*/
Fin_Linea:
}