#include "main.h"unsigned int position;unsigned int32 section[4];unsigned int32 time; // pocitadlo preteceni casovaceunsigned int state;#define RUNNING 1#define STOPPED 0#int_RBvoid RB_isr(void){section[position]= get_timer0();time=0;set_timer0(0);if(position < 3) position++;else {disable_interrupts(INT_RB);state = STOPPED;}time=0;set_timer0(0);}#int_RTCCvoid RTCC_isr(void) // preruseni od pretekleho casovace{time++;}#define LCD_ENABLE_PIN PIN_E0#define LCD_RS_PIN PIN_E1#define LCD_RW_PIN PIN_E2#define LCD_DATA4 PIN_D4#define LCD_DATA5 PIN_D5#define LCD_DATA6 PIN_D6#define LCD_DATA7 PIN_D7#include <lcd.c>#define BUTTON1 PIN_D0#define BUTTON2 PIN_D1#define BUTTON3 PIN_D2#define BUTTON4 PIN_D3#define BEEPER PIN_C0unsigned int32 run;// Includes all USB code and interrupts, as well as the CDC API#include <usb_cdc.h>void beep(int16 period){while(period){output_toggle(BEEPER);delay_us(800);period--;}}void test_mode(){lcd_gotoxy(1,1);printf(lcd_putc,"TEST MODE");}void main() {setup_adc_ports(NO_ANALOGS|VSS_VDD);port_b_pullups(TRUE);setup_adc(ADC_OFF);setup_psp(PSP_DISABLED);setup_spi(SPI_SS_DISABLED);setup_wdt(WDT_OFF);setup_timer_0(RTCC_INTERNAL|RTCC_DIV_16);setup_timer_1(T1_DISABLED);setup_timer_2(T2_DISABLED,0,1);setup_timer_3(T3_DISABLED|T3_DIV_BY_1);setup_comparator(NC_NC_NC_NC);setup_vref(FALSE);enable_interrupts(GLOBAL);lcd_init();usb_init();lcd_gotoxy(1,1);printf(lcd_putc,"STOPWATCH01A");lcd_gotoxy(1,2);printf(lcd_putc," Kaklik 2010 ");delay_ms(1000);lcd_gotoxy(1,1);printf(lcd_putc,"\n Waiting for PC... ");while(!usb_cdc_connected());lcd_gotoxy(1,1);printf(lcd_putc,"PC connected...");beep(10);if(!input(BUTTON1)) test_mode();run=0;section[0]=0;section[1]=0;section[2]=0;section[3]=0;while (TRUE){run++;lcd_gotoxy(3,1);printf(lcd_putc,"START");while(input(BUTTON2));time = 0;set_timer0(0);position = 0;state = RUNNING;clear_interrupt(int_timer0);clear_interrupt(int_RB);enable_interrupts(INT_RTCC);enable_interrupts(INT_RB);lcd_gotoxy(6,1);printf(lcd_putc,"STOP");while(state==RUNNING);printf(usb_cdc_putc, "\n\r %ld %ld %ld %ld %ld", run, section[0], section[1], section[2], section[3]);}}