// //DMR-C1の画を取り込む. // // 1. DMR-C1 => SRAM // 2. SRAM => PC // #include <16f877.h> #define DMRC1 // コンフィギュレーションの設定 #FUSES HS,NOWDT,NOPROTECT,PUT,BROWNOUT,NOLVP #use delay (CLOCK=20000000) //クロック20MHz struct{ short bit0; short bit1; short bit2; short bit3; short bit4; short bit5; short bit6; short bit7; } PORTA; #byte PORTA = 5 #byte PORTB = 6 struct{ short bit0; short bit1; short bit2; short bit3; short bit4; short bit5; short bit6; short bit7; } PORTC; #byte PORTC = 7 struct{ short bit0; short bit1; short bit2; short bit3; short bit4; short bit5; short bit6; short bit7; } PORTD; #byte PORTD = 8 struct{ short bit0; short bit1; short bit2; short bit3; short bit4; short bit5; short bit6; short bit7; } PORTE; #byte PORTE = 9 typedef struct tagBITDATA{ short bit0; short bit1; short bit2; short bit3; short bit4; short bit5; short bit6; short bit7; } BITDATA; //#define CNT_CLR PORTA.bit0 //#define CNT_UP PORTA.bit1 #define CNT_CLR PORTD.bit3 #define CNT_UP PORTD.bit2 #define MEM_WE PORTA.bit2 #define MEM_OE PORTA.bit3 #define TrevaClock PORTA.bit5 #define TrevaData PORTE.bit2 #define DMRC1_XX 48 #define DMRC1_YY 48 #define DMRC1_ZZ 88 #define TREVA_XX 192 #define TREVA_YY 72 #define HIGH 1 #define LOW 0 #define READ_BIT(x) TrevaClock=0;(x)|=TrevaData;TrevaClock=1; #define READ_BIT_DIRECT(x) TrevaClock=0;(x) =TrevaData;TrevaClock=1; //SRAMのアドレスクリア #define COUNTER_CLEAR() CNT_CLR=0;delay_us(5);CNT_CLR=1;delay_us(5);CNT_CLR=0; void main(void) { unsigned char c; unsigned char x; unsigned char y; unsigned char z; unsigned long data; BITDATA bitdata; setup_adc(ADC_OFF); //Not Used setup_port_a(NO_ANALOGS); setup_psp(PSP_DISABLED); set_tris_a(0x00); //PORT A set_tris_b(0xFF); //PORT B set_tris_c(0x00); //PORT C set_tris_d(0x00); //PORT D set_tris_e(0xFF); //PORT E #use rs232(BAUD=115200, XMIT=PIN_D7, RCV=PIN_C7) PORTB = 0x00; MEM_WE = HIGH; MEM_OE = HIGH; delay_ms(1); //fail safe while(1){ COUNTER_CLEAR(); getc(); data = 0x0000; while(data != 0xaa55){ data <<= 1; READ_BIT(data); } //PORTC.bit7 = 1; //LED ON for(x = 0; x < 224; x++){ //28byte TrevaClock = 0; //delay_us(1); TrevaClock = 1; //delay_us(1); } data = 0x0000; for(x = 0; x < 16; x++){ data <<= 1; READ_BIT(data); } #ifdef DMRC1 //DMR-C1 if(data != 0x55aa){ continue; } #else //Treva if(data != 0xaa55){ continue; } #endif //else{ // putc('S'); //} //PORTC.bit7 = 1; //LED ON #ifdef DMRC1 //DMR-C1 set_tris_b(0x00); for(x = 0; x < DMRC1_XX; x++){ for(y = 0; y < DMRC1_YY; y++){ for(z = 0; z < DMRC1_ZZ; z++){ 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); CNT_UP = HIGH; PORTB = bitdata; MEM_WE = LOW; MEM_WE = HIGH; CNT_UP = LOW; } } } COUNTER_CLEAR(); set_tris_b(0xff); for(x = 0; x < DMRC1_XX; x++){ for(y = 0; y < DMRC1_YY; y++){ for(z = 0; z < DMRC1_ZZ; z++){ CNT_UP = HIGH; MEM_OE = LOW; c = PORTB; MEM_OE = HIGH; CNT_UP = LOW; putc(c); } } } #else //Treva for(x = 0; x < TREVA_XX; x++){ for(y = 0; y < TREVA_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); } } #endif } }