一起来学单片机8.docx
《一起来学单片机8.docx》由会员分享,可在线阅读,更多相关《一起来学单片机8.docx(25页珍藏版)》请在冰点文库上搜索。
一起来学单片机8
实验二十二RS485通讯实验
一、实验目的
了解在一个RS-232通信实验的基础上。
利用单片机的TXD,RXD口,学习RS-485差分串行接口的使用。
二、实验说明
RS-485接口具有较强的抗干扰性,数据传输的距离较远,在一些应用中常常需要把RS-232标准的信号转换为RS-485的标准信号进传输。
传输速度为4800波特时,传输距离可达1750米。
图中双RS-232收发器IC1将主机(PC)输出的RS-232电平转换为TTL电平,驱动高速RS-485收发器IC2的输入,倒相器使IC2、IC3在受到起始位时被激活。
开始工作时,主机发送数据给相应的远端单元(从机),数据格式以零电平为起始位,起始位后跟随一个字节的地址和一个字节的数据,激活相应的从机。
被激活的从机应答两个字节的数据,然后置于接收模式,等待下一序列。
因为只有主机对发送器作初始化,从机只在被激活后应答,所以传输线上不可能出现数据冲突。
当从机处于接收模式(RE=DE=0),Va-Vb>200mV时,输出Ro=1。
发送器通常为关闭状态,只有当接收到一个零起始位后处于发送模式。
主机必须与从机采用同一地为参考点,为保证静态条件下Va-Vb>200mV,避免在RS-485芯片上附加额外的上拉电阻和下拉电阻,MAX3082提供了一个失效保护功能,可保证在-50mV至+200mV较窄的门限范围内输出Ro=1。
三、实验电路图
本实验需要用到80C51MCU模块(E区),RS232/485模块(B9区)和静态数码显示模块(A4区)。
静态数码显示电路原理参考实验十图10,RS485接口电路原理参考图22。
图22RS485接口电路
四、实验步骤
1.用二号导线分别连接甲机(发送机)、乙机(接收机)80C51MCU模块的RXD、TXD、INT0到RS232/485模块的RXD、TXD、R/D485;用九针平行串口线(两头孔)连接两个实验箱COM1A1。
将RS232/485模块的JT1A1、JT2A1的短路帽分别打到2、3端。
2.用二号导线分别连接乙机(接收机)的80C51MCU模块的P1.0、P1.1到乙机(接收机)静态显示模块的DIN、CLK。
3.将89S52芯片分别插到甲机(发送机)、乙机(接收机)的80C51MCU模块的40P锁紧插座中,请注意芯片的方向:
缺口朝上。
4.将80C51MCU模块的电源钮子开关S1C拨到上端,将RS232/485模块的电源短路帽J1A1打到上端,将静态数码显示模块的电源短路帽J1A6打到上端,将直流稳压电源模块的直流控制开关S1G1打到ON,本实验所用到的相关模块的电源指示灯VCC亮。
5.用ISP下载线将“TH22_485Send.HEX”可执行文件下载到甲机(发送机)的89S52芯片中,将“TH22_485Receive.HEX”可执行文件下载到乙机(接收机)的89S52芯片中。
6.实验现象:
乙机(接收机)串行静态显示模块连续显示0-255数字。
五、实验源程序
1.发送程序
R_W485BITP3.2
ORG00H
LJMPSTART
ORG0100H
START:
MOVSP,#60H
MOVSCON,#01010000B;设定串行方式1:
8位异步,允许接收
MOVTMOD,#20H;设定计数器1为模式2
ORLPCON,#10000000B;波特率加倍
MOVTH1,#0F4H;设定波特率为4800
MOVTL1,#0F4H
SETBTR1;计数器1开始计时
SEND:
SETBR_W485;发送控制
MOVA,#1
AGAIN:
MOVSBUF,A;送发送数据
JNBTI,$;等待发送完成
CLRTI;清发送标志
ACALLDelay500mS
INCA
SJMPAGAIN
Delay500mS:
MOVR5,#5
DLoop1:
MOVR6,#0FFH
DLoop2:
MOVR7,#0FFH
DJNZR7,$
DJNZR6,DLoop2
DJNZR5,DLoop1
RET
END
2.接收程序
DBUFEQU30H
TEMPEQU40H
DINBITP1.0
CLKBITP1.1
R_W485BITP3.2
ORG00H
JMPSTART
ORG0100H
START:
MOVSP,#60H
MOVSCON,#01010000B;设定串行方式1:
8位异步,允许接收
MOVTMOD,#20H;设定计数器1为模式2
ORLPCON,#10000000B;波特率加倍
MOVTH1,#0F4H;设定波特率为4800
MOVTL1,#0F4H
SETBTR1;计数器1开始计时
MOVDBuf+3,#11H;高位无显示
MOVDBuf+4,#11H
RECEIVE:
CLRR_W485;发送控制
AGAIN:
JNBRI,$;等待接收
CLRRI;清接收标志
MOVA,SBUF;接收数据缓冲
MOVB,#100
DIVAB
MOV35H,A
MOVA,B
MOVB,#10
DIVAB
MOV36H,A
MOVA,B
MOV37H,A
MOV30H,#11H
MOV31H,#11H
MOV32H,#11H
MOV33H,#11H
MOV34H,#11H
ACALLDisplay
SJMPAGAIN
Display:
MOVR0,#DBUF
MOVR1,#TEMP
MOVR2,#8
DP10:
MOVDPTR,#SEGTAB
MOVA,@R0
MOVCA,@A+DPTR
MOV@R1,A
INCR0
INCR1
DJNZR2,DP10
MOVR0,#TEMP
MOVR1,#8
DP12:
MOVR2,#8
MOVA,@R0
DP13:
RLCA
MOVDIN,C
CLRCLK
SETBCLK
DJNZR2,DP13
INCR0
DJNZR1,DP12
RET
SEGTAB:
DB3FH,6H,5BH,4FH,66H,6DH;0,1,2,3,4,5
DB7DH,7H,7FH,6FH,77H,7CH;6,7,8,9,A,B
DB58H,5EH,79H,71H,0H,00H;C,D,E,F,-
END
实验二十三硬件看门狗实验
一、实验目的
1.掌握“看门狗”(MAX813L)复位控制的硬件接口技术
2.掌握“看门狗”(MAX813L)复位控制驱动程序的设计方法
二、实验说明
为了控制系统不受外界干扰而出现死机现象,可采用MAX813L复位监控芯片,该芯片具备复位及监视跟踪两大功能。
主要功能如下:
·精密电源电压、监控4.65V·200ms复位脉冲宽度·V1=1V时保证复位RESET有效。
·TTL/CMOS兼容的防抖动人工复位输入·独立的监视跟踪定时器1.6S溢出时间。
·电源故障或欠电压报警的电压监控
·加电,掉电有电压降低时输出复位信号。
·低电平有效的人工复位输入。
各引脚的功能和意义如图:
(1)MR:
人工复位输入、当输入降至0.8V时产生复位脉冲,低电平有效的输入可用开关短路到地或TTL/CMOS逻辑驱动,不用时浮空。
(2)VCC:
+5V输入。
(3)GND:
地。
(4)PFI:
电源故障比较器输入,高PFI低于1.25V时PFO输出低电平吸收电流;否则PFO输出保持高电平,如果不用将PFI接地或VCC。
(5)PFO:
电源故障比较器输出,高PFI低于1.25V时,输出低电平且吸收电流;否则PFO输出保持高电平。
(6)WDI:
监视跟踪定时器输入,WDI保持高或低电平时间长达1.6S,WDI输出低电平,WDI浮空或接高阻三态门将禁止监控跟踪定时器功能,只要发生复位,内部监视跟踪定时的清零。
(7)RESET:
复位输出(低电平有效)。
(8)WDO:
监视跟踪定时器输出,当内部监视跟踪定时器完成1.6S计数后,本脚输出低电平,直到下一次监视跟踪定时器清零,才再变为高电平,在低电源或VCC低于复位门限电压时,WDO就保持低电平,只要VCC上升到复位门跟电压以上后WDO就变为高电平而没有滞后。
三、实验电路图
本实验需要用到80C51MCU模块(E区),硬件看门狗模块(C7区),八位逻辑电平显示模块(D4区)。
八位逻辑电平显示电路原理参考实验一图1.1,硬件看门狗接口电路原理参考图22.
图22硬件看门狗接口电路原理
四、实验步骤
1.用二号导线连接80C51MCU模块的P1.0到硬件看门狗模块的WDI,连接硬件看门狗模块的RST到八位逻辑电平显示模块的L0。
2.用USB数据线连接计算机与实验箱的仿真接口。
3.将80C51MCU模块的电源钮子开关S2拨到上端,将硬件看门狗接口模块的电源短路帽JPC7打在上端。
将直流稳压电源模块的直流控制开关S1打到ON,本实验所用到的相关模块的电源指示灯VCC亮。
4.打开KeiluVision2仿真软件,首先建立本实验的项目文件,接着添加“TH23_看门狗.ASM”源程序,进行编译,编译无误后,全速运行程序。
5.实验现象:
程序未运行前发光二极管闪烁,程序运行后发光二极管不闪烁。
6.也可以把源程序编译成可执行文件,把可执行文件下载到89S52芯片中运行(注意:
芯片缺口朝上)。
五、实验源程序
ORG0000H
START:
CALLWDOG
CALLDELAY
LJMPSTART
WDOG:
SETBP1.0;复位看门狗
NOP
NOP
NOP
NOP
CLRP1.0
RET
DELAY:
MOVR4,#00H
AA:
MOVR5,#0FH
AA1:
MOVR6,#0FH
AA2:
NOP
DJNZR6,AA2
DJNZR5,AA1
DJNZR4,AA
RET
END
六、思考题
试在任何具体的应用程序中插入”看门狗”的应用。
实验二十四I2C总线实验
一、实验目的
1.了解I2C总线的标准及使用
2.掌握用I2C总线方式读写串行EEPROM24C02的方法
3.熟悉24C02的芯片的功能
二、实验说明
1.串行EEPROM(24C02)接口方法
在新一代单片机中,无论总线型还是非总线型单片机,为了简化系统结构,提高系统的可靠性,都推出了芯片间的串行数据传输技术,设置了芯片间的串行传输接口或串行总线。
串行总线扩展接线灵活,极易形成用户的模块化结构,同时将大大简化其系统结构。
串行器件不仅占用很少的资源和I/O线,而且体积大大缩小,同时还具有工作电压宽,抗干扰能力强,功耗低,资料不宜丢失和支持在线编程等特点。
目前,各式各样的串行接口器件层出不穷,如:
串行EEPROM,串行ADC/DAC,串行时钟芯片,串行数字电位器,串行微处理器监控芯片,串行温度传感器等等。
串行EEPROM是在各种串行器件应用中使用较频繁的器件,和并行EEPROM相比,串行EEPROM的资料传送的速度较低,但是其体积较小,容量小,所含的引脚也较少。
所以,它特别适合于需要存放非挥发资料,要求速度不高,引脚少的单片机的应用。
2.串行EEPROM及其工作原理
串行EEPROM中,较为典型的有ATMEL公司的AT24CXX系列以及该公司生产的AT93CXX系列,较为著名的半导体厂家,包括MicrocHip,国家半导体厂家等,都有AT93CXX系列EEPROM产品。
AT24CXX系列的串行电可改写及可编程只读存储器EEPROM有10种型号,其中典型的型号有AT24C01A/02/04/08/16等5种,它们的存储容量分别是1024/2048/4096/8192/16384位,也就是128/256/512/1024/2048字节。
这个系列一般用于低电压,低功耗的工业和商业用途,并且可以组成优化的系统。
信息存取采用2线串行接口。
这里我们就24C02的结构特点,其它系列比较类似。
3.结构原理及引脚
AT24C02有地址线A0~A2,串行时钟引脚SDA,串行时钟输入引脚SCL,写保护引脚WP等引脚。
很明显,其引脚较少,对组成的应用系统可以减少布线,提高可靠性。
各引脚的功能和意义如下:
①VCC引脚,电源+5V。
②GND引脚,地线。
③SCL引脚,串行时钟输入端。
在时钟的正跳沿即上升沿时把时钟写入EEPROM;在时钟的负跳沿即下降沿时把数据从EEPROM中读出来。
④SDA引脚,串行数据I/O端,用于输入和输出串行数据。
这个引脚是漏极开路的埠,故可以组成“线或”结构。
⑤A0,A1,A2引脚,是芯片地址引脚。
在型号不同时意义有些不同,但都要接固定电平。
⑥WP引脚,写保护端。
这个端提供了硬件数据保护。
当把WP接地时,允许芯片执行一般读写操作;当把WP接VCC时,则对芯片实施写保护。
4.内存的组织及运行
内存的组织:
对于不同的型号,内存的组织不一样,其关键原因在于内存容量存在差异。
对于AT24CXX系列的EEPROM,其典型型号的内存组织如下。
AT24C01A:
内部含有128个字节,故需要7位地址对其内部字节进行寻址
AT24C02:
内部含有256个字节,故需要8位地址对其内部字节进行读写。
5.运行方式
起始状态:
当SCL为高电平时,SDA由高电平变到低电平则处于起始状态。
起始状态应处于任何其它命令之前。
停止状态:
当SCL处于高电平时,SDA从低电平变到高电平则处于停止状态。
在执行完读序列信号之后,停止命令将把EEPROM置于低功耗的备用方式(StanDByMode).
应答信号:
应答信号是由接受资料的器件发出的。
当EEPROM接受完一个写入资料之后,会在SDA上发一个”0”应答信号。
反之,当单片机接受完来自EEPROM的资料后,单片机也应向SDA发ACK信号。
ACK信号在第9个时钟周期时出现。
备用方式(StanDByMode):
AT24C01A/02/04/08/16都具有备用方式,以保证在没有读写操作时芯片处于低功耗状态。
在下面两种情况中,EEPROM都会进入备用方式:
第一,芯片通电的时候;第二,在接到停止位和完成了任何内部操作之后。
AT24C01等5种典型的EEPROM在进入起始状态之后,需要一个8位的“器件地址字”去启动内存进行读或写操作。
在写操作中,它们有“字节写”,“页面写”两种不同的写入方法。
在读操作中,有“现行地址读”,随机读和“顺序读”种各具特点的读出方法。
下面分别介绍器件寻址,写操作和读操作。
①器件寻址:
所谓器件寻址(DeviceAddressing)就是用一个8位的器件地址字(DeviceAddressWord)去选择内存芯片。
在逻辑电路中的AT24CXX系列的5种芯片种,即AT24C01A/02/04/08/16中,如果和器件地址字相比较结果一致,则读芯片被选中。
下面对器件寻址的过程和意义加以说明。
②芯片的操作地址
D7
D6
D5
D4
D3
D2
D1
D0
1
0
1
0
A2
A1
A0
R/W
用于内存EEPROM芯片寻址的器件地址字如图所示。
它有4种方式,分别对应于1K/2K,4K,8K和16K位的EEPROM芯片。
从图中看出:
器件地址字含有3个部分。
第一部分是高4位,它们称为EEPROMAT24C01A/02/04/08/16的标识第二部分称为硬布线地址,它们是标识后的3位。
第三部分是最低位,它是读/写操作选择位。
第一部分:
器件标识,器件地址字的最高4位。
这4位的内容恒为”1010”,用于标识EEPROM器件AT24C01A/02/04/08/16。
第二部分:
硬布线地址,是与器件地址字的最高4位相接的低3位。
硬布线地址的3位有2种符号:
Ai(i=0~2),Pj(j=0~2)其中Ai表示外部硬布线地址位。
对于AT24C10A/02这两种1K/2K位的EEPROM芯片,硬布线地址为“A2,A1,A0”。
在应用时,“A2,A1,A0”的内容必须和EEPROM芯片的A2,A1,A0的硬布线情况,即逻辑连接情况相比较,如果一样,则芯片被选中;否则,不选中。
AT24C01/02:
真正地址=字地址。
第三部分:
读/写选择位,器件地址字的最低位,并用R/W表示。
当R/W=1时,执行读操作;当R/W=0时,执行写操作。
当EEPROM芯片被选中时,则输出“0”;如果EEPROM芯片没有被选中,则它回到备用方式。
被选中的芯片。
其以后的输入,输出情况视写入和读出的内容而定。
③写操作:
AT24C01A/02/04/08/16这5种EEPROM芯片的写操作有2种:
一种是字节写,另一种是页面写。
字节写:
这种写方式只执行1个字节的写入。
字节写的过程如图所示,其写入过程分外部写和内部写两部分,分别说明如下。
在起始状态中,首先写入8位的器件地址。
则EEPROM芯片会产生一个“0”信号ACK输出作为应答;接着,写入8位的字地址,在接受了字地址之后,EEPROM芯片又产生一个“0”应答信号ACK;随后,写入8位资料,在接受了资料之后,芯片又产生一个“0”信号ACK作为应答。
到此为止,完成了一个字节写过程,故应在SDA端产生一个停止状态,这是外部写过程。
在这个过程中,控制EEPROM的单片机应在EEPROM的SCL,SDA端送入恰当的信号。
当然在一个字节写过程结束时,单片机应以停止状态结束写过程。
在这时,EEPROM进入内部定时的写周期,以便把接受的数据写入到存储单元中。
在EEPROM的内部写周期中,其所有输入被屏蔽,同时不响应外部信号直到写周期完成。
这是内部写过程。
内部写过程大约需要10ms时间。
内部写过程处于停止状态与下一次起始状态之间。
页面写:
这种写入方式执行含若干字节的1个页面的写入。
对于AT24C01A/02,它们的1个页面含8个字节;页面写的开头部分和字节写一样。
在起始状态,首先写入8位器件地址;待EEPROM答当了“0”信号ACK之后,写入8位字地址;又待芯片应答了“0”信号ACK之后,写入8位资料。
随后页面写的过程则和字节写有区别。
当芯片接受了第一个8位资料并产生应答信号ACK之后,单片机可以连续向EEPROM芯片发送共为1页面的资料。
对于AT24C01A/02,可发送共1个页面的8个字节(连第一个8位资料在内)。
对于AT24C04/08/16,则共可发送1个页面共16个字节(连第一个8位资料在内)。
当然,每发一个字节都要等待芯片的应答信号ACK。
之所以可以连续向芯片发送1个页面资料,是因为字地址的低3~4位在EEPROM芯片内部可实现加1,字地址的高位不变,用于保持页面的行地址。
页面写和字节写两者一样可,都分为外部写和内部写过程。
应答查询:
应答查询是单片机对EEPROM各种状态的一种检测。
单片机查询到EEPROM有应答“0”信号ACK输出,则说明其内部定时写的周期结束,可以写入新的内容。
单片机是通过发送起始状态及器件地址进行应答查询的。
由于器件地址可以选择芯片,则检测芯片送出到SDA的状态就可以知道其是否有应答了。
④读操作:
读操作的启动是和写操作类同的。
它一样需要图所示的器件地址字。
和写操纵不同的就是信号为时执行读操作。
读操纵有3种方式,即现行地址读,随机读和顺序读。
下面分别说明它们的工作过程。
现行地址读:
在上次读或写操纵完成之后。
芯片内部字地址计数器会加1,产生现行地址。
只要没有再执行读或写操作,这个现行地址就会在EEPROM芯片保持接电的期间一直保存。
一旦器件地址选中EEPROM芯片,并且有R/W=1,则在芯片的应答信号ACK之后把读出的现行地址的资料送出。
现行地址的资料输出时,就由单片机一位一位接受,接收后单片机不用向EEPROM发应答信号ACK“0”电平,但应保证发出停止状态的信号以结束现行地址读操作。
现行地址读会产生地址循环覆盖现象,但和写操纵的循环覆盖不同。
在写操纵中,地址的循环覆盖是现行页面的最后一个字节写入之后,再行写入则覆盖同一页面的第一个字节。
而在现行地址读操纵中,地址的循环覆盖是在最后页面的最后一个字节读出之后,再行读出才覆盖第一个页面的第一个字节。
随机读:
随机读和现行地址读的最大区别在于随机读会执行一个伪写入过程以把字地址装入EEPROM芯片中,然后执行读出,显然,随机读有2个步骤。
第一,执行伪写入——把字地址送入EEPROM,以选择需读的字节。
第二,执行读出——根据字地址读出对应内容。
当EEPROM芯片接收了器件地址及字地址时,在芯片产生应答信号ACK之后,单片机必须再产生一个起始状态,执行现行地址读,这时单片机再发出器件地址并且令R/W=1,则EEPROM应答器件地址并行输出被读数据。
在资料读出时由单片机执行一位一位接收,接收完毕后,单片机不用发“0”应答信号ACK,但必须产生停止状态以结束随机读过程。
应该注意:
在随机读的第二个步骤是执行现行地址读的,由于第一个步骤时芯片接收了字地址,故现行地址就是所送入的字地址。
顺序读:
顺序读可以用现行地址读或随机读进行启动。
它和现行地址读。
随机读的最大区别在于:
顺序读在读出一批资料之后才由单片机产生停止状态结束读操作;而现行地址读和随机读在读出一个资料之后就由单片机产生停止状态结束读操作。
执行顺序读时,首先执行现行读或随机读的有关过程,在读出第一个资料之后,单片机输出“0”应答信号ACK。
在芯片接收应答信号ACK后,就会对字地址进行计数加1,随后串行输出对应的字节。
当字地址计数达到内存地址的极限时,则字地址会产生覆盖,顺序读将继续进行。
只有在单片机不再产生“0”应答信号ACK,而在接收资料之后马上产生停止状态,才会结束顺序读操作。
在对AT24CXX系列执行读写的2线串行总线工作中,其有关信号是由单片机的程序和EEPROM产生的。
有两点特别要记住:
串行时钟必须由单片机程序产生,而应答信号ACK则是由接收资料的器件产生,也就是写地址或资料时由EEPROM产生ACK,而读数据时由单片机产生。
6.AT24CXX系列应用注意事项
AT24CXX系列型号:
AT24CXX系列EEPROM有13种型号。
它们的容量不同,执行页历写时的页历定义不同,进行读写时的地址位数也不同,器件地址不同。
有关主要指针在应用中要加以区别和注意。
三、实验电路图
本实验需要用到80C51MCU模块(E区)和I2C接口模块(B1区)。
I2C接口电路原理参考图23.1。
图23.1I2C接口电路
四、实验步骤
1.用二号导线分别连接80C51MCU模块的P1.0、P1.1到I2C接口模块的SDA、SCL。
2.用串行数据通信线连接计算机与仿真器,把仿真器插到80C51MCU模块的40P锁紧插座中,请注意仿真器的方向:
缺口朝上。
3.将80C51MCU模块的电源钮子开关S2拨到上端,将I2C接口模块的电源短路帽JPB1打在上端。
将直流稳压电源模块的直流控制开关S1打到ON,本实