#include #include int br = 0x00, duration = 200, delay = 500, hand, flag = 0x00; void ExtInt0_Init(void); void BrailleVM(unsigned int); void DelayMs(unsigned int); void SendUART_int(int); void LookUp(char); void SendChar(void) interrupt 0 // Spoljni prekid { EA = 0; hand = 0xFF; P1_2 = 0xFF; while(!P3_2) { hand = hand & P0; DelayMs(25); } DelayMs(200); SendUART_int(hand); P1_2 = 0x00; EA = 1; } void SendUART_int(int ch) // Funkcija za slanje celobrojne vrednosti preko UART-a { TI = 1; printf("%d",ch); while(!TI); TI = 0; } void LookUp(char chr) // Lookup tabela karaktera { int temp = 0x00;; switch(chr) { case 'a': temp = ~(0x04); break; case 'b': temp = ~(0x06); break; case 'c': temp = ~(0x0C); break; case 'd': temp = ~(0x1C); break; case 'e': temp = ~(0x14); break; case 'f': temp = ~(0x0E); break; case 'g': temp = ~(0x1E); break; case 'h': temp = ~(0x16); break; case 'i': temp = ~(0x0A); break; case 'j': temp = ~(0x1A); break; case 'k': temp = ~(0x05); break; case 'l': temp = ~(0x07); break; case 'm': temp = ~(0x0D); break; case 'n': temp = ~(0x1D); break; case 'o': temp = ~(0x15); break; case 'p': temp = ~(0x0F); break; case 'q': temp = ~(0x1F); break; case 'r': temp = ~(0x17); break; case 's': temp = ~(0x0B); break; case 't': temp = ~(0x1B); break; case 'u': temp = ~(0x25); break; case 'v': temp = ~(0x27); break; case 'w': temp = ~(0x3A); break; case 'x': temp = ~(0x2D); break; case 'y': temp = ~(0x3D); break; case 'z': temp = ~(0x35); break; default: temp = ~(0xC0); } BrailleVM(temp); } void serial_int(void) interrupt 4 // Prekid sa serijskog porta { unsigned char chr; if (RI == 1) /* it was a receive interrupt */ { chr = SBUF; if(SBUF == 63 & flag == 0x00) { flag = 0xFF; } else if(flag == 0xFF) { LookUp(chr); } RI = 0; /* clear the received interrupt flag */ } EA = 1; } void DelayMs(unsigned int count) // Pauza u milisekundama { unsigned int i; while(count) { i = 115; while(i>0) i--; count--; } } void BrailleVM(unsigned int c) { P2 = c; DelayMs(duration); P2 = 0xFF; DelayMs(delay); P2 = 0xFF; } void ExtInt0_Init(void) // Inicijalizacija spoljnog interapta { IT0 = 0; EX0 = 1; } void UART_Init(void) // Inicijalizacija serijskog kanala { SCON = 0x50; // serial port mode 8-bit UART TMOD = 0x20; // 8-bit auto-reload timer/counter TH1 = 0xFD; ET0 = 0; TR1 = 1; TI = 0; ES = 1; } /*------------------------------------------------ MAIN C function ------------------------------------------------*/ void main (void) { ExtInt0_Init(); // Spoljni interapt izazvan od strane tastera UART_Init(); // Serijski kanal EA = 1; /* Global Interrupt Enable */ P2 = 0xFF; /* Gasenje motora */ P1_2 = 0; /* Status LED off */ duration = 500; // trajanje karaktera [ms] delay = 500; // pauza izmedju dva karaktera [ms] while(flag != 0xFF) { PCON = 0x01; } BrailleVM(0xC0); BrailleVM(0xC0); BrailleVM(0xC0); while(1) { PCON = 0x01; } }