Ⅰ 单片机汇编语言的定时器如何定义和调用使用,
以51为例来讲,它有两个16位的定时器T0和T1, 可以通过写入TMOD 定时器/计数器模式控制寄存器数据来修改T0和T1的工作方式.可以通过写入T0,T1 写入初值来修改定时时间长短.
定时器溢出后中断响应(要在中断控制寄存器设为允许),把你的中断服务子程序标号放在对应的T0,T1中断入口地址(定时器T0 000BH,定时器T1 001BH)处,用AJMP,JMP,LJMP等跳转指令转入,用RETI指令反回.
Ⅱ 单片机汇编语言:定时器
mov TMOD, #01H
mov TH0 , (65525-50000)/256
mov TL0, (65535- 50000)MOD256
SETB TR0
Here:
JNB TF0,Here
CLR TF0
CLR TR0
mov TH0 , (65525-50000)/256
mov TL0, (65535- 50000)MOD256
SETB TR0
//上面是查询方式的
ORG 000BH
LJMP TO_Int
mov TMOD, #01H
mov TH0 , (65525-50000)/256
mov TL0, (65535- 50000)MOD256
SETB EA
SETB ET0
SETB TR0
TO_Int:
CLR ET0
CLR TR0
mov TH0 , (65525-50000)/256
mov TL0, (65535- 50000)MOD256
SETB ET0
SETB TR0
RETI
//这是中断方式的,,
哎,由于 好久没用了,,估计有点小错!出错了,,留言,,我再改进!呵呵!!
希望对你有帮助!
Ⅲ 51单片机汇编语言定时器的使用(中断方式)
(1)
COUNT_INTEQU30H
LEDVALUEEQU31H
ORG0000H
LJMPSTART
ORG001BH
LJMPTimer1Interrupt
START:
MOVSP,#60H
MOVCOUNT_INT,#0
MOVLEDVALUE,#01H
LCALLInitTimer1
LOOP:
MOVA,LEDVALUE
MOVP2,A
LJMPLOOP
InitTimer1:
MOVTMOD,#10H;定时器T1为工作方式1,产生50ms定时
MOVTH1,#3CH
MOVTL1,#0B0H
SETBEA
SETBET1
SETBTR1
RET
Timer1Interrupt:
PUSHDPH
PUSHDPL
PUSHACC
MOVTH1,#3CH
MOVTL1,#0B0H
;========================
INCCOUNT_INT
MOVA,COUNT_INT;每50ms加1,
CJNEA,#2,Timer1Interrupt_EXIT;100ms
MOVCOUNT_INT,#0
MOVA,LEDVALUE
RLA
MOVLEDVALUE,A
;========================
Timer1Interrupt_EXIT:
POPACC
POPDPL
POPDPH
RETI
END
(2)
COUNT_INT_LEQU30H
COUNT_INT_HEQU31H
LEDVALUEEQU32H
ORG0000H
LJMPSTART
ORG001BH
LJMPTimer1Interrupt
START:
MOVSP,#60H
MOVCOUNT_INT_L,#0
MOVCOUNT_INT_H,#0
MOVLEDVALUE,#01H
LCALLInitTimer1
LOOP:
MOVA,LEDVALUE
MOVP2,A
LJMPLOOP
InitTimer1:
MOVTMOD,#20H;定时器T1为工作方式2,产生250us定时
MOVTH1,#00H
MOVTL1,#06H
SETBEA
SETBET1
SETBTR1
RET
Timer1Interrupt:
PUSHDPH
PUSHDPL
PUSHACC
MOVTH1,#00H
MOVTL1,#06H
;========================
INCCOUNT_INT_L
MOVA,COUNT_INT_L;每250us加1,
CJNEA,#40,Timer1Interrupt_EXIT;250US*40=10ms
MOVCOUNT_INT_L,#0
INCCOUNT_INT_H
MOVA,COUNT_INT_H;每10Ms加1,
CJNEA,#10,Timer1Interrupt_EXIT;10ms*10=100MS
MOVCOUNT_INT_H,#0
MOVA,LEDVALUE
RLA
MOVLEDVALUE,A
;========================
Timer1Interrupt_EXIT:
POPACC
POPDPL
POPDPH
RETI
END
Ⅳ 用汇编语言写一个单片机定时器/计数器的程序
1.以查询方式工作,每计满100个脉冲,则取反P1.0口线状态。
ORG0000H
MOVTMOD,#06H
MOVTH0,#156
MOVTL0,#156
SETBTR0
LP:JNBTF0,LP
CPLP1.0
SJMPLP
END
2.以中断方式工作,每计满200个脉冲,则取反P1.0口线状态。
ORG0000H
SJMPSTART
ORG000BH
CPLP1.0
RETI
START:
MOVTMOD,#06H
MOVTH0,#56
MOVTL0,#56
SETBTR0
MOVIE,#82H
SJMP$
END
Ⅳ 51单片机定时器的汇编语言程序编程,
LED BIT P1.0 ;定义LED的引脚
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV TMOD,#01H ;定时器0工作模式1
MOV TH0,#HIGH(65536-50000) ;初值,50毫秒中断一次
MOV TL0,#LOW(65536-50000)
SETB TR0 ;启动定时器
SETB ET0 ;启动定时器中断
SETB EA ;开总中断
MOV R2,#40 ;中断计数初始值
SJMP $
T0ISR:
CLR TR0
MOV TH0,#HIGH(65536-50000)
MOV TL0,#LOW(65536-50000)
SETB TR0
DJNZ R2,T0E ;R2减到0重新赋值,否则退出
MOV R2,#40
CPL LED ;LED亮灭转换
T0E:
RETI
END
Ⅵ 请问这段单片机汇编语言程序(关于定时器延时)是什么意思
DELAY:MOV
R3,#14H
;循环20次
MOV
TMOD,#10H
;定时器1工作于模式1(16位定时器)
MOV
TH1,#3CH
;赋初值,50毫秒溢出一次
MOV
TL1,#0B0H
SETB
TR1
;启动定时器1
LP1:
JBC
TF1,LP2
;溢出位为1,则清0后转移到LP2
SJMP
LP1
;否则等待TF1置1
LP2
:MOV
TH1,#3CH
;重新赋初值
MOV
TL1,#0B0H
DJNZ
R3,LP1
;20次循环完成则退出,否则转LP1
RET
;综述:以上共延时1秒。
Ⅶ 51单片机汇编定时器1s问题,B的赋值为什么是14不是20
这个14是16进制的,你把他换成10进制就是20了
Ⅷ 单片机 汇编 请问定时器定时多长
MOV
51H,#14H
;(51H)=20
MOV
TMOD,#01H
;定时器0工作于方式1,16位定时器
MOV
TL0,#0B0H
;
MOV
TH0,#3CH
;定时时间50毫秒(12MHz晶体)
SETB
TR0
;
L2:JBC
TF0,L1
;
SJMP
L2
;
L1:MOV
TL0,#0B0H
;给定时器0重新赋值
MOV
TH0,#3CH
;
DJNZ
51H,L2
;进行20次定时,累计定时1秒
定时器要进行计数溢出,一是定时器的计数器只有16位,计数到0FFFFH再计数一次必然溢出。二是在溢出时置位TF0,以便查询或申请中断。
Ⅸ 单片机1秒钟定时汇编语言怎么编
可以有两种方法,设晶振为12M,则
第一种方法:用延时的方法实现
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 TL0,#176(65536-50000); 15536/256 (余数)
SETB TH0,#60;设置初出溢出值50ms,定时2S (商)
SETB TR0 ;启动定时器
JNB TF0,$;是否溢出,没有溢出等待,溢出走一条指令
CLR TF0;清零溢出
DJNZ R1,D1;走20次,刚好1秒
RET
END
Ⅹ 单片机定时器的汇编语言程序编程
ORG 0000H
SJMP START
ORG 001BH
AJMP INT_TIMER1
ORG 0040H
START:
MOV TMOD,#20H
MOV TH1,#231
MOV TL1,#231
SETB ET1
SETB TR1
SETB EA
MOV P1,#00H
CLR A
SJMP $
INT_TIMER1:
JZ OUTOUT_HIGH
CLR P1.2
SJMP INC_A
OUTOUT_HIGH:
SETB P1.2
INC_A: INC A
CJNE A,#08H,SKIP_SET0
CLR A
SKIP_SET0:
RETI
END