第一篇:单片机实验报告2
目录 一、实验一··········································1 二、实 验二··········································7 三、实验三·········································11 四、实验四·········································15
一 实验一验实证验器数计/时定ﻩ 定时/计数器验证实验
一、
实验目得
熟悉定时/计数器T0得特点,学会合理选择定时方式并能根据具体情况结合软件得方式定时。
二、
实验 设备及器件
IBM PC机 一台 PROTEUS 硬件仿真软件 Keil C51。
三、实验内容
用AT89C51单片机得定时/计数器T0产生1s得定时时间,作为秒计数时间,当1s产生时秒计数加1;秒计数到60时,自动从0开始。
四、
实验要求
要求采用Proteus软件实现上述实验.五、
实验步骤
1.打开Proteus ISIS编辑环境,按照表1-1所列得元件清单添加元件。
元件名称 所属类 所属子类 AT89C51 Microprocessor 8051 Family CAP Capacitors Generic CAP-ELEC Capacitors Generic CRYSTAL Miscellaneous —— RES Resistors Generic 7SEG--CAT—GRN Optoelectronics 7—Segment Displays PULLUP Modeling Primitives Digital[Miscellaneous] 表1- 1 元件清单
元件全部添加后,在Proteus ISIS得编辑区域中按图1—1所示得原理图连接硬件电路。
图1 — 1 电路原理图
2.根据参考程序绘出流程图,并辅以适当得说明。
流程图如图1 1 —2 2 所示: :
开始单片机数码管初始化设置定时器0初始化开中断是否有中断?进入中断程序送时间常数COUNT+1是否计够1秒?YN中断返回NSECOND+1是否等于60秒?YSECOND归零Y分离计数值十位个位N查表显示十位个位 图1 1--2 程序流程图
3.打开KeilμVision4,新建Keil项目,选择AT89C51单片机作为CPU,将参考程序导入到“Source Group 1”中.在“Options for Target”对话窗口中,选中“Output”选项卡中得“Create HEX File”选项与“Debug”选项卡中得“Use:Proteus VSM Simulator”选项。编译汇编源程序,改正程序中得错误。
4.在Proteus ISIS中,选中AT89C51并单击鼠标左键,打开“Edit ponent“对话窗口,设置单片机晶振频率为12MHz,在此窗口中得“Program File”栏中,选择先前用Keil生成得、HEX文件。在Proteus ISIS得菜单栏中选择“File"→“Save Design”选项,保存设计,在Proteus ISIS得菜单栏中,打开“Debug”下拉菜单,在菜单中选中“Use Remote Debug
Monitor”选项,以支持与Keil得联合调试.5.在Keil得菜单栏中选择“Debug”→“Start/Stop Debug Session“选项,或者直接单击工具栏中得“Debug”→“Start/Stop Debug Se
ssion”图标,进入程序调试环境。按“F5”键,顺序运行程序。调出“Proteus ISIS“界面可以瞧到7段数码管显示从0~59s得计数值,每个数值显示1s,如图1—3所示。
图1 — 3
程序运行结果
六、
实验 程序
SECOND EQU 30H COUNT H13 UQEﻩ0GROﻩﻩ0 Hﻩ
LJMP START
ORG0 HBﻩﻩ
LJMP INT_T0 START: H00#,DNOCESﻩﻩVOMﻩ
H00#,TNUOCﻩ VOMﻩ ELBAT#,RTPDﻩ VOMﻩﻩ AﻩﻩRLCﻩﻩ
MOV
A,0Pﻩ
MOV
A,2Pﻩ
MOV H00#,DOMTﻩﻩ
652/)00005—63556(#,0HTﻩ VOMﻩ 652 DOM)00005—63556(#,0LTﻩ VOMﻩﻩ 0RT BTESﻩﻩ 0TE BTESﻩﻩ
AEﻩBTESﻩ
H28#,EI
VOMﻩ
LJMP $ﻩINT_T0:MOV 652/)00005—63556(#,0HTﻩﻩ VOMﻩﻩ
652 DOM)00005—63556(#,0LTﻩ CNIﻩﻩ
COUNT
MOV
TNUOC,Aﻩ ﻩ CJNE 2I,02#,Aﻩ
VOMﻩﻩ COUNT,#00H
ﻩ CNIﻩ SECOND
ﻩ MOV
A,SECOND
CJNE 1I,06#,Aﻩ ﻩ MOV
H00#,DNOCESﻩI1:
MOV DNOCES,Aﻩﻩ ﻩ MOV H01#,Bﻩﻩ
VIDﻩﻩ AB
MOVC A,A+DPTR
VOMﻩ P0,A
B,AﻩﻩVOMﻩ
RTPD+A,AﻩCVOMﻩ A,2PﻩﻩVOMﻩﻩI2:
ITERﻩTABLE:
DB3 H66,HF4,HB5,H60,HFﻩ
DB 6DH,7DH,07H,7FH,6FH
DNEﻩ七、思考题
1.罗列一下 Proteus 软件得能带给我们得好处, , 指出一点最能帮助您得地方。
使用Proteus软件能使我们方便得搭建电路,同时在没有元器件得情况下进行便于仿真,方便我们在将程序写入单片机前确认运行就是否正确,同时可在采购器件之前即可开始开发产品,而不必等到器件采购完后搭建电路才进行程序调试。
2.用 用 Proteu s 界面中得播放键运行仿真与 Ke i lμVision4 得环境中联调运行它们两者得区别在什么地方?
用Proteus界面中得播放键运行仿真仅可以观察运行结果,即程序运行在硬件表面上得表现。而联调得时候可以再Keil软件里查瞧各寄存器与存储器得状况,即硬件得内部情况。
3.K K eil 软件软件仿真与 P r ote us 得仿真对比..使用Proteus仿真可从硬件得角度观察仿真结果,使仿真结果更加形象直观,使我们可从硬件运行状态清楚得判断运行结果就是否正确。而在Keil环境中则就是从程序得角度通过观察程序中数据得变化来观察仿真结果,需要对程序运行结果充分了解.八、实验总结 及相关问题
通过本次实验了解了Ptoteus软件得使用方法,以及在掌握了Keil得使用方法下,学会了Proteus与Keil软件联调得方法。
在用Proteus中由于忽略了要在总线处放置网络标号导致联调失败,最后通过观察发现数码管引脚电平无变化发现此问题,放置网络标号后运行仿真时数码管引脚电平发生变化可就是数码管却没有变亮,经过多次检查接线,未发现接线错误后,觉得可能就是软件本身错误,故将总线及数码管周围硬件线路重新绘制一遍后再次运行仿真及可得到图1—3得结果。
二 实验二机片单ﻩ 单片机 O I/O 口控制实验
一、
实验目得
利用单片机得P1 口作IO 口,使同学学会利用P1 口作为输入与输出口。
二、
实验设备及器件
IBM PC 机 一台 DP—51PRO、NET 单片机仿真器、编程器、实验仪三合一综合开发平台一台
三、
实验内容
1.编写一段程序,用P1 口作为控制端口,使D1 区得LED 轮流亮。
2.编写一段程序,用P1、0~P1、6 口控制LED,P1、7 控制LED 得亮与灭(P1、7 接按键,按下时LED 亮,不按时LED 灭).四、
实验要求
学会使用单片机得P1 口作IO 口,如果有时间同学也可以利用P3 口作IO 口来做该实验.五、
实验步骤
1.用导线把A2 区得J61 接口与D1 区得J52 接口相连。原理如图2—1 所示。
图2 — 1 实验二 原理图
2.先编写一个延时程序。
延时程序 见程序1 1 子程序 DELAY。
3.将LED 轮流亮得程序编写完整并使用TKStudy ICE 调试运行。
LED 轮流亮程序见程序1。
调试运行结果 :D1 区 LE D轮流亮..4.使用导线把A2 区得J61 接口得P1、0~P1、6 与D1 区得 J52 接口得LED1~LED7 相连,另外A2 区J61 接口得P1、7 与D1 区得J53 得KEY1 相连. 5.编写P1、7 控制LED 得程序,并调试运行。(按下K1 瞧就是否全亮).P1、7 控制L ED 得程序见程序2 2。
调试运行结果:按下 P1、7 7 后 D1 区LE E D全灭。
6.A2 区J61 接口得P1、7 与D1 区得J54 得SW1 相连。然后再使用TKStudy ICE 运行程序,查瞧结果。
P1、7 控制L ED 得程序见程序2 2。
调试运行结果:按下P1 1、7后D1 1 区LE E D全亮。
六、
实验参考程序
序 程序 1: :
ORG
0000 HﻩLJMP
NIAMﻩORG
0100H MAIN: MOV
A,#0FFH
CLR CﻩﻩMAINLOOP:CALL YALEDﻩ A
CLRﻩﻩ
A,1Pﻩ VOMﻩ
SJMP POOLNIAMﻩDELAY: MOV
R7,#0 LOOP: MOV
0#,6Rﻩ
DJNZ $,6Rﻩ $,6R ZNJDﻩﻩ ﻩ DJNZ R6,$
ﻩ DJNZ R7,LOOP
RET
ﻩ END 程序 2 2: :
ORG
000H LJMP MAIN ORG 0010 HﻩMAIN: JB
DELTES,7、1PﻩCLRLED:CLR
0、1Pﻩ
CLR 1、1Pﻩﻩ
RLCﻩ P1、2
ﻩ CLR
3、1Pﻩ
CLR 4、1Pﻩﻩ ﻩ CLR
P1、5
RLCﻩ P1、6
ﻩ SJMP MAIN SETLED:SETB P1、0
ﻩ SETB 1、1Pﻩ
2、1P BTESﻩ 3、1PﻩBTESﻩﻩ
SETB 4、1Pﻩ
SETB 5、1Pﻩ
6、1PﻩBTESﻩ NIAMﻩPMJSﻩﻩ DNEﻩﻩ七、实验思考题
1.请同学思考一下, , 想出几个实现以上功能得编程方法。
程序1可利用单片机得定时计数器通过选择定时计数器工作方式与预置初值设定延时时间,通过定时计数器产生得中断在中断程序中对A进行移位后输出至P1口.程序2可在判断P1、7高低电平后根据判断结果直接将#80H或#7F直接送P1口而不必逐位进行位操作。
2.请同学再思考一下, , 第二个程序中如果使用 KEY1 作为外部中断控制 LED D 得亮与灭时, , 程序应如何修改。
此时将KEY1接/INT0口,在主程序中开启外部中断设置外部中断触发方式,通过中断服务子程序控制LED亮灭。程序如下所示: 0GROﻩ00 Hﻩ LJMP MAIN
ORG3000 序程务服断中ﻩ;Hﻩ LJMP DELTESﻩMAIN: MOV H04#,PSﻩ 断中部外开;0TE BTESﻩ CLR 0TIﻩ;设置为电平触发
SETB AEﻩCLRLED:CLR P1、0
CLR P1、1
2、1PﻩRLCﻩ CLR 3、1Pﻩ 4、1PﻩRLCﻩ CLR P1、5
CLR 6、1Pﻩ DELRLC PMJSﻩSETLED:SETB P1、0
1、1PﻩBTESﻩ SETB P1、2
3、1PﻩBTESﻩ 4、1P BTESﻩ SETB 5、1Pﻩ 6、1P BTESﻩ ITERﻩ
DNEﻩ八、实验总结 及相关问题
通过本次实验掌握了使用 TKStudy ICE 进行硬件仿真调试得方法,在设置仿真器驱动程序声明时对 C:Keil 目录下得Tools、ini 文件添加描述时,由于添加得路径错误导致无法进行硬件仿真调试,修改为正确路径后方可在DEBUG 窗口中得 Use 选项中找到对应得选项。使用 TKStudy ICE 进行硬件仿真调试相比本学期得电子系统设计中用到得调试方法更快捷,使用更方便. 与此同时,通过本次实验对单片机得 I/O 控制有了更深入得了接,同时加深入对单片机I/O 编程得理解.实验三
串转并 O I/O 口实验
一、
实验目得
熟悉并掌握串转并得I/O口扩展方法。
二、
实验设备及器件
IBM PC机 一台 DP-51PRO、NET单片机仿真器、编程器、实验仪三合一综合开发平台 一台
三、
实验内容
1.写程序,通过单片机得P1口控制74HC164得串行输入端口,实现串并转换.
2.验证串并转换数据得正确性。
四、
实验要求
熟悉串并转换芯片得工作原理,学会使用串并转换芯片扩展单片机得I/O 口资源.表3-1 74HC 164 真值表
五、
实验步骤
1. 短接C5区JP10接口,将C5区J43接口与A2区J61接口得P10~P13对应相连(CLK对P10等等)。如图3-1所示。
图3 —1 实验 三 原理图
2。
运行编写好得软件程序,完成一次串并转换。
实验 程序 见 实验参考程序。
2. 使用C2区得逻辑笔或D1区得J52接口(LED指示灯)测试并行输出数据Q0~Q7数据得正确性。
调试运行结果:通过观察 LE D得亮灭情况可判断完成一次串并转换, , 且转换结果正确无误..六、
实验参考程序
CLK
0、1P UQEﻩDINA
EQU P1、1 DINB
EQU P1、2 CLR164 3、1P UQEﻩORG0000 HﻩﻩLJMP NIAMﻩORG0010 HﻩﻩMAIN:
MOV
SP,#60H
ﻩ NOP
CLR
CLK
SETB BNIDﻩ
RLCﻩﻩ CLR164
461RLC BTESﻩﻩ
HFF0#,Aﻩ VOMﻩ VOMﻩﻩ
H80#,4RﻩSLCHG: RLC
Aﻩ
C,ANIDﻩ VOMﻩ
SETB
CLK
PONﻩ
KLC
RLCﻩ
PONﻩ GHCLS,4R
ZNJDﻩﻩ $ PMJSﻩﻩ
END 七、实验思考题
参考图 3—2电路图,尝试编写软件程序,实现 8 位 LED 流水灯得控制。
图 图 3、2 实验原理图
可利用单片机得定时计数器通过选择定时计数器工作方式与预置初值设定延时时间,通过定时计数器产生得中断在中断程序中对A进行移位。程序如下所示:
CLK
EQU
0、1Pﻩ ﻩ DINA
1、1P UQEﻩ ﻩ DINB
2、1P
UQEﻩ
CLR164 EQU P1、3
0 GROﻩ000 Hﻩ
LJMP MAIN
ﻩ ORG
000BH
;定时器 0 中断服务程序
LJMP SLCHG MAIN:
H06#,PSﻩ VOMﻩ
NOP
CLR
CLK
BNID BTESﻩ
461RLCﻩﻩRLCﻩ ﻩ SETB 461RLCﻩ
MOV
HFF0#,Aﻩ
MOV
1式方作工 0 器时定ﻩ;H10#,DOMTﻩ VOMﻩﻩ
数常间时 sm2 送ﻩ;H81#,0HTﻩ
HCF0#,0LTﻩ VOMﻩ ﻩ SETB
0RTﻩ;开中断
0TEﻩBTESﻩ
AEﻩBTESﻩ
$ PMJSﻩSLCHG: MOV ﻩ H81#,0HTﻩ
MOV
HCF0#,0LTﻩ A
CLRﻩﻩ C,ANID
VOMﻩﻩ ﻩ SETB
CLK
NOP
KLCﻩ RLCﻩ RETI
DNEﻩ八、实验总结 及相关问题
由于具有之前实验得基础所以本实验基本没碰到什么问题,调试运行都符合实验要求,通过本次实验对串并转化程序得编写有了一定了解,通过编写流水灯程序加深了对单片机串并口得了解。
实验四
继电器控制实验
一、
实验目得
加深理解继电器得工作原理与特点,掌握利用单片机得IO口控制继电器得一般方法。
二、
实验设备及器件
IBM PC机 一台 DP—51PRO、NET单片机仿真器、编程器、实验仪三合一综合开发平台 一台
三、
实验内容
1.利用D1区得拨动开关与LED,学习继电器得工作原理与特点。
2.编写一段程序,用P1、0口控制继电器,继电器控制LED得亮与灭,(与CLOSE连通时,一盏LED亮;不连通时该LED灭。与OPEN连通时,另一盏LED亮,不通时该LED灭).
四、
实验要求
学会继电器得使用与利用单片机得IO口控制继电器得方法。
五、
实验步骤
图4 -1 继电器驱动控制电路图
1.用短路帽短接JP7,使用导线把D1区J54接口得SW1与C7区J9接口得KJ(任意一根针)相连接。
2.使用导线把D1区J52接口得LED1、LED2与C7区J103接口得OPEN1,CLOSE1分别相连,另外C7区J103接口得1接地(GND)。
3.接好线后,同学可以拨动D1区得SW1拨动开关,观察现象(拨到1时LED2亮,拨到0时LED1亮),并得出结论。
运行结果: : 拨到1 时LED 2 亮,拨到0 时L ED 1 亮,说明每拨动一次开关改变一次继电器得状态。
4.然后把C7 区J9 接口得KJ 改接到A2 区得J61 接口得P10。再编写一个程序程序(参考实验二), 使P1、0 口延时一段时间后改变电平值,来控制继电器得开关。
实验 程序见实验参考程序。
调试运行结果: : 两 个 LED 交替变亮, , 继电器状态不断改变。
六、
实验参考程序
ORG 0000 HﻩLJMP MAIN ORG
0100H MAIN: MOV
R7,#0 LOOP: MOV
0#,6Rﻩ ﻩ DJNZ $,6Rﻩ $,6RﻩZNJDﻩﻩ ﻩ DJNZ $,6Rﻩ POOL,7RﻩZNJDﻩﻩ ﻩ CPL
0、1Pﻩ NIAM PMJSﻩﻩ
DNEﻩ
七、
实验思考题
1.请同学思考一下,改由 OPEN 2、2、CLOSE2 时本实验如何进行。
同使用OPEN1、1与CLOSE1时连接方法类似,把D1区J52接口得LED1、LED2与C7区J103接口得OPEN2,CLOSE2分别相连,另外C7区J103接口得2接地(GND)即可。
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
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
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
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
{~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
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
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
第四篇:单片机实验报告
实验
四、中断交通灯实验
林立强
1000850116
一、实验目的
1、了解MCS-51单片机的组成、中断原理,中断处理过程、外部中断的中断方式。
2、掌握中断响应及处理的编程方法。
二、实验原理
MCS-51的中断系统中有5个中断源:外部中断INTO,INT1,定时器/计数器TO、T1中断和串口UART中断,它们对应不同的中断矢量。如表:
IE是中断允许寄存器,其中EXO,ETO,EX1,ET1,ES分别是上述5个中断的允许控制位,EA位是中断总允许位,每个中断只有在相应中断允许且总中断也允许的情况下,才能得到中断响应。80XX51的5个中断都可以设为高低2个优先级,IP是中断优先级寄存器,其中PXO,PTO,PX1,PT1,PS位分别对应5个中断的优先级设置,置“1”时设为高优先级中断,为“0”时是低优先级中断。在有中断嵌套要求时,低优先级中断可被高优先级所中断。当同一级的中断同时到来时,先响应中断矢量排在前面的中断。
三、实验电路
电路原理图如下,所需元件为:AT89C51、SW-SPDT、LED-RED、LED-GREEN、LED-YELLOW、RES、TRAFFICLIGHTS
四、实验内容
参照实验电路,设计交通灯控制系统。模拟交通信号灯控制:一般情况下正常显示,东西-南北交替放行,各方向通行时间为30秒。有救护车或警车到达时,两个方向交通信号灯全为红色,以便让急救车或警车通过,设通行时间为10秒,之后交通恢复正常。用单次脉冲模拟急救车或警车申请外部中断。
1、在生成HEX文件后,用Proteus软件对电路图进行计算机仿真;
2、程序下载到单片机实验板上验证;(实验板数码管的驱动程序见附件)。
五、程序流程图
仿真图:
紧急情况:
源程序:
ORG 0000H
AJMP START
ORG 0023H //串口中断地址
AJMP SBR1
START:MOV TMOD,#00100000B
//定时器方式2
MOV TL1,#0FDH //9600bps/11.0592MHz
MOV TH1,#0FDH
SETB TR1
MOV SCON,#01100000B //方式1
MOV R0,#20H
MOV R1,#40H
ACALL SOUT
SJMP $
SBR1: JNB RI,SEND
ACALL SIN
SJMP NEXT SEND: ACALL SOUT NEXT: RETI
SOUT: MOV A,@R0
MOV C,P
CPL C
MOV ACC.7,C
INC R0
MOV SBUF,A
CLR TI
RET
SIN: MOV A,SBUF
MOV C,P
CPL C
ANL A,#7FH
MOV @R1,A
INC R1
CLR RI
RET
PLAY: MOV A,R7
MOV B,#10
RET
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H
// 0
A B C D E F
END
第五篇:单片机实验报告
单片机实验一
实验报告
课程名称: 姓
名: 系
别: 专
业: 年
级: 学
号: 指导教师:
单片机原理及应用实验
陈璐 信息系
电气工程及其自动化
2012级 120712041 李莉
2015 年 月 25
日
1.实验目的和要求
1)熟悉Keil 软件界面,以及编辑、编译、运行程序的步骤;
2)熟悉Proteus软件界面,掌握用Proteus画仿真图的方法。2.主要仪器设备
Keil 软件与Proteus仿真软件 3.实验设计要求
利用单片机、1个开关和1个发光二极管,构成一个简单的开关检测系统的仿真电路图。单片机P3.0引脚接按钮开关,P1.0引脚接发光二极管的阴极。当开关闭合时,发光二极管亮;开关打开时,发光二极管灭;按钮开关与发光二极管没有任何电气上的联系。
单片机对开关K的状态的检测由程序检测P3.0引脚的输入电平。当开关K闭合,即P3.0脚输入低电平;当开关K打开,即P3.0脚输入高电平。使用发光二极管,阳极接+5V,阴极接P1.0端口。当程序控制P1.0输出高电平时,发光二极管D1灭;当程序控制P1.0输出低电平时,发光二极管D1亮。4.操作方法与实验步骤
(1)Keil C51软件使用
在Keil C51集成开发环境下,建立一个工程并编辑以下源程序,熟悉Keil C51集成开发环境下各种菜单、命令的使用。
#include “reg51.h” #define uchar unsigned char #define uint unsigned int sbit in=P3^0;sbit out=P1^0;void main(void){ while(1){ in=1;if(in= =0)out=0;else out=1;} }(2)建立新文件
进入Proteus ISIS界面,单机主菜单项【文件】→“新建设计”选项,就会弹出“新建设计”窗口,窗口中提供了多种模版选择。其中横向图纸为Landscape,纵向图纸为Portrait,DEFAULT为默认模版。单击选择的模版图标,再单击“确定”按钮,即建立一个该模版的空白文件。如果直接单击“确定”按钮,即选用系统默认的DEAFAUILT模版。
单击保存按钮,在弹出的对话框“保存ISIS设计文件”中输入文件名再单击“保存”,则完成新建设计文件的保存操作,其后缀自动为“.DSN”。
(3)设定绘图纸大小 单击菜单中的【系统】→“设置图纸大小”,选择所需图纸的尺寸位A4。
(4)选取元器件并添加到对象选择窗口中
单击器件选择按钮,弹出选取元器件对话框。在其左上角“关键字”一栏中输入元器件名称“AT89C51”,则出现关键字匹配的元器件列表。选中AT89C51所在行或单击AT89C51所在行后,再单击“确定”按钮,便将元器件AT89C51加入到ISIS对象选择窗口中。按此操作方法逐一完成其他元器件的选取。本设计中使用的各元器件的关键字相应为“AT89C51”、“BUTTON”(按钮开关)、“CAP”(瓷片电容)、“CAP-ELEC”(电解电容)、“CRYSTAL”(晶振)、“RES”(电阻)等。被选取的元器件加入到ISIS对象选择窗口中。(5)放置、移动、旋转元器件
单击ISIS对象选择窗口中的元器件名,蓝色条出现在该元器件名上。把鼠标指针移到编辑区某位置后,单击就可放置元器件于该位置,每单击一次,就放置一个元器件。如果要移动元器件,先右击元器件使其处于选中状态,再按住鼠标左键进行拖动,达到目标处后,松开鼠标即可。如要调整元器件方向,先将指针指在元器件上单击鼠标右键选中,再单击相应的旋转按钮。若多个对象一起移动或转向,可选择相应的块操作命令。(6)放置电源、地(终端)
单击工具箱的终端模式按钮,然后在对象选择窗口中单击POWER来选中电源,然后使用元器件调整工具按钮进行方向调整,最后在编辑区中单击放置电源。(7)电路图布线
单击元器件引脚间、线间等接线处,自动生成连线。(8)电气检测
单击电器检查快捷键按钮,根据电气检查列表的指示修改设计中的错误,完成实验。5.实验内容及实验数据记录
每当按下K时,LED灯就会发光。
C2U130pF19XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD*********617X112MHz18XTAL2D1R24.7K930pFRSTR4220293031C310uFPSENALEEAKR310K10K12345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51LED-GREENC1R1220 6.实验数据处理与分析
每当按下K时,in(p3.0)I/O口就会变为低电平,该信号使得CPU给out(p3.0)I/O口发送低电平,使得LED灯发亮。7.实验过程中遇到的问题及解决方法
一开始安装软件的时候最后一步设置完通信设置时,鼠标点击“好”,但是屏幕一直显示“通信错误”的提示,经过重复操作,还是没有成功,结果是因为“端口选择”处选择错了,改正后最终安装成功。8.心得体会
对于这次单片机实验不仅巩固了以前所学过的知识,而且学到了很多在书本上没有学到过的知识,掌握了一种系统的研究方法,可以进行一些简单的编程。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,从而提高自己的实际动手能力和独立思考的能力。同时在设计的过程中发现了自己的不足之处,例如对以前所学过的知识理解得不够深刻,掌握得不够牢固等,在以后的学习中尤其应该注意。