unit Sample0Unit; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, ComCtrls, StdCtrls; type TSample0Form = class(TForm) ExitButton: TButton; AddrBox: TGroupBox; HexLabel: TLabel; BaseEdit: TEdit; StartButton: TButton; ChannelBox: TGroupBox; ChannelLabel0: TLabel; ChannelLabel1: TLabel; ChannelLabel2: TLabel; ChannelLabel3: TLabel; ChannelLabel4: TLabel; ChannelLabel5: TLabel; ChannelLabel6: TLabel; ChannelLabel7: TLabel; TestTimer: TTimer; ChannelLabel8: TLabel; ChannelLabel9: TLabel; ChannelLabel10: TLabel; ChannelLabel11: TLabel; ChannelLabel12: TLabel; ChannelLabel13: TLabel; ChannelLabel14: TLabel; ChannelLabel15: TLabel; AIMAddrBox: TGroupBox; Hex2Label: TLabel; AIM32Edit: TEdit; ChannelLabel16: TLabel; ChannelLabel17: TLabel; ChannelLabel18: TLabel; ChannelLabel19: TLabel; ChannelLabel20: TLabel; ChannelLabel21: TLabel; ChannelLabel22: TLabel; ChannelLabel23: TLabel; ChannelLabel24: TLabel; ChannelLabel25: TLabel; ChannelLabel26: TLabel; ChannelLabel27: TLabel; ChannelLabel28: TLabel; ChannelLabel29: TLabel; ChannelLabel30: TLabel; ChannelLabel31: TLabel; EndGroup: TRadioGroup; GainGroup: TGroupBox; GainComboBox: TComboBox; Volts2Label: TLabel; VoltsLabel16: TLabel; VoltsLabel25: TLabel; VoltsLabel27: TLabel; VoltsLabel28: TLabel; VoltsLabel29: TLabel; VoltsLabel30: TLabel; VoltsLabel31: TLabel; VoltsLabel26: TLabel; VoltsLabel24: TLabel; VoltsLabel23: TLabel; VoltsLabel21: TLabel; VoltsLabel22: TLabel; VoltsLabel19: TLabel; VoltsLabel18: TLabel; VoltsLabel17: TLabel; VoltsLabel20: TLabel; ChannelLabel: TLabel; Channel2Label: TLabel; Instructions: TMemo; VoltsLabel: TLabel; VoltsLabel0: TLabel; VoltsLabel11: TLabel; VoltsLabel12: TLabel; VoltsLabel13: TLabel; VoltsLabel14: TLabel; VoltsLabel15: TLabel; VoltsLabel1: TLabel; VoltsLabel2: TLabel; VoltsLabel3: TLabel; VoltsLabel4: TLabel; VoltsLabel5: TLabel; VoltsLabel6: TLabel; VoltsLabel7: TLabel; VoltsLabel8: TLabel; VoltsLabel9: TLabel; VoltsLabel10: TLabel; procedure ExitButtonClick(Sender: TObject); procedure StartButtonClick(Sender: TObject); procedure TestTimerTimer(Sender: TObject); procedure FormCreate(Sender: TObject); procedure EndGroupClick(Sender: TObject); procedure GainComboBoxChange(Sender: TObject); published function CheckForEOC(Address: Integer): Boolean; function CheckForBusy(Address: Word): Boolean; private { Private declarations } public { Public declarations } end; var Sample0Form: TSample0Form; BaseAddress, AIM32Addr: LongWord; ChannelLabelsArray: array [0..31] of TLabel; VoltsLabelsArray: array [0..31] of TLabel; CalSpace, Ended, Range: Word; Gain: Double; EEPROMReady: Boolean = False; implementation uses ACCES32; {$R *.DFM} procedure TSample0Form.FormCreate(Sender: TObject); begin VoltsLabelsArray[0] := VoltsLabel0; VoltsLabelsArray[1] := VoltsLabel1; VoltsLabelsArray[2] := VoltsLabel2; VoltsLabelsArray[3] := VoltsLabel3; VoltsLabelsArray[4] := VoltsLabel4; VoltsLabelsArray[5] := VoltsLabel5; VoltsLabelsArray[6] := VoltsLabel6; VoltsLabelsArray[7] := VoltsLabel7; VoltsLabelsArray[8] := VoltsLabel8; VoltsLabelsArray[9] := VoltsLabel9; VoltsLabelsArray[10] := VoltsLabel10; VoltsLabelsArray[11] := VoltsLabel11; VoltsLabelsArray[12] := VoltsLabel12; VoltsLabelsArray[13] := VoltsLabel13; VoltsLabelsArray[14] := VoltsLabel14; VoltsLabelsArray[15] := VoltsLabel15; VoltsLabelsArray[16] := VoltsLabel16; VoltsLabelsArray[17] := VoltsLabel17; VoltsLabelsArray[18] := VoltsLabel18; VoltsLabelsArray[19] := VoltsLabel19; VoltsLabelsArray[20] := VoltsLabel20; VoltsLabelsArray[21] := VoltsLabel21; VoltsLabelsArray[22] := VoltsLabel22; VoltsLabelsArray[23] := VoltsLabel23; VoltsLabelsArray[24] := VoltsLabel24; VoltsLabelsArray[25] := VoltsLabel25; VoltsLabelsArray[26] := VoltsLabel26; VoltsLabelsArray[27] := VoltsLabel27; VoltsLabelsArray[28] := VoltsLabel28; VoltsLabelsArray[29] := VoltsLabel29; VoltsLabelsArray[30] := VoltsLabel30; VoltsLabelsArray[31] := VoltsLabel31; ChannelLabelsArray[0] := ChannelLabel0; ChannelLabelsArray[1] := ChannelLabel1; ChannelLabelsArray[2] := ChannelLabel2; ChannelLabelsArray[3] := ChannelLabel3; ChannelLabelsArray[4] := ChannelLabel4; ChannelLabelsArray[5] := ChannelLabel5; ChannelLabelsArray[6] := ChannelLabel6; ChannelLabelsArray[7] := ChannelLabel7; ChannelLabelsArray[8] := ChannelLabel8; ChannelLabelsArray[9] := ChannelLabel9; ChannelLabelsArray[10] := ChannelLabel10; ChannelLabelsArray[11] := ChannelLabel11; ChannelLabelsArray[12] := ChannelLabel12; ChannelLabelsArray[13] := ChannelLabel13; ChannelLabelsArray[14] := ChannelLabel14; ChannelLabelsArray[15] := ChannelLabel15; ChannelLabelsArray[16] := ChannelLabel16; ChannelLabelsArray[17] := ChannelLabel17; ChannelLabelsArray[18] := ChannelLabel18; ChannelLabelsArray[19] := ChannelLabel19; ChannelLabelsArray[20] := ChannelLabel20; ChannelLabelsArray[21] := ChannelLabel21; ChannelLabelsArray[22] := ChannelLabel22; ChannelLabelsArray[23] := ChannelLabel23; ChannelLabelsArray[24] := ChannelLabel24; ChannelLabelsArray[25] := ChannelLabel25; ChannelLabelsArray[26] := ChannelLabel26; ChannelLabelsArray[27] := ChannelLabel27; ChannelLabelsArray[28] := ChannelLabel28; ChannelLabelsArray[29] := ChannelLabel29; ChannelLabelsArray[30] := ChannelLabel30; ChannelLabelsArray[31] := ChannelLabel31; CalSpace := 0; Ended := 1; Range := 0; Gain := 0.5; if (InPortB($61) = $AA55) then begin Application.MessageBox('ACCESNT.SYS not detected. Please copy ACCESNT.SYS into [NT]/system32/drivers and re-run this sample.', 'Warning', IDOK); end; end; // end FormCreate procedure TSample0Form.ExitButtonClick(Sender: TObject); begin Close; end; // end ExitButtonClick procedure TSample0Form.StartButtonClick(Sender: TObject); begin if (TestTimer.Enabled = True) then begin TestTimer.Enabled := False; StartButton.Caption := 'Start Test'; BaseEdit.Enabled := True; AIM32Edit.Enabled := True; end // end if else begin StartButton.Caption := 'Abort Test'; BaseEdit.Enabled := False; AIM32Edit.Enabled := False; BaseAddress := StrToInt('$' + BaseEdit.Text); AIM32Addr := StrToInt('$' + AIM32Edit.Text); OutPortB(AIM32Addr + 1, $10 + Ended + CalSpace); TestTimer.Enabled := true; end; // end else end; // end TestButtonClick procedure TSample0Form.TestTimerTimer(Sender: TObject); var chan, counts, MaxChannels: Integer; timeout: LongWord; volts: Double; begin if Ended = 0 then MaxChannels := 16 else MaxChannels := 32; for chan := 0 to MaxChannels - 1 do begin timeout := 65535; OutPortB(AIM32Addr, chan + Range); // write AIM-32 channel Sleep(15); while (CheckForBusy(AIM32Addr + 1) and (timeout > 0)) do dec(timeout); timeout := 65535; OutPortB(BaseAddress + 2, 0); // write channel Sleep(15); while (not(CheckForEOC(BaseAddress)) and (timeout > 0)) do dec(timeout); if (timeout = 0) then begin VoltsLabelsArray[chan].Caption := 'A/D Timeout'; end // end if timeout else begin counts := InPort(BaseAddress + 2); Sleep(15); volts := ((counts and $FFF) * (5.0 / Gain)) / 4096.0; VoltsLabelsArray[chan].Caption := Format('%9.8f', [volts]); end; // end else end; // end for chan end; // end TestTimerTimer function TSample0Form.CheckForEOC(Address: Integer): boolean; var EOCCheck: Byte; begin EOCCheck := InPortB(Address); result := ((EOCCheck and $80) = $80); end; // end CheckForEOC procedure TSample0Form.EndGroupClick(Sender: TObject); var i: Integer; begin if EndGroup.ItemIndex = 0 then begin Ended := 1; Channel2Label.Visible := True; Volts2Label.Visible := True; for i := 16 to 31 do begin ChannelLabelsArray[i].Visible := True; VoltsLabelsArray[i].Visible := True; end; end else if EndGroup.ItemIndex = 1 then begin Ended := 0; Channel2Label.Visible := False; Volts2Label.Visible := False; for i := 16 to 31 do begin ChannelLabelsArray[i].Visible := False; VoltsLabelsArray[i].Visible := False; end; end; OutPortB(AIM32Addr + 1, Ended + CalSpace + $10); end; // end EndGroupClick procedure TSample0Form.GainComboBoxChange(Sender: TObject); begin Gain := StrToFloat(GainComboBox.Text); if Gain = 0.5 then Range := $00 else if Gain = 1 then Range := $20 else if Gain = 2 then Range := $40 else if Gain = 50 then Range := $60 else if Gain = 100 then Range := $80 else if Gain = 200 then Range := $A0; end; // end GainComboBoxChange function TSample0Form.CheckForBusy(Address: Word): Boolean; var BusyCheck: Byte; begin BusyCheck := InPortB(Address); result := ((BusyCheck and $40) = $40); end; // end CheckForBusy end. // end Program