#include "main.h"unsigned int position;unsigned int32 section[4];unsigned int32 time; // pocitadlo preteceni casovace#Define INORDER 1#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() //Testovaci mod stopek{printf(lcd_putc,"\f TEST MODE");lcd_gotoxy(1,2);printf(lcd_putc,"ESC");while(input(BUTTON1)) // testuje dokud nekdo nezmackne tlacitlo{lcd_gotoxy(5,2);Output_toggle(PIN_A0);delay_ms(100);printf(lcd_putc,"%d %d %d %d",bit_test(input_b(),0), bit_test(input_b(),1), bit_test(input_b(),2), bit_test(input_b(),3));}}void send_measuring(){printf(usb_cdc_putc, "\n\r %5ld %5ld %5ld %5ld %5ld", run, section[0]*0.000010667, section[1]*0.000010667, section[2]*0.000010667, section[3]*0.000010667);}void exeption_inorder(){}void main(){unsigned int8 last, input;unsigned int16 timer;int exception;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_256);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(INT_TIMER0);lcd_init();usb_init();lcd_gotoxy(1,1);printf(lcd_putc,"\f STOPWATCH01A");lcd_gotoxy(1,2);printf(lcd_putc," Kaklik 2010");delay_ms(1000);lcd_gotoxy(1,1);printf(lcd_putc,"\f Waiting for PC... ");lcd_gotoxy(1,2);printf(lcd_putc,"TEST");while(!usb_cdc_connected()) if(!input(BUTTON1)) test_mode();lcd_gotoxy(1,1);printf(lcd_putc,"\f PC connected...");beep(10);run=0;while (TRUE){run++;printf(lcd_putc,"\f\nSTART");section[0]=0;section[1]=0;section[2]=0;section[3]=0;last!=input_b();while(input(BUTTON1));printf(lcd_putc,"\f\n STOP");time = 0;set_timer0(0);enable_interrupts(GLOBAL);position = 0;exception = 0;while((position < 4) && (input(BUTTON2))) // cekame na tlacitko stop nebo na preruseni vsech paprsku{if(last!=(input=input_b())) // pri preruseni nektereho z paprsku zjistime ktery to byl{timer=get_timer0();if(bit_test(last ^ input, position))section[position] = (time << 16) + timer; // kontroluje, jestli jsou paprsky preruseny ve spravnem poradi.else exception=INORDER;time=0;set_timer0(0);position++;}last=input_b();}if (exception == INORDER) exeption_inorder();else send_measuring();}}