当前位置:文档之家› 单片机通信协议处理(状态机)

单片机通信协议处理(状态机)

数字逻辑模拟试卷

4、如果竞争的结果导致电路最终进入同一稳定总态,则称为临界竞争。 ( ) 5、门电路的扇出是表示输出电压与输入电压之间的关系。 ( ) 三、简答题(每题5分,共10分) 1、请列出3种“曾经是模拟的”现在却“已经成为数字的”系统,并简述为什么会有这种转变。 2、采用CMOS 晶体管实现的“与非门”和“或非门”,哪个速度快?为什么? 四、应用题(共70分) 1、已知接收端收到的汉明码码字a7a6a5a4a3a2a1=1100010,问在最多一位错的情况下发送端发送的码字是什么?(5分) 2、用卡诺图化简下列函数:(5分) ()()15,14,13,2,1,012,11,10,5,4,3,,,d F Z Y X W += ∑ 3、旅客列车分为特快A ,直快B 和慢车C ,它们的优先顺序为:特快、直快、慢车。同一时间内,只能有一趟列车从车站开出,即只能给出一个开车信号,试设计满足上述要求的开车信号控制电路。(10分) (1)列出真值表(5分) (2) 写出最简的输出逻辑表达式(5分) 4、运用一个MSI 器件实现余3码向8421BCD 码的转换。(10分) 5、运用“圈到圈”逻辑设计思想,采用74X138译码器和适当的逻辑门设计一个1位十进制数2421码的奇偶位产生电路(假定采用奇检验)。(10分)

1)作出状态/输出表(5分)。 2)说明它是Mealy 机还是Moore 机(2分) 3)说明这个电路能对何种输入序列进行检测。(3分) 7、作“0101”序列检测器的Mealy 型状态表和Moore 型状态表。凡收到输入序列为“0101”时,输出为1;并规定检测的“0101”序列不重叠。典型输入输出序列如下:(10分) 输入X :1 1 0 1 0 1 0 1 0 0 1 1 输出Z :0 0 0 0 0 1 0 0 0 0 0 0 看下面的例子就清楚了: 某序列检测器有一个输入端x 和一个输出端Z 。输入端 x 输入一串随机的二进制代码,当输入序列中出现011时,输出Z 产生一个1输出,平时Z 输出0 。典型输入、输出序列如下。 输入 x: 1 1 1 1 1 1 1 输出 Z: 1 1 试作出该序列检测器的原始状态图和原始状态表。 解.假定用Mealy 型同步时序逻辑电路实现该序列检测器的逻辑功能。 设: 状态A ------为电路的初始状态。 状态B ------表示收到了序列"011"中的第一个信号"0"。 状态C ------表示收到了序列"011"中的前面两位"01" 。 状态D ------表示收到了序列"011"。 ※ 当电路处在状态A 输入x 为0时,应令输出Z 为0转向状态B ;而处在状态A 输入x 为1时,应令输出Z 为0停留在状态A ,因为输入1不是序列"011"的第一个信号,故不需要记住。该转换关系如图5.16(a )所示。 Q1 Q2

(完整版)51单片机实现双机通信(自己整理的)

1号机程序 #in clude #defi ne uint un sig ned int #defi ne uchar un sig ned char sbit p10=P1 A 0; uchar a,b,kk; //uchar code d_c[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; void delay_ms(uchar y) { uchar i; while(y__) for(i=0;i<120;i++) 5 } void put(uchar x) // 发送函数 { SBUF=x; //SBUF:串行口数据缓冲器 while (TI==0); 〃等待发送结束 TI=0; } P £j £fA>l3 旳 4阳 1370 丘阳 H 鮎口 PDLWAJil- PDSA>f POfiAME PQ TiJT FZ^KS 畑 阳pz- A A-m FZW11 PZ.AtZ FZj9jAl4 PZ.TW? P3£VR : iD paimcc P3.sii nrn pjjfflrn F3.WTI] M*Tl pgtjgQIH F3.7/IF 1E 11 左边1号机,右边2号机, ,功能实现 帕叶DO ■ 口 IJApi FDJ H [I Z — 观旧 IP 口 .hQKD* *QAADf H ^ 弓 H.Lta RQfMM FZJWS pz. iwe F2JKA-IDI P2JTA11I F2.HW1Z P2JSM13 F2W.14 F2JM1S F3Ji nHX& gj.im:& riaiWTO rjjfWTT F3.1/W f3AT1 P3JillW F3JMF ■T2 1E

单片机串口通信协议程序

#include #include #define R55 101 #define RAA 202 #define RLEN 203 #define RDATA 104 #define RCH 105 //#define unsigned char gRecState=R55; unsigned char gRecLen; unsigned char gRecCount; unsigned char RecBuf[30]; unsigned char gValue; void isr_UART(void) interrupt 4 using 1 { unsigned char ch; unsigned char i; unsigned char temp; if (RI==1) { ch=SBUF; switch(gRecState) { case R55: // wait 0x55 if (ch==0x55) gRecState=RAA; break;

case RAA: if (ch==0xaa) gRecState=RLEN; else if (ch==0x55) gRecState=RAA; else gRecState=R55; break; case RLEN: gRecLen=ch; gRecCount=0; gRecState=RDATA; break; case RDATA: RecBuf[gRecCount]=ch; gRecCount++; if (gRecCount>=gRecLen) { gRecState=RCH; } break; case RCH: temp=0; for(i=0;i

设计单片机通讯协议论文(非常经典)

如何设计单片机常用通信 协议论文

目录 1.自定义数据通信协议 (3) 2.上位机和下位机中的数据发送 (3) 3.下位机中的数据接收和协议解析 (4) 4.上位机中的数据接收和命令处理 (8) 5.总结 (9)

单片机通信协议现在大部分的仪器设备都要求能过通过上位机软件来操作,这样方便调试,利于操作。其中就涉及到通信的过程。在实际制作的几个设备中,笔者总结出了通信程序的通用写法,包括上位机端和下位机端等。 1.自定义数据通信协议 这里所说的数据协议是建立在物理层之上的通信数据包格式。所谓通信的物理层就是指我们通常所用到的RS232、RS485、红外、光纤、无线等等通信方式。在这个层面上, 底层软件提供两个基本的操作函数:发送一个字节数据、接收一个字节数据。所有的数据协议全部建立在这两个操作方法之上。通信中的数据往往以数据包的形式进行传送的,我们把这样的一个数据包称作为一帧数据。类似于网络通信中的TCPIP协议一般,比较可靠的通信协议往往包含有以下几个组成部分:帧头、地址信息、数据类型、数据长度、数据块、校验码、帧尾。 帧头和帧尾用于数据包完整性的判别,通常选择一定长度的固定字节组成,要求是在整个数据链中判别数据包的误码率越低越好。减小固定字节数据的匹配机会,也就是说使帧头和帧尾的特征字节在整个数据链中能够匹配的机会最小。通常有两种做法,一、减小特征字节的匹配几率。二、增加特征字节的长度。通常选取第一种方法的情况是整个数据链路中的数据不具有随即性,数据可预测,可以通过人为选择帧头和帧尾的特征字来避开,从而减小特征字节的匹配几率。使用第二种方法的情况更加通用,适合于数据随即的场合。通过增加特征字节的长度减小匹配几率,虽然不能够完全的避免匹配的情况,但可以使匹配几率大大减小,如果碰到匹配的情况也可以由校验码来进行检测,因此这种情况在绝大多说情况下比较可靠。 地址信息主要用于多机通信中,通过地址信息的不同来识别不同的通信终端。在一对多的通信系统中,可以只包含目的地址信息。同时包含源地址和目的地址则适用于多对多的通信系统。 数据类型、数据长度和数据块是主要的数据部分。数据类型可以标识后面紧接着的是命令还是数据。数据长度用于指示有效数据的个数。 校验码则用来检验数据的完整性和正确性。通常对数据类型、数据长度和数据块三个部分进行相关的运算得到。最简单的做法可是对数据段作累加和,复杂的也可以对数据进行CR C运算等等,可以根据运算速度、容错度等要求来选取。 2.上位机和下位机中的数据发送 物理通信层中提供了两个基本的操作函数,发送一个字节数据则为数据发送的基础。数据 包的发送即把数据包中的左右字节按照顺序一个一个的发送数据而已。当然发送的方

51单片机实现双机通信(自己整理的)

左边1号机,右边2号机,,功能实现 1号机程序 #include #define uint unsigned int #define uchar unsigned char sbit p10=P1^0; uchar a,b,kk; //uchar code d_c[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; void delay_ms(uchar y) { uchar i; while(y--) for(i=0;i<120;i++) ; } void put(uchar x) //发送函数 { SBUF=x; //SBUF:串行口数据缓冲器 while(TI==0); //等待发送结束 TI=0; } void main() { uchar j; SCON=0x40; //串行口工作方式1,8位通用异步发送器

— TMOD=0x20; //定时器1工作方式2 PCON=0x00; //波特率不倍增 TH1=0xf4; TL1=0xf4; //波特率2400 TR1=1; //定时器1开始计时 P2=0xc0; while(1) { if(p10==0&&j==0) { delay_ms(15); while(p10==0); kk=1; P2=0xf9; j=1; } if(p10==0&&j==1) { delay_ms(15); while(p10==0); kk=2; P2=0xa4; j=2; } if(p10==0&&j==2) { delay_ms(15); while(p10==0); kk=3; P2=0xb0; j=0; } if(kk==1) put('A'); if(kk==2) put('B'); if(kk==3) put('C'); delay_ms(10); } }

北京邮电大学 数字逻辑期末模拟试题8

本科试卷(八) 一、选择题(每小题2分,共30分) 1.逻辑函数F1=∑m (2,3,4,8,9,10,14,15), 它们之间的关系是________。 A . B . C . D .、互为对偶式 2. 最小项的逻辑相邻项是________。 A .ABCD B. C. D. 3. 逻辑函数F (ABC )=A ⊙C 的最小项标准式为________。 A.F=∑(0,3) B. C.F=m 0+m 2+m 5+m 7 D. F=∑(0,1,6,7) 4. 一个四输入端与非门,使其输出为0的输入变量取值组合有_______种。 A. 15 B. 8 C. 7 D. 1 5. 设计一个四位二进制码的奇偶位发生器(假定采用偶检验码),需要_______个异或门。 A .2 B. 3 C. 4 D. 5 6. 八路数据选择器如图1-1所示,该电路实现的逻辑函数是F=______。 A . B . C . D . 图1-1 7. 下列电路中,不属于时序逻辑电路的是_______。 A .计数器 B .触发器 C .寄存器 D .译码器 8. 对于JK 触发器,输入J=0,K=1,CP 脉冲作用后,触发器的次态应为_____。 A .0 B. 1 C. 保持 D. 翻转 9. Moore 型时序电路的输出_____。 A.与当前输入有关 B. 与当前状态有关 C. 与当前输入和状态都有关 D. 与当前输入和状态都无关 2F ABC ABCD ABC ABC ACD =++++12F F =12F F =12F F =1F 2F ABCD ABCD ABCD ABCD C A C A F +=AB AB +AB AB +A B ⊕A B +

状态机思路在单片机程序设计中的应用

状态机思路在单片机程序设计中的应用 状态机的概念 状态机是软件编程中的一个重要概念。比这个概念更重要的是对它的灵活应用。在一个思路清晰而且高效的程序中,必然有状态机的身影浮现。 比如说一个按键命令解析程序,就可以被看做状态机:本来在A状态下,触发一个按键后切换到了B状态;再触发另一个键后切换到C状态,或者返回到A状态。这就是最简单的按键状态机例子。实际的按键解析程序会比这更复杂些,但这不影响我们对状态机的认识。 进一步看,击键动作本身也可以看做一个状态机。一个细小的击键动作包含了:释放、抖动、闭合、抖动和重新释放等状态。 同样,一个串行通信的时序(不管它是遵循何种协议,标准串口也好、I2C也好;也不管它是有线的、还是红外的、无线的)也都可以看做由一系列有限的状态构成。 显示扫描程序也是状态机;通信命令解析程序也是状态机;甚至连继电器的吸合/释放控制、发光管(LED)的亮/灭控制又何尝不是个状态机。 当我们打开思路,把状态机作为一种思想导入到程序中去时,就会找到解决问题的一条有效的捷径。有时候用状态机的思维去思考程序该干什么,比用控制流程的思维去思考,可能会更有效。这样一来状态机便有了更实际的功用。 程序其实就是状态机。 也许你还不理解上面这句话。请想想看,计算机的大厦不就是建立在“0”和“1”两个基本状态的地基之上么? 状态机的要素 状态机可归纳为4个要素,即现态、条件、动作、次态。这样的归纳,主要是出于对状态机的内在因果关系的考虑。“现态”和“条件”是因,“动作”和“次态”是果。详解如下: ①现态:是指当前所处的状态。 ②条件:又称为“事件”。当一个条件被满足,将会触发一个动作,或者执行一次状态的迁移。 ③动作:条件满足后执行的动作。动作执行完毕后,可以迁移到新的状态,也可以仍旧保持原状态。动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态。 ④次态:条件满足后要迁往的新状态。“次态”是相对于“现态”而言的,“次态”一旦被激活,就转变成新的“现态”了。

modbus 协议 及 modbus RTU 的 C51 单片机 程序

modbus 协议及modbus RTU 的C51 单片机程序 Modbus通讯协议 Modbus协议最初由Modicon公司开发出来,在1979年末该公司成为施耐德自动化(Schneider Automation)部门的一部分,现在Modbus已经是工业领域全球最流行的协议。此协议支持传统的RS-232、RS-422、RS-485和以太网设备。许多工业设备,包括PLC,DCS,智能仪表等都在使用Modbus协议作为他们之间的通讯标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。 当在网络上通信时,Modbus协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成应答并使用Modbus协议发送给询问方。 Modbus 协议包括ASCII、RTU、TCP等,并没有规定物理层。此协议定义了控制器能够认识和使用的消息结构,而不管它们是经过何种网络进行通信的。标准的Modicon控制器使用RS232C实现串行的Modbus。Modbus的ASCII、RTU协议规定了消息、数据的结构、命令和就答的方式,数据通讯采用Maser/Slave方式,Master端发出数据请求消息,Slave端接收到正确消息后就可以发送数据到Master端以响应请求;Master端也可以直接发消息修改Slave端的数据,实现双向读写。 Modbus 协议需要对数据进行校验,串行协议中除有奇偶校验外,ASCII模式采用LRC校验,RTU模式采用16位CRC校验,但TCP模式没有额外规定校验,因为TCP协议是一个面向连接的可靠协议。另外,Modbus采用主从方式定时收发数据,在实际使用中如果某Slave 站点断开后(如故障或关机),Master端可以诊断出来,而当故障修复后,网络又可自动接通。因此,Modbus协议的可靠性较好。 下面我来简单的给大家介绍一下,对于Modbus的ASCII、RTU和TCP协议来说,其中TCP 和RTU协议非常类似,我们只要把RTU协议的两个字节的校验码去掉,然后在RTU协议的开始加上5个0和一个6并通过TCP/IP网络协议发送出去即可。所以在这里我仅介绍一下Modbus的ASCII和RTU协议。 下表是ASCII协议和RTU协议进行的比较: 协议 开始标记 结束标记

51串口通信协议(新型篇)

51串口通信协议(新型篇) C51编程:这是网友牛毅编的一个C51串口通讯程序! //PC读MCU指令结构:(中断方式,ASCII码表示) //帧:帧头标志|帧类型|器件地址|启始地址|长度n|效验和|帧尾标志 //值: 'n' 'y'| 'r' | 0x01 | x | x | x |0x13 0x10 //字节数: 2 | 1 | 1 | 1 | 1 | 1 | 2 //求和: ///////////////////////////////////////////////////////////////////// //公司名称:*** //模块名:protocol.c //创建者:牛毅 //修改者: //功能描述:中断方式:本程序为mcu的串口通讯提供(贞结构)函数接口,包括具体协议部分 //其他说明:只提供对A T89c51具体硬件的可靠访问接口 //版本:1.0 //信息:QQ 75011221 ///////////////////////////////////////////////////////////////////// #include #include //预定义 //帧 #define F_ST1 0x6e //帧头标志n #define F_ST2 0x79 //帧头标志y #define F_R 0x72 //帧类型读r #define F_W 0x77 //帧类型写w #define F_D 0x64 //帧类型数据帧d #define F_B 0x62 //帧类型写回应帧b #define F_C 0x63 //帧类型重发命令帧c #define F_Q 0x71 //帧类型放弃帧q #define F_ADDR 0x31 //器件地址0-9 #define F_END 0x7a //帧尾标志z #define F_SPACE 0x30 //空标志0 #define F_ERR1 0x31 //错误标志1,flagerr 1 #define F_ERR2 0x32 //错误标志2 2 //常数 #define S_MAXBUF 16 //接收/发送数据的最大缓存量 #define FIELD_MAXBUF 48 //最小场缓存,可以大于48字节,因为协议是以20字节为

数字逻辑状态机例子

Digital System Design 1 2011/6/21 Computer Faculty of Guangdong University of Technology 例:用三进程状态机实现一个简单自动售货机控制电路,电路框图如下。该电路有两个投币口(1元和5角),商品2元一件,不设找零。In[0]表示投入5角,In[1]表示投入1元,Out 表示是否提供货品。

Digital System Design 2 2011/6/21 Computer Faculty of Guangdong University of Technology 根据题意,可分析出状态机的状态包括: S0(00001):初始状态,未投币或已取商品 S1(00010):投币5角 S2(00100):投币1元 S3(01000):投币1.5元 S4(10000):投币2元或以上 用独热码表示状态编码,如上所示。相应状态转换图如下(按Moore 状态机设计)。

Digital System Design 3 2011/6/21 Computer Faculty of Guangdong University of Technology 自动售货机状态转换图

Digital System Design 4 2011/6/21 Computer Faculty of Guangdong University of Technology 设计代码 第一个Always 块:状态转移。

Digital System Design 5 2011/6/21 Computer Faculty of Guangdong University of Technology 第二个Always 块:状态转移的组合逻辑条件判断

十二.PC 机与单片机通信(RS232 协议)

十二.PC 机与单片机通信(RS232 协议) [实验任务] 单片机串口通信的应用,通过串口,我们的个人电脑和单片机系统进行通信。个人电脑作为上位机,向下位机单片机系统发送十六进制或者ASCLL码,单片机 系统接收后,用LED显示接收到的数据和向上位机发回原样数据。 [硬件电路图] [实验原理] RS-232是美国电子工业协会正式公布的串行总线标准,也是目前最常用的串 行接口标准,用来实现计算机与计算机之间、计算机与外设之间的数据通讯。RS-232串行接口总线适用于:设备之间的通讯距离不大于15m,传输速率最大为 20kBps。RS-232协议以-5V-15V表示逻辑1;以+5V-15V 表示逻辑0。我们是 用MAX232芯片将RS232电平转换为TTL电平的。一个完整的RS-232接口有22 根线,采用标准的25芯插头座。我们在这里使用的是简化的9芯插头座。 注意我们在这里使用的晶振是11.0592M的,而不是12M。因为波特率的设置 需要11.0592M的。 “串口调试助手V2.1.exe”软件的使用很简单,只要将串口选择‘CMO1’波特率设置为‘9600’数据位为8 位。打开串口(如果关闭)。然后在发送区里输入要发送的数据,单击手动发送就将数据发送出去了。注意,如果选中‘十六进制发送’那么发送的数据是十六进制的,必须输入两位数据。如果没有选中, 数字二进制Px0~Px7 Abcdefg p 十六进制 0 00111111 00000011 11111100 0xco 1 00000110 10011111 01100000 0xf9

[C语言源程序] #include "reg52.h" //包函8051 内部资源的定义 unsigned char dat; //用于存储单片机接收发送缓冲寄存器SBUF里面的内容 sbit gewei=P2^6; //个位选通定义 sbit shiwei=P2^5; //十位选通定义 sbit baiwei=P2^4; unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1, 0x86,0x8e,0x40,}; void Delay(unsigned int tc) //延时程序 { while( tc != 0 ) {unsigned int i; for(i=0; i<100; i++); tc--;} } void LED() //LED显示接收到的数据(十进制) { shiwei=0; P0=table[dat/10]; Delay(10); shiwei=1; gewei=0; P0=table[dat%10]; Delay(10); gewei=1; baiwei=0; P0=table[dat/100]; Delay(10); baiwei=1; } ///////功能:串口初始化,波特率9600,方式1///////// void Init_Com(void) { TMOD = 0x20; PCON = 0x00; SCON = 0x50; TH1 = 0xFd;

数字逻辑实验 8_序列检测器

实验八序列检测器的设计与仿真 一、实验要求 1.用VHDL语言设计一个Mealy机以检测“1101001”序列; 2.用VHDL语言设计一个Moore机以检测“1101001”序列; 3.在文本编辑区使用VHDL硬件描述语言设计逻辑电路,再利用波形编辑区进行逻辑功 能仿真,以此验证电路的逻辑功能是否正确。 二、实验内容 用VHDL语言设计各一个mealy和moore状态机测试“1101001”位串的序列检测器,并通过仿真波形验证设计的功能是否正确。 三、实验过程 由于在报告1中已经详尽描述了如何使用Quartus 2建立逻辑原理图和使用VHDL语言实现元件功能,所以本次的实验报告中便不再赘述上述内容,报告将主要就VHDL 语言描述实现元件的功能的过程进行阐述。 1.Mealy机 选择File→New,弹出新建文本对话框,在该对话框中选择VHDL File并单击OK按钮,进入文本编辑窗口,输入VHDL代码。 library ieee; use ieee.std_logic_1164.all; entity melay is port(clk,rst,d: in std_logic; z: out std_logic); end melay; architecture arc of melay is type state_type is(s0,s1,s2,s3,s4,s5,s6); signal state: state_type; begin process(clk,rst) begin if rst= '1' then state<=s0; elsif (clk'event and clk ='1') then case state is --1101001 when s0 => if d='1' then state<=s1; else

通用单片机通讯协议ascii

组态王与单片机协议 1.通讯口设置: 通讯方式:RS-232,RS-485,RS-422均可。 波特率:由单片机决定(2400,4800,9600and19200bps)。 字节数据格式:由单片机决定。 注意:在组态王中设置的通讯参数如波特率,数据位,停止位,奇偶校验必须与单片机编程中的通讯参数一致 2.在组态王中定义设备地址的格式 格式:##.# 前面的两个字符是设备地址,范围为0-255,此地址为单片机的地址,由单片机中的程序决定; 后面的一个字符是用户设定是否打包,“0”为不打包、“1”为打包,用户一旦在定义设备时确定了打包,组态王将处理读下位机变量时数据打包的工作。 3.在组态王中定义的寄存器格式 注意:在组态王中定义变量时,一个X寄存器根据所选数据类型(BYTE,UINT,FLOAT)的不同分别占用一个、两个,四个字节,定义不同的数据类型要注意寄存器后面的地址,同一数据区内不可交叉定义不同数据类型的变量。为提高通讯速度建议用户使用连续的数据区。 例如, 1、在单片机中定义从地址0开始的数据类型为BYTE型的变量: 则在组态王中定义相应的变量的寄存器为X0、X1、X2、X3、X4。。。。。。。。,数据类型为BYTE,每个变量占一个字节 2、在单片机中定义从地址100开始的数据类型为UINT型的变量: 则在组态王中定义相应的变量的寄存器为X100、X102、X104、X106、X108。。。。。。。。,数据类型UINT,每个变量占两个字节

3、在单片机中定义从地址200开始的数据类型为FLOAT 型的变量: 则在组态王中定义相应的变量的寄存器为X200、X20 4、X208、X212。。。。。。。, 数据类型FLOAT ,每个变量占四个字节 3.组态王与单片机通讯的命令格式: 字头:1字节1个ASCII 码,40H 设备地址: 1字节2个ASCII 码,0—255(即0---0x0ffH ) 标志:1字节2个ASCII 码,bit0~bit7, bit0= 0:读,bit0= 1:写。 bit1= 0:不打包。 bit3bit2 = 00,数据类型为字节。 bit3bit2 = 01,数据类型为字。 bit3bit2 = 1x,数据类型为浮点数。 数据地址: 2字节4个ASCII 码,0x0000~0xffff 数据字节数:1字节2个ASCII 码,1—100,实际读写的数据的字节数。 数据…:为实际的数据转换为ASCII 码,个数为字节数乘2。 异或:异或从设备地址到异或字节前,异或值转换成2个ASCII 码 CR :0x0d 。 通讯尝试恢复命令(COMERROR ),请求地址为0的一个BYTE 数据 3.1.上位机发送读命令 下位机应答:若正常: 若不正常: 100,数据类型为字节,不打包。组态王所 若正确:

数字逻辑第7篇习题

画出图7-5中所示的S-R锁存器的输出波形,其输入波形如图X7-4所示。假设输入和输出信号的上升和下降时间为0,或非门的传播延迟是10ns(图中每个时间分段是10ns) 解: 用图X7-5中的输入波形重作练习题7-2。结果可能难以置信,但是这个特性在转移时间比传输时间延迟短的真实器件中确实会发生。 解: 将图X7-41中的电路与图7-12中的锁存器进行比较。请证明这两个电路的功能是一致的。图X7-41中的电路常用于某些商用D锁存器中,在什么条件下该电路性能更好? 解:当C=0时,输入端2个与非门都关断,功能相同。 当C=1时,输入端2个与非门等同于反相器,功能也相同。 从传输延迟和电路代价比较:图X7-41的优点为节省一个反相器,电路代价较小,电路建立时间少一个反相器延迟,所需建立时间较短。缺点为下端输入的传输延迟较长(与非门比反相器长)。

图7-34表示出了怎样用D触发器和组合逻辑来构造带有使能端的T触发器。请表示出如何用带有使能端的T触发器和组合逻辑来构造D触发器。 解:先写出对应的特性表,再建立相应组合逻辑的卡诺图,最后写出激励组合逻辑的最小和表达: + T? ? = D ' D 'Q Q 请示出如何使用带有使能端的T触发器和组合逻辑来构造J-K触发器。 解:先写出对应的特性表,再建立相应组合逻辑的卡诺图,最后写出激励组合逻辑的最小和表达: ? =' T? + Q K Q J 分析图X7-9中的时钟同步状态机。写出激励方程,激励/转移表,以及状态/输出表(状态Q1Q2=00~11使用状态名A~D)。 解:激励方程D1=Q1’+Q2 D2=XQ2’ 输出方程Z=Q1+Q2’ 激励/转移表:现态和输入为变量,激励为函数,根据D触发器特性方程,激励/转移表可表达:

51单片机多任务的原理及其实现

51单片机多任务操作系统的原理与实现 51单片机多任务操作系统的原理与实现 -- 一个超轻量级的操作系统 前言 想了很久,要不要写这篇文章?最后觉得对操作系统感兴趣的人还是很多,写吧. 我不一定能造出玉,但我可以抛出砖. 包括我在内的很多人都对51使用操作系统呈悲观态度,因为51的片上资源太少.但对于很多要求不高的系统来说,使用操作系统可以使代码变得更直观,易于维护,所以在51上仍有操作系统的生存机会. 流行的uCos,Tiny51等,其实都不适合在2051这样的片子上用,占资源较多,唯有自已动手,以不变应万变,才能让51也有操作系统可用.这篇贴子的目的,是教会大家如何现场写一个OS,而不是给大家提供一个OS版本.提供的所有代码,也都 是示例代码,所以不要因为它没什么功能就说LAJI之类的话.如果把功能写全了,一来估计你也不想看了,二来也失去灵活性没有价值了. 下面的贴一个示例出来,可以清楚的看到,OS本身只有不到10行源代码,编译后 的目标代码60字节,任务切换消耗为20个机器周期.相比之下,KEIL内嵌的 TINY51目标代码为800字节,切换消耗100~700周期.唯一不足之处是,每个任务要占用掉十几字节的堆栈,所以任务数不能太多,用在128B内存的51里有点难度,但对于52来说问题不大.这套代码在36M主频的STC12C4052上实测,切换任务仅需2uS. #include #define MAX_TASKS 2 //任务槽个数.必须和实际任务数一至 #define MAX_TASK_DEP 12 //最大栈深.最低不得少于2个,保守值为12. unsigned char idata task_stack[MAX_TASKS][MAX_TASK_DEP]; //任务堆栈. unsigned char task_id; //当前活动任务号 //任务切换函数(任务调度器) void task_switch(){ task_sp[task_id] = SP; if(++task_id == MAX_TASKS) task_id = 0; SP = task_sp[task_id]; } //任务装入函数.将指定的函数(参数1)装入指定(参数2)的任务槽中.如果该槽中原来就有任务,则原任务丢失,但系统本身不会发生错误. void task_load(unsigned int fn, unsigned char tid) {

(合同制定方法)单片机与上位机通信协议的制定

(合同制定方法)单片机与上位机通信协议的制定

单片机和上位机通信协议的制定 单片机和上位机的串口通信协议分为上行协议和下行协议,要分别制定!上行协议,即由单片机向上位机发送数据。 下行协议,即由上位机向单片机发送数据。 而通信协议又要分固定长度和不定长度俩种 本文所介绍的协议属于简单的固定字长的通信协议! 下行协议由四个字节构成

上表是简单的上位机对单片机的控制指令 下述函数是C#中封装的串口通信类中的发送函数的封装publicvoidSerSendCommu(byteorderDef,bytedata)//参数1为命令字,参数二为要发送的数 //据,需要时可直接调用 { Byte[]BSendTemp=newByte[SEND_LENTH]; BSendTemp[0]=PRE; BSendTemp[1]=orderDef; BSendTemp[2]=data; BSendTemp[3]=END; this.serialPort1.Write(BSendTemp,0,SEND_LENTH); } 下位机中用中断方式接收字符,本文用的是GCC语言,下面是串口接收数据中断 ISR(USART_RXC_vect)//串口接收中断

{ unsignedcharstatus,data; status=UCSRA;//**首先读取UCSRA的值,再读取UDR值,顺序不能颠倒,否则读取UDR后的UCSRA的 //值即会改变** data=UDR; if(!Uart_RecvFlag)//判断缓存中的数据是否读完,读完则接收指令 { if((status&((1<

基于普通单片机的LIN协议实现方案

1 概述 LIN协议是新出现的一种新型低成本串行通信总线,其全称是Local Interconnect Network,即局部互联网络。它最开始出现于汽车行业,是为解决汽车智能化和网络化的发展要求和降低汽车制造成本的 矛盾而提出来的一种串行总线协议,主要用于车门、车灯等需要简单 控制但又要求智能控制的场合。它的主要特点是:采用单个主控制器 /多从设备通信模式;基于普通UART/SCI接口硬件实现,协议简单;网络传输速率不高,最高可达20kb/s。由于LIN协议的突出特点是协议对硬件的依赖程度低,可以基于普通单片机的通用串口等硬件资源 以软件方式实现,成本低廉,因此可广泛应用于汽车行业以外的其他 领域,如智能家庭网络内部的数据传输、节点控制等场合。 本文依据对LIN协议的分析,对其协议在普通单片机上的具体实现,即如何利用单片机有限的硬件资源实现LIN的主节点、从节点, 进行可行性方案的研究、探讨。 2 LIN协议的简介 LIN协议的最新版本是LIN Specification Package Revision 2.O,包 括协议规范、节点诊断配置规范、物理层规范、API规范等几个方面,从硬件配置到节点配置语言都作了详细的规定。下面就其协议规范作 一简要介绍和分析。 LIN的数据传输是采用报文帧的形式进行的。一个完整的报文帧 由1个主机节点发送的报文头(header)和1个主机或从机节点发送的响 应(response)组成,如图1所示。报文头包括1个间隔场(break)、1个同步字节场(synch)和1个保护标识符字节场PID(Protected IDentifier)。间 隔场是由持续了至少13个位时的显性电平和至少1个位时的隐性电平 组成;由主机节点产生,标志着一次数据通信过程报文帧的开始。同 步字节场包含时钟同步信息。同步字节场的格式是0x55,表现在8个 位定时中有5个下降沿,即隐性跳变到显性的边沿。

关于51单片机上实现modbus协议

关于51单片机上实现modbus协议 你找一个MODBUS的协议详细资料好好看看,就是一种通讯约定,你按照它规定的格式通讯就可以了 协议发送给询问方。Modbus协议包括ASCII、RTU、TCP等,并没有规定物理层。此协议定义了控制器能够认识和使用的消息结构,而不管它们是经过何种网络进行通信的。标准的Modicon控制器使用RS232C实现串行的Modbus。 Modbus的ASCII、RTU协议规定了消息、数据的结构、命令和就答的方式,数据通讯采用Maser/Slave方式,Master端发出数据请求消息,Slave端接收到正确消息后就可以发送数据到Master端以响应请求;Master端也可以直接发消息修改Slave端的数据,实现双向读写。Modbus协议需要对数据进行校验,串行协议中除有奇偶校验外,ASCII模式采用LRC 校验,RTU模式采用16位CRC校验,但TCP模式没有额外规定校验,因为TCP协议是一个面向连接的可靠协议。另外,Modbus采用主从方式定时收发数据,在实际使用中如果某Slave站点断开后(如故障或关机),Master端可以诊断出来,而当故障修复后,网络又可自动接通。因此,Modbus协议的可靠性较好。下面我来简单的给大家介绍一下,对于Modbus的ASCII、RTU和TCP协议来说,其中TCP和RTU协议非常类似,我们只要把RTU协议的两个字节的校验码去掉,然后在RTU协议的开始加上5个0和一个6并通过TCP/IP网络协议发送出去即可。所以在这里我仅介绍一下Modbus的ASCII和RTU协议。下表是ASCII协议和RTU协议进行的比较:协议开始标记结束标记校验传输效率程序处理 ASCII :(冒号)CR,LF LRC 低直观,简单,易调试 RTU 无无CRC 高不直观,稍复杂 通过比较可以看到,ASCII协议和RTU协议相比拥有开始和结束标记,因此在进行程序处理时能更加方便,而且由于传输的都是可见的ASCII字符,所以进行调试时就更加的直观,另外它的LRC校验也比较容易。但是因为它传输的都是可见的ASCII字符,RTU传输的数据每一个字节ASCII都要用两个字节来传输,比如RTU传输一个十六进制数0xF9,ASCII 就需要传输’F’’9’的ASCII码0x39和0x46两个字节,这样它的传输的效率就比较低。所以一般来说,如果所需要传输的数据量较小可以考虑使用ASCII协议,如果所需传输的数据量比较大,最好能使用RTU协议。 下面对两种协议的校验进行一下介绍。 1、LRC校验 LRC域是一个包含一个8位二进制值的字节。LRC值由传输设备来计算并放到消息帧中,接收设备在接收消息的过程中计算LRC,并将它和接收到消息中LRC域中的值比较,如果两值不等,说明有错误。

状态机讲义

Digital System Design 大部分数字系统都可以划分为控制单元和数据单元(存储单元)两个组成部分,通常,控制单元的主体是一个状态机,它接收外部信号以及数据单元产生的状态信息,产生控制信号序列。 1 2011/6/21Computer Faculty of Guangdong University of Technology

Digital System Design 有限状态机特别适合描述那些发生有先后顺序或者有逻辑规律的事情(其实这就是状态机的本质)。状态机的本质就是对具有逻辑顺序或时序规律事件的一种描述方法,即“逻辑顺序”和“时序规律”就是状态机所要描述的核心和强项,换言之,所有具有逻辑顺序和时序规律的事情都适合用状态机来描述。 2 2011/6/21Computer Faculty of Guangdong University of Technology

Digital System Design 1、基本概念 有限状态机(Finite State Machine,FSM)是表示实现有限个离散状态及其状态之间的转移等行为动作的数学模型。(关注Matlab的Stateflow) (1)状态:也叫状态变量。在逻辑设计中,使用状态划分逻辑顺序和时序规律。 状态名称、状态编码、进入/退出操作、内部转移、子状态、延迟事件 3 2011/6/21Computer Faculty of Guangdong University of Technology

Digital System Design (2)转移:指两个状态之间的关系,表示当发生指定事件且满足指定条件时,第一个状态中的对象将执行某些操作并进入第二个状态,即“触发”了转移。将触发转移之前的状态定义为“源”状态(初始状态),而触发转移之后的状态定义为“目标”状态(次态)。 初始状态、转移条件、警戒条件、转移操作、目标状态 4 2011/6/21Computer Faculty of Guangdong University of Technology

相关主题
文本预览
相关文档 最新文档