当前位置:文档之家› 单片机实验三报告_定时计数器实验

单片机实验三报告_定时计数器实验

南昌大学实验报告
学生姓名:学号:专业班级:
实验类型:⃞验证⃞综合■设计⃞创新实验日期:2018.05.04 实验成绩:
实验三定时计数器实验
(一)实验目的
1.掌握单片机中断原理;
2.掌握定时器的初始化和定时模式编程。

(二)设计要求
1.采用定时器0/1做16位自动重装(方式0),中断频率为1000HZ;
2.中断函数从P1.7/ P1.6/ P4.7取反输出500HZ方波信号;
3.如果由于频率问题实验现象无法观察,请在中断程序中想办法实现。

(三)实验原理
1.单片机定时/计数器(T0/T1)的结构和工作原理
IAP15W4K58S4单片机内部有5个16位的定时/计数器,即T0、T1、T2、T3和T4。

T0、T1结构框图如下图(图一)所示,TL0、TH0是定时/计数器T0的低8位、高8位状态值,TL1、TH1是定时/计数器T1的低8位、高8位状态值。

TMOD是T0、T1定时/计数器的工作方式寄存器,由它确定定时/计数器的工作方式和功能;TCON是TO、T1定时/计数器的控制寄存器,用于控制T0、T1的启动与停止以及记录T0、T1的计满溢出标志;AUXR称为辅助寄存器,其中T0x12、T1x12 用于设定T0、T1内部计数脉冲的分频系数。

P3.4、P3.5分别为定时/计数器T0、T1的外部计数脉冲输入端。

T0、T1定时/计数器的核心电路是一个加1计数器,如下图(图二)所示。

加1计数器的脉冲有两个来源:一个是外部脉冲源:T0(P3.4)、T1(P3.5),另一个是系统的时钟信号。

计数器对两个脉冲源之一进行输入计数,每输入一个脉冲,计数值加1,当计数到计数器为全1时,再输入一个脉冲就使计数值回零,同时使计数器计满溢出标志位TF0或TF1置1,并向CPU发出中断请求。

(图一)
(图二)
定时功能:当脉冲源为系统时钟(等间隔脉冲序列)时,由于计数脉冲为一-时间基准,脉冲数乘以计数脉冲周期(系统周期或12倍系统周期)就是定时时间。

即当系统时钟确定时,计数器的计数值就确定了时间。

计数功能:当脉冲源为单片机外部引脚的输入脉冲时,就是外部事件的计数器。

如定时1计数器TO,在其对应的计数输入端TO (P3.4) 有一个负跳变时,TO计数器的状态值加1。

外部输入信号的速率是不受限制的,但必须保证给出的电平在变化前至少被采样一次。

2.单片机定时/计数器(T0/T1)的控制
IAP15W4K58S4单片机内部定时/计数器(TO/T1) 的工作方式和控制由TMOD、TCON和AUXR 三个特殊功能寄存器进行管理。

TMOD:设置定时/计数器(TO/T1) 的工作方式与功能。

TCON:控制定时/计数器(TO/T1) 的启动与停止,并包含定时/计数器(TO/TI)的溢出标志位。

AUXR:设置定时计数脉冲的分频系数。

1)工作方式寄存器TMOD
TMOD为T0\T1的工作方式寄存器,其格式如下:
TMOD的低4位为T0的方式字段,高4位为T1的方式字段。

他们的含义完全相同。

M1/M0为T0/T1工作方式选择位,其定义如下图所示:
为功能选择位,0时为定时工作模式,1时为计数工作模式;GATE为门控位,当(GATE) =0时,软件控制位TRO或TR1置1即可启动定时1计数器;当(GATE)=1时,软件控制位TRO或TR1须置1,同时还须INT0(P3.2)或INT1(P3.3)引脚输入为高电平方可启动定时/计数器,即允许外部中断INT0(P3.2)、INT1(P3.3)输入引脚信号参与控制定时/计数器的启动与停止。

TMOD不能位寻址,只能用字节指令设置定时器工作方式,高4位定义T1,低4位定义T0。

复位时,TMOD所有位均置0。

2)定时/计数器控制寄存器TCON
TCON的作用是控制定时/计数器的启动与停止,记录定时/计数器的溢出标志以及外部中断的控制。

定时/计数器控制字TCON的格式如下:
其中TF1为定时/计数器1溢出标志位,当定时/计数器1计满产生溢出时,由硬件自动置位TF1,在中断允许时,向CPU发出中断请求,中断响应后,由硬件自动清除TF1标志。

也可通过查询TF1标志,来判断计满溢出时刻,查询结束后,用软件清除TF1标志;TR1为定时/计数器1运行控制位,由软件置1或清0来启动或关闭定时/计数器1。

当(GATE)=0时,TR1置1即可启动定时/计数器1,当(GATE)=1时,TR1置1且INT1(P3.3)输入引脚信号为高电平时,方可启动定时/计数器1;TF0为定时/计数器0溢出标志位,其功能及操作情况同TF1;TR0为定时/计数器0运行控制位。

其功能及操作情况同TR1。

3.单片机定时/计数器(T0/T1)的工作方式0
方式0是一个可自动重装初始值的16位定时/计数器,结构如下图所示,T0定时/计数器有两个隐含的寄存器RL_TH0、RL_TL0,用于保存16位定时/计数器的重装初始值,当TH0、TL0构成的16位计数器记满溢出时,RL_TH0、RL_TL0的值自动装入TH0、TL0中。

RL_TH0与TH0共用同一个地址,RL_TL0与TL0共用同一个地址。

当(TR0)=0时,TH0、TL0寄存器写入数据时,也会同时写入RL_TH0,RL_TL0寄存器中;当(TR0)=1时,对TH0、TL0写入数据时,只写入RL_TH0,RL_TL0寄存器中,而不会写入TH0、TL0寄存器中,这样不会影响T0的正常计数。

对TH0、TL0寄存器读取数据时,读取的是TH0、TL0的状态值。

当T0工作在定时方式时,定时时间的计算公式如下:
定时时间=(2^16-T0定时器的初始值)×系统时钟周期×12^(1-T0×12)
(四)实验设备
硬件:PC机、USB数据传输线、STC单片机综合实验箱
软件:兼容51单片机的Keil uvision5集成开发环境、STC-ISP单片机烧录软件
(五)实验结果
根据本次实验要求需使用定时器0/1和方式0做频率为1000Hz的中断和上述原理分析,因为单片机的系统时钟频率采用了12Mhz,其机器周期为1us,带入定时时间计算公式可得到需要装入T0的初始值X=64536=FC18H,即TH0=0FCH,TL0=18H;另外还需将定时器T0设置为方式1定时。

因为本次实验做频率为1000Hz的中断在视觉上无法很好的辨别,故设计每中断200次之后将P1.7口取反一次,实验源代码如(七)所示。

对代码进行编译,提示0错误0警告,生成hex文件。

将单片机试验箱和电脑通过USB数据线连接,打开STC-ISP检测串口
点击点开程序文件,选择刚才生成的hex文件,点击下载程序
按下单片机上的掉电复位按钮,程序开始烧录
(六)结果讨论与心得体会
结果分析讨论:将程序烧录至单片机后,可观察到与P1.7口连接的LED灯按规律亮灭,且亮灭时间和代码中的设定的理论时间(每中断200次对P1.7取反一次即LED灯良0.2s后灭0.2秒以此循环)一致,完成实验。

心得体会:通过本次实验,我学会了如何使用内部定时/计数器来产生中断,理解了定时/计数器(T0/T1)的结构和工作原理、三个特殊功能寄存器对它的控制以及4种工作方式。

希望通过自己多次尝试能在今后实验中熟练使用内部定时/计数器并将其运用到其他方面。

(七)附录:实验源代码
Fosc_KHZ EQU 22118 ;
P1M1 DATA 0x91 ;
P1M0 DATA 0x92 ;
F_Main:
CLR A
MOV P1M1, A ;
MOV P1M0, A ;
MOV A, #0C8H ;
ORG 0005H
RESET:
AJMP Main
ORG 000BH
AJMP IT0P
ORG 010BH
Main:
MOV SP, #60H ;
MOV TMOD, #01H ;
ACALL PT0M0 ; Here:
AJMP Here
PT0M0:
MOV TL0, #18H ;
MOV TH0, #0FCH ;
SETB ET0
SETB EA
SETB TR0
RET
IT0P:
MOV TL0, #18H ;
MOV TH0, #0FCH ;
DEC A
JZ ZHIXING
RETI
ZHIXING:
MOV A, #0C8H ;
CPL P1.7 RET
END。

相关主题