void main(void) { _U08 key; System_EnablePLL(); /*Elevamos la frecuencia de operacion a 48MHz*/ ANCON0 = 0XFF; /*Desativamos las salidas analogicas*/ ANCON1 = 0XFF; /*Desativamos las salidas analogicas*/ Timers_Init(); /*inicializamos el driver para genere una interrupcion cada 5ms*/ Timers_SetTime(0, 10/timers_ms); /*recargamos el canal 0 con un valor de 10ms*/ Keyboard_Init(); /*Inicilizamos las entradas y salidas del teclado*/ Gpios_WriteTris(GPIOS_PORTB, 0x00); /*puerto B como salida*/ Gpios_WritePort(GPIOS_PORTB, 0x00); /*limpiamos el puerto*/ Keyboard_SetDebounce(0, 50); /*500ms de debouncea a la tecla 0*/ Keyboard_SetDebounce(4, 50); /*500ms de debounce a la tecla 4*/ Keyboard_SetDebounce(8, 50); /*500ms de debounce a la tecla 8*/ Keyboard_SetDebounce(12, 50); /*500ms de debounce a la tecla 12*/ __ENABLE_INTERRUPTS(); /*se habilitan las interrupciones globales con prioridad*/ while (1) { if(Timers_u16GetTime(0) == 0) /*preguntamos si la interrupcion decrmento hasta llegar a 0 el canal 0*/ { Timers_SetTime(0, 10/timers_ms);/*se cumplen los 100ms asi que volvemos a recargar el mismo canal */ Keyboard_Task(); /*poleamos poleamos el teclado matrizial*/ } if(Keyboard_bIsPressed() == _TRUE) /*preguntamos si se presiono alguna tecla*/ { key = Keyboard_u8GetKey(); /*obtenemos cual tecla se presiono*/ Gpios_WritePort(GPIOS_PORTB, key); /*despliego el valor de la tecla en el puerto B*/ } } }
int main(void) { ANCON0 = 0XFF; /*Desactivamos las entradas analogicas*/ ANCON1 = 0XFF; /*Desactivamos las entradas analogicas*/ System_EnablePLL(); /*uC a 48MHz*/ HD44780_Init(); /*inicliza el LCD*/ xdev_out(HD44780_WriteData); /*establece elcd como salida*/ xprintf("Tengo %d edad", (_U16)29); /*imprime una cadena de caracteres*/ HD44780_SetCursor(2, 0); /*se cambia el cursor a la linea 2 columna 5*/ xprintf("Hoy es %d de %d", (_U16)30, (_U16)1984); /*se imprime otra linea de caracteres*/ while (1) { } }
int main(void) { ANCON0 = 0XFF; /*Desactivamos las entradas analogicas*/ ANCON1 = 0XFF; /*Desactivamos las entradas analogicas*/ System_EnablePLL(); _6800_Init(); /*secuencia para incilizar controlador*/ Delays_ms((_U08)15); /* 15 ms para que el controlador encienda */ _6800_WriteCommand((_U08)0x30); /* Secuecia de encendido en modo 8 bits */ Delays_ms((_U08)5); _6800_WriteCommand((_U08)0x30); Delays_ms((_U08)2); _6800_WriteCommand((_U08)0x30); while(bBusyFlag()); _6800_WriteCommand(0x20); /*modo 4 bits y una linea activa*/ while(bBusyFlag()); _6800_WriteCommand(0x04); /*Se apaga el controlador, nibble alto*/ _6800_WriteCommand(0x04<<4); /*nibble bajo*/ while(bBusyFlag()); _6800_WriteCommand((_U08)0x01); /*se enciende y limpia el display, nibble alto*/ _6800_WriteCommand((_U08)0x01<<4); /*nibble bajo */ Delays_ms((_U08)2); /*para el comando clear screen se debe esperar 1.52ms*/ _6800_WriteCommand(0x06); /*incremento de cursor a la derecha, nibble alto*/ _6800_WriteCommand(0x06<<4); /*nibble bajo */ while(bBusyFlag()); _6800_WriteCommand(0x0c); /*se apaga el cursor y el parpadeo, nibble alto*/ _6800_WriteCommand(0x0c<<4); /*nibble bajo */ while(bBusyFlag()); _6800_WriteData('4'); /*Se imprime la letra 'e' en el lcd, nibble alto*/ _6800_WriteData('4'<<4); /*nibble bajo */ /*a partir de este punto se pueden mandar caracteres al lcd, solo se requiere esperar 40us entre cada caracter o comando*/ while (1) { } }
int main(void) { System_EnablePLL(); /*micro a 48MHz, esto es obligatorio para el USB*/ UsbCDC_Init(9600); /*inicia emulacion serial a 9600 baudios*/ Gpios_PinDirection(GPIOS_PORTA, 1, GPIOS_OUTPUT);/*pin RA1 como salida*/ while(1) { if(UsbCDC_bEnumerated() == _TRUE) /*usb enumarado*/ { i = UsbCDC_u8RxData( &buffer[0], 1 );/*recivimos datos por usb serial*/ if((i > 0) && (buffer[0] == 't'))/*si se recivio un dato y este es la letra t*/ { Gpios_TogglePin(GPIOS_PORTA, 1);/*invierto estado del led*/ } } } }
void main(void) { System_EnablePLL(); /*Elevamos la frecuencia de operacion a 48MHz*/ ANCON0 = 0XFF; /*Desativamos las salidas analogicas*/ ANCON1 = 0XFF; /*Desativamos las salidas analogicas*/ Timers_Init(); /*inicializamos el driver para genere una interrupcion cada 5ms*/ Timers_SetTime(0, 10/timers_ms); /*recargamos el canal 0 con un valor de 10ms*/ Gpos_Init(); /*Inicilizamos las salidas donde estan los leds*/ Gpos_SetMode(0, GPOS_OSC_MODE, 20); /*oscilar salida 0 cada 200ms*/ Gpos_SetMode(1, GPOS_OSC_MODE, 30); /*oscilar salida 1 cada 300ms*/ Gpos_SetMode(2, GPOS_OSC_MODE, 50); /*oscilar salida 2 cada 500ms*/ __ENABLE_INTERRUPTS(); /*se habilitan las interrupciones globales con prioridad*/ while (1) { if(Timers_u16GetTime(0) == 0)/*preguntamos si la interrupcion decrmento hasta llegar a 0 el canal 0*/ { Timers_SetTime(0, 10/timers_ms);/*se cumplen los 10ms asi que volvemos a recargar el mismo canal */ Gpos_Task(); /*actualizamos las salidas, en este caso RA1*/ } } }