单片机课程设计 河北科技大学
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
河北科技大学
《单片机原理及接口技术》
课程设计报告
学生姓名:肖轶超学号:130707121
专业班级:物联网工程131
课程名称:单片机原理与接口技术
学年学期:2 015 —2 0 16 学年第一学期
指导教师:武卫东
2 0 1 6 年1月
目录
一、设计题目: (3)
二、设计目的: (3)
三、设计原理及方案: (3)
四、实现方法(包括实验电路测试、软件调试等) (7)
五、实施结果: (12)
六、设计体会: (12)
一、设计题目:
数字秒表计时器
二、设计目的:
通过单片机控制数码管模拟数字秒表的计时功能。
1.必做要求
能够通过按键对秒表进行“开始”、“暂停”、“继续”、“停止”、“记录”等操作。
2.扩展要求
(1)通过按键可翻查所记录的各分项值。
(2)其他功能
三、设计原理及方案:
现在方案中采用了三个中断,外部中断INT0,INT1和定时中断T0。CPU在响应中断时,先处理高级中断,在处理低级中断,若有多个同级中断时,则按自然优先顺序处理。例如当CPU正在处理一个中断申请时,有出现了另一个优先级比它高的中断请求,这是,CPU就暂停终止对当前优先级较低的中断源的服务,转去响应优先级比它高的中断请求,并为其服务。待服务结束,再继续执行原来较低级的中断服务程序。而当CPU为级别高的终端服务程序服务时,如果级别低的中断发出中断请求,此时CPU是不会响应的,所以为了避免开始和暂停两个按键中的一个出现没有响应的情况,在进行程序编辑时要注意对中断的使用,避免出现中断的嵌套。,合理分配中断对本设计的实现是至关重要的。
另外由于数字式电子秒表的最小精度位1ms,属于高精度电子秒表。定时器T0的定时周期也为1ms,为了使电子秒表暂停键按下后CPU能马上去响应中断程序,必须将暂停的外部中断级别高于定时计数器的中断级别。避免出现CPU执行完定时溢出中断程序后再响应外部中断程序,影响计时精度。
8051的自然优先级顺序排列如下:
中断源最高
外部中断0
定时/计数器0溢出中断
外部中断1
定时/计数器1溢出中断
串行口中断最低
3
数字式秒表中的两个按键采用了中断实现功能。开始采用外部中断INT0,暂停采用外部中断INT1。另外程序中还用到了定时/计数器0溢出中断进行计时。依据设计要求,暂停的外部中断INT1中断级别最高,计时的定时/计数器0溢出中断次之,开始的外部中断INT0级别最低。
(1)外部中断0服务程序:
外部中断0服务程序结合外部P3.2停止键实现数字电子秒表的停止功能,具体流程图如图2.2。
当按下P3.2停止键按下向CPU发出外部中断请求,CPU转向外部中断0服务程序执行,停止定时器。另外将当前显示的时间进行一次存储,存进中间寄存区。最后中断返回。
图2.2 外部中断0服务程序流程图
(2)外部中断1服务程序
外部中断1服务程序结合外部P3.3停止键实现数字电子秒表的启动功能,具体流程图如图2.2。
当按下P3.3启动键按下向CPU发出外部中断请求,CPU转向外部中断1服务程序执行,启动定时器。另外进行二次存储,将之前进行一次存储的数码管显示数据存入最终缓存区,避免下次计时暂停时一次存储将数据掩盖,从而起到保护数据的作用。二次存储后就中断返回。
图2.3 外部中断1服务程序流程图
(3)定时中断服务程序
当定时/计数器T0器溢出后,向CPU发出中断请求信号。CPU跳转到定时中断程序执行,具体流程如图2.4。定时中断程序是一个进位程序,主要负责对1ms的加一。1ms位没有满十就跳出中断程序,返回显示程序。当1ms位满十后就对1ms位清零,向10ms位加一,同时检测10ms位是否满十,没有满十就跳出中断程序,返回显示程序。如果满十就向100ms位加一,依次类推,最终达到99.99秒后归零,从零开始再次计时。
定时/计数器T0工作在方式0下,TH0和TL0组成一个13位的二进制数计数器。单片机开机或复位时,它的值为00H,当T0启动后,从第一个输入脉冲开始计时,每来一个脉冲计数加一,即从0000000000000开始计数到1111111111111,再计数一个脉冲时TH0和TL0组成的13位计数器将会从13个1变成13个0,并产生溢出,溢出位将被送到TF0标志位,通过溢出标志产生溢出中断请求。显然,T0定时器在方式0下引起一次中断所允许计数的最多脉冲个数为213 个。
但如果定时计数器如果每次都固定从0开始计数,到计满后,再向CPU发出溢出中断请求信号那是毫无意义的。为了使定时计数器在规定的计数脉冲个数字之后(此时应小于213 个脉冲),向CPU发出溢出中断请求,可采取预先向TH0和TL0中放入一个初值X的方法,使计数器以X值为起始值开始计数,即X+1,X+2,……直至计数器计满,从1全变为0。设需要计数的脉冲个数为Y,则有:
X+Y=213
在定时方式下:定时时间间隔位t=(213—X)*振荡周期*12
现在本设计要求1ms实现一次中断,选择定时器T0工作在方式0。所以需要根据以上条件计算出T0的初值。
5
设T0的初值为X,则
(213—X)*12/12*106 =1*10-3
转换位十六进制数X=7192=1110000011000B
即TH0=0E0H(取X的高8位)
TL0=18H(取X的低5位)
由于定时1ms只是一个理想化的时间,其中并没有考虑到中断后单片机执行语句所花的时间。虽然执行语句所花的时间很短只有即微秒,但积少成多,数字秒表一秒中要溢出中断1000次,积累起来误差就能达到毫秒级,这对于精度到达毫秒级的数字电子秒表来说是很大的误差。所以要在后期编程时还要将单片机读程序的时间考虑进去,
在对定时器赋初值时将单片机需要执行的语句所花的时间加上,这样就能使数字电子秒表的误差达到最小。
否
否
否
否