Ⅰ 單片機匯編語言的定時器如何定義和調用使用,
以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