实验报告
电气106班 姓名:郭志毅 学号:
实验目的:
设计一个数字电压表,掌握LED动态显示和A/D0808转换接口设计方法。
实验原理:
电路原理图如上所示。
1. 总体介绍
本实验中需要用到的电路有电源电路、模/数转换电路、单片机控制电路、显示电路等。实验中需要用到的芯片有AT89C51单片机、ADC-0808、74LS74、LED数码管等。
2. 数字电压表的Proteus软件仿真电路设计
待测电压输入信号在ADC0808芯片承受的最大工作电压范围内,经过模/数转换电路实现A/D转换,通过单片机控制电路进行程序数据处理,然后通过七段译码/驱动显示电路实现数码管显示输入电压。
3. AT89C51单片机和数码管显示电路的接口设计
利用单片机AT89C51与ADC0808设计一个数字电压表,将模拟信号0~5 V之间的直流电压值转换成数字量信号0~FF,以两位数码管显示。Proteus软件启动仿真,当前输入电压为2.5 V,转换成数字值为7FH,用鼠标指针调节电位器RV1,可改变输入模/数转换器ADC0808的电压,并通过虚拟电压表观察ADC0808模拟量输入信号的电压值,LED数码管实时显示相应的数值量。
在Proteus软件中设置AT89C51单片机的晶振频率为12 MHz。本电路EA接高电平,没有扩展片外ROM。
4.A/D转换电路的接口设计
A/D转换器采用集成电路ADC0808。ADC0808具有8路模拟量输入信号IN0~IN7(1~5脚、26~28脚),地址线C、B、A(23~25脚)决定哪一路模拟输入信号进行A/D转换,本电路将地址线C、B、A均接地,即选择0号通道输入模拟量电压信号。22脚ALE为地址锁存允许控制信号,当输入为高电平时,对地址信号进行锁存。6脚START为启动控制信号,当输入为高电平时,A/D转换开始。本电路将ALE脚与START脚接到一起,共同由单片机的P2.0脚和WR脚通过或非门控制。7脚EOC为A/D转换结束信号,当A/D转换结束时,7脚输出一个正脉冲,此信号可作为A/D转换是否结束的检测信号或向CPU申请中断的信号,本电路通过一个非门连接到单片机的P3.2脚。9脚OE为A/D转换数据输出允许控制信号,当OE脚为高电平时,允许读取A/D转换的数字量。该OE脚由单片机的P2.0脚和RD脚通过或非门控制。10脚CLOCK为ADC0808的实时时钟输入端,利用单片机30引脚ALE的六分频晶振频率得到时钟信号。数字量输出端8个接到单片机的P0口。
编程思路:
系统上电状态,初始化ADC0808的启动地址,数码管显示关闭,开始启动A/D转换。等待启动结束后,将ADC0808的0号通道模拟量输入信号转换输出的数字量结果通过数码管动态显示的方式显示到三位数码管上。
根据设计要求结合硬件电路,在输入模拟信号时采用电阻分压,最终的采样输入电压只有实际输入电压的十分之一,所以在编写程序中要编写一段数据调整程序,其中还应注意硬件显示电路采用了动态扫描显示,在动态扫描显示方式中,动态扫描的频率有一定的要求,频率太低,数码管LED将会出现闪烁现象,通常数码管点亮时间间隔一般均取5ms左右为宜,这就要求在编写程序时,使其点亮并保持一定的时间。
仿真截图
实验小结:
本实验中的数字电压表可以测量0~5 V的电压值,AT89C51为8位单片机,当ADC0808的输入电压为5 V时,输出数字量值为+4.99 V。如果要获得更高的精度,需采用12位、13位等高于8位的A/D转换器。数字电压表的显示部分可以增加BCD码调整程序来通过三位数码管显示其数据。本设计的显示偏差,可以通过校正0808的基准参考电压来解决,或用软件编程来校正其测量值。本系统在设计过程中通过Proteus仿真软件的调试,具有电路简单、成本低、精度高、速度快和性能稳定等特点。
心得体会
学习单片机这门课程(教学中选用 inter公司的mcs-51),要掌握单片机指令系统中汇编语言各种基本语句的意义及汇编语言程序设计的基本知识和方法,以及单片机与其他设备相连接的输入输出中断等接口技术。使学生从硬件软件的结合上理论联系实际,提高动手能力,从而全面掌握单片机的应用。
实验教学的全过程包括认识、基础、综合3个阶段。以往的单片机实验是进行软件的编制和调试,与实际应用中的硬件电路相脱节。使学生缺乏硬件设计及调试分析能力,对单片机如何构成一个单片机最小应用系统,缺乏认识。,通过计算机连接仿真器在实验板上把硬件和软件结合起来一起调试,
软件的修改也非常方便,软件和硬件调试都通过后,把程序固化在 eprom当中,插上8051单片机构成一个完整的单片机应用系统。
单片机实验板的构成及基本功能
单片机实验板,它由 8031、8155,eprom2764,max232键盘及显示器组成。其中8155 片内有256个ram单元,接6个7段码显示器和8个按键作输入。串行口连接max232串行口转换芯片,p1口留出作为一些控制量的输入输出用以扩展使用。在实验板上可编写键盘扫描程序、显示程序、时间的设定及计时程序、从键盘上输入两个加数或减数显示结果程序、位变量的逻辑运算程序及串行口和上位机通讯程序等,还可和其它课程相结合,进行实验。同时可参考单片机网http://www.51hei.com上的比较生动的单片机学习教程,学习和试验一起进行.例如,《电子测量》课程中各种频率的测量,可通过8031单片机 p1口输入被测量,由单片机来进行检测和显示,把几门课程结合在一起学习,使课程有延续性,也提高了学生学习的积极性。由于p1口通过插座引出,也可外部扩展a/d d/a 等其他接口芯片,以构成新的应用系统。
单片机实验板的衍生功能
此单片机实验报告中的实验板是一个单片机应用系统的硬件电路。有键盘输入和显示输出,在这个基础电路上通过p1口对不同检测或控制对象还可衍生出各种应用来。例如:时间的设置及显示、温度的检测及控制等,在此实验板上,编写相应的软件即可,否则,只在计算机上模拟调试软件,则无法了解单片机接口中各种控制信号的使用。还可帮助学生学会分析问题和解决问题的能力。这在单片机实验报告中都要体现出来。例如:如何检查程序存储器和外部数据存储器及i/o接口,执行访问外部程序存储器eprom2764的0000h 单元的指令,只能读取该单元的内容,不能改写,当dptr=0000h 时,执行 movca @dptr指令,这时候74ls373应锁存地址信号低8位,可用示波器测量74ls373的Q0-Q7 ,检验是否锁存了零信号,同样用示波器检测P2口是否输出了地址信号的高8位,用示波器检测P0口和 ALE控制信号。若和原理分析有偏差,很快就可判断出哪个管脚有问题,可顺藤摸瓜,找出问题所在。同理,执行单条指令访问外部接口8155的PA PB PC 口,软件执行时序信号和管脚测量结果相比较,看是否一致,以便检查硬件线路是否正确。访问外部RAM数据存储器(8155片内)时,用示波器测WR及 RD控制信号,如:读RAM时,应测到读控制信号脉冲,而写RAM时,应测得写控制信号脉冲。测得的信号一定是数字信号(0或1,0.7V左右或 3.8V左右),2.5V左右的数字信号肯定有问题。在仿真器上调试软件时,通过察看http://www.51hei.com单片机网的相关专栏得知,可采用仿真器上的晶振,通过后,改用用户板上的晶振,看结果是否一致,若有问题,说明用户板上的晶振有问题,再次通过后,把程序固化在EPROM2764中,拔掉仿真头,插上8031芯片,看是否通过,此时有问题,说明用户板上的复位信号有问题。逐步学会硬件电路的调试。外部可连接温度传感器,经A/D转换,检测温度信号,并根据键盘输入的设定值范围,进行报警,切换继电器工作;还可通过模拟开关对多点温度进行轮检,构成一台多点温度测试系统。作为测量设备,要考虑精度,在硬件电路上要考虑模拟开关的选择,因为其导通电阻的大小对模拟输入量有影响,应选择导通电阻小,带过压保护的模拟开关,同样A/D转换芯片应根据精度要求,选择8位、 12位等 转换器,或满足精度要求的压频转换器。也可对外部多种传感器进行检测,如:温度、烟雾、水警、门警、红外等,构成监控电路,被测量中既有模拟量,又有数字量,特别要加强抗干扰性,在线路板设计时,每块芯片电源引脚的滤波电容排放时尽量靠近芯片,模拟地和数字地先分别共地,最后,再把模拟地和数字地共地,模拟地和数字地只能出现一个共地点,最好电源和地单独布层,走线合理,提高线路板的抗干扰性,为了提高抗干扰能力,软件设计时,可连续测量几次,去掉最大值和最小值,剩下的量取平均值,以滤去一些突变信号,提高整个系统的抗干扰能力。
由于单片机体积小、成本低、使用方便,所以被广泛地应用于仪器仪表、现场数据的采集和控制,但单片机存储量有限,数据处理能力差,不利于数据信息的保存和处理,在这里利用单片机的串行口和上位PC机串口通讯,实验板上的MAX233串行转换芯片实现TTL信号和RS232 信号之间的转换,和 PC机通讯,从而实现远距离的监控及信息的存储、处理和打印清单,单片机完成现场数据的采集及各种信号的控制,构成一套环境监控单元。
几点单片机实验心得体会
在电子技术应用领域中,单片机的应用愈来愈多地应用到各行各业。如:工业控制、仪器仪表、电讯技术、办公自动化和计算机外部设备、汽车与节能、商用产品、家用电器等。目前,单片机正朝着大容量片上存储器、多功能i/o接口、宽范围工作电源和低功耗方向发展。要开发单片机的应用,不但要掌握单片机硬件和软件方面的知识,而且还要深入了解各应用系统的专业知识,只有将这两方面的知识融会贯通和有机结合,才能设计出优良的应用系统。一个好的工程设计师不仅要掌握单片机的工作原理,而且还要不断了解各公司最新芯片的结构和应用,在实际应用中找到最好的性能价格比。所以还要注意培养学生接受新知识的自学能力,掌握芯片发展动态。
自我评价:还好吧
第二篇:51单片机实验报告
实验二、数据传送
一.实验目的:
1. 学习数据传送指令的用法。
2.熟悉建立、调试和运行汇编语言程序的过程。
二.实验内容: 将源数据区单元的(0~F)共16个数传送到目的数据区中。
注意:在51系列单片机中,只能使用R0,R1进行间接寻址。
三. 实验要求:
1. 内部RAM数据存取操作
2. 内部RAM和外部RAM的数据传送
3. 外部RAM的数据传送
说明:
1、片内RAM数据存取操作代码(即源数据区和目的数据区都在片内RAM):MOV @R1,A 。此时打开一个存储器窗口,在地址框中输入D:0x0,查看内存中的数据。
2、内部RAM和外部RAM的数据传送(源数据区在内部RAM,目的数据区在片外RAM)程序只需将上述代码中的MOV @R1,A 替换为 MOVX @R1,A。此时需要打开两个存储器窗口,一个用于观察片内RAM数据,一个用于观察片外RAM数据。在地址框中输入X:0x0,查看外存中的数据。
3、外部RAM的数据传送(源数据区和目的数据区都在片外RAM)只需将1中的代码
MOV A,@R0 MOV @R1,A 替换为MOVX A,@R0 MOVX @R1,A即可。此时可以只打开一个外部存储器窗口。
须强调的是:
访问外部数存,需要16位地址寻址。常用dptr(16位)寄存器作为地址指针;如: mov dptr,#0130h
movx a,@dptr
此时,程序计数器PC提供A0~A15地址值,送到p0、p2口构成16位物理地址。
实际上,对于8位单片机来说,对内部寻址范围只有128字节(00~FFh)。若以128字节为一页面,超次范围即成为一种页面寻址;而dph提供的就是页指针(页面地址)。 由此,我们也可以以R0或R1作为外部数存间接寻址低8位指针(只能存低8位地址),由P2口的当前值作为页面地址和P0的当前值构成16位(0000~FFFFh)外部数存地址进行外部间接寻址。如:
mov p2,#01h
mov r0,#30h
movx @r0,A
此时访问外部数存地址为:0130h
注: 上电复位后,p2口初始状态为FFh。
org 0000h
ajmp main
org 0040h
Main:
Mov r1,#40h
Mov r0,#50h
mov r2,#10h
loop1:
mov a,@r1
mov @r0,a
inc r0
inc r1
Djnz r2,loop1
Mov r0,#40h
mov r2,#10h
mov p2,#01h
mov r1,#50h
loop2:
mov a,@r0
movx @r1,a
inc r1
inc r0
Djnz r2,loop2
mov dptr,#0140h
mov p2,#01h
mov r0,#50h
mov r2,#10h
loop3:
movx a,@r0
movx @dptr,a
inc dptr
inc r0
Djnz r2,loop3
End
实验三多字节无符号数加法实验
目的:熟悉汇编中的加法指令。
内容:将被加数置入片内RAM以40H单元为起始地址的区间,将加数置入片内RAM
以50H单元为起始地址的区间。置入时,多字节数按先低位后高位的次序存数,相加结果,放回30H的存放单元。
org 0000h
ajmp main
org 0030h
Main:
Mov sp,#60h
Mov a,#0h
mov r2,34h
mov r0,#40h
mov r1,#50h
mov a,@r0
addc a,@r1
mov 30h,a
inc r0
inc r1
mov a,@r0
addc a,@r1
mov 31h,a
inc r0
inc r1
mov a,@r0
addc a,@r1
mov 32h,a
inc r0
inc r1
mov a,@r0
addc a,@r1
mov 33h,a
jnc next
inc 34h
next:ajmp $
end
多字节无符号数乘法实验
目的:熟悉汇编中的乘法指令。
内容:被乘数和乘数均为双字节数,先设置乘数与被乘数。将被乘数的高字节置入R7,低字节置入R6;将乘数的高字节置入R5,低字节置入R4。相乘后的结果,按先低位后高位的次序存入片内RAM以60H为首址的区间,并检查片内RAM 60H、61H、62H、63H单元的内容。改变两乘数,重复实验。
org 0000h
ajmp main
org 0030h
Main:
Mov sp,#60h
mov r7,40h
mov r6,41h
mov r5,42h
mov r4,43h
mov a,r6
mov b,r4
mul ab
mov 60h,a
mov 61h,b
mov a,r7
mov b,r4
mul ab
addc a,61h
mov 61h,a
mov 62h,b
mov a,#0
addc a,63h
mov 63h,a
mov a,r6
mov b,r5
mul ab
addc a,61h
mov 61h,a
mov a,b
addc a,62h
mov 62h,a
mov a,#0
addc a,63h
mov 63h,a
mov a,r7
mov b,r5
mul ab
addc a,62h
mov 62h,a
mov a,63h
mov 63h,b
addc a,63h
mov 63h,a
sjmp $
end
实验五、十六进制到ASCII码的转换实验 目的:熟悉码制之间的转换。
内容:将8个十六进制数放在30H为首单元,编程转换后的ASCII码放在40H为
首的单元。
0-30H 9-39H (39H=9+30H)
A-41H F-46H (41H=0AH+37H=A+30H+7H)
例如:30H开始的内存单元内容为0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF 转换后40H开始的内存单元的内容为:
0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,
0x41,0x42,0x43,0x44,0x45,0x46
org 0000h
ajmp main
org 0030h
Main:
mov r0,#30h
mov r1,#40h
mov r7,#08h
Loop:
clr c
mov a,@r0
swap a
anl a,#0fh
mov r4,a
subb a,#0ah
jc loop1
mov a,r4
add a,#37h
mov @r1,a
inc r1
jmp loop2
loop1:
mov a,r4
add a,#30h
mov @r1,a
inc r1
loop2:
clr c
mov a,@r0
anl a,#0fh
mov r3,a
subb a,#0ah
jc loop3
mov a,r3
add a,#37h
mov @r1,a
inc r1
jmp loop4
loop3:
mov a,r3
add a,#30h
mov @r1,a
inc r1
loop4:
inc r0
Djnz r7,loop
Sjmp $
End
实验六、二进制数到BCD码转换实验
目的:熟悉码制之间的转换。
内容:将50H为首地址的4个字节的二进制数转化为对应的BCD码存放在60H为
首地址的内存单元。
要求低地址放低字节,高地址放高字节。
要求用循环。
例如:50H内存的数据为0x58,0x70,0x89,0x44转换后60H的内存数据为:0x08,0x08,0x0;0x02,0x01,0x01;0x07,0x03,0x01;0x08,0x06,0x0
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN: MOV R0,#50H
MOV R1,#60H
MOV R2,#4H
MOV A,#0H
LOOP:
MOV A,@R0
MOV B,#0AH
DIV AB
MOV @R1,B
INC R1
MOV B,#0AH
DIV AB
MOV @R1,B INC R1
MOV @R1,A INC R1 INC R0
DJNZ R2,LOOP SJMP $ END