精华内容
下载资源
问答
  • 手动外部输入脉冲,计时器记到6时,由P1.0输出信号,使LED灯状态反转。
  • KT800综合系统板实验源程序单片机2位数码管计数器程序(汇编)
  • KT800综合系统板实验源程序单片机2位数码管计数器程序(汇编)
  • 8051内部定时器T0用中断方式计时,实现每一秒使P1.0的输出状态发生一次反转,从而形成方波输出。
  • 以51系列单片机为控制器,实现按键次数的统计工作,并在计满一定的次数后可以产生预定的输出;采用中断方式,对按键的计数及产生的输出放在中断服务模块当中,每当按键按下便产生一次中断,没有按键按下时,主程序...
  • 单片机三位数码管计数器程序
  • 具体实现功能:主要实现延时计数,在按下计数键后数码管加一,持续按着超过1秒钟,每0.2秒加一。最大计数99
  • AT89C52单片机计数器

    2015-01-03 16:13:36
    利用AT89C52单片机来制作一个手动计数器,按一下加1,计数器从00一直加到99,实现100个数值的计数功能。在AT89C52单片机的P3.7管脚接一个轻触开关,作为手动计数的按钮,用单片机的P2.0-P2.7接一个共阴数码管,作为...
  • 00-99计数器汇编程序

    2010-05-13 13:31:40
    很好的一个00-99计数器 自己平时花点时间做的
  • 本文主要讲了利用单片机的定时/计数器设计一个计时器,下面一起来看看
  • MCS-51单片机讲义资料(汇编)—单片机中断统和定时计数器
  • 本程序是51单片机计算器C语言调汇编程序
  • 51单片机汇编语言教程-慧净电子会员收集整理 全部28课 51单片机汇编语言教程第20课-单片机定时计数器实验 基于HL-1HJ-C52HJ-3G实验板 (图片 HL-1 开发板) 前面我们做了定时器的实验现在来看一看计数实验在工作中计数...
  • 数码管显示与独立键盘扫描实现简易计数器(51单片机汇编语言实现).doc
  • 基于单片机at89c51的双字节乘法汇编程序语言代码
  • 计数器程序0--99

    2014-10-29 23:15:27
    计数器程序0到99,实验课程序,c51单片机,c语言程序
  • 1.实验任务 用AT89S51单片机的定时/计数器T0产生一秒的定时时间,作为秒计数时间,当一秒产生时,秒计数加1,秒计数到60时,自动从0开始。下面我就开始介绍如何制作这款单片机记时器,硬件电路如下图所示 2.电路...

    1.实验任务

    用AT89S51单片机的定时/计数器T0产生一秒的定时时间,作为秒计数时间,当一秒产生时,秒计数加1,秒计数到60时,自动从0开始。下面我就开始介绍如何制作这款单片机记时器,硬件电路如下图所示

    2.电路原理图

    点击浏览下一页

    图4.15.1

    3.系统板上硬件连线

    (1.       把“单片机系统”区域中的P0.0/AD0-P0.7/AD7端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P0.0/AD0对应着a,P0.1/AD1对应着b,……,P0.7/AD7对应着h。

    (2.       把“单片机系统”区域中的P2.0/A8-P2.7/A15端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P2.0/A8对应着a,P2.1/A9对应着b,……,P2.7/A15对应着h。

    4.程序设计内容

    AT89S51单片机的内部16位定时/计数器是一个可编程定时/计数器,它既可以工作在13位定时方式,也可以工作在16位定时方式和8位定时方式。只要通过设置特殊功能寄存器TMOD,即可完成。定时/计数器何时工作也是通过软件来设定TCON特殊功能寄存器来完成的。

    现在我们选择16位定时工作方式,对于T0来说,最大定时也只有65536us,即65.536ms,无法达到我们所需要的1秒的定时,因此,我们必须通过软件来处理这个问题,假设我们取T0的最大定时为50ms,即要定时1秒需要经过20次的50ms的定时。对于这20次我们就可以采用软件的方法来统计了。

    因此,我们设定TMOD=00000001B,即TMOD=01H

    下面我们要给T0定时/计数器的TH0,TL0装入预置初值,通过下面的公式可以计算出

    TH0=(216-50000) / 256

    TL0=(216-50000) MOD 256

    当T0在工作的时候,我们如何得知50ms的定时时间已到,这回我们通过检测TCON特殊功能寄存器中的TF0标志位,如果TF0=1表示定时时间已到。

    5.程序框图

    点击浏览下一页

    图4.15.2

    6.汇编源程序(查询法)

    SECOND            EQU 30H 
    
    TCOUNT           EQU 31H 
    
                                ORG 00H 
    
    START:               MOV SECOND,#00H 
    
                               MOV TCOUNT,#00H 
    
                                MOV TMOD,#01H 
    
                                MOV TH0,#(65536-50000) / 256 
    
                               MOV TL0,#(65536-50000) MOD 256 
    
                                SETB TR0 
    
    DISP:                  MOV A,SECOND 
    
                                MOV B,#10 
    
                               DIV AB 
    
                                MOV DPTR,#TABLE 
    
                                MOVC A,@A+DPTR 
    
                               MOV P0,A 
    
                                MOV A,B 
    
                                MOVC A,@A+DPTR 
    
                               MOV P2,A 
    
    WAIT:                 JNB TF0,WAIT 
    
                                CLR TF0 
    
                                MOV TH0,#(65536-50000) / 256 
    
                               MOV TL0,#(65536-50000) MOD 256 
    
                                INC TCOUNT 
    
                                MOV A,TCOUNT 
    
                               CJNE A,#20,NEXT 
    
                                MOV TCOUNT,#00H 
    
                                INC SECOND 
    
                               MOV A,SECOND 
    
                                CJNE A,#60,NEX 
    
                               MOV SECOND,#00H 
    
    NEX:                   LJMP DISP 
    
    NEXT:                LJMP WAIT 
    
    TABLE:              DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH 
    
                                END 

    7. C语言源程序(查询法)

    #include <AT89X51.H> 
    
    unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f, 
    
                                   0x66,0x6d,0x7d,0x07, 
    
                                   0x7f,0x6f,0x77,0x7c, 
    
                                   0x39,0x5e,0x79,0x71,0x00}; 
    
    unsigned char second; 
    
    unsigned char tcount; 
    
    void main(void) 
    
    { 
    
      TMOD=0x01; 
    
      TH0=(65536-50000)/256; 
    
      TL0=(65536-50000)%6; 
    
      TR0=1; 
    
      tcount=0; 
    
      second=0; 
    
      P0=dispcode[second/10]; 
    
      P2=dispcode[second]; 
    
      while(1) 
    
        { 
    
          if(TF0==1) 
    
            { 
    
              tcount++; 
    
              if(tcount==20) 
    
                { 
    
                  tcount=0; 
    
                  second++; 
    
                  if(second==60) 
    
                    { 
    
                      second=0; 
    
                    } 
    
                  P0=dispcode[second/10]; 
    
                  P2=dispcode[second];              
    
                } 
    
              TF0=0; 
    
              TH0=(65536-50000)/256; 
    
              TL0=(65536-50000)%6; 
    
            } 
    
        } 
    
    } 

     

    1.      汇编源程序(中断法)

    SECOND                     EQU 30H 
    
    TCOUNT                    EQU 31H 
    
                                         ORG 00H 
    
                                         LJMP START 
    
                                         ORG 0BH 
    
                                         LJMP INT0X 
    
    START:                        MOV SECOND,#00H 
    
                                         MOV A,SECOND 
    
                                         MOV B,#10 
    
                                         DIV AB 
    
                                         MOV DPTR,#TABLE 
    
                                         MOVC A,@A+DPTR 
    
                                         MOV P0,A 
    
                                         MOV A,B 
    
                                         MOVC A,@A+DPTR 
    
                                         MOV P2,A 
    
                                         MOV TCOUNT,#00H 
    
                                         MOV TMOD,#01H 
    
                                         MOV TH0,#(65536-50000) / 256 
    
                                         MOV TL0,#(65536-50000) MOD 256 
    
                                         SETB TR0 
    
                                         SETB ET0 
    
                                         SETB EA 
    
                                         SJMP $ 
    
    INT0X: 
    
                                         MOV TH0,#(65536-50000) / 256 
    
                                         MOV TL0,#(65536-50000) MOD 256 
    
                                         INC TCOUNT 
    
                                         MOV A,TCOUNT 
    
                                         CJNE A,#20,NEXT 
    
                                         MOV TCOUNT,#00H 
    
                                         INC SECOND 
    
                                         MOV A,SECOND 
    
                                         CJNE A,#60,NEX 
    
                                         MOV SECOND,#00H 
    
    NEX:                                     MOV A,SECOND 
    
                                         MOV B,#10 
    
                                         DIV AB 
    
                                         MOV DPTR,#TABLE 
    
                                         MOVC A,@A+DPTR 
    
                                         MOV P0,A 
    
                                         MOV A,B 
    
                                         MOVC A,@A+DPTR 
    
                                         MOV P2,A 
    
    NEXT:                          RETI 
    
    TABLE:                        DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH 
    
                                         END 

    2.      C语言源程序(中断法)

    #include <AT89X51.H> 
    
    unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f, 
    
                                   0x66,0x6d,0x7d,0x07, 
    
                                   0x7f,0x6f,0x77,0x7c, 
    
                                   0x39,0x5e,0x79,0x71,0x00}; 
    
    unsigned char second; 
    
    unsigned char tcount; 
    
    void main(void) 
    
    { 
    
      TMOD=0x01; 
    
      TH0=(65536-50000)/256; 
    
      TL0=(65536-50000)%6; 
    
      TR0=1; 
    
      ET0=1; 
    
      EA=1; 
    
      tcount=0; 
    
      second=0; 
    
      P0=dispcode[second/10]; 
    
      P2=dispcode[second]; 
    
      while(1); 
    
    } 
    
    void t0(void) interrupt 1 using 0 
    
    { 
    
      tcount++; 
    
      if(tcount==20) 
    
        { 
    
          tcount=0; 
    
          second++; 
    
          if(second==60) 
    
            { 
    
              second=0; 
    
            } 
    
          P0=dispcode[second/10]; 
    
          P2=dispcode[second];              
    
        } 
    
      TH0=(65536-50000)/256; 
    
      TL0=(65536-50000)%6; 
    
    } 

    转载于:https://www.cnblogs.com/yuanfang/archive/2011/04/12/2013677.html

    展开全文
  • 51 单片机汇编语言:8位加减计数器

    千次阅读 2020-05-10 10:35:23
    51 单片机汇编语言:8位加减计数器 用51 单片机汇编语言编程,实现8位加减计数器,按下面的按钮选择加计数或者减计数 使用仿真工具:Proteus 8.6 通过构建子程序完成功能,所需子程序有: 数码管显示子程序、延迟子...

    51 单片机汇编语言:8位加减计数器


    用51 单片机汇编语言编程,实现8位加减计数器,按下面的按钮选择加计数或者减计数
    使用仿真工具:Proteus 8.6
    在这里插入图片描述
    通过 构建子程序完成功能,所需子程序有:
    数码管显示子程序、延迟子程序、计数子程序
    程序如下:

            ORG   0000H
            JMP   Start
            ORG   0100H
    Start:	
    cDisplayBuffer   EQU   30H
    cDisplayBit      EQU   38H
    
    	    MOV	  cDisplayBuffer,#9       
    		MOV	  cDisplayBuffer+1,#9
    		MOV	  cDisplayBuffer+2,#9
    		MOV	  cDisplayBuffer+3,#9
    		MOV	  cDisplayBuffer+4,#9
    		MOV	  cDisplayBuffer+5,#9
    		MOV	  cDisplayBuffer+6,#8
    		MOV	  cDisplayBuffer+7,#0     ; (37H)=0
    		MOV	  cDisplayBit,#0 
    Main:  
    	    MOV   R6,#4        ;计数周期为1s
    L1:	    MOV   R5,#0
    L2:	    MOV   R4,#0
    	    LCALL Display     
    	    LCALL Delay       
    	    DJNZ  R4,$
    	    DJNZ  R5,L2
    	    DJNZ  R6,L1	  
    	    LCALL COUNT      ;计数
    	    SJMP  Main
    ;---------------------------------------------
    DispTable:	 DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
    Display:                       ;通用显示子程序
    	    MOV   A,cDisplayBit
    	    MOV	  P2,A
    	    MOV	  DPTR,#DispTable
    	    MOV   A,#cDisplayBuffer
    	    ADD   A,cDisplayBit
    	    MOV	  R0,A
    	    MOV   A,@R0
    	    MOVC  A,@A+DPTR
    	    MOV	  P1,A
    	    INC	  cDisplayBit
    	    ANL	  cDisplayBit,#7
    	    RET
    ;---------------------------------------------
    Delay:                           ;延迟子程序            
    	    MOV   R2,#100 
    	    DJNZ  R2,$
    	    RET  
    ;---------------------------------------------
    COUNT:                           ;计数子程序
    	    MOV   R1, #cDisplayBuffer+7
    	    JNB   P3.7,DeCount     
    InCount:	                     ;P3.7=1时加法计数器
    	    INC   @R1
    	    CJNE  @R1,#10,RET1       
    	    MOV   @R1,#0             ;自增到10时清零
    	    DEC   R1
    	    CJNE  R1, #cDisplayBuffer-1,InCount   ;cDisplayBuffer-1相当于2FH
    	    RET
    DeCount:	    			     ;P3.7=0时减法计数器
    	    DEC   @R1
    	    CJNE  @R1,#255,RET1
    	    MOV   @R1,#9
    	    DEC   R1
    	    CJNE  R1, #cDisplayBuffer-1, DeCount
    RET1:   RET	 	   	    
            END
    
    
    展开全文
  • 51单片机笔记(四)定时/计数器5.1 结构和工作原理5.2 方式寄存器和控制寄存器5.2.1 方式寄存器TMOD(89H)5.2.2 控制寄存器TCON(88H)5.3 计时器的设置汇编程序6.1 把单片机片内的30H~7FH 单元清零6.2 片外RAM中1000H...

    定时/计数器

    5.1 结构和工作原理

    8051单片机内部有2个16位可编程定时/计数器:

    • 定时计数器0
    • 定时计数器1。

    定时/计数器的实质是加1计数器,每经过一个机器周期,计数器自加1

    • 定时器是对内部晶振的脉冲进行计数
    • 计数器是对外部1信号脉冲进行计数

    最短周期:

    • 作为定时器时:最短定时周期为1个机器周期。
    • 作为计数器时:每个机器周期采样一次引脚电平,一次为“1”,下次为“0”时,计数器加1,为确保计数正确,高、低电平至少保持一个机器周期以上。

    5.2 方式寄存器和控制寄存器

    5.2.1 方式寄存器TMOD(89H)

    TMOD用于控制定时/计数器的功能和工作模式。不能进行位寻址,只能通过整个字节值设定。

    T 1 T_1 T1 T 0 T_0 T0
    GATEC/TM1M0GATEC/TM1M0
    • GATE门控位
      • 可以用于测量TNTO(1)出现的正脉冲宽度
      • GATE=1时,INT0(1)=1(保持)且TR0(1)=1,T0(1)计数
      • GATE=0时,仅由TR0(1)启动T0(1)。
      • 就可以用外部电平控制计数开始
    • C/T 功能选择位
      • C/T=0时:定时器模式,每个机器周期计数器加1,至溢出
      • C/T=1时:计数器模式,对T0, T1的外部输入信号计数
    • M1, M0 工作方式选择位
      • M1M0工作方式功能
        00方式013位计数器
        01方式116位计数器
        10方式28位自动重装载计数器,TH自动送TL
        11方式3T0分成2个8位计数器

    当为定时/计数器设置完工作方式,并启动运行后,就不用CPU继续干预,直至计数器计满溢出。所以定时/计数可与CPU同时进行

    5.2.2 控制寄存器TCON(88H)

    TCON用于控制定时/计数器的启动和停止(TR1, TR0),同时表明了定时/计数器的状态(TF1, TF0)。

    T 1 T_1 T1 T 0 T_0 T0中断相关 T 1 T_1 T1中断相关 T 0 T_0 T0
    TF1TR1TF0TR0IE1IT1IE0IT0
    • TF1: T1溢出标志。T1溢出时,TF1=1,申请中断(001BH)。进入中断服务程序后,由硬件自动清除。
    • TR1: T1运行控制位。1时开始及计数

    5.3 计时器的设置

    首先,计数的工作方式是终点唯一但是开始值由人设置

    起点时间的计算
    t = T c × ( 2 L - T 初 ) t=T_c×( 2^{L}-T_{初}) t=Tc×(2LT)

    • t t t是定时时间
    • T c T_c Tc机器周期,有 T c = 12 f o s c T_c=\frac{12}{fosc} Tc=fosc12
    • L L L是计数器位数,一般是16位
    • T 初 T_初 T定时器初值

    工作的设置流程

    1. 对TMOD赋值,设置定时计数方式
    2. 向TH0、TL0写入初始值
    3. 开放中断(用于中断方式),如不开放则不触发中断
    4. 通过TR0启动定时/计数器
    5. 通过TF0判别定时计数是否结束

    16位计时器12MHZ最大最小计时
    t m i n = 1 μ s t_{min}=1 \mu s tmin=1μs
    t m a x = 65.536 m s t_{max}=65.536 ms tmax=65.536ms

    汇编程序

    方法并不唯一,仅供参考~

    6.1 把单片机片内的30H~7FH 单元清零

            ORG 0000H
    CLEAR:  MOV R0,#30H     ;30H 送R0寄存器
            MOV R6,#50H     ;50H 送R6寄存器(用作计数器)
    CLR1:   MOV A,#18H  ;18 送累加器A
            MOV @R0,A       ;00 送到30H-7FH 单元
            INC R0          ;R0 加1
            DJNZ R6,CLR1    ;不到50H个字节,继续
    WAIT:   LJMP WAIT
            END
    

    6.2 片外RAM中1000H~100FH单元中的数传送到片外RAM中2000H~200FH单元

             ORG 0000H
             MOV DPTR,#1000H
             MOV R0,#40H
    MOVE1:   MOVX A,@DPTR
             MOV @R0,A
             INC R0
             INC DPTR
             CJNE R0,#50H,MOVE1
             MOV DPTR,#2000H
             MOV R0,#40H
    MOVE2:   MOV A,@R0
             MOVX @DPTR,A
             INC R0
             INC DPTR
             CJNE R0,#50H,MOVE2
             END
    

    6.3 以PC为基址寄存器,查表求30H单元中BCD码的平方,结果存入31H单元

    		org 0000h  
    		mov a,30h
    		add a,#05h
    		movc a,@a+pc
    		mov 31H,a
    		wait: ljmp wait
    		tab:db 0,1,4,9,16,25,36,49,64,81
    		end
    

    6.4 2字节无符号数转换成BCD码

            ORG 0000H       ;get 2bit into BCD 30H,31H,6->40H,41H,42H,43H,44H,45H
            MOV R1,#40H
    CLR1:   MOV @R1,#00H
            INC R1
            CJNE R1,#46H,CLR1
            MOV R6,30H      ;count
            MOV A,31H       ;A=F7H
            MOV B,#100      ;B=100
            DIV AB          ;A/B A=2,B=47
            MOV 42H,A       ;42H=2
            MOV A,B         ;A=47
            MOV B,#10       ;B=10
            DIV AB          ;A/B A=4,B=7
            MOV 41H,A       ;41H=4
            MOV 40H,B       ;40H=7
    ADDEE:  MOV A,#06H      ;A=6
            ADD A,40H       ;A=A+40H=13
            MOV B,#10       ;B=10
            DIV AB          ;A/B,A=1,B=3
            MOV 40H,B       ;40H=B=3
            MOV 50H,A       ;50H=1
            MOV A,#05H      ;A=5
            ADD A,41H       ;A=A+41H=5+4=9
            ADD A,50H       ;A=A+50H=9+1=10
            MOV B,#10       ;B=10
            DIV AB          ;A/B,A=1,B=0
            MOV 41H,B       ;41H=0
            MOV 50H,A
            MOV A,#02H      ;A=2
            MOV B,#10       ;B=10
            ADD A,42H       ;A=A+42H=2+2=4
            ADD A,50H       ;A=A+50H=4+1=5
            MOV B,#10
            DIV AB          ;A=0,B=5
            MOV 50H,A       ;50H=0
            MOV 42H,B       ;42H=5
            MOV R1,#43H     ;R1=43H
    HADD:   MOV A,@R1       ;A=(43H)
            ADD A,50H       ;A=A+50H
            MOV B,#10       ;B=10
            DIV AB          ;A/B
            MOV @R1,B
            MOV 50H,A
            INC R1
            CJNE R1,#46H,HADD
            DJNZ R6,ADDEE
    WAIT:   LJMP    WAIT
            END
    

    6.5 将一个字节中的各位逆序排列

            org 0000h       ;
            mov 30h,#82h    ;82h=10000010b 0100 0001b=41h
            mov a,30h
            mov 31h,#00h
            mov r3,#08h     ;count=8
    push1:
            mov c,acc.0     ;
            rr a
            mov 30h,a
            mov a,31h
            rlc a           ;
            mov 31h,a
            mov a,30h
            djnz r3,push1
    wait:   ljmp wait       ;
            end
    

    6.6 实现秒表功能

    最大定时时间为99.99秒,时间分辨率为0.01秒

            sec equ 30h
            minsec equ 31h
            count equ 33h
    
            org 0000h    ;利用定时/计数器T0,实现秒表功能。最大定时时间为99.99秒,时间分辨率为0.01秒
            mov sec,#0
            mov minsec,#0
            mov tmod,#10h    ;10minsecond d8f0
            mov th1,#0d8h
            mov tl1,#0f0h
            mov sec,#0
            mov minsec,#0
            mov count,#100
            setb tr1
    lp1:    jnb tf1,lp1
            clr tf1
            mov th1,#0d8h
            mov tl1,#0f0h
            mov a,minsec
            add a,#1
            da a
            mov minsec,a
            djnz count,lp1
            mov minsec,#0
            mov count,#100
    
            mov a,sec
            add a,#1
            da a
            mov sec,a
            cjne a,#99h,lp1
    
            mov th1,#0d8h
            mov tl1,#0f0h
            mov count,#99
    lp2:    jnb tf1,lp2
            clr tf1
            mov th1,#0d8h
            mov tl1,#0f0h
            mov a,minsec
            add a,#1
            da a
            mov minsec,a
            djnz count,lp2
            mov 36h,#45
    wait:   ljmp wait
    
    展开全文
  • 我也是个单片机爱好者啊 初有心得 和大家分享分享 同时也希望能够分享到大家的成果
  • 单片机实验汇编案例---计数器实验

    千次阅读 2020-06-21 20:15:56
    8031内部定时计数器,按计数器模式和方式1工作,对P3.4(T0)引脚进行计数。使用8031的T1作定时器,50ms中断一次,看T0内每0.50ms来了多少脉冲,将其数值按二进制数在74LS273驱动LED灯上显示出来,5秒后再次测试。 ...

    一.实验要求

    8031内部定时计数器,按计数器模式和方式1工作,对P3.4(T0)引脚进行计数。使用8031的T1作定时器,50ms中断一次,看T0内每0.50ms来了多少脉冲,将其数值按二进制数在74LS273驱动LED灯上显示出来,5秒后再次测试。

    二.实验目的

    1.学习8031内部定时/计数器使用方法。

    2.进一步掌握中断处理编程方法。

    三.实验电路及连线
    在这里插入图片描述

    P3.4接一计数脉冲( 25模块中的149.06K频率)。 PO0~PO7接 L1~L8。 CS273接8300H。

    四.实验说明

    1.本实验中内部计数器起计数器的作用。外部事件计数脉冲由P3.4引入定时器T0。单片机在每个机器周期采样一次输入波形,因此单片机至少需要两个机器周期才能检测到一次跳变。这就要求被采样电平至少维持一个完整的机器周期,以保证电平在变化之前即被采样。同时这就决定了输入波形的频率不能超过机器周期频率。

    2.实验时P3.4对应的连线为149.06KHZ孔,0.5ms内来了80次(50H)脉冲。

    五.实验程序框图
    在这里插入图片描述

    ORG 0000H
    AJMP START
    ORG 000BH ;T0中断入口地址
    RETI
    ORG 001BH ;T1中断入口地址
    AJMP INT_T1
    ORG 0040H
    START:
    MOV SP,#60H
    MOV TMOD,#1DH ;置T1为方式1
                  ;置T0为方式1,计数方式,
                  ;门控选通位有效
    MOV TL0,#0H ;计数器清零
    MOV TH0,#0H
    MOV TL1,#32H ;延时0.50mS常数
    MOV TH1,#0FEH
    MOV R0,#20 ;延时 5 秒常数
    SETB TR0 ;启动T0
    SETB ET0
    SETB TR1 ;启动T1
    SETB ET1
    SETB EA ;开中断
    SJMP $
    INT_T1:
    PUSH ACC
    PUSH PSW
    CLR TR1
    MOV TL1,#32H ;延时0.50mS 常数
    MOV TH1,#0FEH
    MOV R1,TL0 ;保存计数值
    MOV R2,TH0
    MOV TL0,#00H ;清计数器
    MOV TH0,#00H
    SETB TR1
    DJNZ R0,EXIT
    MOV R0,#20 ;延时 5 秒常数
    MOV DPTR,#8300H ;LED地址
    MOV A,R1
    MOVX @DPTR,A ;把计数值在LED上显示
    EXIT:
    POP PSW
    POP ACC
    RETI
    END
    

    本素材来自网路,如有侵权,请联系删除。
    观看更多请关注公众号“伊斯电子编程”

    展开全文
  • 51 单片机汇编语言:0~100 计数器

    千次阅读 2016-01-25 12:07:20
    单片机计数器 0~100。;外部中断控制加减。;高于100还是100,低于0还是0。;题目链接:http://zhidao.baidu.com/question/239836388985984564.html;原题的程序很乱,但是,做而论道还能看出设计思路。;按照设计思路,...
  • 8253计数器定时器实验 按1-8数字键,发出不同音响
  • 51单片机定时/计数器 程序查询方式与中断方式
  • 程序效果:利用单片机的定时/计数器设计一个计时器,按key0后启动,要求精确显示到百分之一秒。发挥部分:1:定时结束后有提示音报警,并可重新定时2:定时时间可设置,最多30s3:定时过程中可暂停4:按下key1暂停...
  • 第四章 MCS-51单片机汇编语言程序设计 第五章 中断系统 第六章 MCS-51单片机的定时/计数器 第七章 单片机串行数据通信 第八章 单片机的系统扩展 第九章 单片机应用系统的设计方法及实例 第十章 单片机应用系统...
  • 当进入中断服务程序后,由于LED灯亮灭需要再次调用延时子程序,当在中断服务程序中调用延时子程序时,最终在延时结束后,R5,R6,R7的值均以达到#000H,因为DJNZ这条指令会先减一再判断是否跳转,所以当中断返回后,...
  • 通过Verilog代码,在FPGA上搭建单片机执行汇编程序实现LED闪烁。
  • 51单片机100例 汇编

    2011-06-19 21:42:26
    单片机开发板 100例题 AD DA转换 步进机 电子钟 计数器...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,947
精华内容 1,178
关键字:

单片机计数器程序汇编