基于单片机的实验报告5则范文

时间:2019-05-12 08:38:45下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《基于单片机的实验报告》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《基于单片机的实验报告》。

第一篇:基于单片机的实验报告

基于AT89C52的电子时钟设计

学生姓名 学 号 所在学院 专业名称 班 级 指导教师 成 绩

四川师范大学成都学院 二O一五年十二月

基于AT89C52的电子时钟设计

摘要:

单片机在电子产品中的应用越来越广泛,特别是51系列的单片机,由于其使用方便、价格 低廉等优势,在市场上占有很大的份额。AT89C52就是51系列中的一个比较成熟的型号。本设计是一个多功能的实时时钟,带秒表、整点报时、闹铃、调整时间等功能。可按键直接设置闹铃时间。由AT89C51单片机、DS1302、LCD1602等模块组成。现代社会,时间就是金钱,时钟是每个人的必备品。本设计实现了所需功能,给大家带来方便,整体性好、人性化强、可靠性高,实现了时钟的多功能应用。

关键词:电子时钟;DS1302;LCD1602;

Abstract: Single-chip computer is finding wider and wider application in the electronic products, especially the 51 series microcontroller, due to its convenience, price is low wait for an advantage, holds a large share in the market.AT89C52 is 51 series of a more mature model.This design is a multi-function real-time clock, stopwatch, adjusting time of the hour, alarm, etc.Can be directly set alarm time button.Composed of AT89C51, DS1302 and LCD1602 module.Modern society, time is money, the clock is an essential for everyone.This design can realize the function needed, bring convenience, integral sex is good, human nature is strong, high reliability, realize the multifunctional application of clock.Keywords: electronic;clock;DS1302

II

目录

引言:..............................................................1 1.设计要求与方案....................................................1 1.1 设计要求:....................................................1 1.2 系统基本方案选择..............................................1

1.2.1单片机芯片的选择方案和论证.............................1 1.2.2 显示模块选择方案和论证.................................2 1.2.3时钟芯片的选择方案和论证...............................2

2.设计方案的选择....................................................3 2.1计时方案.....................................错误!未定义书签。2.2 单片机的基本结构.............................错误!未定义书签。2.3数字钟的构成..................................................4 2.4数字钟组成框图................................................4

2.4.1晶体振荡器电路.........................................4 2.4.2 整点报时电路...........................................4

3.系统的软件设计...................................................4 3.1程序流程图....................................................4 3.2程序的设计....................................................6 4.实验箱调试结果....................................................8 5.总结心得体会:....................................................9

III

引言:

随着科技的快速发展,时间的流逝,从观太阳、摆钟到现在电子钟,人类不断研究,不断创新纪录。美国DALLAS公司推出的具有涓细电流充电能的低功耗实时时钟电路DS1302。它可以对年、月、日、周、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。对于数字电子时钟采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒和温度等信息,还具有时间校准等功能。该设计以AT89C51单片机作为核心,功耗小,能在3V的低压工作,电压可选用3~5V电压供电。

综上所述,此电子时钟具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。

1.设计要求与方案

1.1 设计要求:

(1)启动时显示制作的年、月、日、制作者的学号等信息。(2)24小时计时功能(精确到秒)(3)整点报时功能。(4)秒表功能

(5)省电功能模式(未设计)1.2 系统基本方案选择

1.2.1单片机芯片的选择方案和论证 方案一: 采用89C51芯片作为硬件核心,采用Flash ROM,内部具有4KB ROM 存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术, 当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。方案二:

采用AT89S52,片内ROM全都采用Flash ROM;能以3V的超底压工作;同时 也与MCS-51系列单片机完全该芯片内部存储器为8KB ROM 存储空间,同样具有89C51的功能,且具

有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增

功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏。相比之下,我们在实验箱实际仿真时选择采用AT89S52作为主控制系统,由于proteus库中没有AT89S52,在原理图仿真时采用了AT89C51 1.2.2 显示模块选择方案和论证 方案一:

采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高所以也不用此种作为显示.方案二:

采用LCD液晶显示屏,液晶显示屏的显示功能强大,显示多样,清晰可见 本设计采用LCD1602 1.2.3时钟芯片的选择方案和论证 方案一:

直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、时、分、秒计

数。采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。所以不采用此方案。

方案二:

采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对

秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,位的RAM 做为数据暂存区,工作电压2.5V~5.5V范围内,2.5V时耗电小于300nA.综上各方案所述,对此次作品的方案选定: 采用AT89C52作为主控制系统,DS1302提供时钟计时,LCD1602屏幕显示.2 2为一个分频器来使用。对于芯片的使用,我们应该在了解它的各项功能的前提条件下,灵活巧妙地运用。具体的芯片资料和图片我们通过查阅相关的书籍,在网上能够很方便的查找。

经过这次电子钟作品设计与制作让我收获很多:

一、让我明白了“三个臭皮匠顶一个诸葛亮”和“团结就是力量”等名言名句的道理,让我明白只要我们团结协作没有什么困难是战胜不了的,团结让我们成功,团结让我们胜利,团结让我们的力量更大;

二、增进我和老师同学之间的友谊情感,在与老师互动学习的过程中使我体会了老师解决问题的方法与思路,让我领会了解决问题精髓,使我们学习更有活力更有信心更有自信,培养了我们的协助合作能力;

三、培养了我们的动手能力和独立解决问题的能力;

四、培养了我们的自主学习能力和利用网上这个广阔平台的学习能力;

五、使我学会了用专用的画图工具和画图软件Protel99SE画电路图的能力,通过这次作品的制作使我对Protel99SE原来的不熟悉到现在的比较熟练,画的图也比原来更合理,速度更快了;

六、锻炼了我们的焊接技术和焊接工艺,使我的焊接能力上了一个台阶;

七、培养了我管理和协调各项工作的能力,在制作的过程中也有不协调的一面但我都能一一克服了,这也使我在管理等方面能力的提高。2.3数字钟的构成

数字钟实际上是一个对标准频率(1HZ)进行计数的计数电路。由于计数的起始时间不可能与标准时间(如北京时间)一致,故需要在电路上加一个校时电路,同时标准的1HZ时间信号必须做到准确稳定。通常使用石英晶体振荡器电路构成数字钟。2.4数字钟组成框图 2.4.1晶体振荡器电路

晶体振荡器电路给数字钟提供一个频率稳定准确的32768Hz的方波信号,可保证数字钟的走时准确及稳定。不管是指针式的电子钟还是数字显示的电子钟都使用了晶体振荡器电路。一般输出为方波的数字式晶体振荡器电路通常有两类,一类是用TTL门电路构成;另一类是通过CMOS非门构成的电路,本次设计采用了后一种。如图(b)所示,由CMOS非门U1与晶体、电容和电阻构成晶体振荡器电路,U2实现整形功能,将振荡器输出的近似于正弦波的波形转换为较理想的方波。输出反馈电阻R1为非门提供偏置,使电路工作于放大区域,即非门的功能近似于一个高增益的反相放大器。电容C1、C2与晶体构成一个谐振型网络,完成对振荡频率的控制功能,同时提供了一个180度相移,从而和非门构成一个正反馈网络,实现了振荡器的功能。由于晶体具有较高的频率稳定性及准确性,从而保证了输出频率的稳定和准确。(f)带有消抖电路的校正电路

2.4.2 整点报时电路

电路应在整点前10秒钟内开始整点报时,即当时间在59分50秒到59分59秒期间时,报时电路报时控制信号。

当时间在59分50秒到59分59秒期间时,分十位、分个位和秒十位均保持不变,分别为5、9和5,因此可将分计数器十位的QC和QA、个位的QD和QA及秒计数器十位的QC和QA相与,从而产生报时控制信号。报时电路可选74HC30来构成。74HC30为8输入与非门。

3.系统的软件设计

3.1程序流程图

图-A 主程序流程图

图-B 整程序流程图

间调

时 3.2程序的设计 程序

#include #include #include #include

#define uchar unsigned char #define uint unsigned int #define TIME(0X10000-50000)#define FLAG 0xf4 //闹钟标志

sbit rst=P1^2;//DS sbit clk=P1^0;sbit dat=P1^1;sbit rs=P2^0;//LCD sbit rw=P2^1;sbit e=P2^2;sbit beep=P1^3;sbit mbkey=P1^4;

uchar k;uchar flag;uchar i=20,j,time1[16];uchar alarm[2],time2[15],time[3];time5[3];uchar code Day[]={31,28,31,30,31,30,31,31,30,31,30,31};//12个月的最大日期(非闰年)uchar //ms秒表进数,mbmiao.mbfe秒表的秒.分,key2num是key5的计数

key2num,ms=0,mbmiao=0,mbfen=0,mbkeynum,num;uchar code table[]=“ 32210324 GYY”;uchar code table1[]=“ 32210326 GLQ”;uchar code table4[]=“ 00:00:00 MB ”;

void delay(uint z){ uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}

delay1ms(uchar time)//延时1ms { uchar i,j;for(i=0;i

//LCD驱动部分 enable(){ rs=0;rw=0;e=0;delay1ms(3);e=1;} write2(uchar i){ P0=i;rs=1;rw=0;e=0;7 delay1ms(2);e=1;} write1(uchar data *address,m){ uchar i,j;for(i=0;i

实现功能的具体方法:

时钟主界面时按下K1键进入秒表功能,按K2秒表开始,再按K3秒表停,按键K4返回时间显示;按K4开始调试(移位“年→秒”),接着按K2、K3调节时间增减;按K2开启闹钟,K3调节时间,K4(移位“时分”);按“年→秒”的顺序移位,按键K2进行减运算,按键K3进行加运算,按键K1返回到主界面并显示设置值。

按下K3键,实现闹钟定时调整,按键K4进行“分-秒”移位,按键K3进行 上调,按键K2返回到主界面。

主界面K2实现开启/关闭闹钟的功能。按下K1键进入秒表,按键K2开始计时,K3暂停计时,K4返回到主界面。

5.总结心得体会:

通过这次电子时钟设计,其中理论设计又包括选择总体方案,硬件系统设计、软件系统设计;硬件设计包括单元电路,选择元器件及计算参数等;软件设计包括模块化层次结构图,程序流程图。程序设计是课程设计的关键环节,开始以为时钟会很简单,就算遇到问题应该也很好解决,但当自己真正去做的时候,发现了好多困难。于是查资料,问同学和老师。经过老师和同学的探讨,通过调试进一步完善程序设计,最后虽然省电模式没实现但其他基本达到课题所要求的指标。完成了实习任务。这次实习我更加了解了单片机的应用,更加牢牢的掌握了书本知识与现实的结合,总之这是实习收获很大,以后还需多动手实践,多练习编程,才能熟练掌握单片机。

最后刘强老师的支持与帮助,感谢他的意见和建议,使这次的设计与制作少走了弯路,我感谢他。

第二篇:单片机实验报告[范文模版]

实 实 验 验 报 报 告

实验课程:

单片机原理及应用

级:

自动化 2 班

号:

名:

师:

成绩:

实 验 日 期 :

****年**月**日

实验名称:

实验 1-—计数显示器

一、实验目得: 学习Proteus 软件得使用,掌握单片机原理图得绘图方法。

二、实验内容:

ﻩ1、绘制“计数显示器”电路原理图;2、利用提供得hex 文件验证此电路得运行效果。

三、实验要求:

提交得实验报告中应包括:1、绘图方法简述,要求说明元件与电源得选取、摆放及属性编辑,总线与标签得画法等内容;2、电路原理图;3、仿真运行效果展示,要求就仿真文件加载方法及 3~4幅运行截图进行简要说明;4、实验小结,说明遇到得主要问题或实验 1 体会等.参考电路原理图如下:

元件类别 电路符号 元件名称 Microprocessor ICs “U1“ 80C51 Miscellaneous “X1”/12MHz CRYSTAL Capacitors “C1”~“C2”/1nF CAP Capacitors “C3”/22μF CAP—ELEC Resistors Packs “RP1“/7—100Ω RESPACK—7 Resistors “R1"/100Ω RES Optoelectronics “LED1”~“LED2” 7SEG--CAT-GRN Switches & Relays “BUT” BUTTON 1、、及 编程思路及 C51 源程序:

2、电路原理图:

3、仿真运行效果展示:

4、实验小结 :

熟悉Proteus 软件,了解软件得结构组成与功能;学习ISIS 模块得使用方法,学会设置图纸、选元件、线画总线、修改属性等基本操作;学会可执行文件 加载及程序仿法;理解Proteus在单片机开发中得作用,完成单片机电路原 理图得绘制. 实验名称:

实验 2——LED 指示灯循环控制

一、实验目得 熟悉μVision3 编译软件、掌握 C51编程与调试方法。

二、

实验内容 1、按照教材 P243 得图 A、34,绘制实验二电路原理图; 2、编写 C51 程序,实现 8 个 LED 灯依次点亮得功能: P0、0→P0、1→ P0、2→P0、3→ ┅ →P0、7→P0、6→P0、5→ ┅ →P0、0 得顺序,无限循环,间隔约50ms; 3、观察仿真结果,完成实验报告。

三、

实验要求 1、采用两种加载并运行可执行文件得方法,即proteus独立运行与prote

us + Keil 联合运行,体会其中得差异与意义;2、练习采用单步、断点以及监视窗等手段进行程序调试得方法;3、观察仿真结果,完成实验报告:绘制得电路原理图、编程思路分析及 C51源程序、调试过程简述,仿真运行效果以及实验小结。、电路原理图:

及 2、编程思路及 C51 源程序:、仿真运行效果:、实验小结 :

通过本次实验我熟悉 uVision3 编译软件了解软件得结构组成与功能学习C51 语言得程序设计方法)学会在 uVision3中进行 C51 程序录入、编译、与 调试理解 Proteus 与 Keil 联合得仿真原理实现 LED 指示灯循环控制功能。

更好得将 C 语言与 C51 语言联系在了一起)学到得知识能准确得利用了出来。

实验名称:

实验3——指示灯与数码管得中断控制

一、实 验目得 掌握外部中断得工作原理,学会中断程序设计.二、实验内容 1、按照教材帕图 A、53,绘制实验四电路原理图;2、要求采用外部中断原理完成本次实验,其中按键 K1、K2 均设置为下降沿触发方式,自然优先级; 3、编写 C51 程序实现如下功能:开机后 D1灭灯,LED1黑屏,随后单击 K1→D1状态反转,单击 K2 →LED1 从 0 开始循环显示0~F 字符。

4、观察仿真结果,完成实验报告。

三、

实验要求 提交得实验报告中应包括:电路原理图,外部中断工作原理阐述(以 K1 为例说明中断响应过程),C51 源程序(含流程图与注释语句),运行效果(含运行截图

与说明),实验小结. 1、电路原理图 :

2、外部中断工作原理阐述:

持续按下 K1 则 D1 将“亮→灭→亮→灭→„→亮→灭如此循环,表明实现了 K1 对应于 D1 状态反转这个功能;持续按下持续按 K2 则数码显示管依次显 示 1-F,实现了 K2 对应于 0~F 间得数码管加一计数显示.

3、、及 编程思路及 C51 源 源 程序:、仿真运行效果:

5、实验小结:

通过实验对 Protues 有了更多得了解,同时了解到中断系统在实际中得更好 应用。经过编程操作起来更加熟练能很快得完成绘图,编程时也得心应手,能熟练得运用软件找出自己所编程中得语法问题及其她问题,并以改正。

实验名称:

实验4—-电子秒表显示器

一、实 实 验目得 掌握定时/计数器得中断法工作原理,熟悉 C51 编程与调试方法

二、实验要求:

1、实验电路原理图如教材 P260 A、65 图所示.程序开始时显示“00”;当1s 产生时,秒计数加1;秒计数到 59 后,自动从“00”开始。

2、采用12MHz晶振频率,T0 定时方式 1、50ms 定时中断法编程(1s 需要经过 20 软循环)(流程图与参考程序模版如下所示).//定时中断方式实现得电子秒表

15()件文头ﻩ(定义无符号字符型变量 t—-中断次数计数器,并赋初值0(定义无符号字符型变量 second—-秒计数器,并赋初值 0(定义位于 ROM 区得无符号字符型数组table-—显示字模)timer0()

(中断函数关键词){ ﻩ()0T 闭关ﻩ(初值重装载 0x3cb0)

()1增器数计数次断中ﻩ {)02==t(fiﻩﻩ

// 秒1于当相,次 02断中若ﻩ

;0=tﻩﻩﻩﻩﻩﻩﻩﻩ //中断次数计数器清零 ﻩ

;++dnocesﻩﻩ ﻩ // 零清器数计秒ﻩ

}()零清,06 到达值器数计秒若ﻩﻩ()值示显得 dnoces 量变出输别分口 2P与0Pﻩ()0T动启ﻩﻩ} main(){

;]01/dnoces[elbat=0Pﻩﻩ // 值示显出输别分口 2P 与 0Pﻩ

;]01%dnoces[elbat=2Pﻩ(定义T0 定时方式 1—-TMOD)05()0LT与0HT——载加0bc3x0值初出溢 smﻩ()AE,0TE——化始初断中ﻩ(启动 T0)

(死循环)3、编程思路及C1 51 源程序: :

4、仿真运行效果:

5、实验小结 :

本次实验进行得比较顺利,根据指导材料中提供得流程图完成了源程序得编 写,成功生成了、hex文件,经过仿真运行达到了预期得实验结果.通过本次得 实验,我更加深入得了解到单片机定时/计数功能实现得机理,通过与单片机中 断功能得结合,可以完成更多得预期功能。但就是进过讨论我也发现,程序还就是存 在很大得缺陷,想要实现更加准确实现计时功能还需综合利用各种知识完善程 序。

第三篇:单片机实验报告

《单片机原理及应用》

实 验 报 告

2017—2018学年第一学期

班级: 152 专业: 电子科学与技术 姓名: 子路 学号: 教师:

实验一:Keil C51

一、实验目的

1、熟悉Keil C51单片机应用开发系统

2、熟悉Keil C51的调试技巧

二、实验内容

1、安装好了Keil软件以后,我们打开它。打开以后界面如下:

2、我们先新建一个工程文件,点击“Project->New Project„”菜单,如下图:

3、选择工程文件要存放的路径 ,输入工程文件名 LED, 最后单击保存.4、在弹出的对话框中选择 CPU 厂商及型号

5、选择好 Atmel 公司的 AT89S52 后 , 单击确定

6、在接着出现的对话框中选择“是”。

7、新建一个 C51 文件 , 单击左上角的 New File 如下图所示:

8、保存新建的文件,单击SAVE如下图:

9、在出现的对话框中输入保存文件名MAIN.C(注意后缀名必须为.C),再单击“保存”,如下图:

10、保存好后把此文件加入到工程中方法如下 : 用鼠标在 Source Group1 上单击右键 , 然后再单击 Add Files to Group ‘Source Group 1' 如下图:

11、选择要加入的文件 , 找到 MAIN.C 后 , 单击 Add, 然后单击 Close

12、在编辑框里输入如下代码:

13、到此我们完成了工程项目的建立以及文件加入工程 , 现在我们开始编译工程如下图所示 : 我们先单击编译, 如果在错误与警告处看到 0 Error(s)表示编译通过:

14、生成.hex 烧写文件,先单击Options for Target,如图:

15、在下图中,我们单击 Output, 选中 Create HEX F。再单击“确定”

16、打开文件夹‘实验1’,查看是否生成了HEX文件。如果没有生成,在执行

一遍步骤10到步骤12,直到生成。

三、实验工具(软件、硬件等)

1、Keil

2、计算机

实验二:Proteus软件学习

一、实验目的

1、了解Proteus的基本功能

2、熟悉Proteus的设计环境Preoteus ISIS及第三方编译工具Keil

3、掌握Proteus中实现单片机系统设计与仿真的步骤与方法

二、实验内容

设计与仿真的开发过程

Proteus强大的单方机系统设计与仿真功能,使之成为单片机系统应用开发和改进手段之一。

开发的整个过程都是在计算机上完成的,其过程一般分为三步: 1)Proteus 电路设计:在ISIS平台上进行单片机系统电路设计、选择元器件、接插件、连接电路和电气现则检查等。

2)Proteus 源程序设计和生成目标代码文件:在ISIS平台上或借助第三方编译工具进行单片机系统程序设计、编辑、汇编编译、代码级调试,最后生成目标代码文件(*hex)。

3)Proteus仿真:在ISIS平台上将目标代码文件加载到单片机系统中,由此实现系统实时交互与协同伤真。

三、实验工具(软件、硬件等)

1、载有Proteus的计算机一台

实验三:LED流水灯

一、实验目的

1、用Keil软件编写程序并利用开发板仿真

2、学习LED灯工作原理

二、实验内容

延时实现LED流水灯效果P2口八个灯作跑马灯。采用了寄存器存中间数。

三、实验工具(软件、硬件等)1.载有Keil软件的计算机一台 2.开发板一套

四、实验结果及分析

实验四:静态数码管

一、实验目的

1、用Keil软件编写程序并利用开发板仿真

2、学习静态显示管工作原理

二、实验内容

静态数码管流动显示0~9

二、实验工具(软件、硬件等)1.载有Keil软件的计算机一台 2.开发板一套

四、实验结果及分析

实验五:按键移位动态显示

一、实验目的

1、用Keil软件编写程序并利用开发板仿真

2、学习静态显示管工作原理

二、实验内容

静态显示管,按键不同显示不同

三、实验工具(软件、硬件等)1.载有Keil软件的计算机一台 2.开发板一套

四、实验结果及分析

实验六:中断INT0+INT1

一、实验目的

1、用Keil软件编写程序并利用开发板仿真

2、学习中断INT0和INT1的工作原理

二、实验内容

试验数码管上显示外部中断计数,用单片机脚直接控制数码管和外部中断使用

三、实验工具(软件、硬件等)1.载有Keil软件的计算机一台 2.开发板一套

四、实验结果及分析

第四篇:单片机实验报告

目录

第一章单片机简介....................................................2 第二章

实验要求..................................................3 第三章实验设备......................................................3 第四章实验安排......................................................4 第五章实验内容......................................................4

LED灯实验.......................................................4 步进马达试验....................................................5 独立按键控制LED实验............................................7 矩阵键盘实验....................................................9 静态数码管实验.................................................12 动态数码管实验.................................................14 NE555脉冲发生器实验(定时/计数器).............................16 RS232串口通信实验(接收与发送)..................................21 第六章收获体会.....................................................25

单片机实验报告

第一章单片机简介

单片机也被称为微控制器(Microcontroller),是因为它最早被用在工业控制领域。单片机由芯片内仅有CPU的专用处理器发展而来。最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。INTEL的Z80是最早按照这种思想设计出的处理器,从此以后,单片机和专用处理器的发展便分道扬镳。单片机是靠程序运行的,并且可以修改。通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,这是别的器件需要费很大力气才能做到的,有些则是花大力气也很难做到的。一个不是很复杂的功能要是用美国50年代开发的74系列,或者60年代的CD4000系列这些纯硬件来搞定的话,电路一定是一块大PCB板!但是如果要是用美国70年代成功投放市场的系列单片机,结果就会有天壤之别!只因为单片机的通过你编写的程序可以实现高智能,高效率,以及高可靠性!

单片机诞生于20世纪70年代末,经历了SCM、MCU、SoC三大阶段。

1.SCM即单片微型计算机(Single Chip Microcomputer)阶段,主要是寻求最佳的单片形态嵌入式系统的最佳体系结构。“创新模式”获得成功,奠定了SCM与通用计算机完全不同的发展道路。在开创嵌入式系统独立发展道路上,Intel公司功不可没。

2.MCU即微控制器(Micro Controller Unit)阶段,主要的技术发展方向是:不断扩展满足嵌入式应用时,对象系统要求的各种外围电路与接口电路,突显其对象的智能化控制能力。它所涉及的领域都与对象系统相关,因此,发展MCU的重任不可避免地落在电气、电子技术厂家。从这一角度来看,Intel逐渐淡出MCU的发展也有其客观因素。在发展MCU方面,最著名的厂家当数Philips公司。

Philips公司以其在嵌入式应用方面的巨大优势,将MCS-51从单片微型计算机迅速发展到微控制器。因此,当我们回顾嵌入式系统发展道路时,不要忘记Intel和Philips的历史功绩。

3.单片机是嵌入式系统的独立发展之路,向MCU阶段发展的重要因素,就是寻求

单片机实验报告

应用系统在芯片上的最大化解决;因此,专用单片机的发展自然形成了SoC化趋势。随着微电子技术、IC设计、EDA工具的发展,基于SoC的单片机应用系统设计会有较大的发展。因此,对单片机的理解可以从单片微型计算机、单片微控制器延伸到单片应用系统。

MCS51系列微控制器应用广泛,在家电、汽车甚至航空等领域都有其活跃的身影。然而,普通51系列微控制器内部资源有限,像我用Proteus构建微控制器虚拟实验室选用的AT89C52只有三个定时器、一个全双工的串行口和中断控制,并且其数据处理能力有限,不适合对大量数据进行复杂分析和运算。

因此,在不重新选型(可选用SoC)的前提下,为实现我们所需要的功能,就需要进行外围扩展。针对微控制器的特点,我们首先考虑串行扩展,因为微控制器的I/O引脚有限,并行扩展一则外围芯片面积比较大,二则对抑制EMI不利。

第二章 实验要求

1.学习Keil C51集成开发工具的操作及调试程序的方法,包括:仿真调试与脱机运行间的切换方法

2.熟悉TD-51单片机系统板及实验系统的结构及使用

3.进行MCS51单片机指令系统软件编程设计与硬件接口功能设

4. 学习并掌握Keil C51软件联机进行单片机接口电路的设计与编程调试

5.完成指定MCS51单片机综合设计题

第三章实验设备

1.HC600S-51单片机开发板 2.Keil C51 3.普中自动下载软件

第四章 实验安排

1.LED灯实验

单片机实验报告

2.步进马达试验

3.独立按键控制LED实验 4.矩阵键盘实验 5.静态数码管实验 6.动态数码管实验

7.NE555脉冲发生器实验(定时/计数器)8.RS232串口通信实验(接收与发送)

第五章 实验内容

一、LED灯实验

1.基本要求

利用位移循环指令实现LED灯的闪烁 2.实验内容

在Keil C51中进行程序的编写设计并生成.HEX文件,按照下图连接电路后将HC600S-51单片机开发板接通电源,按下开关,录入。打开普中录入生成.HEX文件,加载程序,观察实验结果,如果不正确对程序进行改进后重复此操作。实验结束后先断电源再拆线,将元器件归位后离开。3.接线图

4.电路原理图

单片机实验报告

5.程序

#include #define uint unsigned int void d(uint x){uint n;for(;x>0;x--){for(n=0;n<123;n++){;} }}

main(){unsigned int i;while(1)

{for(i=0,P0=1;i<4;i++){d(500);P0=(P0<<2);}}}

二、步进马达试验

1.基本要求

编程实现马达的正反转,调速等功能 2.实验内容

在Keil C51中进行程序的编写设计并生成.HEX文件,按照下图连接电路后将HC600S-51单片机开发板接通电源,按下开关,录入。打开普中录入生成.HEX文件,加载程序,观察实验结果,如果不正确对程序进行改进后重复此操作。实验结束后先断电源再拆线,将元器件归位后离开。3.接线图(图一)

单片机实验报告

图一 图二

4.电路原理图

上图图二 5.程序

#include “reg52.h” #define speed 2 sbit PH1 = P1^0;

//定义管脚 sbit PH2 = P1^1;sbit I01 = P1^2;sbit I11 = P1^3;sbit I02 = P1^4;sbit I12 = P1^5;

void delay(int time);

void Go(){ //A

PH1 = 0;//PH1为0 则A线圈为反向电流

I01 = 0;I11 = 0;

//以最大电流输出

PH2 = 0;//PH2为0 则B线圈为反向电流

I02 = 1;I12 = 1;

//输出0 delay(speed);//圈为反向电流

I01 = 1;//输出0 I11 = 1;

PH2 = 1;//PH2为1 则B线圈为正向电流

I02 = 0;//以最大电流输出

I12 = 0;

delay(speed);//B PH1 = 1;

//PH1为1 则A线圈为

正向电流

I01 = 0;

//以最大电流输出

I11 = 0;

PH2 = 1;//PH2为1 则B线圈为正

向电流

I02 = 1;//输出0 I12 = 1;

delay(speed);

PH1 = 1;

//PH1为1 则A线圈为正向电流

I01 = 1;I11 = 1;

PH2 = 0;

//PH2为0 则B线圈为反向电流

I02 = 0;I12 = 0;delay(speed);}

void delay(int time){

int i,j;

for(j=0;j <= time;j++)

for(i =0;i <= 120;i++);}

void main(){

while(1)

{

Go();//步进电机运行

} }

单片机实验报告

三、独立按键控制LED实验

1.基本要求

通过编程控制8个独立按键分别控制8个LED灯的开关 2.实验内容

在Keil C51中进行程序的编写设计并生成.HEX文件,按照下图连接电路后将HC600S-51单片机开发板接通电源,按下开关,录入。打开普中录入生成.HEX文件,加载程序,观察实验结果,如果不正确对程序进行改进后重复此操作。实验结束后先断电源再拆线,将元器件归位后离开。3.接线图(图一)

图一 图二

4.电路原理图 上图图二 5.程序

#include #include #define GPIO_KEY P1 //独立键盘用

P1口

#define uchar unsigned char #define uint unsigned int

void Delayms(unsigned int c);

//延时10ms uchar Key_Scan();void main(void){

unsigned char ledValue, keyNum;

ledValue = 0x01;

while(1)

{

keyNum = Key_Scan();//扫描键

switch(keyNum)

{

case(0xFE):

//返回按

键K1的数据

ledValue = 0x01;

break;

单片机实验报告

case(0xFD):

ledValue = 0x02;

break;case(0xFB):

ledValue = 0x04;

break;case(0xF7):

ledValue = 0x08;

break;case(0xEF):

ledValue = 0x10;

break;case(0xDF):

ledValue = 0x20;

break;case(0xBF):

ledValue = 0x40;

break;case(0x7F):

ledValue = 0x80;

//返回按键K2的数据

//返回按键K3的数据

//返回按键K4的数据

//返回按键K5的数据

//返回按键K6的数据

//返回按键K7的数据

//返回按键K8的数据

break;default:

break;

}

GPIO_LED = ledValue;//点亮LED灯

}

}

uchar Key_Scan(void)//键盘扫描函数 { uchar i,n=0xff;

if(P1==0xff)goto Scan_r;//无键按

下,返回

goto Scan_r;Scan_1:

while(P1!=0xff);//等待键释放

Delayms(10);Scan_r:

return n;}

void Delayms(uint x){

uint n;

for(;x>0;x--)

{

for(n=0;n<123;n++)

{;}

} }

四、矩阵键盘实验

1.基本要求

编程由16个矩阵按键控制数码管显示相应的数值 2.实验内容

在Keil C51中进行程序的编写设计并生成.HEX文件,按照下图连接电路后将HC600S-51单片机开发板接通电源,按下开关,录入。打开普中录入生成.HEX文件,加载程序,观察实验结果,如果不正确对程序进行改进后重复此操作。实验结束后先断电源再拆线,将元器件归位后离开。

3.接线图

单片机实验报告

见下图图一

图一 图二

4.电路原理图

见上图图二 5.程序

#include #define uchar unsigned char #define uint unsigned int #define uint unsigned int #define GPIO_LED P0

uchar ScanKey(void);void Delayms(uint x);main(){ unsigned char ledValue;uchar i;ledValue = 0x01;loop: i = ScanKey();

switch(i)

{ case 0xee:

ledValue = ~0x3F;

break;

case 0xde:

ledValue = ~0x06;

break;

case 0xbe:

ledValue = ~0x5B;

break;

case 0x7e:

ledValue = ~0x4F;

break;

case 0xed:

ledValue = ~0x66;

break;

case 0xdd:

ledValue = ~0x6D;

break;

单片机实验报告

case 0xbd:

ledValue = ~0x7D;

break;

case 0x7d:

ledValue = ~0x07;

break;

case 0xeb:

ledValue = ~0x7F;

break;

case 0xdb:

ledValue = ~0x6F;

break;

case 0xbb:

ledValue = ~0x77;

break;

case 0x7b:

ledValue = ~0x7C;

break;

case 0xe7:

ledValue = ~0x39;

break;

case 0xd7:

ledValue = ~0x5E;

break;

case 0xb7:

ledValue = ~0x79;

break;

case 0x77:

ledValue = ~0x71;

break;

}

GPIO_LED = ledValue;i=0;goto loop;}

void Delayms(uint x){uint n;for(;x > 0;x--)

{ for(n=0;n<123;n++)

{;}

} }

uchar ScanKey(void)//键盘扫描函数 { uchar i,n=0xff;

P1=0xf0;

if(P1==0xf0)goto Scan_r;//无键按下,返回

for(i=0,P1=0xfe;i<4;i++)

{ if((P1&0xf0)!=0xf0)

{ Delayms(10);

if((P1&0xf0)!=0xf0)

{ n=

P1;

goto

Scan_1;}

}

P1=(P1<<1)+1;

//扫描下

一行

} goto Scan_r;Scan_1:

单片机实验报告

P1=0xf0;while((P1&0xf0)!=0xf0);//等待键

释放

Delayms(10);

Scan_r:

P1=0xff;return n;} }

五、静态数码管实验

1.基本要求

编程使数码管显示字符0-F 2.实验内容

在Keil C51中进行程序的编写设计并生成.HEX文件,按照下图连接电路后将HC600S-51单片机开发板接通电源,按下开关,录入。打开普中录入生成.HEX文件,加载程序,观察实验结果,如果不正确对程序进行改进后重复此操作。实验结束后先断电源再拆线,将元器件归位后离开。3.接线框图(图一)

图一

单片机实验报告

图二

4.电路原理图

见上图图二 5.程序

#include #define uchar unsigned char #define uint unsigned int void Delayms(uint x);uchar code LED7Code[]=

{~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D, ~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71};main(){

unsigned int LedNumVal;//定义变量 while(1)

{

// 将字模送到P0口显示

LedNumVal++;

P0 = LED7Code[LedNumVal%16];

Delayms(1000);

//调用延时程序

}

}

单片机实验报告

void Delayms(uint x){uint n;for(;x > 0;x--)

{ for(n=0;n<123;n++)

{;}

} }

六、动态数码管实验

1.基本要求

编程实现8个数码管的动态扫描。通过P22、P23、P24控制3-8译码器来对数码管进行位选,通过P0口经过573的驱动控制数码管的段选,通过P13控制573的使能端,为低电平时573才会有输出。2.实验内容

在Keil C51中进行程序的编写设计并生成.HEX文件,按照下图连电路后将HC600S-51单片机开发板接通电源,按下开关,录入。打开普中录入生成.HEX文件,加载程序,观察实验结果,如果不正确对程序进行改进后重复此操作。实验结束后先断电源再拆线,将元器件归位后离开。3.接线图(图一)

图一 图二

单片机实验报告

图三

4.电路原理图

见上图图

二、图三 5.程序

#define uint unsigned int void Dsplay();void Delayms(uint x);uchar mDS[6];uchar code cDsCode[]=

{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xf8,0x80,0x90};

void main(){ uchar i;

for(i=0;i<6;i++)mDS[i]=i+1;

loop:

Dsplay();

goto loop;}

void Dsplay()//动态扫描显示

{uchar i;

for(i=0,P2=0x01;i<6;i++)

{ P1=cDsCode[mDS[i]];//输出段

Delayms(1000);

P2=P2<<1;

//选通下一位

}

P2=0x00;

//关闭位选通 }

void Delayms(uint x){uint n;for(;x > 0;x--)

{ for(n=0;n<123;n++)

{;}

} }

七、NE555脉冲发生器实验(定时/计数器)

1.基本要求

2.实验内容

在Keil C51中进行程序的编写设计并生成.HEX文件,按照下图连接电路后将HC600S-51单片机开发板接通电源,按下开关,录入。打开普中录入生成.HEX文件,加载程序,观察实验结果,如果不正确对程序进行改进后重复此操作。实验结束后先断电源再拆线,将元器件归位后离开。3.接线图

4.电路原理图

5.程序

#include #include“lcd.h” #define uchar unsigned char #define uint unsigned int #define ulong unsigned long uchar code EN_CHAR1[16]={“

CYMOMETER

”};uchar code EN_CHAR2[16]={“FREQ:

HZ”};

单片机实验报告

void TIMER_Configuration();//初始化定时器 ulong Freq;

//用来存放要显示的频率值 ulong TimeCount;//用于计算1S钟的

void main(){ uchar i, freqValue[6];

LcdInit();TIMER_Configuration();for(i=0;i<16;i++){

LcdWriteData(EN_CHAR1[i]);}

LcdWriteCom(0xc0);//第二行显示

for(i=0;i<16;i++){

LcdWriteData(EN_CHAR2[i]);}

while(1){

if(TR0==0)

//当计数器停下的时候,表明计数完毕

{

Freq = Freq + TL1;

//读取TL的值

Freq = Freq +(TH1 * 256);//读取TH的值

LcdWriteCom(0xc8);

//--求频率的个十百千万十万位--//

freqValue[0]='0'+Freq%1000000/100000;

freqValue[1]='0'+Freq%100000/10000;

freqValue[2]='0'+Freq%10000/1000;

freqValue[3]='0'+Freq%1000/100;

freqValue[4]='0'+Freq%100/10;

freqValue[5]='0'+Freq%10;

for(i=0;i<5;i++)//从最高位开始查找不为0的数开始显示(最低位为0显示0)

{

if(freqValue[i]==0x30)

{

freqValue[i]=0x20;//若为0则赋值空格键

}

else

单片机实验报告

{

break;

}

}

for(i=0;i<6;i++)

{

LcdWriteData(freqValue[i]);

}

Freq=0;//将计算的频率清零

TH1=0;//将计数器的值清零

TL1=0;

TR0=1;//开启定时器

TR1=1;//开启计数器

} } }

void TIMER_Configuration(){ TMOD=0x51;TH0=0x3C;TL0=0xB0;ET0=1;ET1=1;EA=1;TR0=1;TR1=1;} void Timer0()interrupt 1 { TimeCount++;if(TimeCount==20)//计时到1S {

TR0=0;

TR1=0;

TimeCount=0;

}

//--12MHZ设置定时50ms的初值--// TH0=0x3C;TL0=0xB0;} void Timer1()interrupt 3 {

单片机实验报告

//--进入一次中断,表明计数到了65536--// Freq=Freq+65536;

}

#include“lcd.h”

void Lcd1602_Delay1ms(uint c)

//误差 0us {

uchar a,b;for(;c>0;c--){

for(b=199;b>0;b--)

{

for(a=1;a>0;a--);

}

}

} #ifndef LCD1602_4PINS //当没有定义这个LCD1602_4PINS时 void LcdWriteCom(uchar com)

//写入命令 { LCD1602_E = 0;

//使能

LCD1602_RS = 0;

//选择发送命令

LCD1602_RW = 0;

//选择写入

LCD1602_DATAPINS = com;

//放入命令

Lcd1602_Delay1ms(1);//等待数据稳定

LCD1602_E = 1;

//写入时序

Lcd1602_Delay1ms(5);

//保持时间

LCD1602_E = 0;} #else

void LcdWriteCom(uchar com)

//写入命令 { LCD1602_E = 0;//使能清零

LCD1602_RS = 0;//选择写入命令

LCD1602_RW = 0;//选择写入

LCD1602_DATAPINS = com;// Lcd1602_Delay1ms(1);LCD1602_E = 1;//写入时序

Lcd1602_Delay1ms(5);LCD1602_E = 0;Lcd1602_Delay1ms(1);

单片机实验报告

LCD1602_DATAPINS = com << 4;//发送低四位

Lcd1602_Delay1ms(1);

LCD1602_E = 1;//写入时序

Lcd1602_Delay1ms(5);LCD1602_E = 0;} #endif #ifndef LCD1602_4PINS

void LcdWriteData(uchar dat)

//写入数据 { LCD1602_E = 0;//使能清零

LCD1602_RS = 1;//选择输入数据

LCD1602_RW = 0;//选择写入

LCD1602_DATAPINS = dat;//写入数据

Lcd1602_Delay1ms(1);

LCD1602_E = 1;

//写入时序

Lcd1602_Delay1ms(5);

//保持时间

LCD1602_E = 0;} #else void LcdWriteData(uchar dat)

//写入数据 { LCD1602_E = 0;//使能清零

LCD1602_RS = 1;

//选择写入数据

LCD1602_RW = 0;

//选择写入

LCD1602_DATAPINS = dat;

Lcd1602_Delay1ms(1);LCD1602_E = 1;//写入时序

Lcd1602_Delay1ms(5);LCD1602_E = 0;LCD1602_DATAPINS = dat << 4;//写入低四位

Lcd1602_Delay1ms(1);LCD1602_E = 1;//写入时序

Lcd1602_Delay1ms(5);LCD1602_E = 0;} #endif #ifndef LCD1602_4PINS void LcdInit()

//LCD初始化子程序 { LcdWriteCom(0x38);//开显示

单片机实验报告

LcdWriteCom(0x0c);//开显示不显示光标

LcdWriteCom(0x06);//写一个指针加1 LcdWriteCom(0x01);//清屏

LcdWriteCom(0x80);//设置数据指针起点 } #else void LcdInit()

//LCD初始化子程序 { LcdWriteCom(0x32);//将8位总线转为4位总线

LcdWriteCom(0x28);//在四位线下的初始化

LcdWriteCom(0x0c);//开显示不显示光标

LcdWriteCom(0x06);//写一个指针加1 LcdWriteCom(0x01);//清屏

LcdWriteCom(0x80);//设置数据指针起点 } #endif

八、RS232串口通信实验(接收与发送)

1.基本要求

a.通过实验了解串口的基本原理及使用,理解并掌握对串口进行初始化; b.使用串口调试助手(Baud 9600、数据位

8、停止位

1、效验位无)做为上位机来做收发试验;

c.利用串口调试助手中字符串输入进行数据发送,接受窗口显示收到的数据。2.实验内容

在Keil C51中进行程序的编写设计并生成.HEX文件,按照下图连接电路后将HC600S-51单片机开发板接通电源,按下开关,录入。打开普中录入生成.HEX文件,加载程序,观察实验结果,如果不正确对程序进行改进后重复此操作。实验结束后先断电源再拆线,将元器件归位后离开。3.接线图

单片机实验报告

4.电路原理图

5.程序

#include #include“lcd.h” unsigned char ChCode[14] = “Received data:”;void UsartConfiguration();void main(){ unsigned char i, receiveData;LcdInit();for(i=0;i<14;i++){

LcdWriteData(ChCode[i]);} UsartConfiguration();while(1){

if(RI == 1)

//查看是否接收到数据

{

receiveData = SBUF;//读取数据

单片机实验报告

RI = 0;

//清除标志位

LcdWriteCom(0xC0);

LcdWriteData('0' +(receiveData / 100));

// 百位

LcdWriteData('0' +(receiveData % 100 / 10));// 十位

LcdWriteData('0' +(receiveData % 10));

// 个位

} } } void UsartConfiguration(){ SCON=0X50;

//设置为工作方式1 TMOD=0X20;//设置计数器工作方式2 PCON=0X80;

//波特率加倍

TH1=0XF3;

//计数器初始值设置,注意波特率是4800的TL1=0XF3;TR1=1;

//打开计数器 }

#include“lcd.h”

void Lcd1602_Delay1ms(uint c)

//误差 0us {

uchar a,b;for(;c>0;c--){

for(b=199;b>0;b--)

{

for(a=1;a>0;a--);

}

}

} #ifndef LCD1602_4PINS //当没有定义这个LCD1602_4PINS时 void LcdWriteCom(uchar com)

//写入命令 { LCD1602_E = 0;

//使能

LCD1602_RS = 0;

//选择发送命令

LCD1602_RW = 0;

//选择写入

LCD1602_DATAPINS = com;

//放入命令

Lcd1602_Delay1ms(1);//等待数据稳定

LCD1602_E = 1;

//写入时序

单片机实验报告

Lcd1602_Delay1ms(5);

//保持时间

LCD1602_E = 0;} #else

void LcdWriteCom(uchar com)

//写入命令 { LCD1602_E = 0;//使能清零

LCD1602_RS = 0;//选择写入命令

LCD1602_RW = 0;//选择写入

LCD1602_DATAPINS = com;Lcd1602_Delay1ms(1);LCD1602_E = 1;//写入时序

Lcd1602_Delay1ms(5);LCD1602_E = 0;Lcd1602_Delay1ms(1);LCD1602_DATAPINS = com << 4;//发送低四位

Lcd1602_Delay1ms(1);LCD1602_E = 1;//写入时序

Lcd1602_Delay1ms(5);LCD1602_E = 0;} #endif

#ifndef LCD1602_4PINS

void LcdWriteData(uchar dat)

//写入数据 { LCD1602_E = 0;//使能清零

LCD1602_RS = 1;//选择输入数据

LCD1602_RW = 0;//选择写入

LCD1602_DATAPINS = dat;//写入数据

Lcd1602_Delay1ms(1);LCD1602_E = 1;

//写入时序

Lcd1602_Delay1ms(5);

//保持时间

LCD1602_E = 0;} #else void LcdWriteData(uchar dat)

//写入数据 { LCD1602_E = 0;

//使能清零

LCD1602_RS = 1;

//选择写入数据

LCD1602_RW = 0;//选择写入

LCD1602_DATAPINS = dat;

Lcd1602_Delay1ms(1);LCD1602_E = 1;

//写入时序

Lcd1602_Delay1ms(5);

单片机实验报告

LCD1602_E = 0;LCD1602_DATAPINS = dat << 4;//写入低四位

Lcd1602_Delay1ms(1);LCD1602_E = 1;

//写入时序

Lcd1602_Delay1ms(5);LCD1602_E = 0;} #endif

#ifndef LCD1602_4PINS void LcdInit()

//LCD初始化子程序 { LcdWriteCom(0x38);//开显示

LcdWriteCom(0x0c);//开显示不显示光标

LcdWriteCom(0x06);//写一个指针加1 LcdWriteCom(0x01);//清屏

LcdWriteCom(0x80);//设置数据指针起点 } #else void LcdInit()

//LCD初始化子程序 { LcdWriteCom(0x32);//将8位总线转为4位总线

LcdWriteCom(0x28);//在四位线下的初始化

LcdWriteCom(0x0c);//开显示不显示光标

LcdWriteCom(0x06);//写一个指针加1 LcdWriteCom(0x01);//清屏

LcdWriteCom(0x80);//设置数据指针起点 } #endif

单片机实验报告

第六章 收获体会

本次微控制器综合设计基本上使用了所选微控制器的所有资源,进一步熟悉和加深了对中断、定时器和串行通信的理解和使用。我觉得软件实验就是让我们初学者熟悉keil的使用,然后复习下汇编的思想和掌握程序的流程,所以软件实验可以很快的完成,并且慢慢熟悉调试的强大功能。硬件设计中,仿真让我很有感触,感觉蛮好玩的,可以摒弃麻烦的实验硬件自己在寝室玩而且不受硬件状态的限制,即便出错了也不会损坏。当然更重要的是这种好习惯,仿真完后再去在实验板上验证会比直接要来的确切而且便捷,至少不要老是去插拔线。在做实验中在同学指导下我试用C语言来编写程序,确实发现比汇编语言容易编写也容易理解,以前的实验还是有参考资料的习惯,现在什么都开始自己写感觉还是很有成就感的,当然这是基于程序本身就那么几行很容易编写,也不是说参考不好。总而言之,这学期的单片机实验还是收获颇丰的。相信在以后的实验学习实践工作中都会有个潜移默化的作用的。

第五篇:单片机实验报告

单片机实验报告

一、实验目的

1.熟练使用Keil、Protues两款软件 2.通过上机操作,增强个人动手实践能力 3.加深对理论知识的理解

4.培养运用汇编语言进行初步编写程序的能力

二、实验内容

1.将片外RAM3050-306FH中数据转移至片内70-8FH中。

要求:可以从Keil或Protues上看到RAM的数据转移结果。2.设计一个外部中断触发流水灯系统:当外部中断来临时,启动流水灯,即令P2口的LED轮流循环点亮。

要求:开发板或Prrotues演示

3.将片内存储器80H中存放的BCD码转换为ASCII码,要求使用表格查询技术。

要求:在Keil或Protues上看到数据转换结果。

4.各使用中断方式和查询方式设计一个方波发生器,频率为50HZ。

要求:Protues使软件间示波器显示方波。

三、实验程序

1.将片外RAM3050-306FH中数据转移至片内70-8FH中

ORG 0000H AJMP MAIN 上电,转向主程序

ORG 0030H 主程序入口

MAIN: MOV DPTR,#3050H 数据指针指向地址3050H MOV A,#04H 将立即数04H送A寄存器

MOV R0,#20H NEXT: MOVX @DPTR,A INC DPTR 数据指针DPTR自加一

DJNZ R0,NEXT 判断是否跳转到NEXT或继续向下执行

MOV DPTR,#3050H MOV R0,#70H MOV R2,#20H NEXT1: MOVX A,@DPTR MOV @R0,A INC DPTR INC R0 DJNZ R2,NEXT1

SJMP $ 等待

END 2.设计一个外部中断触发流水灯系统:当外部中断来临时,启动流水灯,即令P2口的LED轮流循环点亮 ORG 0000H SJMP MAIN 上电,转向主程序

ORG 0003H 外部中断0向量入口

AJMP INSER ORG 0030H 主程序入口

MAIN: SETB EX0 SETB IT0

SETB EA CPUHERE: SJMP HERE ORG 0200H INSER: MOV R2,#08H MOV A,#01H NEXT: MOV P2,A LCALL DELAY RL A DJNZ R2,NEXT NEXT或继续向下执行

RETI DELAY: MOV R3,#0FFH DEL2: MOV R4,#0FFH DEL1: NOP

允许外部中断0中断 选择边沿触发方式 开中断 等待中断 设置循环次数 赋初值,设置高电平亮 将初值送往P2口 延时 左移一位

判断循环次数,是否跳转到中断返回 延时程序 DJNZ R4,DEL1 DJNZ R3,DEL2 RET END 3.将片内存储器80H中存放的BCD码转换为ASCII码,要求使用表格查询技术 ORG 0000H LJMP MAIN ORG 0030H主程序起始地址 MAIN: MOV 80H,#05H 将立即数50H转送内存单元80H MOV A,80H 将内存单元80H中的内容送寄存器A MOV DPTR,#TAB MOVC A,@A+DPTR A寄存器内容加指针偏移量后送A寄存器 MOV 80H,A RET TAB: DB 30H,31H,32H,33H,34H DB 35H,36H,37H,38H,39H 4.1中断方式产生50HZ方波

ORG 0000H

AJMP MAIN

ORG 0030H 主程序入口 MAIN: MOV TMOD,#10H 设置定时器工作模式为模式1 MOV TH1,#0D8H 装入T1计数初值

MOV TL1,#0F0H

SETB ET1 开中断

SETB EA CPU开中断

SETB TR1 启动定时器T1 HERE: SJMP HERE 等待中断 ORG 001BH T1中断向量地址

CLR TF1 将TF1清零

CPL P2.0 P2.0取反输出

MOV TH1,#0D8H 重装初值

MOV TH0,#0F0H

RETI;中断返回

END 4.2 查询方式产生50HZ方波

ORG 0000H

AJMP MAIN

ORG 0030H 主程序入口

MAIN: MOV TMOD,#10H 设置定时器的工作模式为模式1 SETB TR1 启动定时器T1 LOOP: MOV TH1,#0D8H 装入T1计数初值

MOV TH0,#0F0H JNB TF1,$ T1没有溢出则等待

CLR TF1

产生溢出,清标志位

CPL P2.0 P2.0取反输出

SJMP LOOP 循环

END

四、实验结果截图

1.2

3.4.1

4.2

下载基于单片机的实验报告5则范文word格式文档
下载基于单片机的实验报告5则范文.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    单片机实验报告

    实验四、中断交通灯实验 林立强1000850116 一、实验目的 1、了解MCS-51单片机的组成、中断原理,中断处理过程、外部中断的中断方式。 2、掌握中断响应及处理的编程方法。 二......

    单片机实验报告

    51单片机控制流水灯 目录 (1)51精简开发板简介 (2)实验目的 (3)实验内容 (4)元件 (5)原理图 (6)实验步骤 (7)主要功能介绍(8)实验错误及分析 (9)调试及程序 (10)系统测试 (11)实验心得 一、51精简......

    单片机实验报告大全

    单片机原理与应用实学校:合肥工业大学 班级:计算机科学与技术 学号: 姓名:验报告 第一章MC51 单片机原理及应用软件实验 实验1:系统认识实验 1. 实验目的 (1)了解ZY15MCU12BC2单片......

    单片机实验报告

    单片机实验一 实验报告 课程名称: 姓名: 系别: 专业: 年级: 学号: 指导教师: 单片机原理及应用实验 陈璐 信息系 电气工程及其自动化 2012级 120712041 李莉 2015 年6 月 25 日......

    单片机实验报告

    实验一 uVision2 集成开发环境的使用 一、 实验目的和要求二、实验设备与仪器三、实验内容四、实验原理、方法与步骤 五、实验小结:1.简述生成应用程序的过程。2.记录程序调试......

    单片机实验报告4

    单片机实验报告(实验一) 一、实验目的: 1. 掌握stm8的时钟切换。 2. 熟悉汇编语言的指令系统。 3. 加深对stm8功能的理解,掌握去其使用方法。 二、实验仪器: stm8s105c6单片机......

    单片机实验报告[推荐五篇]

    单片机实验报告 流水灯实验一 一:实验目的 1、掌握51单片机如何控制信号输出。 2、掌握Keil C集成开发环境的使用。3、掌握51开发平台的使用。 二、实验内容 在开发板上实现8......

    单片机实验报告[五篇模版]

    实验一 一、 实验题目:试编写一段程序,其功能为将21H单元的内容8位分别依次存放到从22H开始的8单元中。 二、 keil代码: org 0000h jmp start org 0100h start: mov 21h,#8;......