




免费预览已结束,剩余19页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
DELPHI并口编程范例DELPHI并口编程范例WritenbyCatSoftwareunitFileTransfer;interfaceusesWindows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,Buttons,ExtCtrls,FileCtrl,ComCtrls;constBlockSize=64512;64510bytesofdata+2byteschecksumthisblockcouldbemuchbiggerbutthenextimplementationwillbeinDMAinsteadofprogrammedIOandDMAblocksarelimitedto64Kbbesidesthedosversionalsohasalimittedblocksizeandthiswaythe2versionscouldbecompatibletypeTFloatFormat=(ffGeneral);FileType=ARRAY0.BlockSize-1ofbyte;TForm1=class(TForm)Edit1:TEdit;DirectoryListBox1:TDirectoryListBox;FileListBox1:TFileListBox;DriveComboBox1:TDriveComboBox;Bevel1:TBevel;Send:TBitBtn;Receive1:TBitBtn;Close:TBitBtn;Bevel2:TBevel;CheckBox1:TCheckBox;CheckBox2:TCheckBox;CheckBox3:TCheckBox;CheckBox4:TCheckBox;Label5:TLabel;Label6:TLabel;Label7:TLabel;Label8:TLabel;Label9:TLabel;Label10:TLabel;Label11:TLabel;Label12:TLabel;Label14:TLabel;Label15:TLabel;ProgressBar1:TProgressBar;ComboBox2:TComboBox;Label1:TLabel;Label2:TLabel;Label3:TLabel;Label4:TLabel;Label13:TLabel;Label16:TLabel;Label17:TLabel;Label18:TLabel;Label19:TLabel;Label20:TLabel;Bevel3:TBevel;ProgressBar2:TProgressBar;procedureCloseClick(Sender:TObject);procedureFileListBox1Click(Sender:TObject);procedureSendClick(Sender:TObject);procedureReceive1Click(Sender:TObject);procedureComboBox2Change(Sender:TObject);procedureInitialisePort;procedureResetPort;privatePrivatedeclarationspublicPublicdeclarationsend;varForm1:TForm1;implementationvarLPTnAddress,ECRAddress,DCRAddress,DSRAddress,ecpDFifoAddress,cnfgAAddress,cnfgBAddress:word;Size,RealBlockSize,ThisBlockSize:integer;LengthOfName,NumberOfBlocks:integer;Implement:(EightBit,SixteenBit,ThirtytwoBit);fname:string;AttrByte:integer;NameString:string255;f:file;FileData:FileType;CSCOk,Error,ImplementationNr:byte;NoFile,ImplementTest:Boolean;$R*.DFMProcedureTForm1.ResetPort;beginLabel12.Show;ProgressBar1.Position:=0;ASMmovdx,ECRAddressmoval,$04SPPmode,FIFOwillberesetwhengoingtoECPmodeoutdx,almoval,$74ECPmode,FIFOresetoutdx,almovdx,DCRAddressmoval,$08;resetcontrollinesoutdx,alend;Exit;end;ProcedureTForm1.InitialisePort;beginASMinitialisationmovax,LPTnAddressincaxmovDSRAddress,axLPTnAddress+$001,DeviceStatusRegisterincaxmovDCRAddress,axLPTnAddress+$002,DeviceControlRegisteraddax,$3FEmovecpDFifoAddress,axLPTnAddress+$400,ECPdataFIFOmovcnfgAAddress,axLPTnAddress+$400,ConfigurationRegisterAincaxmovcnfgBAddress,axLPTnAddress+$401,ConfigurationRegisterBincaxmovECRAddress,axLPTnAddress+$402,ExtendedControlRegistermovdx,ECRAddressmoval,$04SPPmode,FIFOwillberesetwhengoingtoECPmodeoutdx,almoval,$F4configurationAmode,gettypeofport(8,16or32bit)outdx,almovdx,cnfgAAddressgettheimplementationnumberwhichcorrespondswiththetypeoftheportinal,dxandal,$70shral,4movImplementationNr,almovdx,ECRAddressmoval,$74ECPmode,noIRQofnFault,noDMAandnoserviceIRQoutdx,alend;IFImplementationNr=0THENBeginImplement:=SixteenBit;Label15.Caption:=16-bitimplementation;ImplementTest:=true;end;IFImplementationNr=1THENBeginImplement:=EightBit;Label15.Caption:=8-bitimplementation;ImplementTest:=true;end;IFImplementationNr=2THENBeginImplement:=SixteenBit;32-bitimplementationneverfound,doesitexist?Label15.Caption:=32-bitimplementation,16-bitused;ImplementTest:=true;end;IFImplementationNr>2THENBeginLabel15.Caption:=NotavalidECPport;ImplementTest:=false;end;end;ProcedureReceiveCheckSumCheck;BeginASMmovecx,$00FFFFFFloadtime-outcountermovdx,ECRAddressfifoNotEmpty:waitforemptyFIFO,thiskindofpollingisfrequentlyusedintheprograminal,dxtestal,$01testFIFO-fullbitjnzfifoEmptydececxtime-outcounterjnzfifoNotEmptymovError,1time-outoccuredjmpendfifoEmpty:movdx,DCRAddressRequestforresultofchecksummoval,$00Selectlnlow,resultsinnFaulthighforreceiveroutdx,almovecx,$00FFFFFFmovdx,DSRAddressWaitForAck:Waitstillreceiverisdonewithchecksuminal,dxtestal,$08nFaulthigh,comesfromnSelectLnlowjnzGotAcknowledgedececxjnzWaitForAckmovError,1jmpendGotAcknowledge:getschecksumresult:PError,comesfromnInitandal,$20shral,4movCSCOk,almovdx,ECRAddressresetFIFOmoval,$14outdx,almoval,$74outdx,almovdx,DCRAddresssendacknowledge,resetcontrollinesmoval,$08;nSelectlnhigh,resultsinnFaultlowforreceiveroutdx,alend:end;end;ProcedureSendCheckSumCheck;BeginASMmovecx,$00FFFFFFmovdx,DSRAddressWaitSend:waitingforsendertorequestchecksumresultinal,dxtestal,$08waitfornFaulttobehigh(nSelectlnissetlow)jnzSendCheckSumdececxjnzWaitSendmovError,1jmpendSendCheckSum:movdx,ECRAddressresetFIFOBEFOREReceiveCheckSumCheckresetshisFIFOmoval,$14elsesomebytesmaygetlostduringresetingoutdx,almoval,$74outdx,almovdx,DCRAddresssendchecksumresult:nInit,resultsinPErrormoval,CSCOkshlal,2outdx,almovdx,DSRAddressmovecx,$00FFFFFFWaitReceive:waitforacknowledgeofsenderinal,dxtestal,$08waitfornFaulttobelow(nSelectlnissethigh)jzGotAcknowledgedececxjnzWaitReceivemovError,1jmpendGotAcknowledge:movdx,DCRAddressresetcontrollinesmoval,$28outdx,alend:end;end;ProcedureReceiveSynchronisation;basiclythesameasReceiveCheckSumCheckBeginASMmovecx,$1FFFFFFFlargetimeoutcountertogiveenoughtimetoclickthebuttonmovdx,DSRAddressWaitSend:waitingforsendertorequestsynchroinal,dxtestal,$08waitfornFaulttobehigh(nSelectlnissetlow)jnzGotRequestdececxjnzWaitSendmovError,1jmpendGotRequest:movdx,ECRAddressresetFIFOmoval,$14outdx,almovdx,ECRAddressmoval,$74outdx,almovdx,DCRAddresssendacknowledgemoval,$00outdx,almovecx,$00FFFFFFmovdx,DSRAddressWaitReceive:waitforacknowledgeofsenderinal,dxtestal,$08waitfornFaulttobelow(nSelectlnissethigh)jzGotAcknowledgedececxjnzWaitReceivemovError,1jmpendGotAcknowledge:movdx,DCRAddressresetcontrollines,readmoval,$28outdx,alend:end;end;ProcedureSendSynchronisation;basiclythesameasSendCheckSumCheckBeginASMmovdx,DCRAddressRequestforresultofchecksummoval,$00Selectlnlow,resultsinnFaulthighforreceiveroutdx,almovecx,$1FFFFFFFmovdx,DSRAddressWaitForAck:Waitstillreceiversendacknowledgeinal,dxtestal,$08nFaulthigh,comesfromnSelectLnlowjnzGotAcknowledgedececxjnzWaitForAckmovError,1jmpendGotAcknowledge:movdx,ECRAddressresetFIFOmoval,$14outdx,almoval,$74outdx,almovdx,DCRAddresssendacknowledge,resetcontrollines,writemoval,$08;nSelectlnhigh,resultsinnFaultlowforreceiveroutdx,alend:end;end;procedureTForm1.CloseClick(Sender:TObject);beginApplication.Terminate;end;procedureTForm1.FileListBox1Click(Sender:TObject);proceduretochangetheattributeofafilebeginNoFile:=FALSE;AttrByte:=0;Edit1.Text:=ExtractRelativePath(ExtractFileDir(FileListBox1.FileName)+,FileListBox1.FileName);Edit1.OEMConvert:=TRUE;fname:=Edit1.Text;NameString:=Edit1.Text;AttrByte:=FileGetAttr(fname);AssignFile(f,fname);reset(f);CloseFile(f);IF(IOResult<>0)OR(fname=)THENBeginLabel12.Caption:=Filenotfound!;NoFile:=TRUE;endELSEBeginLabel12.Caption:=fname+selected;Label12.Update;end;IfAttrByteANDfaReadOnly=faReadOnlythenCheckBox1.Checked:=TrueelseCheckBox1.Checked:=False;IfAttrByteANDfaHidden=faHiddenthenCheckBox2.Checked:=TrueelseCheckBox2.Checked:=False;IfAttrByteANDfaSysFile=faSysFilethenCheckBox3.Checked:=TrueelseCheckBox3.Checked:=False;IfAttrByteANDfaArchive=faArchivethenCheckBox4.Checked:=TrueelseCheckBox4.Checked:=False;end;procedureTForm1.SendClick(Sender:TObject);proceduretosendafilevarTime1,Time2,BlockTime1,BlockTime2,BlockTransferRate,TransferRate:Double;Tel,BlockCount:Integer;beginLabel6.Caption:=;clearthemessagesLabel8.Caption:=;Label10.Caption:=;Label12.Caption:=;Label18.Caption:=;Label19.Caption:=;Label20.Caption:=;Label6.Update;Label8.Update;Label10.Update;Label12.Update;Label18.Update;Label19.Update;Label20.Update;BlockTime1:=0;BlockTime2:=0;IFNOTImplementTestTHENBeginLabel12.Caption:=Novalidportselected!;Exit;End;IFNoFileTHENBeginLabel12.Caption:=Novalidfileselected!;Exit;End;NameString:=Edit1.Text;LengthOfName:=ByteToCharLen(NameString,254)+1;AssignFile(f,NameString);reset(f,1);IF(IOResult<>0)OR(fname=)THENBeginLabel12.Caption:=Filenotfound!;ResetPort;end;Label18.Caption:=NameString;Label19.Caption:=IntToStr(BlockSize);Label18.Update;Label19.Update;SendSynchronisation;waitforreceivertobereadyIFError=1THENBeginLabel12.Caption:=01ECPtimeout,datatransferisaborted;ResetPort;end;Time1:=Now;Size:=FileSize(f);NumberOfBlocks:=SizeDIV(BlockSize-2);IF(SizeMOD(BlockSize-2)<>0THENNumberOfBLocks:=NumberOfBlocks+1;Label6.Caption:=IntToStr(NumberOfBlocks);Label8.Caption:=IntToStr(Size);Label6.Update;LAbel8.Update;Error:=0;ASMmovecx,$0FFFFFFFmovdx,ECRAddressfifoNotEMPTY_SendBlockSize:waitforFIFOtobeempty(shouldbe)andreportstallinal,dxtestal,$01jnzfifoEMPTY_SendBlockSizedececxjnzfifoNotEMPTY_SendBlockSizemovError,1jmpendfifoEMPTY_SendBlockSize:movdx,ecpDFifoAddressmoveax,SizeloadseaxwithSizeoutdx,alsendlowbyteoflowwordmoval,ahoutdx,alsendhighbyteoflowwordshreax,16movehighwordtolowwordoutdx,alsendlowbytehighwordmoval,ahoutdx,alsendlowbytehighwordmoveax,LengthOfNameloadeaxwithlengthofthefilenamemovTel,eaxloadloopcounterwithlengthoutdx,alsendlengthofthefilenameleaebx,NameStringgetaddressofstringcontainingfilenameLoopSendName:returnofloopTelmovecx,$000FFFFFmovdx,ECRAddressfifoFULL_SendName:waitforFIFOtobeemptyandreportstallinal,dxtestal,$02jzfifoNotFULL_SendNamedececxjnzfifoFULL_SendNamemovError,1jmpendfifoNotFULL_SendName:transmitdatamovdx,ecpDFifoAddressmoval,ebxmovebyteofNameStringinaloutdx,alsenditincebxpointatnextbytedecTelcmpTel,0jnzLoopSendNameuntilTel=0moveax,$05addeax,LengthOfNamecomputethenumberofbytessendcmpal,$0Flowerthan16?jnb16BytesSendmovcl,$10computenumberofbytestoreachablockof16bytessubcl,alFillFIFO:sendsomeextrabytestofillaFIFO=16bytesoutdx,aldeccljnzFillFIFOjmpend16BytesSend:testal,$01numberofbytessendoddoreven?jzendoutdx,alsendextrabytetosupport16bitFIFOend:end;IFError=1THENBeginLabel12.Caption:=02ECPtimeout,datatransferisaborted;ResetPort;end;SendSynchronisation;secondsynchrotoclearFIFOProgressBar1.Max:=NumberOfBlocks;ProgressBar1.Step:=1;CaseImplementOFdifferentimplementationfor8bitand16bitECPportsEightBit:BeginFORBlockCount:=1TONumberOfBlocksDOBeginBlockRead(f,FileData,BlockSize-2,RealBlockSize);readblocksize-2bytesoffileatonceIFBlockCount=1THENBlockTime1:=Now;usedtocomputeblocktransferrateREPEATASMleaebx,FileDatagetaddressofdatatobesendxorax,axmovecx,RealBlockSizeloadecxwithRealBlockSizeChecksumLoop:computechecksumbyxor-ingwiththebyteandrotatethewordtoleftxoral,ebxrolax,1incebxdececxjnzCheckSumLoopmovebx,axstorechecksumafterdatablockmovedx,RealBlockSizeloadedxwithRealBlockSizeincedxlast2bytesarechecksumincedxmoveax,edxshredx,4getRealBlockSizediv16andeax,$0Fisblockdividebleby16?cmpeax,0jzBlockDivideble16incedxifnot:incresenumberof16byteblocksby1BlockDivideble16:movTel,edxloadtheloopcounterTelleaebx,FileDatagetaddressofdatatobesendLoopSendData:returnmovecx,$00FFFFFFmovdx,ECRAddressfifoNotEMPTY_SendData:waitforFIFOtobeemptyandreportstallinal,dxtestal,$01jnzfifoEMPTY_SendDatadececxjnzfifoNotEMPTY_SendDatamovError,1jmpendfifoEMPTY_SendData:transmitdatainaburstof16bytesmovcl,$10loadsloopcounterwith16movdx,ecpDFifoAddressLoop16Bytes:returnofloopmoval,ebxsendabyteofthedataoutdx,alincebxdeccljnzLoop16Bytesuntil16bytesaresenddecTelcmpTel,0jnzLoopSendDatauntilTel=0end:end;IFError=1THENBeginLabel12.Caption:=03ECPtimeout,datatransferaborted;ResetPort;end;ReceiveCheckSumCheck;IFError=1THENBeginLabel12.Caption:=04ECPtimeout,datatransferisaborted;ResetPort;end;IFCSCOk=0THENBeginLabel12.Caption:=Checksumerroronblock+IntToStr(BlockCount);Label12.update;end;UNTILCSCOk<>0;ProgressBar1.StepIt;IFBlockCount=1THENBlockTime2:=Now;usedtocomputeblocktransferrateEnd;End;SixteenBit:basiclythesameas8bitbutinsteadofsendingabyte,sendawordBeginFORBlockCount:=1TONumberOfBlocksDOBeginBlockRead(f,FileData,BlockSize-2,RealBlockSize);IFBlockCount=1THENBlockTime1:=Now;REPEATASMleaebx,FileDatacomputechecksumxorax,axmovecx,RealBlockSizeChecksumLoop:xoral,ebxrolax,1incebxdececxjnzCheckSumLoopmovebx,axmovedx,RealBlockSizedeterminenumberof16byteblocksincedxincedxmoveax,edxshredx,4andeax,$0Fcmpeax,0jzBlockDivideble16incedxBlockDivideble16:movTel,edxloadtheloopcounterTelleaebx,FileDatagetaddressofFileDataLoopSendData:returnmovecx,$00FFFFFFmovdx,ECRAddressfifoNotEMPTY_SendData:waitforFIFOtobeemptyandreportstallinal,dxtestal,$01jnzfifoEMPTY_SendDatadececxjnzfifoNotEMPTY_SendDatamovError,1jmpendfifoEMPTY_SendData:transmitdatainaburstof16bytesmovcl,$08loadsloopcounterwith8,8times2bytesis?movdx,ecpDFifoAddressLoop16Bytes:returnmovax,ebxoutdx,axincebxincebxdeccljnzLoop16Bytesuntil16bytesaresenddecTelcmpTel,0jnzLoopSendDatauntilTel=0end:end;IFError=1THENBeginLabel12.Caption:=03ECPtimeout,datatransferaborted;ResetPort;end;ReceiveCheckSumCheck;receivesthechecksumcopmparingresultIFError=1THENBeginLabel12.Caption:=04ECPtimeout,datatransferisaborted;ResetPort;end;IFCSCOk=0THENBeginLabel12.Caption:=Checksumerroronblock+IntToStr(BlockCount);Label12.Show;end;UNTILCSCOk<>0;ProgressBar1.StepIt;IFBlockCount=1THENBlockTime2:=Now;End;End;End;ProgressBar1.Position:=0;CloseFile(f);Time2:=Now;TransferRate:=Size/(Time2-Time1)*24*3600*1024);IFBlockTime1<>BlockTime2THENBlockTransferRate:=BlockSize/(BlockTime2-BlockTime1)*24*3600*1024)ELSEBlockTransferRate:=0;Label10.Caption:=FloatToStrF(TransferRate,FFfixed,5,2);Label12.Caption:=Datatransmitted;Label20.Caption:=FloatToStrF(BlockTransferRate,FFfixed,6,2);end;procedureTForm1.Receive1Click(Sender:TObject);proceduretoreceiveafileVarTel,BlockCount:Integer;beginLabel6.Caption:=;Label8.Caption:=;Label10.Caption:=;Label12.Caption:=;Label18.Caption:=;Label19.Caption:=;Label20.Caption:=;Label6.Update;Label8.Update;Label10.Update;Label12.Update;Label18.Update;Label19.Update;Label20.Update;IFNOTImplementTestTHENBeginLabel12.Caption:=Novalidportselected!;ResetPort;End;NameString:=;Error:=0;ReceiveSynchronisation;waitsforsendertobereadyIFError=1THENBeginLabel12.Caption:=01ECPtimeout,datatransferaborted;ResetPort;end;ASMvirtualythesameasinSendClick,butininsteadofoutmovecx,$00FFFFFFmovdx,ECRAddressfifoNotFULL_ReceiveBlockSize:waitforFIFOtobeemptyandreportstallinal,dxtestal,$02jnzfifoFULL_ReceiveBlockSizedececxjnzfifoNotFULL_ReceiveBlockSizemovError,1jmpendfifoFULL_ReceiveBlockSize:receivethesizeofthefilexorebx,ebxmovdx,ecpDFifoAddressinal,dxmovbl,alrece
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 证券从业考试买题渠道及答案解析
- 黄可老师基础课件教学
- 铁路系统培训开班
- 2025年食品安全监督员职业技能考试试题及答案解析
- 运营安全培训课件
- 季度营销工作总结
- 教学课件轻音乐怎么制作
- 环保整改工作汇报
- 运动解剖学课件教学
- 制药企业年终工作总结
- 2025年上半年入党积极分子培训班结业考试题及答案
- DB65∕T 3119-2022 建筑消防设施管理规范
- 2025方便速食行业线上消费趋势洞察
- 中职女生健康教育
- 单位集中物业管理保洁服务方案方案投标文件(技术方案)
- 外事礼仪培训课程
- 2025至2030中国玄武岩纤维行业发展趋势分析与未来投资战略咨询研究报告
- 作业托管学生管理制度
- 《机械制图》机械工业出版社 第一章 制图基本知识与技能 章节过关卷(原卷版)
- 公安接警面试题及答案
- 动力电池回收网络设计-洞察及研究
评论
0/150
提交评论