#include <16f84a.h> #fuses HS,NOWDT #use delay(CLOCK=20000000) #undef PERFORMANCE_CHECK //total 202752 bytes #define XX 192 #define YY 72 struct{ short bit0; short bit1; short bit2; short bit3; short bit4; short bit5; short bit6; short bit7; } PORTB; #byte PORTB = 6 typedef struct tagBITDATA{ short bit0; short bit1; short bit2; short bit3; short bit4; short bit5; short bit6; short bit7; } BITDATA; #define READ_BIT(x) PORTB.bit6=0;(x)|=PORTB.bit7;PORTB.bit6=1; #define READ_BIT_DIRECT(x) PORTB.bit6=0;(x)=PORTB.bit7;PORTB.bit6=1; void main(void) { unsigned char x; unsigned char y; unsigned long data; BITDATA bitdata; set_tris_b(0x80); #use rs232(BAUD=115200, XMIT=PIN_B2, RCV=PIN_B1) while(1){ #ifndef PERFORMANCE_CHECK while(kbhit() == 1){ } getc(); #endif data = 0x0000; while(data != 0xaa55){ data <<= 1; READ_BIT(data); } for(x = 0; x < 224; x++){ //28byte PORTB.bit6 = 0; PORTB.bit6 = 1; } data = 0x0000; for(x = 0; x < 16; x++){ data <<= 1; READ_BIT(data); } if(data != 0xaa55){ continue; } #ifdef PERFORMANCE_CHECK else{ putc('S'); } #endif PORTB.bit5 = 1; //LED ON for(x = 0; x < XX; x++){ for(y = 0; y < YY; y++){ READ_BIT_DIRECT(bitdata.bit7); READ_BIT_DIRECT(bitdata.bit6); READ_BIT_DIRECT(bitdata.bit5); READ_BIT_DIRECT(bitdata.bit4); READ_BIT_DIRECT(bitdata.bit3); READ_BIT_DIRECT(bitdata.bit2); READ_BIT_DIRECT(bitdata.bit1); READ_BIT_DIRECT(bitdata.bit0); #ifndef PERFORMANCE_CHECK putc((unsigned char)bitdata); #endif } } PORTB.bit5 = 0; //LED OFF #ifdef PERFORMANCE_CHECK putc('E'); #endif } }