modbusvb源程序可以读写寄存器(完整版)doc资料_第1页
modbusvb源程序可以读写寄存器(完整版)doc资料_第2页
modbusvb源程序可以读写寄存器(完整版)doc资料_第3页
modbusvb源程序可以读写寄存器(完整版)doc资料_第4页
modbusvb源程序可以读写寄存器(完整版)doc资料_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

modbusvb源序写寄器(完整)资vb程序器用写的modbus。很想善在地只一下多地。在次设也更善朋改

下运界模地75是温模有3,上湿露置按AsAsAsIf=If=0'重新定义数组度=+'地址码=+'功码读寄存器=+起始址位=+'起始址位=+'寄器数高=++寄器个低位=6,=+'CRC高位=+'CRC低'发送据='一次写个存器=+'地址码=+'功码写寄存器=+'起始址位=+起始址位=+'寄器数高=+'寄器数低=+'字节数==+\要入存的值的高字bisend(8)="&h"+Hex(DataMod256)'写入寄存器的值的低字节crc=CRC16(bisend,9,btLoCRC,btHiCRC)bisend(9)="&h"+Hex(btLoCRC)'CRC位bisend(10)="&h"+Hex(btHiCRC)'CRC位MSComm1.Output=bisendEndIfElseMsgBox"串口没有打开"EndIfEndSubPrivateSubCommand2_Click()'实时采集按钮Timer1.Enabled=NotTimer1.Enabled'进行态切换'初化并开口If==+1'打开串口=+++","++=1=50'一次性接缓冲区读所数据8个节为组!)=0空接缓区=0送缓区=5++1)*2==="串口已经开If关闭口钮If==

'清'清空发EndIfEndSubPrivateSubForm_Load()DimiAsInteger'波特率设置Combo1.AddItem"4800",0Combo1.AddItem"9600",1Combo1.AddItem"115200",2'校验位设置Combo2.AddItem"N",0Combo2.AddItem"E",1Combo2.AddItem"O",2'数据位设置Combo3.AddItem"7",0Combo3.AddItem"8",1'停止位设置Combo4.AddItem"1",0Combo4.AddItem"2",1'功能码选择Combo5.AddItem"读寄存器0Combo5.AddItem"写寄存器1'寄存器个数设置Combo6.AddItem"1",0Combo6.AddItem"2",1Combo6.AddItem"3",2Combo6.AddItem"4",3Combo6.AddItem"5",4Combo6.AddItem"6",5Combo6.AddItem"7",6Combo6.AddItem"8",7Combo6.AddItem"9",8Combo6.AddItem"10",9Combo6.AddItem"11",10Combo6.AddItem"12",11Combo6.AddItem"13",12Combo6.AddItem"14",13Combo6.AddItem"15",14Combo6.AddItem"16",15Combo6.AddItem"17",16Combo6.AddItem"18",17Combo6.AddItem"19",18Combo6.AddItem"20",19Combo6.AddItem"21",20Combo6.AddItem"22",21'串口选择Combo7.AddItem"串口1",0Combo7.AddItem"串口2",1Combo7.AddItem"串口3",2Combo7.AddItem"串口4",3'初始赋值Combo1.ListIndex=1Combo2.ListIndex=1Combo3.ListIndex=1Combo4.ListIndex=0Combo5.ListIndex=0Combo6.ListIndex=2Combo7.ListIndex=0'初始化串口EndSubPrivateSubForm_Unload(CancelAsInteger)IfMSComm1.PortOpen=TrueThenMSComm1.PortOpen=FalseEndIfEndSubPrivateSubMSComm1_OnComm()DimINByte()AsByteDimBufAsStringDimbtLoCRCAsByte,btHiCRCAsByteDimDataAsIntegerIfMSComm1.CommEvent=comEvReceiveThen'接收到数据以后INByte=MSComm1.InputIfINByte(1)=3Then'读寄存器'CRC校验crc=CRC16(INByte,UBound(INByte)-LBound(INByte)-1,btLoCRC,btHiCRC)IfINByte(UBound(INByte)-1)=btLoCRCAndINByte(UBound(INByte))=btHiCRCThen'校验正确'////////////////////////////////////Fori=3ToUBound(INByte)-2Step2Data="&h"+Hex(INByte(i))+Hex(INByte(i+1))'Buf=Buf+Hex(INByte(i))+Chr(32)Buf=Buf+Str(Data)'转换为十进制显示NextiList1.AddItemBufEndIfEndIfMSComm1.InBufferCount=0'请缓存EndIfEndSubPrivateSubTimer1_Timer()'定时发送命令Dimtbisend(7)AsByteDimcrc'定时DimbtLoCRCAsByte,btHiCRCAsByteDimBufAsStringIfMSComm1.PortOpen=TrueThentbisend(0)="&h"+Hex(Val(Text1.Text))'址码tbisend(1)="&h"+Hex(3)'功能码器tbisend(2)="&h"+Hex(0)'起始地址高位tbisend(3)="&h"+Hex(0)'起始地址低位tbisend(4)="&h"+Hex(0)'寄存器个数高位tbisend(5)="&h"+Hex(Combo6.ListIndex+1)'存器个数低位crc=CRC16(tbisend,6,btLoCRC,btHiCRC)tbisend(6)="&h"+Hex(btLoCRC)'CRC位tbisend(7)="&h"+Hex(btHiCRC)'CRC位'发数据=IfAsnoAsAsAsAsCLAsCH'多项码&HA001AsiAsAs==CL=CH=Fori=0Tono-1CRC16Lo=CRC16LoXorData(i)'一个数据与CRC寄存器进行异或ForFlag=0To7SaveHi=CRC16HiSaveLo=CRC16LoCRC16Hi=CRC16Hi\2'高位右移一位右移一位一位为1节右后面补1If与多式进异

CRC16Lo=CRC16Lo\2'低位If((SaveHiAnd&H1)=&H1)Then'如果高位字节最后CRC16Lo=CRC16LoOr&H80'则低字'否则自补0If=如果LSB为1,=CH=CLIfiAs='CRC位='CRC位='CRC低位节表=+1,_____&H40,&H1,&HC0,&H80,&H41,&H0,&HC1,_&H81,&H40,&H0,&HC1,&H81,&H40,&H1,&HC0,&H81,&H41,_&H0,&HC1,&H81,&H40,&H1,&HC0,&H80,&H41,&H1,&HC0,_&H80,&H41,&H0,&HC1,&H81,&H40,&H0,&HC1,&H81,&H40,_&H1,&HC0,&H80,&H41,&H1,&HC0,&H80,&H41,&H0,&HC1,_&H81,&H40,&H1,&HC0,&H80,&H41,&H0,&HC1,&H81,&H40,_&H0,&HC1,&H81,&H40,&H1,&HC0,&H80,&H41,&H1,&HC0,_&H80,&H41,&H0,&HC1,&H81,&H40,&H0,&HC1,&H81,&H40,_&H1,&HC0,&H80,&H41,&H0,&HC1,&H81,&H40,&H1,&HC0,_&H80,&H41,&H1,&HC0,&H80,&H41,&H0,&HC1,&H81,&H40,_&H0,&HC1,&H81,&H40,&H1,&HC0,&H80,&H41,&H1,&HC0,_&H80,&H41,&H0,&HC1,&H81,&H40,&H1,&HC0,&H80,&H41,_&H0,&HC1,&H81,&H40,&H0,&HC1,&H81,&H40,&H1,&HC0,_&H80,&H41,&H0,&HC1,&H81,&H40,&H1,&HC0,&H80,&H41,_&H1,&HC0,&H80,&H41,&H0,&HC1,&H81,&H40,&H1,&HC0,_&H80,&H41,&H0,&HC1,&H81,&H40,&H0,&HC1,&H81,&H40,_&H1,&HC0,&H80,&H41,&H1,&HC0,&H80,&H41,&H0,&HC1,_&H81,&H40,&H0,&HC1,&H81,&H40,&H1,&HC0,&H80,&H41,_&H0,&HC1,&H81,&H40,&H1,&HC0,&H80,&H41,&H1,&HC0,_&H80,&H41,&H0,&HC1,&H81,&H40)EndFunction'CRC高位字节值表unctionGetCRCHi(indAsLong)AsByteetCRCHi=Choose(ind+1,&H0,&HC0,&HC1,&H1,&HC3,&H3,&H2,&HC2,&HC6,&H6,&H7,&HC7,&H5,&HC5,&HC4,&H4,&HCC,&HC,&HD,&HCD,_&HF,&HCF,&HCE,&HE,&HA,&HCA,&HCB,&HB,&HC9,&H9,_&H8,&HC8,&HD8,&H18,&H19,&HD9,&H1B,&HDB,&HDA,&H1A,_&H1E,&HDE,&HDF,&H1F,&HDD,&H1D,&H1C,&HDC,&H14,&HD4,_&HD5,&H15,&HD7,&H17,&H16,&HD6,&HD2,&H12,&H13,&HD3,_&H11,&HD1,&HD0,&H10,&HF0,&H30,&H31,&HF1,&O33,&HF3,_&HF2,&H32,&H36,&HF6,&HF7,&H37,&HF5,&H35,&H34,&HF4,_&H3C,&HFC,&HFD,&H3D,&HFF,&H3F,&H3E,&HFE,&HFA,&H3A,_&H3B,&HFB,&H39,&HF9,&HF8,&H38,&H28,&HE8,&HE9,&H29,_&HEB,&H2B,&H2A,&HEA,&HEE,&H2E,&H2F,&HEF,&H2D,&HED,_&HEC,&H2C,&HE4,&H24,&H25,&HE5,&H27,&HE7,&HE6,&H26,_&H22,&HE2,&HE3,&H23,&HE1,&H21,&H20,&HE0,&HA0,&H60,_&H61,&HA1,&H63,&HA3,&HA2,&H62,&H66,&HA6,&HA7,&H67,_&HA5,&H65,&H64,&HA4,&H6C,&HAC,&HAD,&H6D,&HAF,&H6F,_&H6E,&HAE,&HAA,&H6A,&H6B,&HAB,&H69,&HA9,&HA8,&H68,_&H78,&HB8,&HB9,&H79,&HBB,&H7B,&H7A,&HBA,&HBE,&H7E,_&H7F,&HBF,&H7D,&HBD,&HBC,&H7C,&HB4,&H74,&H75,&HB5,_&H77,&HB7,&HB6,&H76,&H72,&HB2,&HB3,&H73,&HB1,&H71,_&H70,&HB0,&H50,&H90,&H91,&H51,&H93,&H53,&H52,&H92,_&H96,&H56,&H57,&H97,&H55,&H95,&H94,&H54,&H9C,&H5C,_&H5D,&H9D,&H5F,&H9F,&H9E,&H5E,&H5A,&H9A,&H9B,&H5B,_&H99,&H59,&H58,&H98,&H88,&H48,&H49,&H89,&H4B,&H8B,_&H8A,&H4A,&H4E,&H8E,&H8F,&H4F,&H8D,&H4D,&H4C,&H8C,_&H44,&H84,&H85,&H45,&H87,&H47,&H46,&H86,&H82,&H42,_&H43,&H83,&H41,&H81,&H80,&H40)LUT链寄存器链的使用在clo的LE之除了LAB局部互连和进位外,还有LUT链、寄器链。用LUT链可以把相的LE中的连接来构成复杂的组合逻辑寄器链可以把相的LE中的寄存器连接起来,诸如移寄存器功能,图1所示。图1LUT链寄器的用基本寄存器.器1么器的。由触组构已的种基触均结若只并中需也并这功单叫。2器图1所器逻图图1逻(1)组74LS175由4个异边沿D触发器组成,因此它寄D存。~D是并输,Q~Q是并行数据输0303清,控钟

D(2)原清R=0,异步清零。即=0,就立即将个沿D都DD位到0状送。R=0,上无中什D么加输码~d,立刻被送入中根据器03n的特征方程=则有:d0

11

2

d3

(CP上升沿有效)。保持。当=0,CP上升沿以外时间,寄存器保持内容不变,即触发器的D各个输出端Q的状态与d关,都保持不变。VerilogHDL八位移位寄存器林春涛信息科学与技术级班3108001158moduleEightBit(direction,clk,q,d;reg[7:0]q;//义了一个8位的名为q的reg型数据inputdirection,clk,d;//声明输入信号direction,clk和dOutput[7:0]q;//声明输出信号qinitialq=0;//初始化寄存器输出always@(posedgeclkbeginshift(q,d,direction;//调用等待任务shiftendtaskshift;//定义移位寄存器开始移位[7:0]Q;inputD;inputdir;if(dir==0//当direction为0时定义为左移,否则为右移beginQ<=(Q<<1;Q[0]<=D;endelsebeginQ<=(Q>>1;Q[7]<=D;endendtaskendmodule编译仿真图如下:结果分析:图中设计了三个为高电平的区域图的左半部分下可见为寄存器左移,每次上升沿到达时可见的值一直向高位传。右半部分direction设为存器右移,每次上升沿到达时,可见的值一直向低位移动。可见实现了八位移位寄存器。112112例路1.实现方:(1)有位并输入故需用两片用最高位作为它的行输端。启

+5VG2&

&G1S0S1R1

串出QQQQSQQQQ0S74LS194ABCDRABCD111122222移

+5V

D0

D1

D2

D3

D4

D5

D6

入2.具体电:D6

D5D4D3D2D1

数据传

变换电

串出D0

送3.工作效:“。

QQQA1C1D2

作方01

D234

D56

并入(S100DD01234

5

右(SS10DD0123

4

右(SS10D012

3

右(SS=01)101110DD012DD01

右(SS10右(SS10111111

0

并入(SS10ARM微理器有3732位长的寄存器,其中包括个通用寄存器6个状态寄存器和一个程序计数器寄存器()。图3.2所示,ARM微处37个寄存器分成不同在器ARM微有7种种可用R0-R15和共17个寄存器;在FIQ式下可以使用R0-,CPSR,共18个寄存器,其中R8-以及存器FIQ模式专有寄存器,其它寄存器和用户模式共用相同的物理寄存器;在IRQ、SVCUndef、Abort模式下可以用的寄存器都是(R,CPSR,),中R13,R14,CPSR是个模式专有的,其它和户模式共用相同物寄器。可见核中一共有个物理独立寄存器,在每一种理器模式中只能访问一组相的存。在每组寄存中:通常作栈指针寄存器(,每一模式有己的,以允许一种异常都有自己的栈指。用作连或返回地址寄存(LR),每种模式自己的。用作序计数器()用保读取指令地址。(CuRegister)存储ARM微理器当的状态和式标志。SPSR(SavedProgramStatusRegister)异模式下的的备寄器,当个异常发生时保存当前CPSR值。结合连接寄存器可处器返回先前的状态。微理器这样组织寄存器的好处于各种异常发生的时候,每种常式都可以保存一些重要的据使异常处理程序完成之后返异前的程序时不会破坏原有的寄存器或状。通用寄存器包括:未分寄器(R0-R7)、分组寄器(R8-)、序计数器()。(1)未分寄存器(R0-R7)在微处理器中存器R0-R7是未分组,在图.2中们也看到,在物上有一组任何式下R0-R7寄存器指都是同一个物寄存。未寄存没被系统特殊用途任何用通寄存器的应场合都可使用分组存器异常中所引处理模式切时,要对分组存器加护入栈以防止寄存中数据。R0-在Thu态下也为低寄存器,在Thumb状态下也为高寄存。(2)分组寄器(R8-R14)R8-R14是分寄存器,具体访问哪物理寄存器取决于前的处理器模式。这组存器物上有两,FIQ模式下使用自专有的,而其模式使用同一组寄存。这样的结构设计利于加快IQ的处理速度。在体系结构中,R没有任指定其他的用途,所以当中到达时,可以不保存这些通用寄存器,也就是说IQ处理程序在保存和恢复现场时可以少保存和恢复几个寄存器(),从提高中断处理迅速因此IQ模式常被用来处理些时间紧急的任务。分组寄存器R13和R,分别应6个不同的物寄存器其中用户式和系统模式共用一个,5中常模式中别有自己的和R也就是I下的R13、R14与用户式或其他种异模式下的、R14不的物理寄存器。寄存在中常用作栈指针,称为P。因为RM态下没有专门的入栈出栈指令,所以这只是一种习惯用法。也就是,并没有任指令强制使13作为栈指针,用户可以使用其他寄存器作为栈指针。每一种异常模式都有自己的R13,在使用是分别对进行初化,以保证在相应式下能正确的进行入栈和出栈操作。另外需要注意,在Thumb指令集中,有一些指令强制使用R13作为栈指针,如栈操作令。R13也可以作为通用寄存器使用。寄存器被称为连接寄存器Register,),在ARM中R14的特殊用途有种:一是用来保存程序返回地址;二是当常发时,中保存的值等于异发生时的减4(或减2),因此在据R的返回到异常发生前相应置继续执行。当通过BL或BLX指令调用子程序时,硬自动将子序返回地址存在R14寄存器中。在子程序返回,把的值复制到程序数器C可实现子程序返回。如,可以使用OVLR者XLR来成子序返。另外,可以在子序入处使下面指令将R栈中。SP!,{,LR}在子程返时,使用如下指令做栈作,实现从子返回。还用于异常返回。当异常生时,该异常模式寄存器被设置成该异常模式的返回地址(R14等于异常生时C的值减4(或者减))。在不同异常模式下,R14保存的值并不是异返回的真正地址,是有一个常数的移量。例如:FIQ异常可以使用SUBSPC,LR,#4实异常回。也可以为通用寄存器使用(3程序计数器()的寄存器被为程序算器P。可以作为通用寄存器用,很多特殊的指令在使用时些限制当违反了这些指令使用制时,令的执行结果是不可预知的。R15保存微处理器指的地址改变的值引起程序执行顺序的变。在ARM状下,ARM指是位的、是按字对齐的,所以R在Thumb状态下,指令是16位的、按2节对齐的,所以R。由于ARM的流水线机制,指令读取的R的是当前正在执行的令地加上8个字节。读P主要用于快中需令TR或TM对R进行保时,存的可能是当前指令地址加8当前指令地址加12。到是哪种方式,取决芯片的具体设计方。当然,在同一个芯中,能采用种方式。要么保存前指令地址加8,要么保存当前指令地址加12程序开发人员应尽避免使用TR或TM指令来对15进行操作。当可避要使种方式可以先通一小段程来确定所用的芯使用种方实现例如SUBR1,PC,#4中存放TR指令地址STR;用STR指令将PC保存到指向的地址单元中,;PC=STR指地址+偏移量(移量为8或者)。LDRR0,[R0];读取TR指令址偏移量的值;指令地址+移量的值减去TR令的址,;得偏移值(8者12)。当用指令修改R15的值,如果改成功它将使程序跳转到该址执行。因为指令是字齐的所以写入R15的地址值满足B,具体规则根据ARM本的不同也有所不:l对于ARM本3以及更低的版,写入的地址值bit[1:被忽略,即写入R15的地址值将与FFFFFFFC与操作。l对于ARM本4以及更高版本程序须证写入R15寄存器地址值的:0]为否则将会产不可预知的结果。l对于Thumb令集说指是半对。处器将忽R15[0],即写入R15寄存器值在写入要先和0XFFFFFFFE与作有些令对R15的操有特殊的要求。比,令BX利用寄存器B来定需要跳转到的子程序是ARM状态还是Thu状态。原文:VerilogHDL八位移位寄存器林春涛信息科学与技术级班3108001158moduleEightBit(direction,clk,q,d;reg[7:0]q;//义了一个8位的名为q的reg型数据inputdirection,clk,d;//声明输入信号direction,clk和dOutput[7:0]q;//声明输出信号qinitialq=0;//初始化寄存器输出always@(posedgeclkbeginshift(q,d,direction;//调用等待任务shiftendtaskshift;//定义移位寄存器开始移位[7:0]Q;inputD;inputdir;if(dir==0//当direction为0时定义为左移,否则为右移beginQ<=(Q<<1;Q[0]<=D;endelsebeginQ<=(Q>>1;Q[7]<=D;endendtaskendmodule编译仿真图如下:结果分析:图中设计了三个为高电平的区域图的左半部分下可见为寄存器左移,每次上升沿到达时可见的值一直向高位传。右半部分direction设为存器右移,每次上升沿到达时,可见的值一直向低位移动。可见实现了八位移位寄存器。112112例路1.实现方:(1)有位并输入故需用两片用最高位作为它的行输端。

+5VG2&

&G1S0S1R1

串QQQQSQQQQ0S74LS194ABCDRABCD111122222

+5V

D0

D1

D2

D3

D4

D5

D6并

入2.具体电:D6并行输

D5D4D3D2D1

数据传

变换电

串D0

送3.工作效:“。

QQQA1C1D2

作方01

D234

D56

并入(S100DD01234

5

右(SS10DD0123

4

右(SS10D012

3

右(SS=01)101110DD012DD01

右(SS10右(SS10111111

0

并入(SS10001122330C11C1211C12C13C10123授

用芬掌握数码寄器和移位寄存器的逻辑功能能掌握中规模位双向移位寄存器的逻辑功能时出触发器、JK发器触发器、T触发器、T`触发器的逻辑功能、特性方程。过:一、器具储,所二。方单拍单接据置

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论