1000 ' **************************************************************** 1010 ' * 1020 ' * 大気圧を測定するプログラム 1030 ' * フィリップの気圧計ユニット 1040 ' * このソフトはPC98のCOM1に対応しています。 1050 ' * 1997.3 作成 1060 ' **************************************************************** 1070 ' BASPRESS 1080 CLEAR 1090 GBSIO.RES=&H40 :'リセット コマンド 1100 GBSIO.8N=&H4E :'8BIT NON PARITY 16CLK 1110 ' 8251 COMMAND 1120 GBSIO.DTR=&H2 :'負論理DTR 1130 GBSIO.RTS=&H20 :'負論理RTS 1140 GBSIOC=&H32 1150 GBPPI1B=&H33 1160 GBCD.MASK=&H20 1170 GBUNIPOLA=&H8 1180 GBBIPOLA=&H0 1190 GBDIFF=0 1200 GBSINGL=&H4 1210 DATAMAX=3599 :'データの数 1220 FLMAX=3 :'データファイルの数(4) 1230 DIM FLNAME$(FLMAX,2) 1240 K$="," 1250 EX$=".TXT" 1260 TITLE$=" 連番 測定日 測定時刻  気圧  温度 電圧1 電圧2 電圧3" 1270 DATA &H00,&H40,&H10,&H50,&H20,&H60,&H30,&H70 :'チャンネル アドレス 1280 DIM CHN(7) :'チャンネル アドレス 1290 DEF FNR$(D$)=RIGHT$("0"+RIGHT$(D$,LEN(D$)-1),2) 1300 GOSUB *GBINIT 1310 FOR I=0 TO 7 1320 READ CHN(I) 1330 NEXT I 1340 CLS 1350 *START 1360 CONSOLE 0,25,1,1 1370 PRINT 1380 PRINT "1:データの収集と表示" 1390 PRINT "2:終了" 1400 INPUT "何番にしますか";Z 1410 IF Z>2 OR Z<1 THEN PRINT "番号が違っています":GOTO 1370 1420 ON Z GOTO *SOKUTEI,*ENDD 1430 ' 1440 ' 1450 *SOKUTEI:' -------------------- データの収集と表示 ---------------- 1460 INPUT "データファイル名(8文字以内)を入れて下さい";F$ 1470 NAMELEN=LEN(F$) 1480 IF NAMELEN>8 THEN PRINT "ファイル名が空白か、名が長すぎます":GOTO 1460 1490 PRINT "時間、分、秒の順に測定間隔を入れて行きます" 1500 PRINT "現在の設定は";HOUR;"時間です "; 1510 INPUT "時間単位の所を入れて下さい";HOUR 1520 IF HOUR24 THEN PRINT "時間が間違っています":GOTO 1510 1530 PRINT "現在の設定は";MINUTE;"分です "; 1540 INPUT "分単位の所を入れて下さい";MINUTE 1550 IF MINUTE<0 OR MINUTE>60 THEN PRINT "時間が間違っています":GOTO 1540 1560 PRINT "現在の設定は";SECOND;"秒です "; 1570 INPUT "秒単位の所を入れて下さい";SECOND 1580 IF SECOND<-1 OR SECOND>60 THEN PRINT "時間設定が間違っています":GOTO 1570 1590 SETTIME$=FNR$(STR$(HOUR))+":"+FNR$(STR$(MINUTE))+":"+FNR$(STR$(SECOND)) 1600 INTVL=HOUR+MINUTE+SECOND 1610 IF INTVL=0 THEN 1620 :'設定時間なし 1620 GOSUB *GBINIT 1630 GOSUB *GBINITPOWER 1640 GOSUB *GBSETUNIPOLA 1650 GBTW=5 1660 GOSUB *GBSETWAIT 1670 FOR FLNO=0 TO FLMAX 1680 CLS 1690 LOCATE 44,0 :PRINT "ファイル名 "+F$+EX$ 1700 COLOR 4,0,0,0:LOCATE 0,0:PRINT "終了時はEのキーを打ってください" 1710 COLOR 7,0,0,0 1720 CONSOLE 2,25,1,1 1730 PRINT TITLE$ 1740 IF INTVL=0 THEN *KEISOKU 1750 OPEN F$+EX$ FOR OUTPUT AS #1 1760 PRINT #1,TITLE2$ 1770 CLOSE #1 1780 *KEISOKU 1790 FOR RENBAN=0 TO DATAMAX 1800 CH=0:GOSUB *GBSETCH 1810 GOSUB *GBCNV:V1=GBRD 1820 CH=1:GOSUB *GBSETCH 1830 GOSUB *GBCNV:V2=GBRD 1840 CH=3:GOSUB *GBSETCH 1850 GOSUB *GBCNV:V3=GBRD 1860 PRES1=800+(V1-91)*(1050-800)/(V2-91) 1870 TEMP3=(1768.8-V3)/8-6.99 1880 MEASTIME$=" "+DATE$+" "+TIME$+" " 1890 GOSUB *TIMESET 1900 IF INTVL=0 THEN 2000 1910 OPEN F$+EX$ FOR APPEND AS #1 1920 PRINT #1,USING "#####";RENBAN;:PRINT #1,K$; 1930 PRINT #1,MEASTIME$;:PRINT #1,K$; 1940 PRINT #1,USING "######.#";PRES1;:PRINT #1,K$; 1950 PRINT #1,USING "######.#";TEMP3;:PRINT #1,K$; 1960 PRINT #1,USING "######.#";V1;:PRINT #1,K$; 1970 PRINT #1,USING "######.#";V2;:PRINT #1,K$; 1980 PRINT #1,USING "######.#";V3 1990 CLOSE #1 2000 PRINT USING "######";RENBAN; 2010 PRINT MEASTIME$; 2020 PRINT USING "######.#";PRES1; 2030 PRINT USING "######.#";TEMP3; 2040 PRINT USING "######.#";V1; 2050 PRINT USING "######.#";V2; 2060 PRINT USING "######.#";V3 2070 *LOOP1:A$=INKEY$ 2080 IF A$="E" OR A$="e" THEN 2150 2090 IF TSET$>TIME$ THEN *LOOP1 2100 NEXT RENBAN 2110 EX$=LEFT$(EX$,3) 2120 EXNO$=STR$(DATANO+1):EXNO$=RIGHT$(EXNO$,1) 2130 EX$=EX$+EXNO$ 2140 NEXT FLNO 2150 GOTO *WAIT0 2160 ' 2170 ' 2180 *WAIT0:'----------------------- 待機 ------------------------------ 2190 CLS 2200 COLOR 4,0,0,0 2210 LOCATE 25,13 :PRINT "終了しました リターンして下さい" 2220 *LOOP2 2230 A$=INKEY$ 2240 IF NOT A$=CHR$(13) THEN *LOOP2 2250 COLOR 7,0,0,0 2260 CLS:GOTO *START 2270 ' 2280 *ENDD :'------------------------- 終了 ---------------------------- 2290 END 2300 ' 2310 ' 3000 *TIMESET:'---------------------- 時間設定 ------------------------ 3010 H=VAL(LEFT$(TIME$,2)):M=VAL(MID$(TIME$,4,2)) 3020 S=VAL(RIGHT$(TIME$,2)) 3030 S=S+VAL(RIGHT$(SETTIME$,2)) 3040 M=M+VAL(MID$(SETTIME$,4,2)) 3050 H=H+VAL(LEFT$(SETTIME$,2)) 3060 M=M+S\60:S=S MOD 60 3070 H=H+M\60:M=M MOD 60:H=H MOD 24 3080 TSET$=FNR$(STR$(H))+":"+FNR$(STR$(M))+":"+FNR$(STR$(S)) 3090 RETURN 3100 ' 3110 ' 3120 *GBINIT:'---------------------- 初期化 ---------------------------- 3130 GBPOLA=GBBIPOLA: GBCH=0: GBSGLDIF=GBSINGL 3140 GBTRIGAPOLA=0: GBTRIGAAUTO=1:GBWT=1 3150 RETURN 3160 ' 3170 ' 10000 *GBINITPOWER:'----------------- 電源の立ち上がりを待つ ----------- 10010 OUT GBSIOC,0 :FOR GBI=0 TO &HFFFF:NEXT GBI 10020 OUT GBSIOC,0 :FOR GBI=0 TO &HFFFF:NEXT GBI 10030 OUT GBSIOC,GBSIO.RES: FOR GBI=0 TO &HFFFF:NEXT GBI 10040 OUT GBSIOC,GBSIO.8N: FOR GBI=0 TO &HFFFF:NEXT GBI 10050 GBCOMMEM=GBSIO.RTS OR GBSIO.DTR 10060 OUT GBSIOC,GBCOMMEM 10070 GBTXTAT=0 10080 FOR GBI=0 TO 1000 :NEXT GBI :'電源の立ち上がりを待つ 10090 GBCOMMAND=&H86 10100 GOSUB *GBDOUT :'内部クロックモードの指定 10110 RETURN 10120 ' 10130 ' 10140 *GBSETUNIPOLA:'---------------- 入力電圧を正電圧に設定 ----------- 10150 GBPOLA=GBUNIPOLA 10160 RETURN 10170 ' 10180 ' 10190 *GBSETWAIT:'------------------- AD変換終了待ち時間の設定 -------- 10200 IF GBTW=<0 THEN GBTW=0 10210 RETURN 10220 ' 10230 ' 10240 *GBDOUT :'ADCに対するコマンドの送出およびデータの取得 10250 FOR GBI=1 TO 8 :'コマンドをMSBから1ビットずつ送出 10260 GBCLK=GBCOMMAND AND &H80 10270 GOSUB *GBSCLK 10280 GBCOMMAND=GBCOMMAND*2 10290 NEXT GBI 10300 GBRD=0 10310 FOR GBI=1 TO 13 10320 GBRD=GBRD*2 10330 GBCLK=0 10340 GOSUB *GBSCLK 10350 IF GBRDIN<>0 THEN GBRD=GBRD OR &H1 ELSE GBRD=GBRD OR &H0 10360 NEXT GBI 10370 GOSUB *GBSETTXE 10380 GBRD=GBRD AND &HFFF 10390 RETURN 10400 ' 10410 ' 10420 *GBSETTXE 10430 OUT GBSIOC,GBCOMMEM:'---------- ADCにコマンド出力後の最終状態を設定  10440 RETURN 10450 ' 10460 ' 10470 *GBSCLK:'---------------------- コマンドの出力とデータの読み込み - 10480 IF GBCLK<>0 THEN GBCMND= GBSIO.DTR ELSE GBCMND=GBSIO.RTS OR GBSIO.DTR 10490 OUT GBSIOC,GBCMND :'コマンド アウト 10500 GOSUB *GBWAIT 10510 GBRDIN0=INP(GBPPI1B) :'データの読み込み 10520 GBRDIN1= NOT GBRDIN0 10530 GBRDIN=GBRDIN1 AND GBCD.MASK: 10540 IF GBCLK<>0 THEN GBCMND=0 ELSE GBCMND=GBSIO.RTS 10550 OUT GBSIOC,GBCMND :'CLK 1 10560 GOSUB *GBWAIT 10570 GBCMND=GBSIO.RTS OR GBSIO.DTR 10580 OUT GBSIOC,GBCMND :'CLK 0 10590 RETURN 10600 ' 10610 ' 10620 *GBWAIT:'---------------------- 待ち時間の実行 ------------------- 10630 FOR GBWAIT=0 TO GBTW:NEXT GBWAIT 10640 RETURN 10650 ' 10660 *GBSETCH:'--------------------- チャンネルの設定 ----------------- 10670 GBCH=CHN(CH AND &H7) 10680 RETURN 10690 ' 10700 ' 10710 *GBCNV:'----------------------- コマンドの生成と入力信号の読み込み 10720 GBCOMMAND=&H80 OR GBCH OR GBPOLA OR GBSGLDIF OR &H1 10730 GOSUB *GBDOUT 10740 IF GBPOLA=GBBIPOLA AND GBRD>2047 THEN GBRD=GBRD-4095 10750 RETURN 10760 'end.........................