51/AVR单片机技术驿站!  <在线翻译>     便利工具    特色网址   无弹窗、无插件的绿色站点...  英才招聘   学历查询  喜欢>>收藏我站 

当前位置:首页 > 单片机技术文章 > 51单片机 > 详细内容
定时器和中断实验
发布时间:2009/6/29  阅读次数:3056  字体大小: 【】 【】【
  
ORG 0000H
AJMP START
ORG 000BH   ;T0中断入口地址
AJMP INT_T0
ORG   0030H
START:        MOV   SP,#60H
       MOV TMOD,#01H ;置T0为方式1
       MOV TL0,#0B0H   ;延时50mS的时间常数
       MOV TH0,#3CH
       MOV R0,#00H     ;数码管显示单元
       MOV R1,#20       ;定时次数
       SETB TR0;启动定时器1,开始定时
       SETB ET0
       SETB EA     ;开中断
Slop:   acall display
              SJMP Slop
INT_T0:;T0中断服务子程序
       PUSH ACC;保护现场
       PUSH PSW
       PUSH DPL
       PUSH DPH
       CLR TR0;关闭定时器1,停止定时
       MOV TL0,#0B0H;延时50mS常数
       MOV TH0,#3CH            
       DJNZ R1,EXIT
       MOV   R1,#20;重置定时次数
       MOV A,R0
       INC A   ;数码管显示单元内容加一
       MOV R0,A
       CJNE A,#10,EXIT
       MOV R0,#00H     ; 数码管显示单元清0
EXIT: SETB TR0;启动定时器0,开始定时
       POP DPH;恢复现场
       POP DPL
       POP PSW
       POP ACC
RETI
;显示子程序
display: mov a,R0        
       mov dptr,#numtab;指定查表启始地址
       MOVC A,@A+DPTR       ;得到段码
       mov P0,a    ; 段码送P0口
       clr P2.7     ;送位码
       acall delay1 ;延时10ms
       setb P2.7
       ret
;延时子程序
delay1:MOV      R2,#20
L1:      MOV      R3,#248
       DJNZ    R3,$
       DJNZ    R2,L1
       RET
;实验板上的7段数码管0~9数字的共阴显示代码
numtab: DB 0CFH,03H,5DH,5BH,93H,0DAH,0DEH,43H,0DFH,0DBH
END
  
3、使用软件定时1秒,控制2个数码管循环显示秒数0~59,每秒钟数字加一。
(1)在设计过程中使用一个存储单元作为秒计数单元,当一秒钟到来时,就让秒计数单元加1,当秒计数达到60时,就自动返回到0,重新秒计数。
(2)对于秒计数单元中的数据要把它十位数和个数分开,方法一:采用对10整除和对10求余;方法二:采用分数、合数法。
(3)在数码管上显示数,通过查表的方式完成。
(4)一秒时间的产生采用软件精确延时的方法来完成,经过精确计算得到1秒时间为1.002秒。
  方法一汇编源程序
;----------10毫秒延时子程序
DELY10ms:   MOV R4,#20
D1: MOV R5,#248
       DJNZ R5,$
       DJNZ R4,D1
RET
;-------主程序
Second EQU 30H
ORG 0
START: acall init
NEXT: acall display
             Ljmp next
  
Init: MOV Second,#00H
             ret
  
display: MOV R3,#50
dis2:MOV A,Second
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A           ;送出十位数字的段码
CLR p2.7           ;送位码
Acall dely10ms
Setb p2.7
MOV A,B
MOVC A,@A+DPTR
MOV P0,A           ;送出个位数字的段码
CLR p2.6
LCALL DELY10mS
Setb p2.6
djnz r3,dis2 ;20毫秒循环执行50次,时间约1秒
INC Second
MOV A,Second
CJNE A,#60,ret0
Mov Second,#00h
Ret0: ret
TABLE: DB 0CFH,03H,5DH,5BH,93H,0DAH,0DEH,43H,0DFH,0DBH
END
  
方法二汇编程序:
temp equ 22h ;计数器个位和十位数值存放内存位置
ORG 0000H        ;程序执行开始地址
LJMP START              ;跳到标号START执行
;-------------------- 主程序 ---------------------------
START:        mov temp,#0    ;初始化计数器,从0开始
stlop:        acall display ;调用显示子程序
              acall add1 ;对计数器加1
              mov a,temp
              cjne a,#60H,next ;判断计数器是否满60?
              mov temp,#0     ;满60就清零重新开始
              next:   ljmp stlop ;不满就循环执行
;显示子程序
display:    mov r1,#50
dis1:           mov a,temp      ;将temp中的十六进制数转换成10进制
              anl a,#0Fh
              mov dptr,#numtab;指定查表启始地址
              MOVC A,@A+DPTR       ;查数字的段码
              mov P0,a    ;送出个位数字的段码
              clr P2.7     ;送出位码
              acall delay1 ;显示10ms
              setb P2.7         ;关闭位选
              mov a,temp;将temp中的十六进制数转换成10进制
              anl a,#0F0h
              swap a
              mov dptr,#numtab;指定查表启始地址
              MOVC A,@A+DPTR       ;查数字的段码
              mov P0,a    ;送出十位数字的段码
              clr P2.6     ;送位码
              acall delay1 ;显示10ms
              setb P2.6
             djnz r1,dis1
              ret
;延时子程序
delay1:MOV      R2,#20
L1:      MOV      R3,#248
              DJNZ    R3,$
              DJNZ    R2,L1
              RET
;加一子程序
add1:   mov a,temp
              inc a
             da a
             mov temp,a
              ret
;实验板上的7段数码管0~9数字的共阴显示代码
numtab: DB 0CFH,03H,5DH,5BH,93H,0DAH,0DEH,43H,0DFH,0DBH
end
4、使用定时器T0,定时1秒,控制2个数码管循环显示秒数0~59,每秒钟数字加一。
本题请大家参考前面的例题独立完成。
六、实验报告
1、说明实验目的和内容。
2、画出实验电路原理图,并简要分析电路的执行过程。
3、完成实验内容(4)的程序设计框图并说明编程思想,并给出程序清单。
4、根据实验内容,调式程序,观察、分析程序的运行过程。
5、给出实验结果并进行分析。
6、实验体会。
  
上一篇:8*8LED点阵显示实验 下一篇:基于89C51的计算机可锁定加密键盘设计
我要评论
  • 匿名发表
  • [添加到收藏夹]
  • 发表评论:(匿名发表无需登录,已登录用户可直接发表。) 登录状态:未登录
最新评论
所有评论[0]

网站导航 管理登陆 ┊ 免责声明 问题反馈  友链说明
本站部分内容来自网络共享资源,如有冒犯您的权利请来信告之删除或纠正!
不得对本站进行复制、盗链或镜像,转载内容须获得同意或授权;欢迎友情链接、站务合作!

    我要报警 Alexa
 mcusy_cn#126.com (请把#改成@) 交流:522422171
本站学习交流群:138..158(高级群1-)、77930286(高级群2)、61804809(群3)
Copyright© MCUSY All Rights Reserved
本站网警备案号: WZ36040002485
  ICP备案证书号:粤ICP备09034963号