Org 0H Up Bit P1.1 Down Bit P1.2 SETB P1.0 MOV R7,#2 Mov Tmod,#11H Acall Nutnhan Acall Napgiatri Acall Xuatxung SJMP Loop

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 7

; Bài 8 (bài tập C5: timer T.

Phú)

; chuong trinh dieu che do rong xung

; PWM pulse width modulation

; T =10ms XTAL=12MHZ -> T=10.000MC

; xu?t xung ngo ra P1.0, UP P1.1, DOWN P1.2

; muc 1 Td thay doi tu 10% den 90% Td= 1000 MC den 9000MC

; nhan nut thay doi 5% (500MC)

; UP kiem tra 90%? N -> tang Y-> khong thay doi R7MAX=18

;DOWN kiem tra 10% ? N -> giam Y -> khong doi R7MIN=2

; buoc 1: doc nut nhan (chuong trinh con doc nut nhan)

; buoc 2: Tang/giam R7 ( R7 tang/giam 1 khi nhan nut)-> 1 don vi cua R7 ung 5%

; buoc 3: nap gia tri Td ( logic 1) , logic (T - Td) R7x 5

; buoc 4: xuat xung P1.0

; lap lai buoc 1

; chon gia tri dem co so cua timer la 100

ORG 0H

UP BIT P1.1

DOWN BIT P1.2

MAIN: SETB P1.0

MOV R7,#2

MOV TMOD,#11H

LOOP: ACALL NUTNHAN ; BUOC 1 VA 2

ACALL NAPGIATRI ; BUOC 3

ACALL XUATXUNG

SJMP LOOP
NUTNHAN: JB UP,NUTDOWN

LCALL DELAY ; NHAN UP, CHONG DOI

CJNE R7,#18,TANG

SJMP EXIT ; R7=18 THI KHONG DOI, THOAT RA

TANG: INC R7

SJMP EXIT

NUTDOWN: JB DOWN,EXIT

LCALL DELAY ; NHAN DOWN, CHONG DOI

CJNE R7,#2,GIAM

SJMP EXIT

GIAM: DEC R7

EXIT: RET

NAPGIATRI: MOV A,R7

MOV B,#5

MUL AB

MOV 20H,A ; GIA TRI TD

MOV A,#20 ; HE SO NHAN TOAN CHU KY

CLR C

SUBB A,R7

MOV B,#5

MUL AB

MOV 30H,A ; GIA TRI CHO LOGIC 0

RET

XUATXUNG: MOV R1,20H

SETB P1.0
TD: MOV TH1,#HIGH(-100)

MOV TL1,#LOW(-100)

SETB TR1

JNB TF1,$

CLR TF1

CLR TR1

DJNZ R1,TD

CLR P1.0

MOV R1,30H

THAP: MOV TH1,#HIGH(-100)

MOV TL1,#LOW(-100)

SETB TR1

JNB TF1,$

CLR TF1

CLR TR1

DJNZ R1,THAP

RET

DELAY: MOV R3,#100

L: MOV TH0,#HIGH(-50000)

MOV TL0,#LOW(-50000)

SETB TR0

JNB TF0,$

CLR TF0

CLR T0

DJNZ R3, L
RET

END

; BAI 9: (bài tập C5: timer T.Phú)

; MA HOA 4 BIT THAP CUA PORT2

; T=50ms = 50000MC (XTAL=12MHZ)

; BIT 0 CO Td=1/4 T = 12500MC

; BIT 1 CO Td =3/4T =37500MC

; BIT SYNC CO Td=1/2T = 25000MC

; BUOC 1: DOC 4 BIT THAP CUA PORT2

; BUOC 2: XAC DINH NOI DUNG CUA TUNG BIT

; BUOC 3: XUAT RA TUAN TU P1.0

;BUOC 4: LAP BUOC 1

ORG 0

MOV TMOD,#10H

MOV P2,#0FFH

CLR C

MAIN: MOV A,P2 ; BUOC 1, VD: P2=1011 0101 -> 4 BIT THAP 0101

SWAP A ; A=0101 1011

MOV R1,#4

LOOP: RLC A ; BUOC 2

JC PULSE1 ; BUOC 3

PULSE0: SETB P1.0

LCALL DELAY14T

CLR P1.0
LCALL DELAY34T

SJMP EXIT

PULSE1: SETB P1.0

LCALL DELAY34T

CLR P1.0

LCALL DELAY14T

EXIT: DJNZ R1,LOOP

MOV R1,#4

SYNC: SETB P1.0

LCALL DELAY12T

CLR P1.0

LCALL DELAY12T

SJMP MAIN

DELAY14T:

MOV TH1,#HIGH(-12500)

MOV TL1,#LOW(-12500)

SETB TR1

JNB TF1,$

CLR TF1

CLR TR1

RET

DELAY34T:

MOV TH1,#HIGH(-37500)

MOV TL1,#LOW(-37500)

SETB TR1
JNB TF1,$

CLR TF1

CLR TR1

RET

DELAY12T:

MOV TH1,#HIGH(-25000)

MOV TL1,#LOW(-25000)

SETB TR1

JNB TF1,$

CLR TF1

CLR TR1

RET

END

Ghi chú: Có thể viết ngắn hơn, để tạo các chương trình delay khác nhau, có thể thay đổi số
vòng lặp R1…

Ví dụ: DELAY12T: MOV R1,#50

L1: LCALL DELAY

DJNZ R1, L1

RET

DELAY14T: MOV R1,#25

L2: LCALL DELAY

DJNZ R1, L2

RET

TƯƠNG TỰ CHO DELAY34T………

DELAY: MOV TH1,#HIGH(-500)

MOV TL1,#LOW(-500)
SETB TR1

JNB TF1,$

CLR TF1

CLR TR1

RET

You might also like