Tải bản đầy đủ (.pdf) (12 trang)

GIÁO TRÌNH LẬP TRÌNH C CHO HỌ VI ĐIỀU KHIỂN 8051 - CHƯƠNG 3 doc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (386.53 KB, 12 trang )

ĐẠI HỌC LẠC HỒNG GIÁO TRÌNH LẬP TRÌNH C CHO HỌ VI ĐIỀU KHIỂN 8051


Biên soạn: Nguyễn Bá Thuận Page 1 of 12

CHƯƠNG 3:
KHỞI TẠO CHƯƠNG TRÌNH TIMER VÀ CHƯƠNG TRÌNH NGẮT

I. KHỞI TẠO CHƯƠNG TRÌNH TIMER.
1. CÁC THANH GHI ĐIỀU KHIỂN TIMER.
Thanh ghi TMOD
Các Timer thường được khởi tạo 1 lần ở đầu chương trình để thiết lập mode
hoạt động phục vụ các ứng dụng điều khiển liên quan đến định thời hay đếm xung
ngoại.
Tùy thuộc vào yêu cầu cụ thể mà ta điều khiển cho Timer bắt đầu đếm, ngừng
hay khởi động đếm lại từ đầu.
Thanh ghi TMOD là thanh ghi đầu tiên cần phải khởi tạo để thiết lập trạng thái
hoạt động cho các Timer.

8 7 6 5 4 3 2 1
Gate

C/
T

M1

M0

Gate


C/
T

M1

M0

0 0 0 0 0 0 0 1
Cho Timer 1 Cho Timer 0
Chú thích

Bit Chú thích
Gate

- Khi đặt Bit Gate = 1 thì Timer0 chỉ làm việc khi các cổng vào
của lệnh ngắt –INT( Bit P3.3 hay P3.2) sẽ không có tác dụng
- Khi đặt Bit Gate = 1 thì Timer1 chỉ làm việc khi INT=1
C/
T

- Khi đặt ở mức áp cao thì các Timer dùng như bộ đếm xung (Counter)

vào từ bên ngoài:
Với Timer1 xung đếm cho vào Bit P3.5
Với Timer0 xung đếm cho vào Bit P3.4
- Khi đặt ở mức áp thấp thì các Timer dùng như đếm xung của
mạch dao động, lúc đó nó có thể xem như một đồng hồ tự chạy (Timer)
ĐẠI HỌC LẠC HỒNG GIÁO TRÌNH LẬP TRÌNH C CHO HỌ VI ĐIỀU KHIỂN 8051



Biên soạn: Nguyễn Bá Thuận Page 2 of 12

M1
Bit chọn mode
M0
Bit chọn mode
Hai bit M0 và M1 tạo ra 4 trạng thái tương ứng vớ 4 kiểu làm việc khác nhau của
Timer 0 hay Timer1

M1

M0

Mode( Kiểu)

Chức năng
0 0 0 Chế độ định thời 13 bit (tương thích với họ 8048)
0 1 1 Chế độ Timer hay Counter 16 bit
1 0 2 Chế độ Timer hay Counter 8 bit, tư nạp lại
1 1 3
Timer 0 được tách thành 2 Timer 8 bit
-Timer 8 bit TL0 được điều khiển bởi các bit của
mode Timer0
-Timer 8 bit TH0 được điều khiển bởi các bit của
mode Timer1
Timer 1 không hoạt động ở mode 3
Thanh ghi THx và TLx
Các giá trị đếùm được của Timer/Counter thì được lưuu trong thanh ghi THx
và TLx.
Nếu ta không thiết lập giá trị bắt đầu đếm cho các thanh ghi TLx và THx là

0000h thì Timer sẽ bắt đầu đếm từ giá trị 0000H đến giá trị FFFFH.
Cờ báo tràn TFx
Nếu ta thiết lập giá trị bắt đầu đếm cho các thanh ghi TLx và THx là khác
0000h thì Timer sẽ bắt đầu đếm từ giá trị ta gán đến giá trị FFFFH. Nhưng khi chuyển
từ giá trị FFFFh đến 0000h thì sẽ sinh ra tràn làm cho bit TFx = 1 rồi tiếp tục đếm từ
giá trị 0000h.
Để cho Tiner luôn bắt đầu đếm từ giá trị ta gán thì ta có thể lập trình chờ sau
mỗi lần tràn ta sẽ cho xóa cờ TFx và gán lại giá trị cho TLx/THx để Timer luôn bắt
đầu đếm từ giá trị khởi gán lên.
Thanh ghi điều khiển TRx
Thanh ghi này có tác dụng cho Timer được hay không được phép đếm xung
Nếu TRx = 1 thì Timer được phép đếm xung
ĐẠI HỌC LẠC HỒNG GIÁO TRÌNH LẬP TRÌNH C CHO HỌ VI ĐIỀU KHIỂN 8051


Biên soạn: Nguyễn Bá Thuận Page 3 of 12
Nếu TRx = 0 thì timer không được phép đếm xung
2. CÁCH KHỞI TẠO TIMER.
void delay_1()
{
TMOD=0x01; //khởi tạo timer 0 chế độ 16 bit
TH0=0xC350; //Nạp giá trị cần đếm cho timer 0
TL0=0xC350;
TR0=1; // cho phép timer 0 hoạt động
while(!TF0); // kiểm tra cờ tràn TF0 ở mức 0
TF0=0; //xóa cờ tràn
TR0=0; //không cho phép timer 0 hoạt động.
}
Qua chương trình con Delay_1 trên ta nhận thấy timer 0 hoạt động đếm từ 0 đến giá trị
C350H (50000 số thập phân) mà một lệnh diễn ra 1 miro giây (thạnh anh giao động

chọn 12Mhz) vậy ta được timer 50ms. Như vậy để làm timer có sự trì hoãn nhiều hơn
nữa ta dùng cách như sau:
void delay_1()
{
unsigned int t; //tạo biến t theo kiểu unsigned int
for(t=0;t<20;t++) //tạo vòng lập for làm 20 lần
{
TMOD=0x01;
TH0=0xC350;
TL0=0xC350;
TR0=1;
while(!TF0);
TF0=0;
TR0=0;
}
}
Chương trình trên cho thấy điều kiện vòng lập for sẽ tăng từ 0 đến 20 và cứ mỗi lần
như vậy thì làm delay 50ms một lần. Vì vậy ta có một delay làm đi làm lại 50ms 20
lần, vậy ta có delay 1s. Nếu cần làm delay 1 phút hay nhiều hơn nữa ta làm như sau:
ĐẠI HỌC LẠC HỒNG GIÁO TRÌNH LẬP TRÌNH C CHO HỌ VI ĐIỀU KHIỂN 8051


Biên soạn: Nguyễn Bá Thuận Page 4 of 12
void delay_1(s) //khởi tạo thêm biến s có thể thay đổi được tại delay_1
{
unsigned int f,t; //khởi tạo hai biến f và t theo kiểu unsigned int
for(f=0;f<s;f++) //vòng lập for phụ thuộc giá trị của biến s
for(t=0;t<20;t++)
{
TMOD=0x01;

TH0=0xC350;
TL0=0xC350;
TR0=1;
while(!TF0);
TF0=0;
TR0=0;
}
}
Như vậy ta thấy chương trình delay 1s đã có bởi vòng lập for theo biến t và giá trị so
sánh 20, muốn tăng thời gian lên lúc này sẽ phụ thuộc vào vòng lặp theo biến f mà giá
trị so sánh ở đây có thể thay đổi được là biến s. giả sử muốn có delay 5 giây lúc này ta
chỉ cần gọi delay_1(5) tức là thay biến s bởi số 5. ví dụ ứng dụng sẽ cho thấy rõ.
#include <at89c51xd2.h> //bao gồm thư viện của at89c51xd2.h
sbit led=P0^0; //gán định nghĩa led chính là bit P0^0
void delay_1(s) //khởi tạo thêm biến s có thể thay đổi được tại delay_1
{
unsigned int f,t; //khởi tạo hai biến f và t theo kiểu unsigned int
for(f=0;f<s;f++) //vòng lập for phụ thuộc giá trị của biến s
for(t=0;t<20;t++)
{
TMOD=0x01;
TH0=0xC350;
TL0=0xC350;
TR0=1;
while(!TF0);
TF0=0;
ĐẠI HỌC LẠC HỒNG GIÁO TRÌNH LẬP TRÌNH C CHO HỌ VI ĐIỀU KHIỂN 8051


Biên soạn: Nguyễn Bá Thuận Page 5 of 12

TR0=0;
}
}
main() //chương trình chính
{
while(1) //vòng lập vô tận
{
led=0; //cho led ở mức 0
delay_1(5); //delay 5 giây
led=1; //cho led ở mức 1
delay_1(2); //delay 2 giây
}
}
3. BÀI TẬP ỨNG DỤNG.
- Hãy viết chương trình con delay 50 miro giây.
- Hãy viết chương trình con delay 20ms.
- Hãy viết chương trình con delay 2h.
- Hãy viết chương trình con delay 1day.
II. KHỞI TẠO CHƯƠNG TRÌNH NGẮT.
1. CÁC THANH GHI ĐIỀU KHIỂN NGẮT
Tổ chức ngắt của 8051:
- 8051 có 5 nguồn ngắt: 2 ngắt bên ngoài (INT0 và INT1), 2 ngắt Timer, 1 ngắt
Port nối tiếp. 2 ngắt bên ngoài có thể được lập trình để kích ngắt bằng cạnh xuống
hoặc bằng mức thấp.
- Việc tranh chấp giữa các nguồn ngắt được giải quyết bằng mạch ưu tiên ngắt
bên trong 8051. Có 2 thanh ghi điều khiển ngắt: Thanh ghi cho phép ngắt IE và thanh
ghi ưu tiên ngắt IP.
Thanh ghi cho phép ngắt IE (Interrupt Enable) : Có địa chỉ Byte là 0A8H
Bit Symbol


Bit Address

Description ( 1 : cho phép; 0 : không cho phép)

IE.7

EA AFH
Cấm tất cả các ngắt, nếu EA = 0.
Nếu EA = 1, mỗi nguồn ngắt được cho phép
hoặc cấm bằng set hoặc clear các bit tương ứng
IE.6

- AEH Không dùng
ĐẠI HỌC LẠC HỒNG GIÁO TRÌNH LẬP TRÌNH C CHO HỌ VI ĐIỀU KHIỂN 8051


Biên soạn: Nguyễn Bá Thuận Page 6 of 12
IE.5

- ADH Cho phép ngắt bộ định thời 2 (TIMER 2)
IE.4

ES ACH Cho phép ngắt Port nối tiếp
IE.3

ET1 ABH Cho phép ngắt TIMER1
IE.2

EX1 AAH Cho phép ngắt ngoài 1
IE.1


ET0 A8H Cho phép ngắt TIMER0
IE.0

EX0 A9H Cho phép ngắt ngoài 0
Các thanh ghi cho phép ngắt IP (Interrupt Priority): Có địa chỉ Byte là 0B8H

Bit Symbol

Bit Address

Description (1 = Mức cao, 0 = Mức thấp)

IP.7

- - Không dùng
IP.6

- - Không dùng
IP.5

PT2 0BDH Ưu tiên cho phép ngắt bộ định thời 2
IP.4

PS 0BCH Ưu tiên cho phép ngắt Port nối tiếp
IP.3

PT1 0BBH Ưu tiên cho phép ngắt TIMER 1
IP.2


PX1 0BAH Ưu tiên cho phép ngắt ngoài 1
IP.1

PT0 0B9H Ưu tiên cho phép ngắt TIMER 0
IP.0

PX0 0B8H Ưu tiên cho phép ngắt ngoài 0
Nếu 2 ngắt cùng mức ưu tiên xảy ra đồng thời thì thứ tự ưu tiên như sau: PS,
PT1, PX1, PX0.
Ngắt Timer:
Ngắt Timer xảy ra khi cờ TFx được xét (bộ đếm tràn). Cờ TFx được clear bằng
bằng phần mềm hoặc khi vi điều khiển thực hiện chương trình con phục vụ ngắt Timer
Ngắt ngoài:
-

Ngắt ngoài xảy ra khi có mức thấp hoặc cạnh âm trên chân
0INT
(bit P3.2) hoặc
1INT
(bit P3.3) của 8051
+ Khi chân
0INT
nhân được tín hiệu điều khiển ( với mức áp thấp ), nó sẽ dừng ngay
chương trình đang chạy và nhảy tới địa chỉ 0003H của bộ nhớ EEPROM và cho thi
hành chương trình đã có ở địa chỉ này.
+ Khi chân
1INT
nhân được tín hiệu điều khiển ( với mức áp thấp ), nó sẽ dừng ngay
chương trình đang chạy và nhảy tới địa chỉ 0013H của bộ nhớø EEPROM và cho thi
hành chương trình đã có ở địa chỉ này.

-

Kích bằng cạnh hay kích bằng mức được lựa chọn bằng hai bit IT0 hoặc IT1 trong
thanh ghi SCON .
ĐẠI HỌC LẠC HỒNG GIÁO TRÌNH LẬP TRÌNH C CHO HỌ VI ĐIỀU KHIỂN 8051


Biên soạn: Nguyễn Bá Thuận Page 7 of 12
+ Nếu IT1=0 ngắt ngoài 1 được kích khởi mức bởi việc phát hiện mức áp thấp tại chân
1INT

+ Nếu IT1=1 ngắt ngoài 1 được kích khởi cạnh bởi việc phát hiện mức áp thấp tại chân
1INT

-

Có hai bit IE0 và IE1 trong TCON chỉ ra trạng thái có hay không có ngắt ngoài
(phát hiện cạnh xuống tại chân
0INT
hay
1INT
) .
Ngắt dùng RESET
Có thể xem tác dụng Reset (cho bit tại chân số 9 lên 1) cũng là một ngắt đặt biệt.
Khi tín hiệu Reset xuất hiện, nó sẽ dừng ngay chương trình chính và nhảy về địa chỉ
gốc 0000h của bộ nhớ EEPROM và cho chạy chương trình bắt đầu bằng địa chỉ này.
2. CÁCH KHỞI TẠO CHƯƠNG TRÌNH NGẮT.

a. Khởi tạo ngắt timer
Vo

i
d

T
ê
nh
à
m(vo
i
d)
i
n
te
rrup
t
ngu

n ng

t
us
i
ng

b
ă
ng
t
h
a

nhgh
i
{
//
chương trình phục vụ ngắt ơ đây

}
Chú

ý

v


h
à
m

ng

t:
+

H
à
m

ng

t

không

đ
ượ
c
ph
é
p
t
r

l

i
g
iá t
r


h
a
y
t
ruy

n

b
i
ế

n

v
à
o

h
à
m.

+

T
ê
n

h
à
m

b

t
k
ì
.

+
i
n

te
rrup
t là t


khó
a
ph
â
n

b
i

t
h
à
m

ng

t
v

i
h
à
m
t
h

ườ
ng.

+

Ngu

n

ng

t t


0
t

i
5
t
h
e
o

b

ng

v
ect

or

ng

t
.

+

B
ă
ng
t
h
a
nh

gh
i t
r
ê
n

r
a
m
c
h

n

t


0

đ
ế
n

3.

T

y
t
h
e
o

b

n

v
i
ế
t
h
à
m


ng

t c
ho

ngu

n

n
à
o

b

n
c
h

n

ngu

n

ng

t t



b

ng

s
a
u
:

Interrupt Flag Vector Address
System Reset RST 0000H
External 0 IE 0 0003H
Timer 0 TF 0 000BH
External 1 IE 1 0013H
Timer 1 TF 1 001BH
Serial Port R1 or T1 0023H
Timer 2 TF2 or EXF2 002BH
R

ng

ng

t
R
e
s
et
không


nh,

b

t
đ

u

đ
ế
m
t


0

v
à t


ng

t
ngo
ài
0.

V

í
d

: t
ô
i c

n

v
i
ế
t
h
à
m

ng

t c
ho

b


đ

nh
t
h


i ti
m
e
r

1

h
à
m

ng

t
s


.
ĐẠI HỌC LẠC HỒNG GIÁO TRÌNH LẬP TRÌNH C CHO HỌ VI ĐIỀU KHIỂN 8051


Biên soạn: Nguyễn Bá Thuận Page 8 of 12

vo
i
d
ti
m
e

r1_
i
sr(vo
i
d)
i
n
te
rrup
t
3

us
i
ng

0
{
//
lệnh cần thực hiện.

}

-

V


us
i

ng

0
:


4

b
ă
ng
t
h
a
nh

gh
i
b

n
c
ó
t
h

c
h

n

c
ho
c
h
ươ
ng
t
r
ì
nh

ph

c
v


ng

t
,
cái
n
à
y
c
ũ
ng

không


qu
a
n
t
r

ng.

Trong

h
à
m

ng

t các
b

n
c
ó
t
h


b



đ
i t


us
i
ng

0,

kh
i
đ
ó

v
i
đ
i

u

kh
i

n

s

t



s

p

x
ế
p

dùng

b
ă
ng
t
h
a
nh

gh
i
n
à
o.

-

H
à

m

ng

t
kh
ác
h
à
m

b
ì
nh
t
h
ườ
ng
c
h


n
à
o.

H
à
m


b
ì
nh
t
h
ườ
ng

v
í
d


h
à
m

d
ela
y,
c


kh
i
b

n

g


i

t
h
ì


s


đ
ượ
c t
h

c
h
i

n,
c
ó

ngh
ĩa là

c
ó


v

t
r
í c


đ

nh
t
rong
ti
ế
n
t
r
ì
nh

h
à
m
m
ai
n,
c
ó

ngh

ĩa là
b

n

b
i
ế
t


x

y

r
a
kh
i
n
à
o.

Còn

h
à
m

ng


t t
h
ì
không
c
ó
ti
ế
n
t
r
ì
nh
c


đ

nh,

đ
i

u

k
i

n


ng

t c
ó
t
h


x

y

r
a
b

t
k
ì l
ú
c
n
à
o
t
rong
ti
ế
n

t
r
ì
nh

h
à
m

m
ai
n

v
à c


kh
i
n
à
o

c
ó

đ
i

u


k
i

n

ng

t t
h
ì
h
à
m

ng

t
s


đ
ượ
c
g

i t


độ

ng.

B

t
đ

u
c
h
ươ
ng
t
r
ì
nh
c
ó

ng

t:
-Tr
ướ
c
kh
i
b

t

đ

u
c
ho
c
h

y
c
h
ươ
ng
t
r
ì
nh
ta
ph

i c
ho

ph
é
p

ng

t t

o
à
n
c

c
đ
ượ
c
x

y

r
a
b

ng
các
h

g
á
n

EA(En
a
b
le
A

ll i
n
te
rrup
t
)

b

ng

1,
t
h
ì
ng

t
m

i
x

y

r
a
.

-Th

ườ
ng
t
h
ì
ng
a
y

v
à
o

đ

u
c
h
ươ
ng
t
r
ì
nh(h
à
m

m
ai
n)

t
r
ướ
c
vòng

wh
ile
(1)
c
húng
ta
đ

t c
ông

v
i

c
kh

i t

o,
c

u


h
ì
nh

v
à c
ho

ph
é
p

k
i

m
t
r
a
ng

t
.

V
í
d


v


i
b


đ

nh
t
h

i ti
m
e
r

ta
g
á
n
các
g
iá t
r


phù

h


p
c
ho
t
h
a
nh

gh
i
TCON(

T
i
m
e
r

CON
t
ro
l
).

T
C
O
N

Đ

i

u

kh
i

n

b


đ
i
nh
t
h

i
TCON.7

TF1

C

t
r
à
n
c


a
b


đ

nh
t
h

i
1.

C


n
à
y

đ
ượ
c
s
et
b

i
ph


n

c

ng

kh
i c
ó
t
r
à
n,

đ
ượ
c
xo
á
b

i
ph

n

m

m, ho


c
b

i
ph

n
c

ng

kh
i
b


v
i
x

l
ý
t
r


đ
ế
n

t
r
ì
nh ph

c
v


ng

t
TCON.6

TR1

B
it
đ
i

u

kh
i

n

ho


t
độ
ng
c

a
b


đ

nh
t
h

i
1.

B
it
n
à
y

đ
ượ
c
s
et
ho


c
xo
á
b

i
ph

n

m

m

đ


đ
i

u

kh
i

n b


đ


nh
t
h

i
ho

t
độ
ng

h
a
y

ng
ư
ng

TCON.5

TF0

C

t
r
à
n

c

a
b


đ

nh
t
h

i
0

TCON.4

TR0

B
it
đ
i

u

kh
i

n


ho

t
độ
ng
c

a
b


đ

nh
t
h

i
0

TCON.3

IE1

C


ng


t
b
ê
n

ngo
ài
1

(k
íc
h

kh

i c

nh).

C


n
à
y

đ
ượ
c
t

r
ê
n
c
h
â
n

INT1,

đ
ượ
c
xo
á
b

i
ph

n

m

m.

TCON.2

IT1


C


ng

t
b
ê
n

ngo
ài
1

(k
íc
h

kh

i c

nh

ho

c
m

c

).

n
à
y

đ
ư

c

s
e
t

h
o

c

x
o
á

b

i

ph


n

m

m

kh
i

x

y

r
a
c

nh

TCON.1

IE0

C


ng

t
b

ê
n

ngo
ài
0

(k
íc
h

kh

i c

nh)

TCON.0

IT0

C


ng

t
b
ê
n


ngo
ài
0

(

k
íc
h

kh

i c

nh

ho

c
m

c
)

ĐẠI HỌC LẠC HỒNG GIÁO TRÌNH LẬP TRÌNH C CHO HỌ VI ĐIỀU KHIỂN 8051


Biên soạn: Nguyễn Bá Thuận Page 9 of 12
V

í
d


đ

c
h

y

b


đ

nh
t
h

i ti
m
e
r

1
ta
dùng

u

l

nh
:
TR1=0
;
TR1(T
i
m
e
r

Run

1).

Còn

b

n

n
à
o
t
h
íc
h


khó
t
h
ì:
TCON=0xxx
;
Còn
các l
o

i
ng

t
kh
ác
qu
á t
r
ì
nh
t
ươ
ng
t

.

S
a

u

kh
i
kh

i t

o

xong

v
à c
ho

ng

t ti
m
e
r

1
c
h

y
t
h

ì
đ
i

u

g
ì
x

y

r
a?
Kh
i
b

t
đ

u
c
ho
ti
m
e
r

1

c
h

y
t
h
ì
b


đ
ế
m
c

a ti
m
e
r

s


đ
ế
m

d
a
o


độ
ng
c

a t
h

c
h
a
nh,
c


12

d
a
o

độ
ng
c

a t
h

c
h


a
nh(1
c
hu

k
ì
m
á
y),

b


đ
ế
m
c

a ti
m
e
r

1

TL1(T
i
m

e
r

Low1)

s

t
ă
ng

1,
c
ó
t
h



i ti
m
e
r

1

đ
ế
m


s

c
hu

k
ì
m
á
y.

Đ

i
v

i c
h
ế

độ

8

b
ít
.

TL1


1
t
h
a
nh

gh
i
8

b
ít
,

b


đ
ế
m
c

a
b


đ

nh


t
h

i


r

i
.



đ
ế
m

đ
ượ
c t


0,

đ
ế
n

255. N
ế

u



đ
ế
m

đ
ế
n

256
t
h
ì
b


đ
ế
m
t
r
à
n,

TL1

qu

a
y

vòng
l

i
b

ng

0,

v
à c


ng

t
TF1(T
i
m
e
r

F
la
g


1)
t


độ
ng

đ
ượ
c
g
á
n

n

1(b

ng

ph

n
c

ng

c

a

v
i
đ
i

u

kh
i

n)

nh
ư

1
c
ông
t

c t


độ
ng

b

t
,


v
à
ng

t
x

y

r
a
.

Còn

v

i c
h
ế

độ

16

b
ít
,


b


đ
ế
m
c

a
b


đ

nh
t
h

i c
òn

1
t
h
a
nh

gh
i
8


b
ít
n

a là
TH1(T
i
m
e
r

h
i
gh

1),

n
ế
u
c

u

h
ì
nh
c
ho


ti
m
e
r

1

ho

t
độ
ng


c
h
ế

độ

16

b
it t
h
ì
kh
i
TL1

t
r
à
n



s


đ
ế
m

s
a
ng

TH1(TH1

s

t
ă
ng

1).

Nh
ư


v

y
ta c
ó
t
h


đ
ế
m
:
2
16
c
hu

k
ì
m
á
y(

2
t
h
a
nh


gh
i
8+8=16

b
ít
).

Chú

ý

kh
i
b


đ
ế
m
t
r
à
n

ng

t
s



x

y

r
a
.

N
ế
u
ta c

n

đ
ế
m

256
c
hu

k
ì
m
á
y

t
h
ì
kh
i
kh

i t

o

ta c
ho

TL1=0
;
,
c
òn

n
ế
u

không

mu

n


đ
ế
m

256
c
hu

k
ì
m
à
y

m
à ta c
h

c

n

đ
ế
m

100
t

i

ng

t
đ
ã
x

y

r
a
r

i t
h
ì ta
f

i là
m

nh
ư

s
a
u
:
256-100


=

156
;
v
à
kh
i
kh

i t

o
ta
g
á
n
:
TL1=155
;
v
ì
đ
ế
m
t


155


đ
ế
n

255

đủ

100
l

n
t
h
ì
ng

t
x

y

r
a
.

Chương trình khởi tạo timer 0.
vo
i
d

khoitaoti
m
e
r0(vo
i
d)
//
H
àm khởi tạo
{
EA=0
; //
C
a
m

ng
at t
o
a
n
c
u
c
TMOD=0x02
; //
T
i
m
e

r

0
c
h
e
do

2

8

b
it a
u
t
o

r
el
o
a
d
TH0=0x9B
; //
G
ia t
r
i
n

a
p
lai
155

do
i
r
a
so

h
e
x

TL0=0x9B
; //
G
ia t
r
i
kho
i ta
o

155

do
i
r

a
so

h
e
x

ET0=1
; //
Cho

ph
e
p

ng
at ti
m
e
r

0

EA=1
; //
Cho

ph
e
p


ng
at t
o
a
n
c
u
c
TR0=1
; //
Ch
a
y
ti
m
e
r

0

b
at
d
a
u

d
e
m


so
c
hu

k
i
m
a
y

}

Ví dụ ứng dụng.
Ứng dụng ngắt timer để tạo chương trình phát xung nhấp nháy tại chân p0^0.
#include <at89c51xd2.h>
sbit led=P0^0;
void timer0()interrupt 1
{
led=~led;
}
void khoitaotimer0()
{
ĐẠI HỌC LẠC HỒNG GIÁO TRÌNH LẬP TRÌNH C CHO HỌ VI ĐIỀU KHIỂN 8051


Biên soạn: Nguyễn Bá Thuận Page 10 of 12
EA=0;
TMOD=0X02;
TH0=0x9B;

TL0=0x9B;
ET0=1;
EA=1;
TR0=1;
}
main()
{
khoitaotimer0();
}

Chương trình đã được lập trình và mô phỏng





ĐẠI HỌC LẠC HỒNG GIÁO TRÌNH LẬP TRÌNH C CHO HỌ VI ĐIỀU KHIỂN 8051


Biên soạn: Nguyễn Bá Thuận Page 11 of 12

b. Khởi tạo ngắt ngoài.
Chương trình khởi tạo ngắt ngoài 0.
Void ngatngoai0(void) //khởi tạo hàm ngắt ngoài 0
{
EA=1; //cho phép ngắt toàn cục.
EX0=1; //cho phép ngắt ngoài 0
IT0=1; //cho phép tác động cạnh tại chân P3^2
}
Ví dụ ứng dụng

Ứng dụng ngắt ngoài để điều khiển đảo port 0 khi có tác động ngắt ngoài 0 tại chân
P3^0.
#include <at89c51xd2.h>
void ngatngoai0()interrupt 0
{
P0=~P0;
}
void khoitaongatngoai0()
{
EA=1;
EX0=1;
IT0=1;
}
main()
{
khoitaongatngoai0();
}






ĐẠI HỌC LẠC HỒNG GIÁO TRÌNH LẬP TRÌNH C CHO HỌ VI ĐIỀU KHIỂN 8051


Biên soạn: Nguyễn Bá Thuận Page 12 of 12




Chương trình đã được lập trình và mô phỏng
3. BÀI TẬP ỨNG DỤNG.
- Hãy khởi tạo ngắt timer 1.
- Hãy lập trình một ứng dụng khi dùng ngắt timer.
- Hãy khởi tạo ngắt ngoài 1.
- Hãy lập trình một ứng dụng khi dùng ngắt ngoài 1.










×