1、单片机实验指导书白城师范学院机械工程学院系2目 录实验一 实验板使用,简单程序设计 .3实验二 汇编语言程序设计 .4实验三 中断系统应用实验 .7实验四 定时器计数器使用 .9实验五 查询式键盘、显示实验 .12实验六 DAC0832 并行 D/A 转换实验 .15实验七 ADC0809 并行 A/D 转换实验 .173实验一 实验板使用,简单程序设计一、实验目的1. 熟悉单片机实验版、Keil C51软件使用2. 学习简单程序的调试方法3. 掌握存储器读写方法二、实验说明本实验指定某块存储器的起始地址和长度,要求能将其内容置 1。通过该实验学生可以了解单片机读写存储器的方法,同时也可以了解
2、单片机编程、调试方法。三、实验内容及步骤1.安装好仿真器,用串行数据通信线连接计算机与仿真器,把仿真头插到模块的单片机插座中,打开模块电源,插上仿真器电源插头(USB 线) 。2.启动 PC 机,打开 KEIL 软件,软件设置为模拟调试状态。在所建的项目文件中输入源程序,进行编译,编译无误后,执行程序,点击全速执行快捷按钮,点击暂停按钮,观察存储块数据变化情况,点击复位按钮,可再次运行程序。 (KEIL 软件使用详见附录)3.打开 CPU 窗口,选择单步或跟踪执行方式运行程序,观察 CPU 窗口各寄存器的变化,可以看到程序执行的过程,加深对实验的了解。四、流程图及参考程序1.参考程序ORG 0
3、000HSTART EQU 30HMOV R0, #START ;起始地址MOV R2, #10 ;设置 10 字节计数值mov a,#01hLoop:MOV R0,AINC R0 DJNZ R2,Loop NOPLJMP $END 2.流程图五、思考题如何将存储器块的内容移动到另一位置。是设置块长度地址加 1当前地址内容置 1是否清除完? 否结束设置块起始地址4实验二 汇编语言程序设计一、实验目的1.进一步熟悉汇编语言编程和程序调试2.学习P1口的使用方法3.学习延时子程序的编写和使用二、实验说明P1口是准双向口,它作为输出口时与一般的双向口使用方法相同。由准双向口结构可知当P1口用作输入口
4、时,必须先对口的锁存器写“1”,若不先对它写“1”,读入的数据是不正确的。三、实验内容及步骤实验(一):本实验需要用到单片机最小应用系统(F1 区)和十六位逻辑电平显示模块(I4 区)。用 P1 口做输出口,接十六位逻辑电平显示,程序功能使发光二极管从右到左轮流循环点亮。1.使用单片机最小应用系统。用扁平数据线连接单片机 P1 口 JD1F 与十六位逻辑电平显示模块 JD2I,打开相关模块电源。2.用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:缺口朝上。3.打开 Keil uVision2 仿真软件,首先建立本实验的项目文件,输入源程序(实验(一) )
5、,进行编译,直到编译无误。4.进行软件设置,选择硬件仿真,选择串行口,设置波特率为 38400。5.打开模块电源和总电源,点击开始调试按钮,点击 RUN 按钮运行程序,观察发光二极管显示情况。发光二极管单只从右到左轮流循环点亮。实验(二):用 P1.0、P1.1 作输入接两个拨断开关,P1.2、P1.3 作输出接两个发光二极管。程序读取开关状态,并在发光二极管上显示出来。本实验需要用到单片机最小应用系统(F1 区)、十六位逻辑电平显示模块(I4 区)以及八位逻辑电平输出模块(B1 区)。1.用导线分别把单片机最小应用系统的 P1.0、P1.1 连接到两个拨断开关(B1 区)K0、K1,P1.2
6、、P1.3 连接到两个发光二极管(I4 区)L0、L1。2. 输入源程序(实验(二) ) ,编译无误后,全速运行程序,拨动拨断开关,观察发光二极管的亮灭情况。向上拨为熄灭,向下拨为点亮。3.也可以把源程序编译成可执行文件,把可执行文件用 ISP 烧录器烧录到 89S52/89S51 芯片中运行。(ISP 烧录器的使用查看附录二)注:在做完实验时记得养成一个好习惯:把相应单元的短路帽和电源开关还原到原来的位置!以下将不再重述。四、流程图及参考程序51流程图2实验参考程序实验(一) 实验(二)ORG 0000HLJMP STARTORG 0030HSTART: MOV A, #0FEHMOV R5
7、, #8OUTPUT:MOV P1, ARL ACALL DELAYDJNZ R5, OUTPUTLJMP STARTDELAY:MOV R6, #0MOV R7, #0DELAYLOOP:DJNZ R7, DELAYLOOPDJNZ R6, DELAYLOOPRETENDKEYLEFT BIT P1.0KEYRIGHT BIT P1.1LEDLEFT BIT P1.2LEDRIGHT BIT P1.3ORG 0000HLJMP STARTORG 0030HSTART:SETB KEYLEFTSETB KEYRIGHTLOOP: MOV C,KEYLEFTMOV LEDLEFT,CMOV C,
8、KEYRIGHTMOV LEDRIGHT,CLJMP LOOPEND注:BIT为定义位名称伪指令。五、思考题(1)对于本实验延时子程序Delay: MOV R6,0MOV R7, 0DelayLoop:DJNZ R6,DelayLoopDJNZ R7,DelayLoopRET本模块使用 11.0592MHz 晶振,粗略计算此程序的执行时间为多少?是 否开始设置初始值设移位次数数据输出左一位延时移位次数完成?(A)P1 口循环点灯程序框图 (B)P1 口输入输出程序框图P1.0,P1.1 置 1开始读入 P1.0 口值将读入的值输出到 P1.2读入 P1.1 口值将读入的值输出到 P1.36六、
9、电路图XTAL1A11.0592MHzC3A22pF C2A22pFP1.01 P1.12P1.23 P1.34P1.45 P1.56P1.67 P1.78RST9P3.0/RXD10 P3.1/TXD11P3.2/INT012 P3.3/INT113P3.4/T014 P3.5/T115P3.6/WR16 P3.7/RD17XTAL218 XTAL119VSS20 P2.0 21P2.122P2.2 23P2.3 24P2.425P2.5 26P2.6 27P2.728PSEN 29ALE/PROG 30EA 31P0.7 32P0.633P0.5 34P0.4 35P0.336P0.2 3
10、7P0.1 38P0.039VCC 4089C51U1FC3F10uFVCCVCCP3.0P3.1P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7EAALEPSENP2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0P3.2P3.3P3.4P3.5P3.6P3.7510*8VCCP1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7RESETR2F100R1F1KL0L1L2L3L4L5L6L77实验三 中断系统应用实验一、实验目的1.掌握外部中断技术的基本使用方法2.掌握中断处理程序的编写方
11、法二、实验说明1.外部中断的初始化设置共有三项内容:中断总允许即 EA=1,外部中断允许即 EXi=1(i=0 或 1) ,中断触发方式设置。中断触发方式设置一般有两种方式:电平触发方式和脉冲(边沿)触发方式,本实验选用后者,其前一次为高电平后一次为低电平时为有效中断请求。因此高电平状态和低电平状态至少维持一个周期,中断请求信号由引脚 INT0(P3.2)和 INT1(P3.3)引入,本实验由 INT0(P3.2)引入。2.中断服务的关键:a、保护进入中断时的状态。堆栈有保护断点和保护现场的功能使用 PUSH 指令,在转中断服务程序之前把单片机中有关寄存单元的内容保护起来。b、必须在中断服务程
12、序中设定是否允许中断重入,即设置 EX0 位。c、用 POP 指令恢复中断时的现场。3.中断控制原理:中断控制是提供给用户使用的中断控制手段。实际上就是控制一些寄存器,51 系列用于此目的的控制寄存器有四个:TCON 、IE 、SCON 及 IP。4.中断响应的过程:首先中断采样然后中断查询最后中断响应。采样是中断处理的第一步,对于本实验的脉冲方式的中断请求,若在两个相邻周期采样先高电平后低电平则中断请求有效,IE0 或 IE1 置“1” ;否则继续为“0”。所谓查询就是由 CPU 测试 TCON 和 SCON 中各标志位的状态以确定有没有中断请求发生以及是那一个中断请求。中断响应就是对中断请
13、求的接受,是在中断查询之后进行的,当查询到有效的中断请求后就响应一次中断。INT0 端接单次脉冲发生器。P1.0 接 LED 灯,以查看信号反转。三、实验内容及步骤用一指示灯标识外中断的触发。本实验需要用到单片机最小应用系统模块(F1 区)、单次脉冲源(A6 区)和十六位逻辑电平显示模块(I4 区)。1.使用单片机最小应用系统模块,P1.0 接十六位逻辑电平显示的一个发光二极管,P3.2(INTO)接单次脉冲源的输出端。2.安装好仿真器,用串行数据通信线连接计算机与仿真器,把仿真头插到模块的单片机插座中,打开模块电源,插上仿真器电源插头(USB 线) 。3.打开 Keil uVision2 仿
14、真软件,首先建立本实验的项目文件,接着建立源程序,编译无误后,全速运行程序,连续按动单次脉冲产生电路的按键,发光二极管每按一次状态取反,即隔一次点亮。4.可把源程序编译成可执行文件,用 ISP 烧录器烧录到 89S52 芯片中。 (ISP 烧录器的使用查看附录二)四、流程图及参考程序1.流程图 82.参考程序LED BIT P1.0LEDBuf BIT 0org 0000Hljmp StartORG 0003HLJMP INTERRUPTStart: clr LEDBufclr LEDmov TCON, #01h ; 外部中断 0 下降沿触发mov IE, #81h ; 打开外部中断允许位(E
15、X0)及总中断允许位(EA)OK: ljmp OKorg 0030HINTERRUPT:push PSW ; 保护现场cpl LEDBuf ; 取反 LEDmov c, LEDBufmov LED, cpop PSW ; 恢复现场retiend五、思考题 1.简述中断处理的一般过程。六、原理图主程序框图设置初始状态设置中断控制寄存器 中断允许等待中断 开始外部中断子程序框图保护现场状态位取反状态位输出恢复现场中断入口中断返回INLED1 510VCCXTAL1A11.0592MHzC3A22pF C2A22pFP1.01 P1.12P1.23 P1.34P1.45 P1.56P1.67 P1.
16、78RST9P3.0/RXD10 P3.1/TXD11P3.2/INT012 P3.3/INT113P3.4/T014 P3.5/T115P3.6/WR16 P3.7/RD17XTAL218 XTAL119VSS20 P2.0 21P2.122P2.2 23P2.3 24P2.425P2.5 26P2.6 27P2.728PSEN 29ALE/PROG 30EA 31P0.7 32P0.633P0.5 34P0.4 35P0.336P0.2 37P0.1 38P0.039VCC 4089C51U1FC3F10uFVCCVCCP3.0P3.1P1.0P1.1P1.2P1.3P1.4P1.5P1.
17、6P1.7P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7EAALEPSENP2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0P3.2P3.3P3.4P3.5P3.6P3.7RESETR2F100R1F1K9实验四 定时器计数器使用一、实验目的1.学习 89C51 内部定时计数器的使用和编程方法2.进一步掌握中断处理程序的编写方法二、实验说明关于内部计数器的编程主要是定时常数(初值)的设置和有关控制寄存器的设置。内部计数器在单片机中主要有定时器和计数器两个功能。本实验使用的是定时器,定时为一秒钟。CPU 运用定时中断方式,实现每一秒钟输出状态发生一次反转,即发光管
18、每隔一秒钟亮一次。定时器有关的寄存器有工作方式寄存器 TMOD 和控制寄存器 TCON。TMOD 用于设置定时器/计数器的工作方式 0-3,并确定用于定时还是用于计数。TCON 主要功能是为定时器在溢出时设定标志位,并控制定时器的运行或停止等。内部计数器用作定时器时,是对机器周期计数。每个机器周期的长度是 12 个振荡器周期。因为实验系统的晶振是 12MHZ,本程序工作于方式 1,即 16 位方式定时器, 定时器 50mS 中断一次, 所以定时常数的设置可按以下方法计算:机器周期=1212MHz=1uS定时常数(初值)=65536-50mS/1uS=15536=3CB0H。然后对 50mS 中
19、断次数计数 20 次,就是 1 秒钟。在本实验的中断处理程序中,因为中断定时常数的设置对中断程序的运行起到关键作用,所以在置数前要先关对应的中断,置数完之后再打开相应的中断。三、实验内容及步骤使 P1.0 所接发光二极管隔一秒点亮一次,点亮时间为一秒。本实验需要用到单片机最小应用系统模块(F1 区)和十六位逻辑电平显示模块(I4 区)。1.用导线将 P1.0 接到十六位逻辑电平显示的任意一只发光二极管上。2.安装好仿真器,用串行数据通信线连接计算机与仿真器,把仿真头插到模块的单片机插座中,打开模块电源,插上仿真器电源插头(USB 线) 。3.打开 Keil uVision2 仿真软件,首先建立
20、本实验的项目文件,接着建立源程序,编译无误后。4.全速运行程序。5.也可以把源程序编译成可执行文件,把可执行文件用 ISP 烧录器烧录到 89S52/89S51 芯片中运行。四、实验框图以及参考程序1.流程图102.参考程序LED BIT P1.0org 0000Hljmp Startorg 000BHLJMP T0IntStart:mov TMOD, #01h ; 方式 1, 定时器mov TH0, #3CH ;初值高位mov TL0, #0B0H ;初值低位mov IE, #10000010b ; EA=1, IT0 = 1setb TR0 ; 开始定时clr LEDmov r2,#20ljmp $ORG 0100HT0Int:push PSWdjnz R2,loopcpl LEDmov r2,#20loop:mov th0,#3CHmov tl0,#0B0Hpop PSWretiend开始输出状态位中断允许设置秒计数值设置初始状态位设置定时常数置 T1 中断工作方式等待中断主程序框图是 否中断返回定时中断入口状态位取反保护现场恢复现场秒计数值减 1重新设置秒计数值是否到一秒定时中断子程序框图