void spanMeasure(unsigned char x)
{
int i;
unsigned char val,p;
Data[3] = 255; // portc bit番号
p = 1<<x;
Data[0] = inWork = 0xff;
Busy=1;
Data[1] = 0;
OPTION_REG.T0CS=0; // なぜ必要か原因不明
i = 0;
val = PORTC&p;
if(!val) while(i++<TLIMIT){
val = PORTC;
if((val & p) !=0) break;
}
if(i>=TLIMIT) goto end;
i=0;
while(i++<TLIMIT){
val = PORTC;
if((val & p)==0) break;
}
if(i>=TLIMIT) goto end;
TMR0=0;
timer=0;
i=0;
while(i++<TLIMIT){
val = PORTC;
if((val & p)!=0) break;
}
if(i>=TLIMIT) goto end;
Data[x+4]=timer;
Data[3] = x; // portc bit番号
Data[2] = TMR0;
Data[1] = timer;
Data[0] = inWork = 0;
Busy=0;
return;
end:
Data[3] = x; // portc bit番号
Data[2] = 255;
Data[1] = 0;
Data[0] = inWork = 0;
Busy=0;
return;
}
|
1 x番のセンサーのパルス幅を求める
2
3
4
5 busyフラグ
6 センサーを特定する
7 ソフト的に仕事中にする
8 ハード的に仕事中にする
9 sbit Busy at PORTB.B5;
10
11
12
13 すでにLowになっていたらHigh
14 になるまで待つ
15
16
17 Lowになりっぱなしだったら終了
18
19
20
21 Lowになるのを待つ
22
23
24 ハードタイマーをクリアする
25 ソフトタイマーをクリアする
26
27
28
29 Highになるのを待つ
30
31
32 ソフトタイマーの値
33
34 ハードタイマーの値
35 ソフトタイマーの値をコピー
36 仕事のソフト的終了
37 仕事のハード的終了を知らせる
38
39
40
41 異常終了
42 異常終了
43 仕事のソフト的終了
44 仕事のハード的終了を知らせる
45
46
47
|