Rev Author Line No. Line
1383 kaklik 1 #include "main.h"
1423 kaklik 2  
3 unsigned int position;
4 unsigned int32 section[4];
5 unsigned int32 time; // pocitadlo preteceni casovace
6  
1435 kaklik 7 #Define INORDER 1
1423 kaklik 8  
9 #int_RTCC
10 void RTCC_isr(void) // preruseni od pretekleho casovace
11 {
12 time++;
13 }
14  
1383 kaklik 15 #define LCD_ENABLE_PIN PIN_E0
16 #define LCD_RS_PIN PIN_E1
17 #define LCD_RW_PIN PIN_E2
18 #define LCD_DATA4 PIN_D4
19 #define LCD_DATA5 PIN_D5
20 #define LCD_DATA6 PIN_D6
21 #define LCD_DATA7 PIN_D7
22  
23 #include <lcd.c>
24  
1423 kaklik 25 #define BUTTON1 PIN_D0
26 #define BUTTON2 PIN_D1
27 #define BUTTON3 PIN_D2
28 #define BUTTON4 PIN_D3
1383 kaklik 29  
1423 kaklik 30 #define BEEPER PIN_C0
31  
32 unsigned int32 run;
33  
1383 kaklik 34 // Includes all USB code and interrupts, as well as the CDC API
35 #include <usb_cdc.h>
36  
1423 kaklik 37 void beep(int16 period)
38 {
39 while(period){
40 output_toggle(BEEPER);
41 delay_us(800);
42 period--;
43 }
44 }
1383 kaklik 45  
1435 kaklik 46 void test_mode() //Testovaci mod stopek
1423 kaklik 47 {
1435 kaklik 48 printf(lcd_putc,"\f TEST MODE");
49 lcd_gotoxy(1,2);
50 printf(lcd_putc,"ESC");
51 while(input(BUTTON1)) // testuje dokud nekdo nezmackne tlacitlo
52 {
53 lcd_gotoxy(5,2);
54 Output_toggle(PIN_A0);
55 delay_ms(100);
56 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));
57 }
1423 kaklik 58 }
1435 kaklik 59 void send_measuring()
60 {
61 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);
62 }
1423 kaklik 63  
1435 kaklik 64 void exeption_inorder()
65 {
66 }
1383 kaklik 67  
1435 kaklik 68 void main()
69 {
70 unsigned int8 last, input;
71 unsigned int16 timer;
72 int exception;
73  
1383 kaklik 74 setup_adc_ports(NO_ANALOGS|VSS_VDD);
1423 kaklik 75 port_b_pullups(TRUE);
1383 kaklik 76 setup_adc(ADC_OFF);
77 setup_psp(PSP_DISABLED);
78 setup_spi(SPI_SS_DISABLED);
79 setup_wdt(WDT_OFF);
1435 kaklik 80 setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
1383 kaklik 81 setup_timer_1(T1_DISABLED);
82 setup_timer_2(T2_DISABLED,0,1);
83 setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
84 setup_comparator(NC_NC_NC_NC);
85 setup_vref(FALSE);
1435 kaklik 86 enable_interrupts(INT_TIMER0);
1383 kaklik 87  
1423 kaklik 88 lcd_init();
1383 kaklik 89 usb_init();
90  
91 lcd_gotoxy(1,1);
1424 kaklik 92 printf(lcd_putc,"\f STOPWATCH01A");
1423 kaklik 93 lcd_gotoxy(1,2);
1435 kaklik 94 printf(lcd_putc," Kaklik 2010");
1423 kaklik 95 delay_ms(1000);
96 lcd_gotoxy(1,1);
1424 kaklik 97 printf(lcd_putc,"\f Waiting for PC... ");
1435 kaklik 98 lcd_gotoxy(1,2);
99 printf(lcd_putc,"TEST");
1423 kaklik 100  
1435 kaklik 101 while(!usb_cdc_connected()) if(!input(BUTTON1)) test_mode();
102  
1423 kaklik 103 lcd_gotoxy(1,1);
1424 kaklik 104 printf(lcd_putc,"\f PC connected...");
1423 kaklik 105 beep(10);
1383 kaklik 106  
1423 kaklik 107 run=0;
108 while (TRUE)
109 {
110 run++;
1435 kaklik 111 printf(lcd_putc,"\f\nSTART");
112 section[0]=0;
113 section[1]=0;
114 section[2]=0;
115 section[3]=0;
116 last!=input_b();
1383 kaklik 117  
1435 kaklik 118 while(input(BUTTON1));
119 printf(lcd_putc,"\f\n STOP");
120 time = 0;
121 set_timer0(0);
122 enable_interrupts(GLOBAL);
123 position = 0;
124 exception = 0;
1383 kaklik 125  
1435 kaklik 126 while((position < 4) && (input(BUTTON2))) // cekame na tlacitko stop nebo na preruseni vsech paprsku
127 {
128 if(last!=(input=input_b())) // pri preruseni nektereho z paprsku zjistime ktery to byl
129 {
130 timer=get_timer0();
131 if(bit_test(last ^ input, position))section[position] = (time << 16) + timer; // kontroluje, jestli jsou paprsky preruseny ve spravnem poradi.
132 else exception=INORDER;
133 time=0;
134 set_timer0(0);
135 position++;
136 }
137 last=input_b();
138 }
139 if (exception == INORDER) exeption_inorder();
140 else send_measuring();
1423 kaklik 141 }
1383 kaklik 142 }