单片机C51实验报告Word文档下载推荐.docx
- 文档编号:365832
- 上传时间:2023-04-28
- 格式:DOCX
- 页数:30
- 大小:2.16MB
单片机C51实验报告Word文档下载推荐.docx
《单片机C51实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《单片机C51实验报告Word文档下载推荐.docx(30页珍藏版)》请在冰点文库上搜索。
31.扩展实验区
32.打印机接口
33.单片机核心板(EAT598_31)
34.带USB接口的51MINI仿真器
三、实验内容
1.熟悉整个实验箱的硬件资源。
2.利用51MINI仿真器连接电脑,在电脑的设备治理器中可找到以下图所示的COM口。
实验二Keil集成开发环境练习
1.把握开发环境Keil的安装方式。
2.把握开发环境Keil的利用和仿真环境参量配置方式。
3.学习调试汇编程序
4.学习调试C程序
二、实验内容
1.Keil简介
Keil公司成立于1986年,要紧开发、制造和销售嵌入式8051、C166和C251系列微操纵器软件开发工具,2005年,Keil公司被ARM公司收购,产品线开始支持各类ARM的内核。
Keil集成开发环境是业界普遍利用的微操纵器开发平台,目前支持Windows的各类操作系统,支持汇编语言、C和C++语言的开发,要紧包括C/C++编译器、RTX实时操作系统内核库、μVisionIDE开发环境及器件数据库、μVision调试器及分析工具和器件仿真调试器,提供针对不同MCU(MicroControllerUnit,微操纵器或单片机)器件的开发例子和模板。
汇编语言代码冗余小,执行效率高;
C语言和C++语言具有工程的开发效率、文件的可读性高和系统的保护性强的优势。
Keil集成开发环境的软件调试和硬件调试提供了各类调试技术和功能,大大加速了嵌入式软件的开发进程。
要求安装的运算机提供500M的硬盘空间、至少1GB的内存,屏幕分辨率至少为1024×
768像素。
2.利用Keil成立工程
双击打开Keil软件;
新建工程;
选择目标单片机;
选择不利用开始代码;
成立并保留汇编文件;
将文件加入工程中;
输入并保留文件内容。
3.对工程进行设置
通过“Optionsfortarget‘Target1’…”打开工程设置选项;
在Target标签页选择晶振频率值,设置RAM和ROM的利用情形;
在Output标签页设置是不是需要生产HEXFile(用于烧写单片机或硬件调试实验);
在Debug标签页设置软件仿真和硬件调试。
4.对工程进行编译连接
选择“Buildtarget”进行编译,依照产生的错误提示,纠正程序中的错误直至编译成功。
5.Keil仿真调试
通过选择“Start/StopDebugSession”进入软件调试时期或是利用USB线连接实验箱进行硬件调试;
可在Registers页面查看寄放器状态,在memory窗口馋=查看系统内存中的值,字母C、D、I、X别离表示代码存储空间、直接寻址的片内存储空间、间接寻址的片内存储空间、扩展的外部RAM空间。
三、实验结果
上述两张图片中,软件已经安装完成,能够成功调试,上图方框内查看内存中的内容。
实验三多字节BCD码加减法运算和BCD码拆分
1.学习单字节无符号数BCD码加减编程
2.学习多字节无符号数BCD码加减编程
3.学习BCD码的拆分
4.进一步熟悉汇编指令和Keil软件调试进程
1.BCD码的概念
BCD码(Binary-CodeDecimal)是用4位二进制数来表示一个十进制的0~9的一种数值编码。
BCD码有很多种,常见的有8421BCD码、2421BCD码、余三码、格雷码等,本实验利用的是8421BCD码。
下表为BCD码的编码表
Table1BCD码的编码表
十进制数
BCD码
十六进制表达式
0000
00H
5
0101
05H
1
0001
01H
6
0110
06H
2
0010
02H
7
0111
07H
3
0011
03H
8
1000
08H
4
0100
04H
9
1001
09H
2.单字节无符号数BCD码的加法
进行单字节BCD码加法的方式是,先用加法指令ADD或带进位加法ADDC计算,(幸免用加1指令INC),必需通过十进制调整指令DAA,才能取得正确的结果。
BCD码中1~9能够用四位二进制数0000-1001表示,而1010-1111这6个数为无效数。
两个4位二进制数相加所得的结果超过1001,那么将所得数加0110,来跳过6个无效数,并产生一个进位。
修正规那么为:
1)若是任何两个对应位的BCD数相加的结果向高一名无进位,假设取得的结果小于或等于9,那么不需修正;
假设取得的结果大于9且小于16时,改位进行加6修正。
2)若是任何两个对应位BCD数相加的结果向高一名有进位时(即结果大于或等于16),该位进行加6修正。
3)低位修正结果使高位大于9时,高位进行加6修正。
3.单字节无符号数BCD码的减法
在AT89C51指令系统中,只有加法有十进制调整指令,若是进行BCD码减法,能够通过求减数的“BCD码补码”,再作减数的“BCD码补码”和被减数的BCD加法,并将进位标志位C取反,取得BCD码减法结果。
“BCD码补码”可按如下方式计算:
X的“BCD码补码”=100D-X=#9AH-X
其中100D是十进制数100。
4.多字节无符号数BCD码加法
多字节加法运算一样是按从低字节到高字节的顺序进行的,但当最低字节相加后,必需利用“DAA”进行十进制调整。
调整后产生进位,除最低字节外,其他字节相加必需考虑低字节的进位情形,要利用ADDC指令。
最高两字节相加后也应考虑是不是有进位。
假设有进位,和数将比加数或被加数多出一个字节。
应向好的最高位字节地址写入01H。
5.多字节无符号数BCD码减法
多字节无符号数BCD码的减法,在单字节无符号数BCD码的减法基础上进行。
1.单字节无符号数BCD码的加法
上左图为参加运算的加数和被加数,右图为最终寄存在R1寄放器中的结果
2.单字节无符号数BCD码的减法
上述三图表示被减数为11,减数为12,最后结果为99,产生借位
3.多字节无符号数BCD码加法
上左图第一行为被加数,第二行为加数,
上右图为相加结果
右图为进位标志符Cy
即78563412+66552211=145115623(产生了进位)
4.多字节无符号数BCD码减法
左图:
第一行数字为被减数
第二行数字为减数
从左向右依次进行多字节减法
左图为多字节减法结果
最右位的FF表示有借位
即178563412-84334411=94229001
三、实验总结
本次实验是我第一次通过汇编语言进行单片机编程,说实话,汇编很烦,一样C语言一句代码,在汇编中会被转化为多句代码,可是汇编的优势也在实验中表现出来,汇编对单片机的操纵加倍精准,编写汇编语言时,我能够超级清楚每一个数据在存储空间中的位置和大小,这一优势是C语言等高级语言所无法比拟的。
也正是这种精准的操纵,要求代码的编写者自身能够超级清楚的明白单片机的原理及各个接口的用法,总之,我以为这是一种对单片机学习超级有帮忙的语言。
实验四扩展数据存储器RAM实验
1.学习片外数据存储器扩展方式。
2.学习数据存储器的读写方式。
二、实验原理
1.单片机的系统扩展原理
以单片机为中心,通过地址总线、数据总线、操纵总线把单片机与各类扩展部件连接起来。
(1)P0口作为低八位地址/数据总线
AT89C51的P0口以分时复用的方式即用作低八位地址总线,又用作数据总线。
在AT89C51单片机对外部扩展存储器或I/O接口寄放器进行访问时,发出低8位地址,送入8位地址锁存器74LS373的D1-D7进行锁存,锁存器的输出Q0-Q7作为系统的低8位地址A0-A7。
随后,P0口又作为数据总线D0-D7。
(2)P2口作为高八位地址线
P2口作为高八位地址线(A8-A15),P2口输出通过地址锁存器74LS373锁存,与P0锁存器输出,形成了系统的16位地址总线。
有些系统P2口不通过地址锁存器直接输出高八位地址线。
(3)操纵信号线
RD和WR和作为外部数据存储器或I/O接口寄放器的读/写选通操纵信号。
ALE作为P0口发出的低8位地址的锁存操纵信号。
EA作为片内、片外程序存储器的选择操纵信号。
PSEN作为外部程序存储器的读选通操纵信号。
1.编制简单程序,对实验板上提供的外部存贮器(62256),作为数据空间0000~7FFFH,,对其进行读写操作。
逐个对外部存贮器中32K地址单元进行读写操作,并比较读写结果是不是一致。
不一致那么说明读写操作不靠得住或该存储器单元不靠得住,程序转入犯错处置代码段(本例如程序通过熄灭一个发光二极管来表示犯错)。
实验代码如下:
2.对片外地址1000H~10FFH的存储单元依次写入0x00~0Xff,实验代码如下:
实验五P1口输入输出实验
1.学习P1口输出输入的利用方式。
2.学习扩展输出P0口的电路原理和利用方式。
3.了解3-8译码器地址扩展原理。
4.学习延时子程序的编写和利用。
1.P1口做输出口,接八只发光二极管,编写程序,使发光二极管循环发亮。
通过设计,能够改变LED点亮的花腔,例如每次2个一路点亮、3个一路点亮、相隔的LED点亮……我的实验代码如下:
2.延时子程序的延时计算问题
51单片机延时采纳的方式是借助DJNZ指令循环执行必然的次数,每一个DJNZ指令需要两个机械周期,时钟频率为12MHz时每一个机械周期1us,利用两层循环时最多可延时256*256*1us=65.6ms。
只是这种计算方式不太精准,因为还有MOV指令占有的时刻和函数挪用和返回的时刻。
咱们能够借助一个小工具完成那个繁琐的计算进程,如以下图所示:
本次是咱们第一次真正的实验,通过外部RAM扩展实验我加倍明白得了单片机里地址和寻址的概念,而且借助KEIL的调试工具看到了地址中写入的内容,当程序运行和自己想的不一样时还能够进行单步伐试,跟踪单片机运行的状态进而发觉程序的问题,感受到了KEIL调试工具的壮大。
实验六交通灯操纵
1.学习单片机简单扩展输出I/O接口的方式。
2.学习操纵模拟交通灯的方式。
3.学习双色灯的利用
1.交通灯规那么
因为本实验是交通灯操纵实验,因此要先了解实际交通灯的转变规律。
假设一个十字路口为东南西本走向。
初始状态0为东西红灯,南北红灯。
然后状态1南北绿灯通车,东西红灯。
过一段时刻转入状态2,南北绿灯闪几回转亮黄灯,延时几秒,东西仍然红灯。
再转入状态3,东西绿灯通车,南北红灯。
过一段时刻后转状态4,东西绿灯闪几回转亮黄灯,延时几秒,南北仍然红灯。
最后循环至状态1.
3.利用汇编编程使黄灯正常显示
从理论上说,双色灯LED中,红色LED管芯和绿色LED管芯两头都加高电平常,黄灯亮。
但是在实际的实验中,双色灯中红色LED的亮度远大于绿色LED的亮度,红色LED管芯和绿色LED管芯两头都加高电平常,黄灯亮。
修改程序如下,通过度时操纵的方式,使绿色LED管芯加高电平的时刻约是红色LED管芯加高电平常刻的十倍以上,从而达到了产生黄色光的目的。
汇编代码如下:
实验七急救灯与交通灯操纵
1.学习外部中断技术的大体利用方式。
2.学习中断处置程序的编程方式。
在实验八交通灯内容的基础上增加许诺急救车优先通过的要求。
有急救车抵达时,两向交通信号为全红,以便让急救车通过。
假设急救车通过路口时刻为5秒,急救车通事后,交通灯恢复中断前状态。
本实验以按键为中断申请,表示有急救车通过。
1.中断效劳程序
中断效劳程序的关键是:
1)爱惜进入中断时的状态,并在退出中断之前恢复进入时的状态。
2)必需在中断程序中设定是不是许诺中断重入,即设置EX0位。
本例中利用了INTO中断,一样中断程序进入时应爱惜PSW,ACC和中断程序利用但非其专用的寄放器。
本例的INTO程序爱惜了PSW,ACC,R2等三个寄放器而且在退出前恢复了这三个寄放器。
另外中断程序中涉及到了关键数据的设置应关中断,即设置时不许诺重入。
实验开始时K7应在H(高电平)端,要产生中断时先拨向L(低电平)端再拨回H端。
中断效劳子程序的汇编代码如下:
本次实验最复杂的地址是黄灯的显示,由于硬件的缺点致使黄灯无法正常显示,因此咱们必需在软件上实现。
而那个地址利用了咱们人眼的视觉暂留效应,通过改变红灯和绿灯在一个周期内点亮的时刻实现“宏观上”的黄灯。
通过实际测试,发觉当绿灯亮的时刻为红灯的20倍左右时能够发出较为纯正的黄色光。
那个地址面还有一个重要的地址,确实是LED的刷新频率,假设LED刷新频率过慢,那么会有明显的闪烁感,实际测试出当刷新频率为100Hz时大体上看不出闪烁。
实验八按时器实验
1.学习8051内部计数器的利用和编程方式。
2.把握按时中断处置程序的编程方式。
1.按时器
关于内部计数器的编程主若是按时常数的设置和有关操纵寄放器的设置。
内部计数器在单片机中要紧有按时器和计数器两个功能。
本实验用的是按时器。
内部计数器用作按时器时,是对机械周期计数。
每一个机械周期的长度是12个振荡周期。
因为实验系统的晶振是11.0592MHz,因此按时常数的设置可按以下方式计算:
机械周期=12÷
11.0592MHz=1.0857μS
(65536-按时常数)*1.0857μS=50mS
按时常数=4C00H
按时器的有关的寄放器有工作方式寄放器TMOD和操纵寄放器TCON。
TMOD用于设置按时器/计数器的工作方式0~3,并确信誉于按时仍是用于计数。
TCON要紧功能是为按时器在溢出时设定标志位,并操纵按时器的运行或停止等。
2.按时中断子程序
在中断效劳程序中,因为中断按时常数的设置对中断程序的运行起到关键作用,因此在置数前要先关对应的中断,置数完以后再打开相应的中断。
本次实验我没有依照书上的要求来做,因为感觉那太简单了。
因此我决定实现一个比较好玩、难度高的实验,呼吸灯是一个超级不错的选择,以前用C语言写过如此的一个东西,这次尝试利用汇编语言来写。
实现呼吸灯的关键在于LED亮度的改变,和上次的实验有些相似,也是通过改变一个周期内LED点亮的时刻而从宏观上改变其亮度。
咱们设置按时器的周期为1ms,即每1ms进入一次中断效劳函数。
以20ms为一次LED刷新周期(50Hz),那么只需要改变这20ms内LED点亮的时刻即能够在宏观上改变其亮度。
中断效劳函数如下:
R1为进入中断的次数(0~20),R0操纵LED点亮的时刻。
R0在程序主循环中每隔100ms改变一次,想要达到呼吸灯的成效,要让LED的亮度从最暗变到最亮,再从最亮变回最暗,如此一直循环下去,也确实是R0的值需要从0加到20,再减到20,如此循环……程序如下:
实验九8279键盘显示实验
1.把握在8051系统中扩展8279键盘显示接口的方式。
2.把握8279工作原理和编程方式。
二、实验进程
1.键盘显示接口芯片
8279是可编程的键盘、显示接口芯片。
它既具有按键处置功能,又具有自动显示功能,在单片机系统中应用很普遍。
8279内部有键盘FIFO(先进先出堆栈)/传感器,双重功能的8*8=64BRAM,键盘操纵部份可操纵8*8=64个按键或8*8阵列方式的传感器。
该芯片能自动消抖并具有双键锁定爱惜功能。
显示RAM容量为16*8,即显示器最大配置可达16位LED数码显示。
1)8279的状态字:
S/E
O
U
F
DU:
显示无效标志,由命令清除显示RAM时置1,清除完RAM后该位清0。
S/E:
键盘输入方式下作特殊错误标志,=1:
多键同时按下
O:
溢出标志,向已满的FIFORAM再写入数据时那么置1
U:
不足标志,从已空的FIFORAM读时置1
F:
F=1表示FIFORAM的数据已满
N2\N1\N0:
FIFORAM中字符的个数
本次实验中的,左侧代码作用是检查8279的状态字,若是FIFORAM中没有数据那么等待,直到显现数据
2)8279的命令字:
1.设置工作方式
D1
D0
K2
K1
K0
特征位
显示方式
输入方式
扫描方式
显示方式:
00:
8字符,左入口;
01:
16字符,左入口;
10:
8字符,右入口;
11:
16字符,右入口;
输入方式:
键盘,双键锁定01:
键盘,N键轮回10:
传感器扫描11:
选通输入
扫描方式:
0:
编码扫描1:
译码扫描
本次实验采纳的工作方式为10H,即右端输入,八位字符显示,双键锁定,编码扫描。
2.设置分频系数
P
分频系数N(2-31)
分频目的:
取得8279内部扫描需要的100KHz的大体工作时钟。
3.设置读FIFO/传感器RAM的地址
AI
A2
A1
A0
自动
增量
无
效
FIFORAM地址
自动增量:
写入后地址不变1:
每次写入地址自动加1
4.设置读显示RAM的地址
A3
显示RAM地址
读出后地址不变1:
每次读出地址自动加1
5.设置写显示RAM的地址
6.禁写显示RAM/消隐命令
A组
禁写
B组
消隐
7.清除命令
清除显示RAM
清除显示RAM的方式
清FIFORAM
总清除
8.终止中断/设置错误方式
无效
2.实验说明
利用8279可实现对键盘/显示器的自动扫描,以减轻CPU的负担,并具有显示稳固、程序简单、可不能显现误动作等特点。
本次实验系统中的8279的状态/命令口地址位F239H;
数据口地址位F238H。
本次实验能够说是最麻烦的一个实验了,因为涉及到了8279键盘扫描/数码管显示芯片的利用。
面对一个陌生的芯片,咱们必需要有能快速把握它的能力,而途径之一确实是查看官方的数据手册或利用手册。
官方的数据手册是第一手资料,也能够算是最权威的资料,里面很会详细的介绍芯片,和给出一些利用的实例。
通过查看手册,我可能了解了这块芯片利用方式,要紧确实是通过向芯片里的寄放器写命令和写数据来操纵它的功能,实现键盘扫描、数码管显示等。
但是在利用中发觉一个问题,实验箱上数码管的“左和右”与芯片概念的“左右”仿佛对应不上,认真研究并请教教师后才得知是它实验箱内的电路走线设计反了,而这直接致使了无法通过一样的方式实现数字的左移,必需另想方法。
最终咱们的解决方式是在单片机内部的数据存储器中设置一个8字节的缓冲区,先在单片机内部实现8位数字的左移,最终再一次性写入8279中,这种方式的效率也超级的高。
源代码如下:
通过以上操作,就能够够实现类似计算器显示的成效,当输入一个新的字符时,前面的所有字符整体左移一名,当前的字符显示在最右边。
实验十单片机与PC机的串口通信
1.把握串行口工作方式的程序设计,把握单片机通信的编制。
2.了解实现串行通信的硬环境,数据格式的协议,数据互换的协议。
3.了解PC机通信的大体要求。
1.实验内容
串口与运算机通信,单片机通过串口向电脑发信息,电脑串口软件同意信息。
发送寄放器A到串口。
2.实验说明
(1)双击桌面“串口调试助手”图标,打开串口调试助手
(2)选择通信端口
(3)端口设置,依如实际需要设置端口参数。
波特率=2^SMOD/32×
(22.092MHz)/(12×
(2^8-FDH))≈19200Baud
本实验采纳的晶振频率为22.092MHz,SMOD为0。
(4)打开串口。
“串口关闭状态”转为了“正常显示状态”。
(5)在同意区设置中,勾选“十六进制显示”。
清空同意区信息时,点击“清空同意缓冲”。
3.串口发送数据到电脑端代码
1.串口发送数据至PC机实验结果,循环发送00H-0FFH的八位数据
可见PC端已经正确接收到了单片机发送的数据。
实验十一D/A转换实验
1.了解D/A转换的大体原理。
2.了解D/A转换芯片0832的性能及编程方式。
3.了解单片机系统中扩展D/A转换的大体方式。
1.实验内容
编写程序,使D/A转换模块循环输出锯齿波和三角波。
2.实验说明
D/A转换是把数字量转化成模拟量的进程,本实验输出为模拟电压信号,本次实验生成的
波形较为简
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 C51 实验 报告