课程设计单片机定时器的设计参考模板.docx
《课程设计单片机定时器的设计参考模板.docx》由会员分享,可在线阅读,更多相关《课程设计单片机定时器的设计参考模板.docx(8页珍藏版)》请在冰豆网上搜索。
![课程设计单片机定时器的设计参考模板.docx](https://file1.bdocx.com/fileroot1/2023-2/21/fa8f6321-f9e6-4e49-b97f-32c908023128/fa8f6321-f9e6-4e49-b97f-32c9080231281.gif)
课程设计单片机定时器的设计参考模板
摘要
单片机是一种集成在电路芯片,是采用超大范畴集成电路技能把具有数据处理本事的中心处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和间断系统、定时器/计时器等成果(大要还包括表现驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完竣的计较机系统。
单片机具有特点具有良好的性能价格比;低电压、低功耗;集成度高、体积小、可靠性高;控制成果强等优点。
计算机暂时中止正在执行的主程序,转去执行中断服务程序,并在中断服务程序执行完了之后能自动回到原主程序处继续执行,这个过程叫做“中断”。
中断需要解决两个主要问题:
一是如何从主程序转到中断服务程序;二是如何从中断服务程序返回主程序。
关键词:
单片机,中断,延时
1.设计目的………………………………………………1
2.设计任务的内容和要求………………………………1
3.设计原理………………………………………………1
4.程序说明………………………………………………3
5.心得体会………………………………………………6
定时器试验
1.设计目的
(1)熟练运用汇编语言编程,并且掌握键盘查表来运行相应的功能
(2)熟悉启东硬件仿真系统,熟练应用该系统调试软件
(3)熟悉单片机应用系统的组成,并能运用程序控制外部流水灯
2.设计任务的内容和要求
(1)初始化定时器,使之采用定时器0,方式2,定时100us时间
(2)通过设置中断,产生总时间为1秒
(3)1秒时间到,控制发光二极管点亮
3.设计原理
在实际的控制系统中常要求有外部实时时钟,以实现定时或延时控制;还要求有外部计数器,以实现对外界事件进行计数。
MCS-51单片机由两个可编程定时/计数器(以下简称T/C)。
T0,T1
T/C的核心是1个加1计数器,它的输入脉冲有两个来源:
一个是外部脉冲源,另一个是系统机器周期(时钟振荡器经12分频以后的脉冲信号)。
T0,T1是2个16位寄存器。
加1到满溢出产生中断
T0(TH0,TL0);8CH,8AH地址不连续
T1(TH1,TL1);8DH,8BH
都具有定时或者计数功能。
图一
图一有2个模拟的位开关,前者决定了T/C的工作状态:
当开关处于上方时为定时状态,处于下方时为计数状态。
工作状态的选择由特殊功能寄存器TMOD的C/T位来决定。
C/T=0表示定时,C/T=1表示计数。
当T/C处于定时方式时,加1计数器在每个机器周期加1,因此,也可以把它看作在累计机器周期。
由于一个机器周期包含12个振荡周期,所以它的计数速率是振荡频率的1/12。
如果主频12M,机器周期为1us,每1us定时寄存器完成1次加1操作。
一旦振荡周期确定,机器周期亦确定。
MCS-51单片机有2个特殊功能寄存器TMOD和TCON:
TMOD用于设置T/C的工作方式;TCON用于控制定时器T0、T1的启动与停止,并包含了定时器的状态。
定时/计数器工作方式
如下表所示
定时器/计数器由四种工作方式,所用的计数位数不同,因此,定时计数常数也就不同。
在编写中断服务程序时,应该清楚中断响应过程:
CPU执行中断服务程序之前,自动将程序计数器PC内容(即断点地址)压入堆栈保护(但不保护状态寄存器PSW,更不保护累加器A和其它寄存器内容)然后将对应的中断矢量装入程序计数器PC使程序转向该中断,矢量地址单元中以执行中断服务程序。
定时器T0和T1对应的中断矢量地址分别为000BH和001BH。
中断服务程序从矢量地址开始执行,一直到返回指令“RETI”为止。
“RETI”指令的操作一方面告诉中断系统该中断服务程序已经执行完毕,另一方面把原来压入堆栈保护的断点地址从栈顶弹出,装入到程序计数器PC,使程序返回到被到中断的程序断点处,以便继续执行。
本设计采用工作模式2
当T0M(T1M)=10时定时器设定为工作模式2,此时定时器0(定时器1)被设置为可自动重载的8位定时器。
TL0为8位加法计数器,
TH0为存放该8位加法计数器初值的寄存器。
TH0、TL0的初值都由程序预置。
在工作模式2中,定时器的定时时间由下式确定
图二方式2结构图
4.程序说明
此程序大体分为3部分
第一部分:
开始部分
这一部分主要是指定了程序的起始地址,中断地址等初始化操作。
ORG0000H
AJMPSTART
ORG000BH;定时器0的中断向量地址
AJMPTIME0;跳转到真正的定时器程序处
ORG30H
这一部分主要是指定了程序的起始地址,中断地址等初始化操作。
第二部分:
主程序
主程序是程序的主体。
在本例中,主程序主要为定时计数器T0实现了初始化以及中断的开启。
P1.1为测试是否进入主程序的测试灯,实际运行时只会被点亮一次而不会再有动作。
P1.2是进入中断程序前的指示灯,和P1.1一样,只会被点亮一次而不会再有动作。
START:
MOVP1,#0FFH;关灯
CPLP1.1;测试1
MOV30H,#00H;软件计数器预清0
MOVTMOD,#0000010B;定时/计数器0工作于方式2
MOVTH0,#00H
MOVTL0,#09cH;156
SETBEA;开总中断允许
SETBET0;开定时0允许
SETBTR0;定时0开始运行
CPLP1.2;测试2
SJMP$
第三部分:
中断子程序
该中断服务子程序是程序的核心。
由于本次试验的单片机周期为1微秒,定时计数器的周期为100微秒,故要想在1秒之后点亮P1.0,则需要进入10000次中断子程序之后点反转一次P1.0口。
为此,我设计了一个软件计数器。
此计数器分为2部分。
每一部分都可以计数到100.当第一个子计数器计数到100之后,就会转向第二个子计数器,使其加一。
于是,两个计数器的计数和为100*100=10000,最终就是1秒。
在每一次计数结束后,计数器清零,同时反转P1.1.
TIME0:
;定时器0中断程序
INC30H
MOVA,30H
CJNEA,#64h,T3;30H单元中的值到了100了吗?
以上部分是计数器的第一部分,由于寄存器空间限制,单个寄存器不能够计数到10000,故使用2个100的计数器。
CJNEA,#64h,T3表示当值不相等时跳转,跳出中断。
否则执行计数器2。
MOV30H,#0;清0软件计数器1
inc31H
MOVA,31H
CJNEA,#64h,T3
以上部分是计数器的第二部分,与计数器1一样,是100的计数器。
值得注意的是,在计数器1计满之后,要将其清零。
在计数器2计满之后,顺序执行,点亮P1.0,并自身清零。
CPLP1.0;到了,取反P10
MOV30H,#0;清0软件计数器1
MOV31H,#0;清0软件计数器2
T3:
MOVTH0,#00H
MOVTL0,#9cH;重置定时常数
在每次中断之后,要重置定时器初值,让其在下一个100微秒后进入中断。
RETI
END
5..心得体会
此次课程设计到此告一段落,在此次课程设计中,我有很多感触。
课程设计是我们专业课知识综合运用的实践训练,是对专业知识的总结与考察,是从事将来的工作前的一个不可或缺的过程。
刚拿到设计题目时,我们还是比较迷茫的,感觉无从下手。
所以我并没有急于下手,而是花了一定的时间去分析题目,设计出其大致运行原理,并进行一定的论证和改进。
在方案确定之后,再去查阅资料,选定方式,通过所选芯片的参数和功能来重新改进设计方案。
至此,程序的思路已经较为清晰。
我们在刚开始的时候因为理解问题,使用了错误的方法实现了设计目的,不过在纠正错误的过程中,我们对题目的理解却更加深入了。
所以在第二天,我们在电脑上只用了很少的时间就完成并进一步改进了最初的设计,并且完成了验证与测试。
在本次课程设计中,我发现了很多问题,虽然上学期也做过类似这样的课程设计,但是这次设计让我有了很大的长进。
通过这次设计,我把理论和实际紧密的联系在了一起,感觉学习的深度在课本的基础上更深入了一层。
有些事情,只有我们真正去做了,才能真正的掌握它,理解的更加深刻。
此次课设让我意识到光学理论知识是远远不够的。
总的来说,此次课程设计虽有挫折,但还是收获颇丰。
参考书目:
[1]李建忠,单片机原理及应用,西安,西安电子科技大学出版社,2008年
[2]启东单片机仿真试验系统使用说明书
[3]李珍,单片机原理与应用技术,清华大学出版社,2003年
[4]胡汉才,单片机原理及其接口技术,北京,清华大学出版社,2006
[5]李华,MCS-51系列单片机实用接口技术,北京,北京航空航天大学出版社,2005
---精心整理,希望对您有所帮助