51单片机汇编语言定时器的使用(中断方式)

供稿:hz-xin.com     日期:2025-01-13
51单片机定时器的汇编语言程序编程,

这么简单的要求,不用大动干戈。

看看下面的程序,是不是最简单:

ORG 0000H
SETB TR0 ;启动T0
MOV R2, #250 ;定时计数初值
LOOP:
MOV TH0, #(8192 - 8000) / 32 ;定时8ms
MOV TL0, #(8192 - 8000) MOD 32
JNB TF0, $ ;等待8ms
CLR TF0
DJNZ R2, LOOP ;每隔8ms,R2减一次一
CPL P1.0 ;R2为0则LED亮灭转换
LJMP 0000H
END

本程序,已经实验成功。

//晶振12M
DSEG AT 30H
timetemp: DS 1
LED: DS 1
CSEG AT 00H
ORG 0000H
LJMP START
ORG 000BH
LJMP Timer0Interrupt

START:
MOV SP,#60H
MOV timetemp,#20
MOV P1,#0FFH;LED低电平点亮
LCALL InitTimer0
MOV LED,#0FEH
LOOP:
MOV P1,LED ;add your code here!
LJMP LOOP

InitTimer0:
MOV TMOD,#01H
MOV TH0,#HIGH(65536-50000)
MOV TL0,#LOW(65536-50000);延时50ms
SETB EA
SETB ET0
SETB TR0
RET

Timer0Interrupt:
PUSH ACC
PUSH PSW
CLR TR1
MOV A,TL1
ADD A,#LOW(65536-50000)+7
MOV TL1,A
CLR A
ADDC A,#HIGH(65536-50000)
SETB TR1
DJNZ timetemp,NEXTT1
MOV timetemp,#20
;========================

MOV A,LED
RL A
MOV LED,A;add your code here!
;========================
POP PSW
POP ACC
RETI

(1)
COUNT_INT    EQU 30H
LEDVALUE    EQU 31H
    ORG 0000H
    LJMP START
    ORG 001BH
    LJMP Timer1Interrupt

START:
    MOV SP,#60H
    MOV COUNT_INT,#0 
    MOV LEDVALUE,#01H
    LCALL InitTimer1

LOOP:
     MOV A,LEDVALUE
     MOV P2,A
    LJMP LOOP

InitTimer1:
    MOV TMOD,#10H;定时器T1为工作方式1,产生50ms定时
    MOV TH1,#3CH
    MOV TL1,#0B0H
    SETB EA
    SETB ET1
    SETB TR1
    RET

Timer1Interrupt:
    PUSH DPH
    PUSH DPL
    PUSH ACC
    MOV TH1,#3CH
    MOV TL1,#0B0H
    ;========================
     INC COUNT_INT
     MOV A,COUNT_INT;每50ms加1,
     CJNE A,#2,Timer1Interrupt_EXIT;100ms
     MOV COUNT_INT,#0
     MOV A,LEDVALUE
     RL A
     MOV LEDVALUE,A
     ;========================
Timer1Interrupt_EXIT:    
    POP ACC
    POP DPL
    POP DPH
    RETI

END
(2)
COUNT_INT_L    EQU 30H
COUNT_INT_H    EQU 31H
LEDVALUE    EQU 32H
    ORG 0000H
    LJMP START
    ORG 001BH
    LJMP Timer1Interrupt

START:
    MOV SP,#60H
    MOV COUNT_INT_L,#0 
    MOV COUNT_INT_H,#0
    MOV LEDVALUE,#01H
    LCALL InitTimer1

LOOP:
     MOV A,LEDVALUE
     MOV P2,A
    LJMP LOOP

InitTimer1:
    MOV TMOD,#20H;定时器T1为工作方式2,产生250us定时
    MOV TH1,#00H
    MOV TL1,#06H
    SETB EA
    SETB ET1
    SETB TR1
    RET

Timer1Interrupt:
    PUSH DPH
    PUSH DPL
    PUSH ACC
    MOV TH1,#00H
    MOV TL1,#06H
    ;========================
     INC COUNT_INT_L
     MOV A,COUNT_INT_L;每250us加1,
     CJNE A,#40,Timer1Interrupt_EXIT;250US*40=10ms
     MOV COUNT_INT_L,#0
     INC COUNT_INT_H
     MOV A,COUNT_INT_H;每10Ms加1,
     CJNE A,#10,Timer1Interrupt_EXIT;10ms*10=100MS
     MOV COUNT_INT_H,#0
     MOV A,LEDVALUE
     RL A
     MOV LEDVALUE,A
     ;========================
Timer1Interrupt_EXIT:    
    POP ACC
    POP DPL
    POP DPH
    RETI

END


51单片机汇编语言定时器的使用(中断方式)
#60H MOV COUNT_INT_L,#0 MOV COUNT_INT_H,#0 MOV LEDVALUE,#01H LCALL InitTimer1LOOP: MOV A,LEDVALUE MOV P2,A LJMP LOOPInitTimer1: MOV TMOD,#20H;定时器T1为工作方式2,产生250us定时 MOV TH1,#00H MOV TL1,#06H SETB EA SETB ET1 ...

单片机汇编语言用定时器定时,当定时时间到以后,P2口连接的LED按规律点 ...
首先,我们需要设置定时器0的模式和定时时间。8051单片机的定时器0是一个16位的定时器,我们可以使用以下设置:```assembly ; 设置定时器0的模式为模式1(16位定时器)MOV TMOD, #01H ; 设置定时器0的初值,使得定时时间为1秒 ; 假设单片机的时钟频率为12MHz,那么1秒的定时需要65536 - 12000 = 5...

单片机1秒钟定时汇编语言怎么编?
DELAY: MOV R3,#10;延时子程序,延时1秒 D1: MOV R4,#200 D2: MOV R5,#250 D3: DJNZ R5,D3 DJNZ R4,D2 DJNZ R3,D1 RET END 第二种方法:用定时器的方法实现 ———MOV R1,#20 ———DLY: MOV TMOD,#00000001B;延时子程序,设定定时器的工作方式 D1: SETB ...

用汇编语言写一个单片机定时器\/计数器的程序
1.以查询方式工作,每计满100个脉冲,则取反P1.0口线状态。ORG 0000H MOV TMOD, #06H MOV TH0, #156 MOV TL0, #156 SETB TR0LP: JNB TF0, LP CPL P1.0 SJMP LP END 2.以中断方式工作,每计满200个脉冲,则取反P1.0口线状态。ORG ...

请问这段单片机汇编语言程序(关于定时器延时)是什么意思
DELAY:MOV R3,#14H ; 循环20次 汇编语言定时器赋初方法 MOV TMOD,#10H ; 定时器1工作于模式1(16位定时器)MOV TH1, #HIGH NOT 50000 ; 赋初值,50毫秒溢出一次 MOV TL1,#LOW NOT 50000 ; 晶振 12 MHz 为 50000 uS SETB TR1 ; 启动定时器1 LP1: JBC TF1,LP2 ...

求一个用汇编语言编写一个8051单片机的时钟程序(急急急啊)
MOV TMOD,#011H ; 定时器0, 1工作模式1, 16位定时方式 MOV TH0,#0FCH MOV TL0,#017H MOV TH1,#0DCH CLR A MOV TL1,A MOV HOUR,#12 ;CLR A ;MOV MIN,A MOV SEC,A MOV SEC100,A MOV A,HOUR MOV B,#10 DIV AB MOV DPTR,#...

用单片机汇编语言编写一秒的定时 用定时器T0 方式2 急求!!
CPL P3.1 ;;;INT_01:POP ACC POP PSW RETI END 注:以上设计为12M晶振,仿真通过。此方法并未达到精确的定时,因为8位定时器,要做好多4000次才完成1秒的定时。它的时间会延长了一点点,每一秒种有0。01秒的误差左右,要看你用的是什么单片机。若要精确定时建议用16位定时方式,这样误...

使用定时器T1定时,使一个数码管从9到0倒计时显示,每1秒显示一个数据...
} } void timer1() interrupt 3 { TH1=(65536-10000)\/256;TL1=(65536-10000)%256;Timer++;} 我的单片机默认状态会选择一个数码管,所以我这里没有数码管的位选,数码管的值通过P0口给,程序中有,这个程序在我的开发板上没有问题,对于你的板子可能不一样,你可以参考,照搬过去可能不对。。

单片机汇编语言流水灯,定时器中断控制,(500ms)延时
单片机汇编语言流水灯,用定时器中断控制,可以初始化设置定时器时间(如50mS注定时器最大定时时间到不了500mS,需要加计数存储,中断10就是500mS),有多种方式实现如作一个流水状态表,定时读取写入IO端口 表加一,,或者用左移太移等方式都可以实现在,网上有很多这种实例。

单片机高手帮忙哈(汇编语言),帮忙解释下下面每一步程序的含义,就是注...
SETB TR0 ;启动计数器 SETB ET0 ;允许定时器0中断 SETB EA ;允许总中断 HERE; AJMP HERE ;死循环,(等待中断)PT0J; JB F0,PT0D ;F0标志为1则跳到PT0D MOV TMOD,#01H ;配置定时器0为16位定时器,MOV TH0,#0FEH ;装载计数初值,使得刚好1ms时溢出...