đoơ này Timer0 được chia làm 2 boơ định thời 8 bit hốt đoơng rieđng lẽ TL0 và TH0 cờ tràn tương ứng là TF0 và TF1.
;****************************************************************************** ;******************************************************************************
Code mău timer1 chê đoơ 16bit (chê đoơ 1): <chê đoơ 0 làm tương tự với M0, M1 =0,0>
#include <REG8253.H> ORG 0000H LJMP MAIN ORG 001BH LJMP NGAT_T1 ORG 0030H MAIN:
MOV TMOD,#00010000B ; TIMER1 C/Đoơ 16BIT
MOV IE,#10001000B ;Cho phép ngaĩt trong timer 1
MOV TH1,#HIGH(-65536) ;đưa giá trị vào boơ đêm TH1 và TL1
MOV TL1,#LOW(-65536)
SETB TR1 ;CHO TIMER1 CHÁY
SJMP $ NGAT_T1: NGAT_T1:
CLR TR1 ;TAĨT TIMER1
MOV TH1,#HIGH(-65536) ;náp lái giá trị vào boơ đêm TH1 và TL1
MOV TL1,#LOW(-65536)
CPL P2.0 ;ĐẠO TRÁNG THÁI TREĐN CHAĐN P2.0
SETB TR1 RETI RETI END
;****************************************************************************** ;******************************************************************************
Code mău timer1 chê đoơ 8bit tự náp lái (chê đoơ 2):
#include <REG8253.H>
ORG 0000H LJMP MAIN LJMP MAIN ORG 001BH LJMP NGAT_T1
Created by ELECTRONIC FACULTY Page 33 ORG 0030H ORG 0030H
MAIN:
MOV TMOD,#00100000B ; TIMER1 C/D 8BIT AUTO RELOAD
MOV IE,#10001000B
MOV TH1,#HIGH(-255) ;GIÁ TRỊ SẼ NÁP CHO TL KHI TRAØN BOƠ ĐỊNH THỜI
MOV TL1,#LOW(-255) ;NÁP TRƯỚC GIÁ TRỊ CHO TL
SETB TR1 SJMP $ SJMP $ NGAT_T1: CPL P2.0 RETI END ;****************************************************************************** ;******************************************************************************
Code mău timer0 chê đoơ boơ định thời chia sẽ (chê đoơ 3):
#include <REG8253.H> ORG 0000H LJMP MAIN ORG 000BH LJMP NGAT_T0 ORG 001BH LJMP NGAT_T1 ORG 0030H MAIN:
MOV TMOD,#01010011B ;TIMER1 c/đ COUNTER 16BIT
MOV IE,#10001010B
MOV TH0,#HIGH(-255) ;náp cho TH0, TL0 giá trị 0
MOV TL0,#LOW(-255)
SETB TR0 ;baơt timer1 cháy
SETB TR1 SJMP $ SJMP $ NGAT_T1: CPL p3.1 RETI NGAT_T0: CPL p3.0 RETI END ;****************************************************************************** ;******************************************************************************
Code mău COUNTER chê đoơ 16bit đêm sự kieơn:
#include <REG8253.H>
LJMP MAIN ORG 0030H ORG 0030H MAIN:
MOV TMOD,#01010000B ;TIMER1 c/đ COUNTER 16BIT
MOV TH1,#HIGH(-65536) ;náp cho TH1, TL1 giá trị 0
MOV TL1,#LOW(-65536)
SETB TR1 ;baơt timer1 cháy
SJMP $ END END
Bađy giờ cháy mođ phỏng và mở timer1 leđn
B. TIMER2 VAØ COUNTER2:
- Cũng có chức naíng Timer và Counter tương tự timer0 và timer1 Thanh ghi chĩn chê đoơ định thời 2:
T2MOD: Timer2 Mode Register
Bit7 – Bit2 : Khođng sử dúng (bit dự trữ dùng trong tương lai cho các phieđn bạn 8051 sau)
T2OE (Bit1): Bit cho phép timer2 xuât tín hieơu tređn chađn T2
DCEN (Bit0): Bit đieău khieơn đêm leđn / xuông (1: up / 0: down) Thanh ghi đieău khieơn chê đoơ định thời 2:
T2CON: Timer2 Control Register
TF2 (Bit7): Cờ tràn cụa timer2. Được set leđn 1 khi boơ đêm TL2 và TH2 tràn và phại được xóa baỉng phaăn meăm. TF2 sẽ khođng được set khi RCLK hoaịc TCLK = 1.
EXF2 (Bit6): Cờ ngaĩt ngoài timer2. Được set khi có xung ađm (logic1->logic0) tređn chađn T2EX, và bit cho phép ngaĩt ngoài timer2 là EXEN2 = 1. Khi EXF2 được set moơt ngaĩt ngoài được yeđu caău, EXF2 được xóa baỉng phaăn meăm.
RCLK (Bit5): Clock thu. Khi ở mức cao port nôi tiêp sử dúng các xung tràn cụa boơ định thời 2 làm clock thu ở chê đoơ 1 và 3.
TCLK (Bit4): Clock phát. Khi ở mức cao port nôi tiêp sử dúng các xung tràn cụa boơ định thời 2 làm clock thu ở chê đoơ 1 và 3.
EXEN2 (Bit3): bit3 = 1 cho phép ngaĩt ngoài timer2, bit3 = 0 khođng phép.
TR2 (Bit2): Bit cho phép khởi đoơng boơ định thời2 (logic 1 baơt; logic 0 taĩt) Click vào đađy hoaịc P3.5,
boơ đêm TL1 sẽ taíng moêi khi có 1 xung (từ mức 1 xuông 0) tređn chađn T1. Khi TL1 tràn TH1 sẽ taíng 1 đơn vị.
Created by ELECTRONIC FACULTY Page 35 C/T2 (Bit1): Bit chĩn chức naíng bit1 = 0:timer2 đêm thời gian / bit1 = 1:counter đêm C/T2 (Bit1): Bit chĩn chức naíng bit1 = 0:timer2 đêm thời gian / bit1 = 1:counter đêm sự kieơn.
CP/RL2 (Bit0): Bit0 = 0: tự náp lái khi boơ định thời2 tràn, khi RCLK hoaịc TCLK = 1 bit này bị bỏ qua và boơ định thời sẽ phại tự náp lái. Bit0 = 1 cho phép thu nhaơn tređn chađn T2EX nêu EXEN2 = 1.
;****************************************************************************** ;******************************************************************************
Code mău Timer2 chê đoơ tự náp lái:
#include <REG8253.H> ORG 0000H LJMP MAIN ORG 002BH LJMP NGAT_T2 ORG 0030H MAIN:
MOV T2MOD,#00000001B ;Khai báo T2MOD,T2CON
MOV T2CON,#00000000B
MOV RCAP2L,#LOW(-5000) ;Nhaơn byte thâp, byte cao giá trị náp lái boơ đêm timer2
MOV RCAP2H,#HIGH(-5000)
MOV TH2,#HIGH(-10) ;Náp giá trị ban đaău cho boơ đêm byte thâp và cao cụa Timer 2
MOV TL2,#LOW(-10) MOV IE,#10101010B MOV IE,#10101010B
MOV R2,#100 ;giá trị trì hoãn phúc vú timer 2
SETB TR2 ;Khởi đoơng timer 2
SJMP $ NGAT_T2: NGAT_T2: CLR TF2 DJNZ R2,EXIT_T2 MOV R2,#100 CPL P3.0 EXIT_T2: SETB TR2 RETI END ;****************************************************************************** ;******************************************************************************
Code mău Counter2 chê đoơ đêm sự kieơn #include <REG8253.H> ORG 000H LJMP BEGIN ORG 0030 BEGIN: MOV T2CON,#00000010B MOV TH2,#HIGH(-255)
MOV TL2,#LOW(-255) SETB TR2 SETB TR2 JMP $ END ;****************************************************************************** ;******************************************************************************
Code mău Counter2 chê đoơ táo xung clock tređn chađn T2 :
Fout = Fperiph / (2*(65536-RCAP2)).
#include <REG8253.H>
ORG 000H LJMP BEGIN LJMP BEGIN ORG 0030H BEGIN:
CLR T2CON.1 ;chĩn chê đoơ counter
MOV T2MOD,#00000010B ;cho phép xuât dữ lieơu ở T2
MOV TH2,#255 MOV TL2,#255 SETB TR2
JMP $
End