THDPJ-3实验指导书+89C51程序+详细说明
单片机接口技术与应用实验指导书(修改)
实验一定时器实验一、实验目的1.学习89C51内部计数器的使用和编程方法2.进一步掌握中断处理程序的编写方法二、实验说明关于内部计数器的编程主要是定时常数的设置和有关控制寄存器的设置。
内部计数器在单片机中主要有定时器和计数器两个功能。
本实验使用的是定时器,定时为一秒钟。
CPU运用定时中断方式,实现每一秒钟输出状态发生一次反转,即发光管每隔一秒钟亮一次。
定时器有关的寄存器有工作方式寄存器TMOD和控制寄存器TCON。
TMOD用于设置定时器/计数器的工作方式0-3,并确定用于定时还是用于计数。
TCON主要功能是为定时器在溢出时设定标志位,并控制定时器的运行或停止等。
内部计数器用作定时器时,是对机器周期计数。
每个机器周期的长度是12个振荡器周期。
因为实验系统的晶振是12MHZ,本程序工作于方式2,即8位自动重装方式定时器, 定时器100uS中断一次, 所以定时常数的设置可按以下方法计算:机器周期=12÷12MHz=1uS(256-定时常数)³1uS=100uS定时常数=156。
然后对100uS中断次数计数10000次,就是1秒钟。
在本实验的中断处理程序中,因为中断定时常数的设置对中断程序的运行起到关键作用,所以在置数前要先关对应的中断,置数完之后再打开相应的中断。
三、实验内容及步骤本实验需要用到单片机最小应用系统模块(F1区)和十六位逻辑电平显示模块(I4区)。
1.使用单片机最小应用系统模块,用导线将P1.0接到十六位逻辑电平显示的任意一只发光二极管上。
2.用串行数据通信线连接计算机与仿真器,把仿真头插到模块的单片机插座中,打开模块电源,插上仿真器电源插头(USB线)。
3.打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着添加“TH10_定时器.ASM”源程序,编译无误后。
4.全速运行程序,发光二极管隔一秒点亮一次,点亮时间为一秒。
5.也可以把源程序编译成可执行文件,把可执行文件用ISP烧录器烧录到89S52/89S51芯片中运行。
89c51实训指导书.doc
基本I/O 口实训 (1)外部数据存储器的应用(6264) (4)外部数据存储器的应用(2864) (6)键盘显示接口芯片的应用 (8)并口扩展的应用 (12)A/D转换的实训 (14)D/A转换的实训 (20)采集温度 (21)制作音乐盒 (27)制作四字单色显示屏 (31)控制微型打印机 (39)实验一:基本I/O 口的实训目的:通过对单片机的编程仿真,学会单片机仿真系统的基本工作过程。
要求:用LED 的亮/灭来体现单片机高/低电平的变化,连接单片机的基本1/0 口,对单片机 进行编程使其完成:(1) 8个LED 顺序点亮,顺序熄灭,依此循环4次。
(2) 8个LED,第1、3、5、7与2、4、6、8 LED 交替点亮,依此循环4次。
(3) (1)和(2)无限次循环。
原理:IK步骤:1,连接系统板的P1 口到LEDo2, 连接PC 机和仿真机的串口线。
3, 给仿真机接通电源。
4, 打开仿真机的电源开关,电源灯亮表示仿真系统已经带电。
5, 编程。
6, 调试。
7, 改换其它I/O 口,调试程序。
2s 」w9 8765433219XIX29—Rtsr±1P2OP21P22P23P24P25P26P2?RXD — TXD气 碱峠PSEN :—1A2A3Ao n 3 4 5 6 7 n 1— •11 1— Inpppppppp咖polwPOJPIMpos附PO?参考程序:ORG OOOOHMAIN: MOV P1,#OFFHMOV R7, #0411BACK1: SETB P3. 0CLR P1.0LCALL YSCLR Pl. 1LCALL YSCLR Pl. 2LCALL YSCLR Pl. 3LCALL YSCLR Pl.4LCALL YSCLR Pl. 5LCALL YSCLR Pl. 6LCALL YSCLR Pl. 7LCALL YSSETB P1.0LCALL YSSETB Pl. 1LCALL YSSETB Pl. 2LCALL YSSETB Pl. 3LCALL YSSETB Pl. 4LCALL YSSETB Pl. 5LCALL YSSETB Pl.6LCALL YSSETB Pl. 7LCALL YSCLR P3. 0DJNZ R7, BACK1MOV R7, #04HBACK2: SETB P3.0CLR Pl. 1CLR Pl. 3CLR Pl. 5CLR Pl. 7LCALL YSLCALL YSSETB Pl. 1SETB Pl. 3SETB Pl. 5SETB Pl. 7CLR P1.0CLR Pl.2CLR Pl. 4CLR Pl. 6LCALL YSLCALL YSSETB P1.0SETB Pl. 2SETB Pl. 4SETB Pl. 6CLR P3. 0DJNZ R7,BACK2LJMP MAINYS: MOV TMOD, #O1HMOV R5, #05HLOOP: MOV THO, #4CIIMOV TLO, #0011SETB TROJNB TEO, $CLR TFOCLR TRODJNZR5, LOOPRETSJMP $EXD心得体会:实验二:外部数据存储器的应用(6264》冃的:学会用单片机和外部数据存储器进行交流,了解单片机和外部数据进行交换时的时序 关系。
基于89c51的超声波测距单片机课设
基于89c51的超声波测距单片机课设一、引言本文将探讨基于89c51的超声波测距单片机课设的相关内容。
通过该课设,我们可以学习到单片机的基本原理和应用,以及超声波测距技术的实现原理和方法。
二、超声波测距原理超声波测距是一种通过发送超声波脉冲并测量其返回时间来计算距离的技术。
基于89c51的超声波测距单片机,可以通过以下步骤实现测距:1.初始化超声波模块和显示屏模块。
2.发送超声波脉冲。
3.接收超声波返回信号,并计算返回时间。
4.根据返回时间计算距离。
5.在显示屏上显示测距结果。
三、硬件设计1. 单片机选择我们选择使用89c51单片机作为控制芯片,因为它具有丰富的外设接口和较高的运算性能,适合用于控制超声波模块和显示屏。
2. 超声波模块超声波模块包括超声波发射器和接收器。
发射器用于发送超声波脉冲,接收器用于接收超声波的返回信号。
选择合适的超声波模块可以确保测距的准确性和稳定性。
3. 显示屏模块显示屏模块用于显示测距结果。
可以选择液晶显示屏或数码管等适合的显示模块。
四、软件设计1. 系统初始化在系统初始化阶段,需要对单片机的外设进行初始化设置,包括超声波模块和显示屏模块。
2. 超声波模块驱动程序超声波模块驱动程序用于控制超声波的发送和接收。
通过发送脉冲并计算返回时间,可以得到距离的测量结果。
3. 显示程序设计显示程序设计用于将测距结果显示在显示屏上。
可以通过数码管、液晶显示屏等方式实现。
五、实验步骤以下是基于89c51的超声波测距单片机课设的实验步骤:1.硬件搭建:连接89c51单片机、超声波模块和显示屏模块。
2.编写初始化程序:对单片机的外设进行初始化设置。
3.编写超声波模块驱动程序:控制超声波的发送和接收。
4.编写显示程序:将测距结果显示在显示屏上。
5.调试程序:通过实验验证程序的正确性和稳定性。
6.测距实验:将物体放置在不同距离上,进行测距实验,并记录测量结果。
7.分析实验结果:根据实验结果对课设进行评估和改进。
第4章89C51汇编语言程序的设计与调试
汇编语言程序设计举例
程序设计方法和技巧
1. 程序设计的一般步骤 (1) 分析工作任务,明确要达到的工作目的、技术指标等。 (2) 确定解决问题的算法。算法就是如何将实际问题转化成程序模块来处理, 要对不同的算法进行分析、比较,找出最适宜的算法。 (3) 画程序流程图。其图形的符号规定均与高级语言流程图相同,如桶形框 表示程序的开始或结束,矩形框表示需要进行的工作,菱形框表示需要 判断的事情,指向线表示程序的流向等。 (4) 分配内存工作单元,确定程序与数据的存放地址。 (5) 编写源程序。 (6) 上机调试、修改源程序。
2. 汇编语言(Assembly Language) 汇编语言是一种用助记符来表示的面向机器的程序设计 语言。不同的机器所使用的汇编语言一般是不同的。但计 算机的CPU不能直接识别汇编语言,所以计算机不能立即执 行汇编语言程序。用汇编语言编写的源程序,在由计算机 执行之前,必须将它翻译成机器语言程序。 特点:这种语言弥补了机器语言的不足,用汇编语言编写程序 比用机器语言方便、直观、易懂、易用、易记。可以编写 出结构紧凑、运行时间精确的程序。所以,这种语言非常 适合于实时控制的需要。
2.程序设计的一般原则 按照尽可能使程序简短和缩短运行时间两个原则编写程序。 应用程序一般都由一个主程序(包括若干个功能模块)和多个子程序构 成,即采用模块化的程序设计方法。 每一功能模块或子程序都能完成一个明确的任务,实现某个具体功能, 如检测输入信号、码制转换、输出控制信号、发送数据、接收数据、 延时、显示、打印等。 3. 模块化程序设计方法的特点 单个模块结构的程序功能单一,易于编写、调试和修改。 对程序的局部修改,可以使无关的部分保持不变。 程序可读性好,便于功能扩展和版本升级。 对于使用频繁的子程序可以建立子程序库,便于多个模块调用。 可实现多人同时进行程序的编写和调试工作,缩短程序编写时间。
89C51单片机实验指导书
目录实验一系统认识实验 (2)实验二多字节加、减运算实验 (3)实验三多字节乘、除法运算实验 (4)实验四代码转换实验 (5)实验五布尔操作实验 (6)实验六中断系统实验 (7)实验七定时器/计数器实验 (9)实验八串行通讯接口实验 (12)实验九串并转换实验 (16)实验十存储器扩展实验 (18)实验十一8155键盘及显示接口实验 (20)实验十二ADC0809(模/数转换) (24)实验十三 DAC0832(数/模转换) (26)实验十四步进电机实验 (29)实验十五直流电机调速控制实验 (32)附录Windows版Wmd51 3.0使用说明 (34)实验一系统认识实验一.实验目的和要求1.学习和掌握本实验系统的基本操作;2.总结汇编程序的形成和调试过程;3.掌握循环程序的设计;4.画出程序流程图,编制程序并上机调试通过。
二.实验内容1.软件延时若系统时钟为6MHZ,要求实现每隔250毫秒将P1.0口取反。
2.无符号数加法计算N个数据的和,即Y=∑Xi (i=1--6)。
若六个数据放在片内RAM的50H——55H地址单元中,求和的结果Y放在内部RAM的03H(高位)、04H (低位)地址单元中。
1).32H+41H+01H+56H+11H+03H2).95H+01H+02H+44H+48H+12H3).54H+0F6H+1BH+20H+04H+0C1H3.数据排序将内部RAM地址单元30H—3FH中的16个数据按小到大的顺序重新排序。
实验二多字节加、减运算实验一.实验目的和要求1.掌握多字节数的加、减法运算;2.进一步熟悉实验系统的使用方法;3.进一步熟悉汇编程序的调试过程;4.画出程序流程图,编制程序并上机调试通过。
二.实验内容1.多字节无符号数的加法2.多字节无符号数减法入口:被减数低字节地址在R0,减数低字节数地址在R1,字节数在R2;出口:差的低字节地址在R0。
字节数在R3。
3.多字节十进制BCD码减法入口:被减数低字节地址在R1,减数低字节地址在R0,字节数在R2。
飞利浦 ISP 89C51 PHILIPS实验板 说明书
ISP 89C51 PHILIPS 实验板说明书一、简介本实验板是为单片机初学者设计的一套实验兼开发的工具,能帮助你快速学会和掌握单片机基础知识。
本实验板可外接16*2液晶显示模块,并拥有万用板区,用户可根据自己的需要,随意加减外设,达到学习跟多方面知识的目的。
用户可利用Flash Magic 在线下载软件,即可在线下载程序 。
二、产品包括:(*注CD 中包括说明书,驱动程序,芯片资料和演示程序)序号 名称 数量1 ISP 试验板 1块2 RS232串口线 1条3 安装CD 1张 4说明书1份本实验板使用PHILIPS 的89C60X2芯片,可在线下载,16x2点阵液晶的驱动程序。
三、CON2管脚输出表(LCD 显示器)四、ISP 功能使用方法要运用ISP 功能第一步先要安装应用程序,打开光盘→选择“应用程序”→ 双击“WINISP ”您会见到如图:单击Next,会见到如下:2选择“I accept the agreement”,再单击“Next”,您会见到下图,请选择安装路径之后单击“Next”。
(PS::剩下步骤都单击“Next”)本实验板的ISP功能利用Flash Magic来实现,以下是使用的具体步骤。
1.先将实验板与PC连接,接法如图:2.打开桌面“开始”→“程序”→“Flash Magic”即可,如下图所视33.打开该程序后会弹出以下提示框,单击“确定”4.出现以下页面。
45. 选定之后单击“Start”,将会进行“擦除”、“编程”“校验”等步骤,直到出现“ Finish”即完成。
(注:这些功能在第4步时用户按自己的需求选定,选定后才会执行)6. 在进行ISP下载之前,需要对板上跳线J3进行设置(2-3短接),然后复位,否则不能与PC连接,软件提示出错。
7. ISP完成后,对跳线进行设置(1-2短接),然后复位。
实验板正常运行。
56。
89c51中文使用手册
概述该系列单片机是采用高性能的静态80C51设计由先进CMOS工艺制造并带有非易失性Flash程序存储器全部支持12时钟和6时钟操作P89C51X2和P89C52X2/54X2/58X2分别包含128字节和256字节RAM32条I/O口线3个16位定时/计数器6输入4优先级嵌套中断结构1个串行I/O口可用于多机通信I/O扩展或全双工UART以及片内振荡器和时钟电路此外由于器件采用了静态设计可提供很宽的操作频率范围频率可降至0可实现两个由软件选择的节电模式空闲模式和掉电模式空闲模式冻结CPU但RAM定时器串口和中断系统仍然工作掉电模式保存RAM的内容但是冻结振荡器导致所有其它的片内功能停止工作由于设计是静态的时钟可停止而不会丢失用户数据运行可从时钟停止处恢复选型表特性特性y 80C51核心处理单元4k字节FLASH89C51X28k字节FLASH89C52X216k字节FLASH89C54X232k字节FLASH89C58X2128字节RAM89C51X2256字节RAM89C52X2/54X2/58X2布尔处理器全静态操作y 12时钟操作可选6个时钟通过软件或并行编程器y 存储器寻址范围64K字节ROM和64K字节RAMy 电源控制模式―时钟可停止和恢复―空闲模式―掉电模式y 两个工作频率范围6时钟模式时为0到20MHz12时钟模式时为0到33MHzy LQFP, PLCC或DIP封装y 扩展温度范围y 双数据指针y 3个加密位y 4个中断优先级y 6个中断源y 4个8位I/O口y 全双工增强型UART―帧数据错误检测―自动地址识别y 3个16位定时/计数器T0T1标准80C51和增加的T2捕获和比较y 可编程时钟输出y 异步端口复位y 低EMI (禁止ALE以及6时钟模式)y 掉电模式可通过外部中断唤醒订购信息P89C51X24K字节FLASH类型编号封装温度范围()P89C51X2BA PLCC44 0~+70P89C51X2BN DIP40 0~+70P89C51X2BBD LQFP44 0~+70P89C51X2FA PLCC44 -40~+85 P89C52X28K字节FLASH类型编号封装温度范围()P89C52X2BA PLCC44 0~+70P89C52X2BN DIP40 0~+70P89C52X2BBD LQFP44 0~+70P89C52X2FA PLCC44 -40~+85 P89C52X2FN DIP40 -40~+85 P89C52X2FBD LQFP44 -40~+85 P89C54X216K字节FLASH类型编号封装温度范围()P89C54X2BA PLCC44 0~+70P89C54X2BN DIP40 0~+70P89C54X2BBD LQFP44 0~+70P89C54X2FA PLCC44 -40~+85 P89C58X232K字节FLASH类型编号封装温度范围()P89C58X2BA PLCC44 0~+70P89C58X2BN DIP40 0~+70P89C58X2BBD LQFP44 0~+70P89C58X2FA PLCC44 -40~+85B=07040+85下表所示为操作模式电源电压以及最大外部时钟频率之间的关系操作模式电源电压最大时钟频率6-clock 5V10% 20MHz 12-clock 5V10% 33MHz框图1逻辑符号PLCC和CLCC封装及管脚功能DIP 封装及管脚功能 LQFP 封装及管脚功能管脚描述 管脚号名称 DIP LCC QFP 类型 名称和功能Vss 20 22 16I地 Vcc 40 44 38 I电源提供掉电空闲正常工作电压P0.0-0.739-32 43-36 37-30 I/O P0口 P0口是开漏双向口可以写为1使其状态为悬浮用作高阻输入P0也可以在访问外部程序存储器时作地址的低字节在访问外部数据存储器时作数据总线此时通过内部强上拉输出1P1.0-1.7 1-8 1 22-92 340-44 1-3I/O P1口 P1口是带内部上拉的双向I/O 口向P1口写入1时P1口被内部上拉为高电平可用作输入口当作为输入脚时被外部拉低的P1口会因为内部上拉而输出电流(见DC 电气特性)P1口第2功能T2(P1.0) 定时/计数器2的外部计数输入/时钟输出(见可编程输出)T2EX(P1.1)定时/计数器2重装载/捕捉/方向控制P2.0-2.7 21-28 24-31 18-25 I/O P2口 P2口是带内部上拉的双向I/O 口向P2口写入1时P2口被内部上拉为高电平可用作输入口当作为输入脚时被外部拉低的P2口会因为内部上拉而输出电流(见DC 电气特性)在访问外部程序存储器和外部数据时分别作为地址高位字节和16位地址(MOVX @DPTR)此时通过内部强上拉传送1当使用8位寻址方式(MOV@Ri)访问外部数据存储器时,P2口发送P2特殊功能寄存器的内容P3口P3口被内部上拉为高电平可用作输入口输入脚时口会因为内部上拉而输出电电气特性)串行输入口INT0(P3.2)INT1(P3.3)WR(P3.6)当晶振在运行中期高电平即可复位内部有扩散电阻连接到VssVcc输出脉冲锁存地在正常情况下ALE输出信号恒定为并可用作外部时钟或定时注意每次访问外部数据时一个ALE可以通过置位ALE只能在执行程序存储使能当执行外部程序存储器代码时个机器周期被激活两次在访问外部数据存储器时访问内部程序存储器时外部寻址使能在访问整个外部程序存储器时如果EA将执行内部程序除非程序计数器包含大于片内FLASH的地址该引脚在(Vpp)如果保密位已编程在复位时由内部锁存反相振荡放大器输入和内部时钟发生电路输入反相振荡放大器输出注: 为了避免上电时的”latch-up”效应任意管脚Vpp除外上的电压任何时候都不能高于Vcc+0.5V低于Vss-0.5V表1 P89C51X2/52X2/54X2/58X2 特殊功能寄存器双字节指针高字节*号的#80C51修改而来或新增加的表示保留位1复位值由复位源确定存储器的内容存储单先进的沟道氧化工艺和低内部电场的结合使擦除和编程操作特性y 可编程加密位y 每字节最少10000次擦除/编程周期 y 数据最少可保存10年y 从一般销售商处可获得编程支持振荡器特性XTAL1和XTAL2为输入和输出可分别作为一个反相放大器的输入和输出此管脚可配置为使用内部振荡器要使用外部时钟源驱动器件时XTAL2可以不连接而由XTAL1驱动外部时钟信号无占空比的要求因为时钟通过触发器二分频输入到内部时钟电路但高低电平的最长和最短时间必须符合手册的规定时钟控制寄存器CKCON该器件提供通过一个SFR 位CKCON 的X2位和一个Flash 位保密块中的FX2控制选择6时钟/12时钟模式当X2置0时12时钟模式有效该位置1时系统切换到6时钟模式由于该功能是通过SFR 位实现的因此可以随时访问并修改需要注意的是将X2从0改为1将导致用户代码以两倍的速度执行因为所有的系统时间间隔都变成原来的1/2从6时钟模式变为12时钟模式会将运行代码的速度降低为1/2Flash 时钟控制位FX2可通过并行编程器编程取代X2位实现6时钟模式见表2表2FX2时钟模式位只能通过并行编程器设置X2位CKCON.0CPU 时钟模式擦除 0 12时钟模式默认擦除 1 6时钟模式 编程 X 6时钟模式可编程时钟输出可从P1.0编程输出50%占空比的时钟信号P1.0除了作为常规I/O 口外还有两个可选功能它可编程为1用于定时/计数器2的外部时钟输入2使用16MHz操作频率时12时钟模式下输出50%占空比的61Hz~4MHz时钟信号6时钟模式时为122Hz~8MHz要将定时/计数器2配置为时钟发生器C/T2(T2CON.1)必须清零而T2MOD中的T20E位必须置位要启动定时器2还必须将TR2(T2CON.2)置位时钟输出频率由振荡器频率和定时器2捕获寄存器的重新装入值确定公式如下振荡器频率n65536RCAP2H,RCAP2L此处n = 166时钟模式或3212时钟模式RCAP2H,RCAP2L RCAP2H和RCAP2L的内容作为一个16位无符号整数在时钟输出模式中定时器2的翻转将不会产生中断这和它作为波特率发生器时相似定时器2可同时作为波特率发生器和时钟发生器但需要注意的是波特率和时钟输出频率相同复位在振荡器工作时将RST脚保持至少两个机器周期高电平12时钟模式为24个振荡器周期6时钟模式为12振荡器周期可实现复位为了保证上电复位的可靠RST保持高电平的时间至少为振荡器启动时间通常为几个毫秒再加上两个机器周期复位后振荡器以12时钟模式运行当已通过并行编程器设置为6时钟模式时除外低功耗模式时钟停止模式静态设计使时钟频率可以降至0MHz(停止)当振荡器停振时RAM和SFR的值保持不变该模式允许逐步应用并可将时钟频率降至任意值以实现系统功耗的降低如要实现最低功耗则建议使用掉电模式空闲模式空闲模式见表3中CPU进入睡眠状态但片内的外围电路仍然保持工作状态正常操作模式的最后一条指令执行进入空闲模式空闲模式下CPU内容片内RAM和所有SFR保持原来的值任何被使能的中断此时程序从中断服务程序处恢复并继续执行或硬件复位与上电复位使用相同的方式启动处理器均可终止空闲模式掉电模式为了进一步降低功耗通过软件可实现掉电模式(见表3)该模式中振荡器停振并且在最后一条指令执行进入掉电模式降到2.0V时片内RAM和SFR保持原值在退出掉电模式之前Vcc必须升至规定的最低操作电压硬件复位或外部中断均可结束掉电模式硬件复位使所有的SFR重新设置但不改变片内RAM的值外部中断允许SFR和片内RAM都保持原值WUPD AUXR1.3从掉电唤醒使能或禁止通过外部中断唤醒掉电WUPD0禁止WUPD=1使能要正确退出掉电模式在Vcc恢复到正常操作电压范围之后复位或外部中断开始执行并且要保持足够长的时间 ( 通常小于10ms )以使振荡器重新启动并稳定下来使用外部中断退出掉电模式时INT0和INT1必须使能且配置为电平触发将管脚电平拉低使振荡器重新启动退出掉电模式后将管脚恢复为高电平一旦中断被响应RETI之后所执行的是进入掉电模式指令的后一条指令表3 空闲模式和掉电模式时外部管脚的状态器件在内部复位之前从停止处恢复程序正常运行时间为这段时间内片内硬件禁止对内部RAM但对当Idle模式被复位所中为了消除可能产生的误写操作应用模式指令后的指令不应执行写I/O口或写外部存储器操作进入件将ALE保持低电平模式时口处于悬浮状态持工作状态器件处于该模式时可用仿真器或测试CPU驱动电路执行正常复位时恢复正常操作定时器0和1的操作定时器0和1定时和计数功能由特殊功能寄存器TMOD的控制位C/T进行选择这两个定时/计数器有4种操作模式通过TMOD的M1和M0选择两个定时/计数器的模式01和2都相同模式3不同如下所述模式0将定时器设置成模式0时类似8048定时器即8 位计数器带32分频的预分频器图2所示为模式0工作方式此模式下定时器寄存器配置为13位寄存器当计数从全为1翻转为全为0时定时器中断标志位TFn置位当TRn=1同时GATE=0或INTn=1时定时器计数置位GATE时允许由外部输入INTn 控制定时器这样可实现脉宽测量TRn为TCON寄存器内的控制位图3该13位寄存器包含THn全部8个位及TLn的低5位TLn的高3位不定可将其忽略置位运行标志TRn不能清零此寄存器模式0的操作对于定时器0及定时器1都是相同的两个不同的GATE位TMOD.7和TMOD.3分别分配给定时器0及定时器1模式1模式1除了使用了THn及TLn全部16位外其它与模式0相同模式2此模式下定时器寄存器作为可自动重装的8位计数器TLn如图4所示TLn的溢出不仅置位TFn而且将THn内容重新装入TLn THn内容由软件预置重装时THn内容不变模式2的操作对于定时器0及定时器1是相同的模式3在模式3中定时器1停止计数效果与将TR1设置为0相同此模式下定时器0的TL0及TH0作为两个独立的8位计数器图5为模式3时的定时器0逻辑TL0C/T GATETR0TH0TF1此时TH0控制定时器中断可用于需要一个额外的位定时器的场合定时器时80C513个定时计数器当定时器时定时器可通过开关进入它仍可用作串行端口的波特或者应用于任何不要求中断的场合复位值2 1 0 置位时只有在计数器清零时计数器用作定时器或计数器清零则用作定时器从内部系统时钟输入置位用作计数器从脚输入定时器模式选择定时器模式无预分频器当溢出时将计数器控制位控制1控制位控制图1 定时/计数器0/1模式控制寄存器TMOD图2 定时/计数器0/1的模式013位定时/计数器Interrupt00H定时计数器溢出时由硬件置位中断处理时由硬件运行控制位定时计数器溢出时由硬件置位中断处理时由硬件运行控制位由软件置位由软件置位图3 定时器/计数器控制寄存器TCON图4 定时/计数器0/1的模式28位自动重装Interrupt通过设置特殊功能寄存器位可将其作为定时见图6定时器有三种操作模式捕获递增或递减计数和波特率发生这三种模式由T2CON 中的位进行选择见表3捕获模式通过EXEN2设置两个选项如果定时器由T2CON TF2溢出标志位该位可用于产生IE 中断使能位如果EXEN21与以上描述相同即外部输入时将定时器2TL2和的当前值各自捕获到RCAP2L EXF22溢出中断地址相同定时器中断服务程序通过查询来确定引起中断的事件捕获模式如图在该模式中TL2计数器仍以跳变或振荡频率的1/12或6时钟模式递增递减计数器位自动重装模式中2可通过C/T2配置为定时器的方向是由DCEN 递减计数使能位确定的DCEN 位于T2MOD 寄存器见图8中当DCEN 0时定时器2默认为向上计数当DCEN 1时定时器2可通过T2EX 确定递增或递减计数图9显示了当DCEN 0时定时器2自动递增计数在该模式中通过设置EXEN2位进行选择如果EXEN2定时器2递增计数到0FFFFH 并在溢出后将TF2置位然后将RCAP2L 和RCAP2H 中的16位值作为重新装载值装入定时器2RCAP2L 和RCAP2H 的值是通过软件预设的如果EXEN2116位重新装载可通过溢出或T2EX 从10的负跳变实现此负跳变同时将EXF2置位如果定时器2中断被使能则当TF2或EXF2置1时产生中断在图10中DCEN 1时定时器2可递增或递减计数此模式允许T2EX 控制计数的方向当T2EX 置1时定时器2递增计数计数到0FFFFH 后溢出并置位TF2还将产生中断如果中断被使能定时器2的溢出将使RCAP2L 和RCAP2H 中的16位值作为重新装载值放入TL2和TH2当T2EX 置零时将使定时器2递减计数当TL2和TH2计数到等于RCAP2L 和RCAP2H 时定时器产生溢出定时器2溢出置位TF2并将0FFFFH 重新装入TL2和TH2当定时器2递增/递减产生溢出时外部标志位EXF2翻转如果需要可将EXF2位作为第17位在此模式中EXF2标志不会产生中断表4 定时器2工作方式图6 定时器/计数器2T2CON 控制寄存器溢出标志定时器溢出时置位必须由软件清除当TCLK 1时TF2将不会置位外部标志当EXEN21且的负跳变产生捕获或重装时置位定时器2中断使能时EXF21从中断向量处执行中断子程序EXF2位必须用软件清零在递增式DCEN 1中EXF2不会引起中断接收时钟标志RCLK 置位时定时器的溢出脉冲作为串行口模式模式的接收时钟RCLK 0时将定时器的溢出脉冲作为接收时钟发送时钟标志TCLK 置位时定时器和的发送时钟TCLK 0时将定时器的溢出脉冲作为发送时钟外部使能标志当其置位且定时器未作为串行口时钟时允的负跳变产生捕获或重装EXEN20时T2EX 的跳变对定时无效启动停止控制位置时启动定时器计数器选择定时器20内部定时器OSC/12或OSC/61外部事件计数器下降沿触发重装标志置位EXEN21T2EX 的负跳变产生捕获清零EXEN21时定时器2溢出或的负跳变都可使定时器自动重装RCLK 1TCLK 1时该位无效且定时器强制为溢出时自动重装图7 定时器2捕获模式保留将来之用2输出使能位定时器这些位在将来8051这种情况下以后用到复位时或非有效状态时而这些位为有效状态时它的值为1从保留位读到的值是不确定的图8 定时器2模式T2MOD 控制寄存器图9 定时器2自动重装模式DCEN=0EXEN 2T imer 2InterruptEXEN 2T IME R2图10 定时器2自动重装模式DCEN=1图11 定时器2波特率发生器模式波特率发生器模式寄存器T2CON 的位TCLK 和或RCLK 见表3允许从定时器1或定时器2获得串行口发送和接收的波特率当TCLK=0时定时器1作为串行口发送波特率发生器当TCLK=1时定时器2作为串行口发送波特率发生器RCLK 对串行口接收波特率有同样的作用通过这两位串行口能得到不同的接收和发送波特率 一个通过定时器1产生另一个通过定时器2产生图11所示为定时器2工作在波特率发生器模式与自动重装模式相似当TH2溢出时波特率发生器模式使定时器2寄存器重新装载来自寄存器RCAP2H 和RCAP2L 的16位的值寄存器RCAP2H 和RCAP2LR 的值由软件预置当工作于模式1和模式3时波特率由下面给出的定时器2溢出率所决定定时器2溢出速率16定时器可配置成定时或计数方式在许多应用上定时器被设置在定时方式C/T2*=0当定时器2作为定时器时它的操作不同于波特率发生器通常定时器2作为定时器它会在每个机器周期递增1/6或1/12振荡频率当定时器2作为波特率发生器时它会在每个状态周期递增例如1/2振荡频率这样波特率公式如下模式1和模式3的波特率=(UP C OUNTING R E LOADV ALUE)T2EX PINEXEN 2RXClock TXClockT imer 1OverflowNote availability of additional external interrupt.[65536n = 166或12时钟模式RCAP2H,RCAP2L)=RCAP2H 的内容为11所示定时器作为波特率发生器仅当寄存器RCLK 和或TCLK=1定作为波特率发生器才有效溢出并不置位TF2也不产生中断这样当定时器中断不必被禁止外部使能标志被置位在中1的转换会置位EXF2T2外部标志位但并不导致TH2重装载RCAP2H RCAP2L因当定时器用作波特率发生器时如果需要可用作附加的外部中断当计时器工作在波特率发生器模式下,则不要对TH2和进行读写每隔一个状态时间或定时器在此情况下对进行读写是不准确的可对RCAP2但不要进行写否则将导致自动重装错误当对定时器进行访问时应关闭定清零表列出了常用的波特率和如何用定时器得到这些波特率表由定时器外部时钟信号由波特率为2溢出率则波特率为[n[65536(RCAP2H,RCAP2L)]]此处 n = 166时钟模式或3212时钟模式f OSC = 振荡器频率 自动重装值可由下式得到RCAP2H,RCAP2L=65536-[fosc/(n波特率)]定时器/计数器2的设置除了波特率发生器模式T2CON 不包括TR2位的设置TR2位需单独设置来启动定时器表6表7给出了T2作为定时器和计数器的设置表6 T2作为定时器T2CON模式内部控制注1外部控制注216位重装00H 08H16位捕获01H 09H波特率发生器接收和发送相同波特率34H 36H只接收24H 26H只发送14H 16H 表7 T2作为计数器TMOD模式内部控制注1外部控制注216位02H 0AH自动重装03H 0BH注1.仅当定时器溢出时进行捕获和重装2.当定时/计数器溢出并且T2EX(P1.1)发生电平负跳变时产生捕获和重装定时器2用于波特率发生器模式除外全双工增强型UART标准UART操作串口为全双工结构表示可以同时发送和接收它还具有接收缓冲在第一个字节从寄存器读出之前可以开始接收第二个字节但是如果第二个字节接收完毕时第一个字节仍未读出其中一个字节将会丢失串口的发送和接收寄存器都是通过SFR SBUF进行访问的写入SBUF的数据装入发送寄存器对SBUF 的读操作是对物理上分开的接收寄存器进行访问串口有4种操作模式模式0串行数据通过RxD进出TxD输出时钟每次发送或接收以LSB最低位作首位每次8位波特率固定为MCU时钟频率的1/12模式1TxD脚发送RxD脚接收每次数据为10位一个起始位08个数据位LSB在前及一个停止位1当接收数据时停止位存于SCON的RB8内波特率可变由定时器1溢出速率决定模式2TxD脚发送RxD脚接收每次数据为11位一个起始位08个数据位LSB在前一个可编程第9位数据及一个停止位1发送时第9个数据位SCON内TB8位可置为0或1例如将奇偶位PSW内P位移至TB8接收时第9位数据存入SCON的RB8位停止位忽略波特率可编程为MCU时钟频率的1/32或1/64由PCON内SMOD1位决定模式3TxD脚发送RxD脚接收每次数据为11位一个起始位08个数据位LSB为首位一可编程的第9位数据及一个停止位1事实上模式3除了波特率外均与模式2相同其波特率可变并由定时器1溢出率决定在上述4种模式中发送过程是以任意一条以写SBUF作为目标寄存器的指令开始的模式0时接收通过设置R1=0及REN=1初始化其它模式下如若REN=1则通过起始位初始化多机通信UART模式2及模式3有一个专门的应用领域即多机通信在这些模式时接收为9位数据第9位存入RB8接下来为停止位UART可编程为接收到停止位时仅当RB8=1时串口中断才有效可通过置位SCON内SM2位来选择这一特性下述为多机系统利用这一特性的一种方法当主机需要发送一数据块给数台从机之一时首先发送出一个地址字节对目标从机进行识别地址与数据字节通过第9位数据区别其中地址字节的第9位为1而数据字节为0SM2=1时数据字节不会使各从机产生中断而地址字节则令所有从机中断这样各从机可以检查接收到的数据判断是否被寻址被寻址的从机即可清除SM2位以准备接收随后数据内容未被寻址的从机的SM2位仍为1则不理睬随后数据继续各自工作模式0时SM2无效模式1时SM2用于检验停止位是否有效在模式1时如果SM2=1那么只有接收到有效的结束位才可产生接收中断串行端口控制寄存器SCON串行端口控制及状态寄存器即SCON如图12所示其中包括模式选择位以及发送和接收的第9位数据TB8及RB8以及串行端口中断位TI及RISCON 地址98H7 6 5 4 3 2 1 0可位寻址复位值 00H SM0/FE SM1 SM2 REN TB8 RB8 TI RI 位符号功能SCON.7 FE 帧错误位当检测到一个无效停止位时通过UART接收器设置该位但它必须由软件清零要使该位有效PCON寄存器中的SMOD0位必须置1SCON.7 SM0 和SM1定义串口操作模式要使该位有效PCON寄存器中的SMOD0必须置0SCON.6 SM1 和SM0定义串行口操作模式见下表SM0 SM1 UART模式波特率0 0 0同步移位寄存器fosc/12或fosc/6取决于时钟模式0 1 18位UART 可变1 0 29位UART fosc /64或fosc /321 1 39位UART 可变SCON.5 SM2 在模式2和3中多处理机通信使能位在模式2或3中若SM2=1且接收到的第9位数据RB8是0则RI接收中断标志不会被激活在模式1中若SM2=1且没有接收到有效的停止位则RI不会被激活在模式0中SM2必须是0SCON.4 REN 允许接收位由软件置位或清除REN=1时允许接收REN=0时禁止接收SCON.3 TB8 模式2和3中发送的第9位数据可以按需要由软件置位或清除SCON.2 RB8 模式2和3中已接收的第9位数据在模式1中或sm2=0RB8是已接收的停止位在模式0中RB8未用SCON.1 TI 发送中断标志模式0中在发送完第8位数据时由硬件置位其它模式中在发送停止位之初由硬件置位在任何模式中都必须由软件来清除TISCON. 0 RI 接收中断标志模式0中接收第8位结束时由硬件置位其它模式中在接收停止位的中间时刻由硬件置位在任何模式(SM2所述情况除外)必须由软件清除RI图12 串行控制寄存器SCON波特率操作模式0的波特率是固定的为fosc/12模式2的波特率是MCU 时钟/64或MCU 时钟/32取决于PCON 寄存器中的SMOD1位的值若SMOD1=0复位值波特率为MCU 时钟/64若SMOD1=1波特率为MCU时钟/32在80C51中模式1和模式3的波特率由定时器1的溢出速率决定使用定时器1作波特率发生器 当定时器1用作波特率发生器模式1和3中波特率由定时器1的溢出速率和SMOD1的值决定在此应用中定时器1不能用作中断定时器1可以工作在定时或计数方式和3种工作模式中任何一个在最典型应用中它用作定时器方式工作自动重装载模式TMOD 的高半字节为0010B 它的波特率值由下式给出可以定时器1的中断实现非常低的波特率将定时器配置为16位定时器TMOD 的高半字节为0001B并使用中断进行16位软件重装图13列出了几个常用的波特率以及如何从定时器1获得OS CSMOD图13 由定时器1产生的通用波特率UART 模式0串行数据由RxD 端出入TxD 输出同步移位时钟发送或接收的是8位数据低位在先其波特率固定为MCU 时钟的1/12图14是串行口模式0的功能方框简图及相关的时序图执行任何一条把SBUF 作为目的寄存器的指令时就开始发送S6P2时刻的写SBUF 信号将1装入发送移位寄存器的第9位并通知发送控制部分开始发送写SBUF 信号有效后一个完整的机器周期后SEND 端有效SEND 使能RxD P3.0端送出数据TxD P3.1输出移位时钟每个机器周期的S3S4及S5状态内移位时钟为低电平而S6S1及S2状态内为高在SEND 有效时每一机器周期的S6P2时刻发送移位寄存器的内容右移一位数据位向右移时左边添加零当数据字节最高位MSB 移到移位寄存器的输出端时其左边是装入1的第9位再左的内容均为0, 此时通知Tx 控制模块进行最后一位移位处理后禁止SEND 并置位T1, 所有这些步骤均在写入SBUF 后第10个机器周期的S1P1时进行的接收初始化条件是REN=1及R1=0下一机器周期的S6P2时RX 控制单元向接收移位寄存器写入1111 1110并在下一个时钟使RECEIVE 端有效RECEIVE 使能移位时钟转换P3.1功能移位时钟在每个机器周期的S3P1及S6P1跳变在RECEIVE 有效时每一机器周期的S6P2时刻接收移位寄存器内容向左移一位从右移位进来的值是该机器周期S5P2。
第六章89C51串行口及串行通信技术PPT课件
写入SBUF
TXD 起始 D0 D1 D2 D3 D4 D5 D6 D7 停止
写入SBUF
2
TI(中断标志) TXD 起始 D0 D1 D2 D3 D4 D5 D6 D7 停止位
6.1 串行通信基础知识
6.1.1.数据通信的概念
并行通信和串行通信
并行通信是指数据的各位同时进行传送(发送或接收)的 通信方式。其优点是传递速度快;缺点是数据有多少位, 就需要多少根传送线。并行通信在位数多、传送距离又远 时就不太适宜。
6.1.2.串行通讯的传输方式
(l)单工方式 ●信息只能沿一个方向传输,而不能沿相反方向传输。
(2)半双工方式 ●信息可以沿着两个方向传输,但在指定时刻,信息只 能沿一个方向传输。
(3)全双工方式 ●信息可以同时沿着两个方向传输。
传输方式
单工
4
半双工
全写入SBUF双工
TXD 起始 D0 D1 D2 D3 D4 D5 D6 D7 停止
通常,异步通信的波特率为50~9600bit/s。 异步通信的优点是不需要传送同步时钟,字符
帧长度不受限制,故设备简单。缺点是字符帧 中因包含起始位和停止位而降低了有效数据的 传输速率。
写入SBUF
TXD 起始 D0 D1 D2 D3 D4 D5 D6 D7 停止
写入SBUF
9
TI(中断标志) TXD 起始 D0 D1 D2 D3 D4 D5 D6 D7 停止位
(1)异步通信
异步通信用起始位0表示字符的开始,然后从低位到高位 逐位传送数据,最后用停止位1表示字符结束,如后图所 示。一个字符又称一帧信息。图中,一帧信息包括1位起 始位、8位数据位和1位停止位,图中,数据位增加到9位。 在C8051F单片机系统中,第9位数据D8可以用作奇偶校验 位,也可以用作地址/数据帧的标识位,D8=1表示该帧 信息传送的是地址,D8=0表示传送的是数据。两帧信息 之间可以无间隔,也可以有间隔,且间隔时间可任意改变, 间隔用空闲位“1”来填充。
单片机(微机原理)89c51电子时钟实验
天津**大学课程设计任务书课程名称:单片机原理及应用院(系、部、中心): *****专业: ******班级: ***姓名: *** 指导教师: ***电子时钟实验一、设计目的1、进一步掌握定时器的使用功能的使用和编程方法2、进一步掌握中断处理程序的编程方法3、进一步掌握数码显示电路的驱动方法二、设计要求利用CPU的定时器和试验仪上的提供的数码显示电路,设计一个电子时钟。
格式如下:XX XX XX 由左向右分别为:时、分、秒三、设备仪器1、LAB6000微控制器试验系统2、PC机一台3、试验导线若干四、试验步骤1、硬件电路设计本试验连接只需要接上显示/键盘的选择信号即可。
显示电路见附表中的键盘及LED显示电路或数码管显示试验。
2、程序框图电子钟程序框图3、程序流程图:OUTSEG EQU 08004H OUTBIT EQU 08002H ORG 0000HAJMP MAINORG 000BHAJMP TIMEORG 0300HMAIN:mov 20h,#00hMOV 21H,#00HMOV 22H,#00HMOV 23H,#00HMOV IP,#02H 、MOV IE,#82HMOV TMOD,#01H 、MOV TL0,#0B0HMOV TH0,#3CHSETB TR0 、MOV SP,#40H 、NEXT: LCALL DISP 、LCALL KEY 、JZ NEXT ;LCALL ANKEY 、SJMP NEXT 、NOPNOPNOPTIME: PUSH ACC PUSH PSWMOV TL0,#0B4H ;¸MOV TH0,#3CHINC 20H ;MOV A,20HCJNE A,#10,RETI1 MOV 20H,#00HMOV A,21HADD A,#01HDA AMOV 21H,ACJNE A,#60H,RETI1 MOV 21H,#00H MOV A,22HADD A,#01HDA AMOV 22H,ACJNE A,#60H,RETI1MOV 22H,#00HMOV A,23HADD A,#01HDA AMOV 23H,ACJNE A,#24H,RETI1MOV 23H,#00HRETI1: POP PSW ;POP ACCRETI ;NOPNOPDISP: ANL 2FH,#10H ; MOV A,21H ;´ANL A,#0FHORL A,2FHMOV 2FH,AMOV A,21HANL A,#0F0HSWAP AMOV 2EH,AANL 2DH,#10HMOV A,22H ;ANL A,#0FHORL A,2DHMOV 2DH,AMOV A,22HANL A,#0F0HSWAP AMOV 2CH,AANL 2BH,#10HMOV A,23H ;´ANL A,#0FHORL A,2BHMOV 2BH,AMOV A,23HANL A,#0F0HSWAP AMOV 2AH,AMOV R0,#2FHMOV R3,#06HMOV DPTR,#TABLEMOV A,#01HLOOP1: MOV B,A ;MOV DPTR,#OUTBITMOV A,#0MOVX @DPTR,AMOV A,@R0MOV DPTR,#TABLEMOVC A,@A+DPTRMOV DPTR,#OUTSEGMOVX @DPTR,AMOV DPTR,#OUTBITMOV A,BMOVX @DPTR,AMOV R2,#01H ;DJNZ R2,$DEC R0MOV A,BRL ADJNZ R3,LOOP1RETTABLE: db3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHKEY: MOV P3,#0FFH ;MOV A,P3CPL AANL A,#3CHJZ RETXLCALL DISP ;LCALL DISPMOV A,P3CPL AANL A,#3CH JZ RETXMOV R6,ALOOP2: LCALL DISP ; MOV A,P3CPL AANL A,#3CHJNZ LOOP2MOV A,R6RETX: RETNOPNOPANKEY: CLR EA ;LX: MOV A,R6JB ACC.2,L1 ;JB ACC.3,L2JB ACC.4,L3 ;JNB ACC.5,L12 ;JB 2BH.4,L6JB 2DH.4,L8JB 2FH.4,L9L12: LCALL DISP LCALL DISPLCALL KEY JZ L12 LJMP LXL2: MOV 25H,#00H ; CLR 2BH.4CLR 2DH.4CLR 2FH.4SETB EARETL3: JB 2BH.4,L61JB 2DH.4,L81JB 2FH.4,L91AJMP L12L1: MOV A,25HJZ LB1JB ACC.0,LB2JB ACC.1,LB3JNB ACC.2,L12LB1: MOV 25H,#01HSETB 2BH.4CLR 2DH.4CLR 2FH.4AJMP L12LB3: MOV 25H,#04H SETB 2FH.4CLR 2DH.4CLR 2BH.4AJMP L12LB2: MOV 25H,#02H SETB 2DH.4CLR 2BH.4CLR 2FH.4AJMP L12L61: AJMP L611 ; L81: AJMP L811 ; L91: AJMP L911L6: MOV A,23H ADD A,#01HDA AMOV 23H,ACJNE A,#24H,L15 L15: JC L112 MOV 23H,#00HL112: AJMP L12L8: MOV A,22H ; ADD A,#01HDA AMOV 22H,ACJNE A,#60H,L16 L16: JC L112 MOV 22H,#00H AJMP L12 L9: MOV A,21H ADD A,#01HDA AMOV 21H,ACJNE A,#60H,L17 L17: JC L112 MOV 21H,#00H AJMP L12L611: MOV A,23H ADD A,#99HDA AMOV 23H,ACJNE A,#99H,L112 MOV 23H,#23H AJMP L12L811: MOV A,22H ; ADD A,#99HDA AMOV 22H,ACJNE A,#99H,L112 MOV 22H,#59H AJMP L12L911: MOV A,21H ADD A,#99HDA AMOV 21H,ACJNE A,#99H,L112 MOV 21H,#59H AJMP L12NOPNOPEND4、程序调试:调试程序:打开LAB6000软件,录入程序以.ASM保存,编译,全速执行,观察试验结果。
实验八 89C51与PC机的串行通信解析
实验八89C51与PC机的串行通信
一.实验目的
1.了解89C51串行通信的工作原理
2.了解89C51与PC机的串口通信的电路连接
3.掌握使用I/O模拟串口的方法
4.验证串行通信
二.实验设备
电脑、THDPJ-2型单片机开发综合实验箱及连接线,达盛单片机开发实验箱
三.实验内容
1.读实验指导书62~64页,了解串行通信的硬件连接,读懂程序,特别是波特率4800b/s的实现。
若要求波特率1200b/s,
程序应如何修改?
2.观看THDPJ-2型单片机开发综合实验箱中89C51与PC机的串行通信,PC端采用串口助手。
3.观看PC与达盛单片机开发实验箱之间的通信,PC端仍采用串口助手,而单片机的编程采用方式1、不同的波特率、
不同的处理方式。
⑴简单收发:程序LAH20080.ASM,波特率2400b/s参数FAH ,查询方式,结果:
程序LAH20081.ASM,波特率2400b/s参数FAH ,中断方式,结果:
程序LAH2008a.ASM,波特率1200b/s参数F3H ,查询方式,结果:
程序LAH20082.ASM,波特率1200b/s参数F3H ,中断方式,结果:
⑵89C51收到、处理后再发送(若收到a~z则转换成A~Z,其余则发送“?”)
程序LAH20083.ASM ,波特率1200b/s 参数F3H ,中断方式,结果:
⑶ 中断方式收发,收到后做出响应。
PC 端发送数字1~4,则单片机方点亮一个相应的发光管; PC 端发送其它字符,则单片机方回送字符“0”。
程序LAH20084.ASM ,波特率1200b/s 参数F3H ,中断方式,结果:
R E S E T。
微机原理实验89C51--C51--2013-9-10
微机原理及接口技术实验指导课程组2013.9实验一一个简单的微机控制系统-----彩灯控制系统的认识一.实验目的1.熟悉单片机控制系统硬件线路的组成。
2.熟悉KELL C仿真调试软件环境、西特尔写入器的使用。
二.实验设备通用电路板1块,电脑1台,KELL C仿真调试软件1套,西特尔写入器1台,89C51单片机芯片1块,12M晶振1个,20pF/30pF电容2个,发光二极管8个,电阻若干。
三.实验内容1.功能要求:利用89C51的P1口控制8个LED发光二极管。
8个LED发光二极管在89C51的控制下依次全部点亮,全亮后,闪烁3次全暗;反复循环。
彩灯的控制口为:P14.实验方法与步骤:(1)按实验线路图在电工电子实验箱上接好线路图。
(2)KELL C仿真调试软件输入实验程序。
(3)调试程序正确后,生成HEX文件。
(4)利用西特尔写入器将生成的HEX文件烧入到89C51单片机中。
(5)实验箱上电/复位,观察利用89C51控制的彩灯控制系统。
四. 实验参考程序#include "reg51.h"unsigned char a[]={0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};void main(){unsigned int i;unsigned char j;while(1){for(j=0;j<9;j++){P1=a[j];for(i=0;i<50000;i++);} } }五.思考题1.为什么要利用西特尔写入器向89C51单片机烧入控制程序?2.简述利用KELL C 仿真软件调试程序的方法。
3.比较单片机I/O口灌电流和拉电流在驱动外设时的不同。
实验二彩灯控制系统------3/8译码器一.实验目标1.掌握利用89C51单片机设计彩灯控制系统。
2.掌握Keil uVision3仿真调试软件、西特尔写入器的运用。
二.实验设备电工电子箱1个,电脑1台,Keil uVision3仿真调试软件1套,西特尔写入器1台,89C51单片机芯片1块,12M晶振1个,30pF电容2个,电阻若干。
89c51教程 65页 0.8M
本教程由51测试网整理 原作: 平凡的单片机2002年12月24日51测试网。
版权所有89c51test---xp版开发套件使用说明使用指引1把232插口插在电脑的com1或com2 口上。
接上电源,电源调整为12v, 并打开电源开关, 此时应该可以看到int指示灯不停的闪烁, power指示灯亮, signal指示灯亮约3秒后熄灭。
如果无反应请检查电源,开关。
2插入被写的芯片,运行test89c51, 软件设置好com号,9600波特律, 8位数据位,1位停止位,无校验, 无流控制,选择被发送的hex文件。
窗口将出现初始化成功的提示. 3 选择文件,按发送键,将出现进度条,以及0K!字样。
4 取下芯片, 插入试验插座,程序即可运行。
注意芯片缺口朝上!在实验卡座上取芯片请自备一个小平口起子。
软件说明这是一个绿色软件,全兼容于95/98/2000。
将他复制到您的硬盘:打开他界面如下图:选择设置/通信, 设置为波特率9600,无流控制, com1,(一般我们用的是com1,如果你用的还有串口鼠标或者串口猫,那么选择串口2或者去掉这些设备)设置好后确定,连接开发套件到串口,插上烧写的89C51,打开他的开关,窗口将收到开发套件的返回信息:single chip computer system of initialize for atmel89c51 ok!.is 89c51 C51 ready ....如果没有插上被烧的89c51则出现:single chip computer system of initialize for atmel89c51 ok!sorry, no chip find! C51 ready ..... 选择主界面的传输/发送文件,选择要烧入的文件,点确定后,主界面将出现烧写进度条:〉〉〉〉〉〉〉〉〉〉〉〉〉〉〉〉〉〉ok!即烧写成功。
如果被烧写的芯片有问题, 将出现校验错误的提示!sorry, chip check error!烧写成功后, 断掉电源, 将芯片插入试验ic 座。
P89C51RC+_RD+中文使用指南
3.4 片脚定义一览表 ............................................................................................................... 6
89C51单片机实验开发板功能介绍
89C51单片机实验开发板功能介绍一.初始化模块单片机上电后,10位8段数码管从右至左输出‘LNU—89C51’字样,并保持停留。
约3s钟后,显示数码管清屏,从右至左滚动显示‘8’等待按键按下,执行相应功能模块。
二.模数转换功能模块在单片机循环显示‘8’等待状态下,按下按键‘AD’,单片机执行模数转换功能。
低2位数码管显示模拟量电压,高8位数码管显示ADC0804芯片转换出的数字量电压。
在此功能下,调节电位器,使输入模拟量电压在0 — 5V范围内变化。
数码管数字量显示部分,实时显示转换出的数字量电压。
三. 数模转换功能模块在单片机循环显示‘8’等待状态下,按下按键‘DA’,单片机执行数模转换功能。
在‘DA’按键按下后,显示数码管清屏,等待数字量的输入。
按下按键‘J0’输入数字量零;按下按键‘J1’输入数字量一。
根据‘J0’‘J1’的按键顺序,显示数码管从左至右对应显示‘0’‘1’,待按键按满8次为止,使输入数字量电压在00000000 — 11111111范围内变化。
按键按满8次后,单片机自动实现数字量转换模拟量,并把转化后的模拟量通过低两位数码管显示出来。
四.P1口对应显示发光二极管功能在单片机循环显示‘8’等待状态下,按下按键‘P1’,单片机执行P1口对应显示发光二极管功能。
在‘P1’按键按下后,低8位数码管对应显示发光二极管状态。
红色发光二极管点亮,向对应P1口输入低电平,对应数码管显示零;绿色发光二极管点亮,向对应P1口输入高电平,对应数码管显示一。
通过自锁开关可以改变红绿发光二极管的点亮状态,数码管实时显示红绿发光二极管的点亮状态。
五.时钟功能模块在单片机循环显示‘8’等待状态下,按下按键‘CK’,单片机执行时钟功能。
在‘CK’按键按下后,显示数码管清屏,等待计时器初始量的输入。
按下按键‘J0’输入数字零;按下按键‘J1’输入数字一。
根据‘J0’‘J1’的按键顺序,显示数码管从左至右对应显示‘0’‘1’,待按键按满8次为止,使输入数字在00000000 — 11111111范围内变化。
THDPJ-3实验指导书+89C51程序+详细说明
实验一 I/O口控制实验 (2)实验二定时器输出PWM实验 (5)实验三蜂鸣器驱动实验 (7)实验四电子琴模拟实验 (8)实验七 74HC138译码器实验 (12)实验八看门狗实验 (13)实验九查询式键盘实验 (15)实验十一 8155 I/O扩展实验 (17)实验十五继电器控制实验 (21)实验十六 I2C总线实验 (23)实验十七实时时钟实验 (28)实验十八温度传感器温度控制实验 (32)实验十九2×16字符型液晶显示实验 (36)实验二十128×64点阵型液晶显示实验 (39)实验二十一红外发射接收实验 (44)实验二十二 ISD1420语音控制实验 (47)实验二十三 RS232串口通信实验 (54)实验二十六 EEPROM外部程序存储器实验 (55)实验二十七 ADC0809并行AD转换实验 (57)实验二十八 TLC549串行AD转换实验 (59)实验二十九 DAC0832并行DA转换实验 (61)实验三十 LTC1446串行DA转换实验 (64)实验三十六微型打印机实验(选配) (66)实验三十七 USB通信实验 (69)实验三十八以太网通信实验 (79)实验三十九 CPLD扩展接口实验(选配) (91)实验一 I/O口控制实验一、实验目的1、学习P1口的使用方法2、学习延时子程序的编写和使用二、实验说明P1口是准双向口,它作为输出口时与一般的双向口使用方法相同。
由准双向口结构可知当P1口用作输入口时,必须先对口的锁存器写“1”,若不先对它写“1”,读入的数据是不正确的。
三、实验内容及步骤实验(一):用P1口做输出口,接八位逻辑电平显示,程序功能使发光二极管从右到左轮流循环点亮。
1、使用单片机最小应用系统。
关闭该模块电源,用扁平数据线连接单片机P1口与八位逻辑电平显示模块JD10。
2、用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:缺口朝上。
用89C51制作的模拟实验多路压力监测系统
系统既能与通用 PC 微机进 行通讯, 进行显示压力 值等, 又能独立显示压力值, 软件设计时单片机系统
采用汇编语言编写程序, 主要模块有 LCD 初始化、 时钟数据的采集及显示、11 路压力值的采集、处理 及显示、压力测量时间间隔设定及与 PC 机通讯程 序。
力源电子股份有限公司. 1998. 3
41
在单片机系统中, 本系统既能进行在线观测, 又 能按一定的采样间隔在线监测记录保存数据信息, 为了保存这些数据信息, 系统中扩展了 32K 数据存 储器 62256, 对 12 位的采样精度, 它可以存放 11 路 1400 次的采样结果, 用 2 分钟采样一次可以存放两 天的数据, 系统中其地址为 0000~ 7FFFH。
2 系统硬件电路设计 该控制仪的硬件电路主要由单片机 AT 89C51、可
编程看门狗监控 EEPROM 电路 X25045、12 位串行A/ D 转换电路 TLC2543、实时时钟电路 DS12887、32K 数 据存储器电路 62256、单片机与 PC 机通讯的电平转 换电路 MAX485 和 MAX232、LCD 模块显示电路、电 压信号放 大电路、键盘接 口电路、多路地址 译码器 74HC138 等组成。系统硬件电路框图如图 1 所示。
4007 输送机过载 4008 螺旋机过载
4004 输送机停车 4005 提升机停车
4009 速断闪光 4010 过载闪光
4011 运行计时
输出或内部线圈及接点的编制情况:
0001 提升机信号灯 0002 提升机接触器
0017 自动开关合闸 0018 预启动
0003 输送机信号灯 0004 输送机接触器
89C51实验三定时计数器实验
成绩实验报告实验名称定时计数器实验实验班级电子08-2姓名何达清学号12(后两位)指导教师实验日期2010年11月12日实验三定时/计数器实验一、实验目的1、掌握数码管的静态和动态扫描显示法。
2、掌握单片机定时计数器的初始化编程。
3、学会运用定时计数器进行单片机控制程序设计。
二、实验内容1、见图一,利用静态扫描显示法,让数码管显示数字6 。
(数码管元件7SEG-MPX1-CA,共阳极数码管)0RG 0000HMOV P0,#82HEND2、见图一,利用静态扫描显示法,让数码管显示数字0。
间隔时间1秒后,显示数字1。
间隔时间1秒后,显示数字2。
………间隔时间1秒后,显示数字F。
间隔时间1秒后,显示数字0 。
周而复始,循环不息。
图一程序如下:ORG 0000HLJMP MAINMAIN:MOV R0,#0FFHLOOP:INC R0CJNE R0,#16,SHOWMOV R0,#0SHOW:MOV A,R0MOV DPTR,#TABMOVC A,@A+DPTRMOV P0,AACALL DELAY1SAJMP LOOPDELAY1S: ;误差0usMOV R7,#0A7HDL1:MOV R6,#0ABHDL0:MOV R5,#10HDJNZ R5,$DJNZ R6,DL0DJNZ R7,DL1NOPRETTAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH END3、见图二,利用动态扫描显示法,,让数码管显示数字01234567 。
(数码管元件7SEG-MPX8-CA-BLUE,共阳极数码管)图二程序如下:ORG 0000HAJMP MAINORG 000BHAJMP TEFORG 33HMAIN:MOV SP,#60HMOV R4,#0MOV R3,#80HMOV TMOD,#02HMOV TH0,#06HMOV TL0,#06HSETB ET0SETB EASETB TR0LP:CJNE R4,#8,NEXTMOV R4,#0NEXT:MOV A,R4MOV DPTR,#TABMOVC A,@A+DPTRMOV R5,AAJMP LPTEF:PUSH ACCMOV A,R3RL AMOV P1,AMOV P2,R5INC R4MOV R3,APOP ACCRETITAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH END4、见图二,利用动态扫描显示法,,让数码管显示数字12.34.56,每隔一秒,数字变化相当于时间计时器。
使用单片机89C51控制步进电机程序详细介绍
使用单片机89C51控制步进电机程序详细介绍;步进电机控制程序例程p3.2 正转,p3.3 反转,p3.4停止。
步进电机接p0.0 p0.1 p0.2 p0.3;具体程序如下:org 00hstop: ORL p0,#0ffh ; 步进电机停止loop:jnb p3.2,for2 ; 如果p3.2 按下正转jnb p3.3,rev2 ; 如果p3.3 按下反转jnb p3.4,stop1 ; 如果p3.4按下停止jmp loop ;反复监测键盘for: mov r0,#00h ;正转到tab取码指针初值for1:mov a,r0 ;取码mov dptr,#table ;movc a,@a+dptrjz for ;是否到了结束码00hcpl a ;把acc 反向mov p0,a ;输出到p0开始正转jnb p3.4,stop1 ; 如果p3.4 按下停止jnb p3.3,rev2 ; 如果p3.3按下反转call delay ;转动的速度inc r0 ;取下一个码jmp for1 ;继续正转rev:mov r0,#05h ;反转到tab取码指针初值rev1:mov a,r0mov dptr,#table ;取码movc a,@a+dptrjz rev ;是否到了结束码00hcpl a ;把acc 反向mov p0,a ;输出到p0开始反转jnb p3.4,stop1 ; 如果p3.4 按下停止jnb p3.3,rev2 ; 如果p3.3按下反转call delay ;转动的速度inc r0 ;取下一个码jmp rev1 ;继续反转stop1:call delay ; 按p3.4 的消除抖动jnb p3.4,$ ; p3.4 放开否?call delay ;放开消除抖动jmp stopfor2:call delay ; 按p3.2 的消除抖动jnb p3.2,$ ; p3.2 放开否?call delay ;放开消除抖动jmp forrev2:call delay ; 按p3.3的消除抖动jnb p3.3,$ ; p3.3 放开否?call delay ;放开消除抖动jmp revdelay:mov r1,#40 ;步进电机的转速20ms d1:mov r2,#248 djnz r2,$djnz r1,d1rettable:db 03h,09h,0ch,06h ;正转表db 00 ;正转结束db 03h,06h,0ch,09h ;反转db 00 ;反转结束end。
AT89C51实验报告(DOC)
实验一MCS-51指令系统实验——数据排序一、实验目的熟悉MCS-51指令系统,掌握程序设计方法;加深对内部存储器读写的认识;熟悉仿真开发环境,学会源程序的编写、汇编/编译、调试;熟悉单片机硬件实验系统以及良好的实验习惯培养等;学会检查结果的正确性。
二、实验内容将程序存储器的一个列表中的10个单字节无符号数据传送到内部RAM,然后用冒泡法对其按从小到大的次序重新排列,并送到外部RAM 以8000H开始的地址单元内。
三、实验说明有序的数列更有利于查找。
本程序用的是“冒泡排序”法,算法是将一个数与后面的数相比较,如果比后面的数大,则交换,如此将所有的数比较一遍后,最大的数就会在数列的最后面。
再进行下一轮比较,找出第二大数据,直到全部数据有序。
四、程序流程图五、调试程序;第一步:将程序存储器的一个列表中的10个单字节无符号数据传送到内部RAM 40H~49H单元中。
ORG 0000HLJMP START1ORG 0030HSTART1: MOV R0,#40H ;设置R0为内部RAM首地址MOV R1,#10 ;设Rl为计数器MOV DPTR,#TAB1LOOP1: CLR A ; 累加器清零MOVC A,@A+DPTR ;外部数据送累加器A中MOV @R0,A ;送内部RAMINC R0 ;调整内部RAM指针,指向下一个数据INC DPTR ;调整外部RAM指针;第二步:排序。
把片内RAM 40H~49H单元中的10个无符号数逐一比较,并按从小到大的顺序依次排列在这片单元中。
START2: CLR F0 ;清除交换标志位F0MOV R3,#9 ;10个数据循环次数MOV R0,#40H ;数据存放区首址MOV A,@R0 ;取前数L2: INC R0MOV R2,A ;保存前数SUBB A,@R0 ;前数减后数MOV A,R2 ;恢复前数JC L1 ;顺序则继续比较SETB F0 ;逆序则建立标志位XCH A,@R0 ;前数与后数交换DEC R0 ;指向前数单元XCH A,@R0INC R0 ;仍指向后数单元L1: MOV A,@R0 ;取下一个数DJNZ R3,L2 ;依次重复比较JB F0,START2 ;交换后重新比较;第三步:将内部数据RAM中40H~49H单元的内容传送到外部数据存储器以8000H开始的连续单元中去。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一 I/O口控制实验 (2)实验二定时器输出PWM实验 (5)实验三蜂鸣器驱动实验 (7)实验四电子琴模拟实验 (8)实验七 74HC138译码器实验 (12)实验八看门狗实验 (13)实验九查询式键盘实验 (15)实验十一 8155 I/O扩展实验 (17)实验十五继电器控制实验 (21)实验十六 I2C总线实验 (23)实验十七实时时钟实验 (28)实验十八温度传感器温度控制实验 (32)实验十九2×16字符型液晶显示实验 (36)实验二十128×64点阵型液晶显示实验 (39)实验二十一红外发射接收实验 (44)实验二十二 ISD1420语音控制实验 (47)实验二十三 RS232串口通信实验 (54)实验二十六 EEPROM外部程序存储器实验 (55)实验二十七 ADC0809并行AD转换实验 (57)实验二十八 TLC549串行AD转换实验 (59)实验二十九 DAC0832并行DA转换实验 (61)实验三十 LTC1446串行DA转换实验 (64)实验三十六微型打印机实验(选配) (66)实验三十七 USB通信实验 (69)实验三十八以太网通信实验 (79)实验三十九 CPLD扩展接口实验(选配) (91)实验一 I/O口控制实验一、实验目的1、学习P1口的使用方法2、学习延时子程序的编写和使用二、实验说明P1口是准双向口,它作为输出口时与一般的双向口使用方法相同。
由准双向口结构可知当P1口用作输入口时,必须先对口的锁存器写“1”,若不先对它写“1”,读入的数据是不正确的。
三、实验内容及步骤实验(一):用P1口做输出口,接八位逻辑电平显示,程序功能使发光二极管从右到左轮流循环点亮。
1、使用单片机最小应用系统。
关闭该模块电源,用扁平数据线连接单片机P1口与八位逻辑电平显示模块JD10。
2、用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:缺口朝上。
3、打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着添加“P1口输出.ASM”源程序,进行编译,直到编译无误。
4、进行软件设置,选择硬件仿真,选择串行口,设置波特率为38400。
5、打开模块电源和总电源,点击开始调试按钮,点击RUN按钮运行程序,观察发光二极管显示情况。
发光二极管单只从右到左轮流循环点亮。
实验(二):用P1.0、P1.1作输入接两个拨断开关,P1.2、P1.3作输出接两个发光二极管。
程序读取开关状态,并在发光二极管上显示出来。
1、用导线分别连接单片机最小应用系统的 P1.0、P1.1到两个拨断开关,P1.2、P1.3到两个发光二极管。
2、打开“P1_B.ASM”源程序,编译无误后,全速运行程序,拨动拨断开关,观察发光二极管的亮灭情况。
向上拨为点亮,向下拨为熄灭。
3、也可以把源程序编译成可执行文件,把可执行文件用ISP烧录器烧录到89S52/89S51芯片中运行。
(ISP烧录器的使用查看附录二)注:在做完实验时记得养成一个好习惯:把相应单元的短路帽和电源开关还原到原来的位置!以下将不在重诉。
四、流程图及源程序1.流程图2.源程序(一)实验一ORG 0LOOP: MOV A, #0FEHMOV R2,#8OUTPUT: MOV P1,ARL AACALL DELAYDJNZ R2,OUTPUTLJMP LOOPDELAY: MOV R6,#0MOV R7,#0DELAYLOOP: ;延时程序 DJNZ R6,DELAYLOOPDJNZ R7,DELAYLOOPRETEND(二)实验二KEYLEFT BIT P1.0 ;定义KEYRIGHT BIT P1.1LEDLEFT BIT P1.2LEDRIGHT BIT P1.3ORG 0SETB KEYLEFT ;欲读先置一SETB KEYRIGHTLOOP: MOV C,KEYLEFTMOV LEDLEFT,CMOV C,KEYRIGHTMOV LEDRIGHT,CLJMP LOOPEND五、思考题(1)对于本实验延时子程序Delay: MOV R6,0MOV R7, 0DelayLoop:DJNZ R6,DelayLoopDJNZ R7,DelayLoopRET本模块使用12MHz晶振,粗略计算此程序的执行时间为多少?六、电路图实验二定时器输出PWM实验一、实验目的1、了解脉宽调制(PWM)的原理2、学习用PWM输出模拟量3、熟悉51系列单片机的延时程序二、实验说明PWM是单片机上常用的模拟量输出方法,通过外接的转换电路,可以将脉冲的占空比变成电压。
程序中通过调整占空比来调节输出模拟电压。
占空比是制脉冲中高电平与低电平的宽度比。
三、实验内容及步骤P1.0输出PWM信号接转换电路,转换电压值送数字电压表显示。
1、选用89C51最小应用系统模块,用导线将P1.0接到PWM转换电压输入端,电压输出接电压表“+”端,电压表“-”端接地。
2、用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:缺口朝上。
3、打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着添加“PWM.ASM”源程序,进行编译,直到编译无误。
4、全速运行程序,观察电压表显示值,并做记录,程序默认是占空比5:5的PWM。
修改源程序LOOP程序段两次给累加器A的赋值,改为①“MOV A,#1”②“MOV A,#9”,重新编译后运行,记录电压表显示值,这是占空比1:9的PWM。
同样,用户可做占空比9:1的PWM,并做记录。
比较三种PWM信号转换电压的大小,与理论值相比较。
5、也可以把源程序编译成可执行文件,把可执行文件用ISP烧录器烧录到89S52/89S51芯片中运行。
(ISP烧录器的使用查看附录二)四、流程图及源程序1.源程序清单:;输出 50% (5:5) 占空比 PWM;输出 10% (1:9) 占空比 PWM;输出 90% (9:1) 占空比 PWMORG 20HOUTPUT BIT P1.0LOOP:CLR OUTPUTMOV A, #5CALL DELAYSERB OUTPUTMOV A, #5CALL DELAYLJMP LOOPDELAY:MOV R0, #0DLOOP:DJNZ R0, DLOOPDJNZ ACC, DLOOPRETEND2.流程图五、思考题实验三蜂鸣器驱动实验一、实验目的1、学习输入/输出端口控制方法2、了解音频发声原理二、实验说明本实验是利用89C51端口定时器输出控制端口,驱动扬声器发声,声音的频率高低由延时快慢控制。
本实验是利用单片机唱歌的声音控制程序,请用户思考如何修改程序,可以让蜂鸣器发出不同频率,不同长短的声音。
三、实验内容及步骤INT1输出音频信号接音频驱动电路,使蜂鸣器的发声。
1、使用单片机最小应用系统和蜂鸣器模块。
蜂鸣器模块的短路帽J1插到VCC方向,用导线将INT1接到蜂鸣器输入端。
2、用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:缺口朝上。
3、打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着添加“MUSIC.ASM”源程序,进行编译,直到编译无误。
4、全速运行程序,扬声器周期性的发出“八月桂花”开声音。
(添加“MUSIC1.ASM”程序为“祝你平安”歌曲)5、也可以把源程序编译成可执行文件,把可执行文件用ISP烧录器烧录到89S52/89S51芯片中运行。
(ISP烧录器的使用查看附录二)五、电路图实验四电子琴模拟实验一、实验目的1、了解单片机系统发声原理2、进一步熟悉定时器编程方法二、实验说明1、利用定时器,可以发出不同频率的脉冲,不同频率的脉冲经喇叭驱动电路放大滤波后,就会发出不同的音调。
2、定时器按设置的定时参数产生中断,这一次中断发出脉冲低电平,下一次反转发出脉冲高电平。
由于定时参数不同,就发出了不同频率的脉冲。
本实验中当有键按下,会发出连续脉冲,直到按键松开,才停止发音。
发完后继续检测键盘,如果键还按下,继续发音。
三、实验内容及步骤利用实验仪上提供的键盘,使数字键1、2、3、4、5、6、7作为电子琴按键,按下即发出相应的音调。
用P3.2 口发出音频脉冲,驱动喇叭。
1、单片机最小应用系统的 P1口接查询式键盘,单片机INT0口接扬声器的SP+,SP-接GND,扬声器的J19打在23处,P1口接查询式键盘的JD3口2、用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:缺口朝上。
3、打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着添加“电子琴.ASM”源程序,进行编译,直到编译无误。
4、全速运行程序,按查询式键盘的1~7键,扬声器发出高低不同的声音。
5、也可以把源程序编译成可执行文件,把可执行文件用ISP烧录器烧录到89S52/89S51芯片中运行。
(ISP烧录器的使用查看附录二)四、流程图及源程序1.流程图2.源程序:PULSE BIT 10H ;脉冲 TONEHIGH EQU 30H ;高音调 TONELOW EQU 31H ;低音调TONE EQU 32H ;音调 SPEAKER BIT P3.2 LJMP START ORG 000BHTIMER0INT: ;定时中断 PUSH PSW CLR TR0MOV TH0, TONEHIGH主程序框图定时中断程序框图MOV TL0, TONELOWSETB TR0MOV C, PULSEMOV SPEAKER,CCPL PULSEPOP PSWRETITONETABLE:DW 64578, 64686, 64778, 64821DW 64898, 64968, 65029TESTKEY:MOV P1, #0FFHMOV A, P1 ;读入键状态RETKEYTABLE:DB 0FEH,0FDH,0FBH,0F7H ;键值表DB 0EFH,0DFH,0BFH,07FHGETKEY:MOV R6,#10ACALL DELAYMOV A,P1CJNE A,#0FFH,K01 ;确有键按下LJMP MLOOPK01: MOV R3, #8 ;8个键MOV R2,#0 ;键码MOV B,A ;暂存键值MOV DPTR, #K0TABK02: MOV A,R2MOVC A,@A+DPTR ;从键值表中取键值 CJNE A,B,K04 ;键值比较MOV A,R2 ;得键码RETK04: INC R2 ;不相等,到继续访问键值表MOV A,#0FFH ;键值不在键值中,即多键同时按下 LJMP MLOOPDELAY: ;延时子程序MOV R7,#0DELAYLOOP:DJNZ R7,DELAYLOOPDJNZ R6,DELAYRETSTART:MOV SP, #70HMOV TMOD,#01 ;TIMERMOV IE, #82H ;EA=1, IT0 = 1 MOV TONE,#0MLOOP:CALL TESTKEYJZ MLOOPCALL GETKEYMOV B,AJZ MLOOP ;= 0, < 1ANL A, #8JNZ MLOOP ;> 7DEC BMOV A,BRL A ;A = A*2MOV B,AMOV DPTR,#TONETABLEMOVC A, @A+DPTRMOV TONEHIGH,AMOV TH0,AMOV A,BINC AMOVC A,@A+DPTRMOV TONELOW, AMOV TL0, ASETB TR0MOV P1,#OFFHWAIT: MOV A,P1CJNE A,#OFFH,WAITMOV R6,#10ACALL DELAYCLR TR0LJMP MLOOPEND五、思考题1、请思考实验是怎样在硬件与软件上实现发声的?2、本程序中断子程序的调用是怎样进行的?8,C对3、打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着添加“74138.ASM”源程序,进行编译,直到编译无误4、编译无误后,全速运行程序。