单片机计时器.doc_第1页
单片机计时器.doc_第2页
单片机计时器.doc_第3页
单片机计时器.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

;*;设计一个秒计时器,显示00-59 。 并具有 启动 、停止 、 清零等功能;S1:启动和停止(按一次启动 ,再按一次 停止 );S2:清零,并停止计时。最高位为P2.0;*Counter EQU 57H ;计数器,显示程序通过它得知现正显示哪个数码管DISPBUF EQU 58H ;显示缓冲区为58H5DHSEC BIT 00H ;1秒到的标记SCOUNT EQU 21H ;TCOUNT EQU 22H ;软件计数器TCOUNTER EQU 20;软件计数器的计数值,该值乘以定时器的定时值(50ms),即得到1s的定时值TMRVAR EQU 19456 ;65536-50000*12/11.0592 定时器初值HIDDEN EQU 10HORG 0000HJMP STARTORG 0*8+3 ;INT0中断入口RETIORG 1*8+3 ;TIMER0中断入口JMP INT_T0 ;转去定时器0中断服务程序入口ORG 2*8+3 ;INT1中断入口RETIORG 3*8+3 ;TIMER1中断入口RETIORG 4*8+3 ;串行中断入口RETISTART:MOV SP,#5FH ;设置堆栈指针初值MOV SCOUNT,#0 ;秒计数器MOV DISPBUF,#HIDDEN;MOV DISPBUF+1,#HIDDEN;MOV DISPBUF+2,#HIDDEN;MOV DISPBUF+3,#HIDDEN;CALL INIT_T0 ;T0中断初始化处理CLR SEC ;清除1秒时间到的标志SETB EA ;开总中断LOOP:JBC SEC,NEXT ;一秒到,清除一秒时间到的标志,并转Next处执行JB P3.2,S2LCALL D20MSJNB P3.2,$LCALL D20MSCPL TR0S2: JB P3.3,LOOP1LCALL D20MSJNB P3.3,$LCALL D20MSMOV SCOUNT,#0MOV TH0,#4CHMOV TL0,#00HCLR TR0MOV DISPBUF+5,#00MOV DISPBUF+4,#00LOOP1: CALL DISP ;调用显示程序JMP LOOP ;一秒未到,继续循环NEXT:MOV A,SCOUNT ;获得秒的数值MOV B,#10 ;将10送到B,准备将秒的数值除以10分离出10位和个位DIV AB ;二进制转化为十进制,十位和个位分送显示缓冲区JZ NEXT1 ;如果A中值是0,转NEXT1执行JMP NEXT2 ;否则直接送去显示NEXT1:MOV A,#HIDDEN ;如果A中的值是0,则将消隐码送到A中去NEXT2:MOV DISPBUF+4,A ;将A中的值送到第5位显示缓冲区MOV DISPBUF+5,B ;个位送显示缓冲区JMP LOOP ;继续循环;主程序到此结束;显示程序开始DISP: ;定时器T0的中断响应程序PUSH ACC ;ACC入栈PUSH PSW ;PSW入栈ORL P2,#00111111B ;将P2口的高6位全置1,关所有显示单元MOV A,Counter ;取计数器的值MOV DPTR,#BitTab ;将位码表的首地址送到DPTR中MOVC A,A+DPTR ;取位码ANL P2,A ;将取到的位码与P2相与,将指定位变为低电平MOV A,#DISPBUF ;显示缓冲区首地址ADD A,Counter ;加上计数值MOV R0,A ;送到R0中暂存MOV A,R0 ;根据计数器的值取相应的显示缓冲区的值MOV DPTR,#DISPTAB;字形表首地址MOVC A,A+DPTR ;取字形码MOV P0,A ;将字形码送P0位(段口)INC Counter ;计数器加1MOV A,Counter ;将计数值送到A中去CJNE A,#6,DISPEXIT;计数值是否到6了?MOV Counter,#0 ;如果计数器计到6,则让它回0DISPEXIT:CALL DELAY ;调用延时程序,让每一位有足够时间显示出来POP PSWPOP ACCRET;延时程序开始D20MS: PUSH DPH ;保护现场PUSH DPLPUSH PSWPUSH ACCSETB RS1 ;应用寄存器第4组SETB RS0MOV R7,#200DAY1: MOV R6,#50DAY2: DJNZ R6,DAY2DJNZ R7,DAY1POP ACC ;恢复现场POP PSWPOP DPLPOP DPHRETDELAY:PUSH PSWSETB RS0MOV R7,#10D1: MOV R6,#50D2: DJNZ R6,$DJNZ R7,D1POP PSWRETDISPTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFHBitTab: DB 0FEh,0FDH,0FBH,0F7H,0EFH,0DFHINIT_T0: ;初始化T0为50毫秒的定时器MOV TMOD,#01HMOV TH0,#HIGH(TMRVAR)MOV TL0,#LOW(TMRVAR)SETB ET0 ;开T0中断SETB TR0 ;定时器0开始运行RET ;返回;初始化T0INT_T0:PUSH ACCPUSH PSW ;中断保护MOV TH0,#HIGH(TMRVAR)MOV TL0,#LOW(TMRVAR)INC TCOUNT ;软件计数器加1MOV A,TCOUNTCJNE A,#TCOUNTER,INT_RETMOV TCOUNT

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论