multisim单片机仿真的例子

更新时间:2024-01-16 11:37:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验四、定时/计数器实验

一、实验目的

掌握单片机定时/计数器的内部结构和工作方式。 掌握单片机定时/计数器的应用。

二、实验原理

1、定时/计数器的工作方式与控制寄存器

MCS-51系列单片机内部包含两个十六位的定时/计数器T0和T1,当被设为定时方式时,实际上对机器周期计数,每个机器周期计数器加1直至溢出。当被设为计数方式时,则对加在T0(P3.4)或T1(P3.5)引脚上的外部脉冲计数。

单片机中与定时/计数器相关的特殊功能寄存器(SFR)有定时/计数器控制寄存器(TCON)和定时/计数器模式寄存器(TMOD)。

模式寄存器TMOD的字节地址为89H,其各位的定义如下:

M1 0 0 1 1

GATE C/T M1 M0 GATE C/T M1 M0 T1控制 T0控制 M0 0 1 0 1

工作模式 模式0 模式1 模式2 模式3

13位定时/计数方式 16位定时/计数方式 8位自动重装载方式

对T0:分为一个8位的定时/计数器TL0和一个8位的定时器TH0 对T1:停止计数

C/T=0,设为定时器方式,C/T=1,设为计数器方式。

GATE=0,定时/计数器的启动和停止完全由TRi位控制。GATE=1,只有当TRi位置位并且INTi引脚为高电平时才启动计数器。

控制寄存器TCON的字节地址为88H,其各位的定义如下:

TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

定时/计数器 外中断控制

TRi:定时/计数器启停控制,TRi=1启动定时/计数器(当GATE=0时)。

TFi:定时/计数器溢出标志,当定时/计数器溢出时,由硬件置位,CPU响应中断时,自动清零。 2、定时初值的计算

当单片机的振荡频率为fOSC,则机器周期为

12?(2L12fOSC,设定时初值为TC,则定时周期为:

t??TC)fOSCL

TC?2?t?fOSC12

其中L为计数器的位数,模式0时L=13,模式1时L=16,模式2、模式3时L=8。

三、实验环境

运行Windows系统微机一套。 NI Multisim 10仿真软件。

四、实验内容

1、定时器的应用

利用单片机定时/计数器T0的定时功能(工作方式1),使P1.0输出1Kz的方波,并用示波器观测输出波形。

启动Multimim 10仿真软件,在设计窗口单击鼠标右键,在弹出的快捷菜单中选择“Place Component”命令,在“Select a Component”对话框中单击“Group”下拉列表框,选择MCU Module,在“Component”列表框中选择8051,单击“OK”按钮,在随后出现的MCU向导中,设置电路设计的存放路径、项目名称、单片机的编程语言(本实验选择汇编语言)以及程序文件名,最后将8051 CPU放入设计窗口,设计窗口出现“Circuit1”和“main.asm”两个标签。在设计窗口中双击8051,在弹出的对话框中选择“Value”,在“clock speed”中把“12”改成“6”。

在“Select a Component”对话框的“Group”下拉列表框中选择Sources,在“Component”列表框中选择VCC和DGND,将电源VCC和接地GND放入设计窗口。在Instruments工具栏单击“Oscilloscope”图标,将虚拟示波器放入设计窗口,连接单片机和示波器,完成实验原理图如图4-1所示。

XSC1Ext Trig+_A+_+B_VCCU11234567891011121314151617181920P1B0T2P1B1T2EXP1B2P1B3P1B4P1B5MOSIP1B6MISOP1B7SCKRSTP3B0RXDP3B1TXDP3B2INT0P3B3INT1P3B4T0P3B5T1P3B6WRP3B7RDXTAL2XTAL1GNDVCCP0B0AD0P0B1AD1P0B2AD2P0B3AD3P0B4AD4P0B5AD5P0B6AD6P0B7AD7EAVPPALEPROGPSENP2B7A15P2B6A14P2B5A13P2B4A12P2B3A11P2B2A10P2B1A9P2B0A840383937363534333231302928272625242322215VGND8051

图 4-1 定时实验原理图

已知单片机的振荡频率为6MHz。定时初值为:

TC?216?fOSC?t12?65536?6?106?0.5?1012?3?65286?FF06H

单击Multimin设计窗口的main标签,在源程序编辑窗口输入单片机实验程序。实验参考程序如下:

ORG 0000H LJMP MAIN ORG 000BH CPL P1.0

MOV TH0,#0FFH

2

;T0中断入口地址

MOV TL0,#06H RETI

ORG 1000H

MAIN: MOV TH0,#0FFH

MOV TL0,#06H MOV IE,#82H SETB TR0 SJMP $ END

;定时初值为FF06H ;允许T0中断

MOV TMOD,#01H ;T0方式1定时

运行程序,双击设计窗口示波器图标,显示示波器面板如图4-2所示,改变面板上“Timebase”为500uS/Div,观察波形并测量周期。

图 4-2 虚拟示波器面板

2、计数器的应用

将定时/计数器T0设为工作方式3,其中TH0设为定时方式,使P1.0输出1Kz的方波,并用虚拟示波器观察,TL0设为计数方式,使T0引脚作为外中断输入脚,每输入一个脉冲,引发一次中断,使P1.7电平翻转一次,观察LED的闪烁情况。

在设计窗口单击鼠标右键,在弹出的快捷菜单中选择“Place Component”命令,在“Select a Component”对话框中单击“Group”下拉列表框,选择“Diodes”中的“LED”,双击列表中的发光二极管“LED-red”,将其放到设计窗口,在对话框 “Group”中选择“Basic”,并将“SWITCH”中的开关“DIPSW1”放到设计窗口。在Multisim10的最右边虚拟仪器栏中选择信号发生器“Function Generator”放置到设计窗口中,将其按下图4-3连接好。

3

XSC1Ext Trig+_A+_+B_U11234567891011121314151617181920P1B0T2P1B1T2EXP1B2P1B3P1B4P1B5MOSIP1B6MISOP1B7SCKRSTP3B0RXDP3B1TXDP3B2INT0P3B3INT1P3B4T0P3B5T1P3B6WRP3B7RDXTAL2XTAL1GNDVCCP0B0AD0P0B1AD1P0B2AD2P0B3AD3P0B4AD4P0B5AD5P0B6AD6P0B7AD7EAVPPALEPROGPSENP2B7A15P2B6A14P2B5A13P2B4A12P2B3A11P2B2A10P2B1A9P2B0A84038393736353433323130292827262524232221VCC5VXFG1LED1J1Key = A 8051GND

图 4-3

TH0定时初值为:TC?2?实验参考程序如下: ORG 0000H LJMP MAIN ORG 000BH CPL P1.7 RETI

ORG 001BH CPL P1.0 RETI

ORG 1000H

MAIN: MOV TMOD,#27H MOV TL0,#0FFH MOV IE,#8AH MOV TCON,#55H SJMP $

双击设计窗口信号发生器图标,信号发生器面板如图4-4所示,面板上波形选择方波,频率选择1KHz,完成后关闭对话框。

运行程序,双击设计窗口示波器图标,显示示波器面板如图4-5所示,改变面板上“Timebase”为500uS/Div,观察波形并测量周期。

;TH0中断入口地址

MOV TH0,#06H

;TL0中断入口地址

MOV TL0,#0FFH

86?106?0.5?1012?3?6

4

图表 4-4

图表 4-5

五、思考题

①若要使P1.0输出1KHz方波,P1.1输出2KHz方波,程序该如何修改? ②T0设为方式3,T1有何作用? ③当脉冲宽度过宽时,该如何测量?

5

本文来源:https://www.bwwdw.com/article/fxdo.html

Top