3.5 单片机定时/计数器实验 1——方波发生器3.5.1 实验目的1. 定时/计数器是单片机的一个重要的功能部分,可用来实现定时、计数、频率测量、脉冲宽度测量、产生信号、信号检测等用 AT89C51 单片机定时/计数器 0 的定时功能可构成一简单的方波发生器,实现周期为 400μs 的方波输出若改变定时/计数器 0 的初值可得到不同周期的方波输出2. 用 PROTEUS 设计、仿真基于 AT89C51 单片机的方波发生器3. 学会使用 VSM 虚拟示波器观察波形3.5.2 PROTEUS 电路设计实现 400μs 方波发生器的电路原理图如图 3-33 所示1. 从 PROTEUS 库中选取元器件①AT89C51.BUS:总线式单片机;②RES:电阻;③CAP、CAP-ELEC:电容、电解电容;① CRYSTAL:晶振;② LED-GREEN:绿发光二极管图 3-33 实现 400μs 方波发生器的电路原理图2. 放置元器件、放置电源线、连线、元器件属性设置、电气检测3.5.3 源程序设计、生成目标代码文件1. 流程图 400μs 周期方波发生器的主程序流程图如图 3-35 所示,定时 200μs 中断服务程序流程图如图 3-36 所示。
2. 源程序设计通过菜单“source→Add/Remove Source Files…”新建 DZC35.ASM 源程序文件通过菜单“source→DZC35.ASM” ,打开 PROTEUS 提供的文本编辑器 SRCEDIT,在其中编辑如下源程序,并保存ORG 0SJMP STARORG 0BHSJMP T0FSTAR: MOV TMOD,#0MOV P3,#03FHMOV TH0,#0F9HMOV TL0,#18HMOV IE,#0FFHSETB TR0SJMP $T0F: CPL P3.5CPL P3.7MOV TH0,#0F9HMOV TL0,#18H开始定时器工作方式设置P3 初始化(P3)=3FHT0 赋初值开中断允许启动 T0原地循环T0 中断服务程序P3.5、P3.7 输出信号取反定时器初值重装T0 中断返回图 3-35 400μs 周期方波发生器的主程序流程图图 3-36 定时 200μs 中断服务程序流程图CPL P3.0RETIEND编程好后,单击保存按钮存入文件 DZC35.ASM 中3. 生成目标代码文件通过菜单“Source→Build All”编译源程序,生成目标代码文件 DZC35.HEX。
若编译失败,对程序修改调试直至编译成功3.5.4 PROTEUS 仿真1. 加载目标代码文件打开单片机属性窗口,在”Program File” 栏中添加上面编译好的目标代码文件DZC35.HEX;在”Clock Frequency” 栏中输入晶振频率 12MHZ2. 仿真单击按钮 ,启动仿真图 3-37 所示为仿真时某瞬间的情况图 3-37 400μs 方波发生器仿真运行图P3.5、P3.7 上的电平每隔半周期(200μs)进行翻转,且在程序中设置它们总是反向,图 3-37 中两电压探针的电压值分别是 V=0.199005(U1(P3.7/RD)、V=4.98677(U1(P3.5/T1),正反映了这种情况虚拟示波器能实时记录仿真波形的情况如图 3-38 所示,两个输出信号电平相反虚拟示波器当前的参数设置为:① 电压幅值:2V/格;② 分辨率:100 μs/格③ 双通道,直流图 3-38 虚拟示波器测量图从虚拟示波器上看,高低电平的宽度为 2 格,为 200μs,定时的信号周期为 400μs,电平高度约 2.5 格,为 5V.两个通道的信号相位是相反的,仿真结果与设计所期望的结果一致。
还可以用模拟示波器对波形参数进行测量。