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 {
1439 kaklik 61 printf(usb_cdc_putc, "\n\r %5u %5u %5u %5u %5u", run, section[0], section[1], section[2], section[3]);
62 } //*0.000010667
1423 kaklik 63  
1435 kaklik 64 void main()
65 {
66 unsigned int8 last, input;
67 unsigned int16 timer;
68 int exception;
69  
1383 kaklik 70 setup_adc_ports(NO_ANALOGS|VSS_VDD);
1423 kaklik 71 port_b_pullups(TRUE);
1383 kaklik 72 setup_adc(ADC_OFF);
73 setup_psp(PSP_DISABLED);
74 setup_spi(SPI_SS_DISABLED);
75 setup_wdt(WDT_OFF);
1435 kaklik 76 setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
1383 kaklik 77 setup_timer_1(T1_DISABLED);
78 setup_timer_2(T2_DISABLED,0,1);
79 setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
80 setup_comparator(NC_NC_NC_NC);
81 setup_vref(FALSE);
1435 kaklik 82 enable_interrupts(INT_TIMER0);
1439 kaklik 83 enable_interrupts(GLOBAL);
1383 kaklik 84  
1423 kaklik 85 lcd_init();
1383 kaklik 86 usb_init();
87  
88 lcd_gotoxy(1,1);
1424 kaklik 89 printf(lcd_putc,"\f STOPWATCH01A");
1423 kaklik 90 lcd_gotoxy(1,2);
1435 kaklik 91 printf(lcd_putc," Kaklik 2010");
1423 kaklik 92 delay_ms(1000);
93 lcd_gotoxy(1,1);
1424 kaklik 94 printf(lcd_putc,"\f Waiting for PC... ");
1435 kaklik 95 lcd_gotoxy(1,2);
96 printf(lcd_putc,"TEST");
1423 kaklik 97  
1435 kaklik 98 while(!usb_cdc_connected()) if(!input(BUTTON1)) test_mode();
99  
1423 kaklik 100 lcd_gotoxy(1,1);
1424 kaklik 101 printf(lcd_putc,"\f PC connected...");
1423 kaklik 102 beep(10);
1383 kaklik 103  
1423 kaklik 104 run=0;
105 while (TRUE)
106 {
107 run++;
1435 kaklik 108 printf(lcd_putc,"\f\nSTART");
109 section[0]=0;
110 section[1]=0;
111 section[2]=0;
112 section[3]=0;
113 last!=input_b();
1383 kaklik 114  
1435 kaklik 115 while(input(BUTTON1));
116 printf(lcd_putc,"\f\n STOP");
117 time = 0;
118 set_timer0(0);
119 position = 0;
120 exception = 0;
1383 kaklik 121  
1435 kaklik 122 while((position < 4) && (input(BUTTON2))) // cekame na tlacitko stop nebo na preruseni vsech paprsku
123 {
124 if(last!=(input=input_b())) // pri preruseni nektereho z paprsku zjistime ktery to byl
125 {
126 timer=get_timer0();
127 if(bit_test(last ^ input, position))section[position] = (time << 16) + timer; // kontroluje, jestli jsou paprsky preruseny ve spravnem poradi.
128 else exception=INORDER;
129 time=0;
130 set_timer0(0);
131 position++;
132 }
133 last=input_b();
134 }
1439 kaklik 135 if (exception == INORDER)
136 {
137 printf(lcd_putc,"\fInorder! Send?");
138 lcd_gotoxy(1,2);
139 printf(lcd_putc,"YES NO");
140 While(input(BUTTON1) && input(BUTTON4));
141 if(!input(BUTTON1)) send_measuring();
142 if(!input(BUTTON4)) continue;
143 }
1435 kaklik 144 else send_measuring();
1423 kaklik 145 }
1383 kaklik 146 }