Tải bản đầy đủ (.doc) (17 trang)

Đồ Án Đo Lường Và Điều Khiển Bằng Máy Tính

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 (300.25 KB, 17 trang )

đồ án môn học: đo lờng và điều khiển bằng máy tính

đề tài:
Thiết kế đồng hồ hiển thị thời gian thực dùng LED 7
thanh ghép nối với máy tính qua công nối tiếp

Giáo viên hớng dẫn: vũ thị thu hơng
Nhóm SV thực hiện

: Nguyễn Văn Đơng
Đặng Minh Chỉnh
Hoàng Mạnh Toàn

Thiết kế đồng hồ điện tử hiển thị thời gian thực dùng LED 7 thanh ghép nối qua cổng nối tiếp

1


®å ¸n m«n häc: ®o lêng vµ ®iÒu khiÓn b»ng m¸y tÝnh

2

CHƯƠNG 1: TỔNG QUAN PHẦN CỨNG
1. Cổng nối tiếp
Cổng nối tiếp RS 232 là một loại giao diện phổ biến, rộng rãi nhất. Nó
còn có tên gọi khác là cổng COM 1, COM 2 để tự do cho các ứng dụng khác
nhau. Giống như cổng song song, cổng nối tiếp RS 232 cũng được sử dụng rất
thuận tiện trong việc ghép nối máy tính với các thiết bị ngoại vi. Việc truyền
dữ liệu qua cổng RS 232 được tiến hành theo cách nối tiếp, nghĩa là các bít dữ
liệu được gửi đi nối tiếp với nhau trên một đường dẫn. Loại đ ư ờ n g truyền này
có khả năng dùng cho những khoảng cách lớn hơn, bởi vì khả năng gây nhiễu


là nhỏ đáng kể hơn là khi dùng một cổng song song.
1.1. Cấu trúc cổng nối tiếp

1

5

6

9

Sơ đồ chân phích cắm RS232
Ý nghĩa các chân tín hiệu như sau:
Chân
Mô tả
Ký hiệu
Ý nghĩa
1
Data Carrier Detect
DCD
Tách tín hiệu mang dữ liệu
2
Received Data
RxD
Dữ liệu được nhận
3
Transmitted Data
TxD
Dữ liệu được gửi
4

Data Terminal Ready
DTR
Đầu cuối dữ liệu sẵn sàng
5
Signal Ground
GND
Đất của tín hiệu
6
Data Set Ready
DSR
Dữ liệu sẵn sàng
7
Request To Send
RTS
Yêu cầu gửi
8
Clear To Send
CTS
Xóa để gửi
9
Ring Indicator
RI
Báo chuông
Mức tín hiệu trên các chân của cổng nối tiếp thường nằm trong khoảng
-12V đến +12V, các bit dữ liệu được đảo ngược lại. Mức điện áp ở mức logic 1
nằm trong khoảng -3V và -12V và mức logic 0 nằm trong khoảng từ +3V và
+12V. Trạng thái tĩnh trên đường dẫn có mức điện áp -12V.

ThiÕt kÕ ®ång hå ®iÖn tö hiÓn thÞ thêi gian thùc dïng LED 7 thanh ghÐp nèi qua cæng nèi tiÕp



®å ¸n m«n häc: ®o lêng vµ ®iÒu khiÓn b»ng m¸y tÝnh

3

Bằng tốc độ baud, ta thiết lập tốc độ truyền dữ liệu các giá trị thông thường là
300, 600, 1200, 2400, 4800, 9600, 19200 baud.( Ký hiệu baud là số lượng bit
truyền trong 1s)
Một vấn đề nữa cần quan tâm là khuôn mẫu (Format) truyền dữ liệu cần
phải được thiết lập như nhau cả bên gửi cũng như bên nhận các thông số
truyền có thể được thiết lập trên máy tính bằng các câu lệnh trên DOS.
Ngày nay, Windows cũng có các chương trình hỗ trợ, khi đó các thông số
truyền dữ liệu như: tốc độ baud, số bit dữ liệu, số bit dừng, bit chẵn lẻ (parity) có
thể được thiết lập một cách rất đơn giản hơn.
1.2. Sự trao đổi của các đường dẫn dữ liệu
Cũng như ở cổng song song, các đường dẫn tín hiệu riêng biệt cũng cho
phép trao đổi qua lại các địa chỉ trong máy tính, trong trường hợp này, người ta
thường sử dụng những vi mạch có độ tích hợp cao để có thể hợp nhất nhiều
chức năng trên 1 chip.
Ở máy tính PC thường có một bộ thu/ phát không đồng bộ vạn năng (UART)
để điều khiển sự trao đổi thông tin giữa máy tính và các thiết bị ngoại vi, phổ
biến nhất là vi mạch 8250 của hãng NSC. Bộ UART này có 10 thanh ghi để
điều khiển tất cả chức năng của việc nhập vào, xuất ra dữ liệu theo cách nối tiếp.
Chi tiết về từng thanh ghi đó như sau:
a. Thanh ghi điều khiển Modem (Địa chỉ cơ sở + 4):
D7=0
D6=0
D5=0
D4
D3

D2
D1
D0
(LOOP)
(OUT2)
(OUT1) (RTS) (DTR)
D0 =1 đưa DTR =0.
D0 =0 đưa DTR =1.
D1 =1 đưa RTS =0.
D1 =0 đưa RTS =1.
OUT1 và OUT2 điều khiển đầu ra phụ.
b. Thanh ghi trạng thái Modem (Địa chỉ cơ sở + 6):
RLSD
RI
DSR
CTS
∆RLSD
∆RI
∆DSR
∆CTR
Thanh ghi này có chức năng thông báo về trạng thái các đường dẫn bắt tay.
Điều chú ý ở thanh ghi này là có 3 bit D4, D5, D6, đây chính là lối vào của các
đường dẫn CTS, DSR và R1 đã được đảo.
c. Thanh ghi điều khiển đường truyền (Địa chỉ cơ sở + 3):
C7
C6
C5
C4
C3
C2

C1
C0
- C1, C0: Đặt số bit trong mỗi từ:
C1C0 = 00- 5 bit
C1C0 = 01- 6 bit
C1C0 = 10- 7 bit
C1C0 = 11- 8 bit
- C2: các bit dừng:
C2 =0: 1 bit dừng
C2= 1: 1,5 bit dừng
- C3: Bit parity
C3 = 0: Không kiểm tra chẵn lẻ.
C3 = 1: Có kiểm tra chẵn lẻ.

ThiÕt kÕ ®ång hå ®iÖn tö hiÓn thÞ thêi gian thùc dïng LED 7 thanh ghÐp nèi qua cæng nèi tiÕp


- C4: Loại parity
C4 = 0: Parity lẻ (kiểm tra tổng số bit 1 là lẻ)
C4 = 1: Parity chẵn (kiểm tra tổng số bit 1 là chẵn)
- C5: Stick bit (Thường không sử dụng)
C5 = 0: Không có stick bit
C5 = 1: Stick bit
- C6: Đặt break (bit nghỉ dừng)
C6 = 0: Normal Output- bình thường
C6 = 1: Gửi 1 break- dừng
-C7 (DLAB- Division Latch Access Bit)
C7 = 1:
Cho phép truy nhập thanh ghi chứa số chia tốc độ baud/ byte thấp (Địa chỉ
3F8).

Cho phép truy nhập thanh ghi chứa số chia tốc độ baud/ byte cao (Địa chỉ
3F9).
C7 = 0:
Cho phép truy nhập thanh ghi đệm đọc/ viết ( Địa chỉ 3F8).
Cho phép truy nhập thanh ghi cho phép ngắt (Địa chỉ 3F9).
d. Thanh ghi trạng thái đường truyền (Địa chỉ cơ sở + 5):
0
S6
S5
S4
S3
S2
S1
S0
S0: Đặt thành một dữ liệu nhận được.
S1: Tín hiệu làm dừng được phát hiện.
S2: Lỗi chẵn lẻ.
S3: Lỗi khung truyền.
S4: Lỗi tràn.
S5: Đặt thành 1 ký tự được nạp vào bộ đệm truyền.
S6: Đặt thành một bộ đệm truyền trống rỗng.
S7 = 0.
e. Thanh ghi cho phép ngắt (Địa chỉ cơ sở +1):
D7
D6
D5
D4
D3
D2
D1

D0
D0 = 1: Cho phép ngắt khi nhận 1 ký tự.
D1 = 1: Cho phép ngắt khi bộ đệm truyền rỗng.
D2 = 1: Cho phép ngắt khi thay đổi trạng thái đường truyền.
D3 = 1: Cho phép ngắt khi thay đổi trạng thái Modem.
D4 = 0.
D5 = 0.
D6 = 0.
D7 = 0.
f. Thanh ghi nhận dạng ngắt (Địa chỉ cơ sở + 2):
D7 = 0.
D6 = 0.
D5 = 0.
D4 = 0.
D3 = 0.


D2 D1 D0
0
0
1
1
1
0

Mức ưu tiên
Cao nhất

Nguồn gây ngắt
Không kiểm tra ngắt

Lỗi
đường nhận dữ liệu

1

0

0

Thứ hai

Có dữ liệu nhận

0

1

0

Thứ ba

Thanh ghi đệm
truyền rỗng

Đặt lại ngắt
Đọc thanh ghi
trạng
thái
đường truyền
Đọc

thanh ghi đệm

0
0
0
Thứ tư
g. Thanh ghi chứa số chia tốc độ baud (byte thấp - địa chỉ cơ sở):
Thanh ghi này gồm 8 bit, chứa phần thấp của số chia tốc độ baud. Số chia tốc độ
baud được tính theo công thức:
Số chia tốc độ baud = 1843200/(16x tốc độ baud cần thiết lập)
h. Thanh ghi chứa số chia tốc độ baud ( byte cao- địa chỉ cơ sở + 1).
i. Thanh ghi đệm đọc/ viết (địa chỉ sơ sở).
2. Module vào ra 8 bit dùng cổng nối tiếp
Hạt nhân của Module này là vi mạch CDP 6402. Vi mạch này có thể đảm
nhiệm chức năng như một bộ thu phát không đồng bộ vạn năng (UART). Trong
mạch thực tế, nhóm thực hiện đã sử dụng IC AT89S52 (trong cấu trúc IC này
có bộ UART). Ngoài ra, phần cứng của Module còn sử dụng vi mạch MAX
232 làm nhiệm vụ chuyển đổi mức từ TTL sang RS232 và ngược lại. Chi tiết về
vi mạch 89S52 và MAX232 như trình bày dưới đây.
2.1. Vi mạch MAX232
Vcc
+
16

C1
+
C2
11
12
10

9

C3
+

2
6
T1IIN

T1OUT

R1OUT
T2IIN

R1IIN
T2OUT

R2OUT
15

TTL side

R2IIN

C4
+
14

8051
P3.1 TxD 11


11

P3.0 RxD 10

12

Max232
14 2 5
13 3

13
7

DB - 9

8

Rs232 side

Sơ đồ bên trong MAX232 và sơ đồ ghép nối MAX232 với IC họ 8051.
MAX232 có hai bộ điều khiển đường truyền là nhận và truyền dữ liệu như hình
trên. Các bộ điều khiển đường truyền dùng cho TxD được gọi là T1 và T2.
Trong nhiều ứng dụng thì chỉ có một cặp được dùng. Ví dụ T1 và R1 được dùng
với nhau cho trường hợp TxD và RxD của 8051, còn cặp R2 và T2 thì không
dùng đến. Bộ điều khiển T1 của MAX232 có gắn T1in và T1 out trên các chân


số 11 và 14 tương ứng. Chân T1in là ở phía TTL và được nối tới chân RxD của
bộ điều khiển, còn T1out là ở phía RS232 được nối tới chân RxD của đầu nối

DB của RS232. Bộ điều khiển đường R1 cũng có gán R1in và R1out trên các
chân số 13 và 12 tương ứng. Chân R1in (chân số 13) là ở phía RS232 được nối
tới chân TxD đầu nối DB của RS232 và chân R1out (chân số 12) là ở phía TTL
và được nối tới chân RxD của bộ vi điều khiển. Nối ghép modem rỗng là nối
ghép mà chân TxD bên phát được nối với RxD của bên thu và ngược lại.
MAX 232 cần có 4 tụ điện giá trị từ 1 đến 22 uF.Giá trị thường dùng là 22uF.
2.2. Vi mạch AT89S52
2.2.1. Chức năng các khối của AT89S52
Bộ vi điều khiển AT89S52 gồm các khối chức năng chính sau đây:
-CPU bao gồm:
+Thanh ghi tích lũy A.
+Thanh ghi tích lũy B: dùng cho phép nhân và phép chia.
+Đơn vị logic học (ALU- Arithmetic Logical Unit).
+Từ trạng thái chương trình (PSW- Program Status Word).
+Bốn băng thanh ghi.
+Con trỏ ngăn xếp.
-Bộ nhớ chương trình (Bộ nhớ Rom) gồm 8 Kb Flash.
-Bộ nhớ dữ liệu (Bộ nhớ Ram) gồm 256 bytes.
-Bộ UART : chức năng truyền nhận nối tiếp. Nhờ khối này, AT89S52 có thể giao
tiếp với cổng COM máy tính.
-Ba bộ Timer/ Counter 16 bit thực hiện các chức năng định thì và đếm sự kiện.
-WDT (Watch Dog Timer).
-Khối điều khiển ngắt với 2 nguồn ngắt ngoài và 4 nguồn ngắt trong.
-Bộ lập trình (ghi chương trình lên Flash Rom) cho phép người sử dụng có thể
nạp các chương trình cho chip mà không cần các bộ nạp chuyên dụng.
-Bộ chia tần số với hệ số chia là 12.
-Bốn Port xuất nhập với 32 chân.


2.2.2. Sơ đồ và chức năng các chân AT89S52


- Port 0 (P0.0- P0.7):
Port 0 gồm 8 chân, ngoài chức năng xuất nhập ra, nó còn là Bus đa hợp dữ liệu
và địa chỉ (AD0- AD7), chức năng này sẽ được sử dụng khi AT89S52 giao tiếp
với các thiết bị ngoài có cùng kiến trúc bus.
- Port 1 (P1.0- P1.7):
Đối với 8051, chức năng duy nhất của Port 1 là chức năng xuất nhập, cũng như
các Port khác, Port1 có thể xuất nhập theo bit và theo byte.
Riêng dòng 89Sxx, 4 chân P1.5, P1.6, P1.7 được dùng để nạp ROM theo chuẩn
ISP, 2 chân P1.0 và P1.1 được dùng cho bộ Timer 2.
- Port 2:
Port 2 là một Port công dụng kép: là các đường xuất nhập hoặc là byte cao của
bus địa chỉ đối với các thiết kế dùng bộ nhớ mở rộng.
- Port 3:
Mỗi một chân trên Port 3 ngoài chức năng xuất nhập còn có một chức năng
riêng, cụ thể như sau:
Bit
Tên
Chức năng
P3.0
RXD
Dữ liệu nhận cho Port nối tiếp
P3.1
TXD
Dữ liệu phát cho Port nối tiếp
P3.2
INT0
Ngắt 0 bên ngoài
P3.3
INT1

Ngắt 1 bên ngoài
P3.4
T0
Ngõ vào của Timer/Counter 0
P3.5
T1
Ngõ vào của Timer/Counter 1
P3.6
WR
Xung ghi bộ nhớ dữ liệu ngoài
P3.7
RD
Xung đọc bộ nhớ dữ liệu ngoài


- PSEN (Program Store Enable):
Chức năng của chân này là điều khiển để cho phép bộ nhớ chương trình mở rộng
và thường được kết nối đến chân /OE (Output Enable) của một EPROM để cho
phép đọc các byte mã lệnh.
PSEN sẽ ở mức thấp trong thời gian đọc lệnh. Các mã nhị phân của
chương trình được đọc từ EPROM qua bus và được chốt vào thanh ghi lệnh
của bộ vi điều khiển để giải mã lệnh. Khi thi hành chương trình trong ROM nội
PSEN sẽ ở mức thụ động (mức cao).
- ALE (Address Latch Enable):
ALE là tín hiệu để chốt địa chỉ vào một thanh ghi bên ngoài trong nửa đầu của
chu kỳ bộ nhớ. Sau đó, các đường Port 0 dùng để xuất hoặc nhập dữ liệu trong
nửa sau chu kỳ của bộ nhớ.
Các xung tín hiệu ALE có tốc độ bằng 1/6 lần tần số dao động trên chip và có
thể được dùng làm nguồn xung nhịp cho các hệ thống. Nếu xung thạch anh dùng
cho chip là 12 MHz thì ALE có tần số 2 MHz.

- EA (External Access):
EA thường được mắc lên mức cao (+5V) hoặc mức thấp (GND). Nếu ở mức cao,
bộ vi điều khiển thi hành chương trình từ ROM nội. Nếu ở mức thấp, chương trình
chỉ được thi hành từ bộ nhớ mở rộng.
- RST (Reset):
Ngõ vào RST trên chân 9 là ngõ reset của 8051. Khi tín hiệu này được đưa lên
mức cao (trong ít nhất 2 chu kỳ máy), các thanh ghi trong bộ vi điều khiển được
tải những giá trị thích hợp để khởi động hệ thống.
- XTAL1, XTAL2:
AT89S52 có một bộ dao động trên chip, nó thường được nối với bộ dao động
thạch anh có tần số lớn nhất là 33 MHz, thông thường là 12MHz.
- Vcc, GND.
2.2.3. Hoạt động định thời
a.Giới thiệu:
AT89S52 có 3 bộ định thời (Timer) 16 bit, mỗi bộ định thời có 4 chế độ hoạt
động. Người ta sử dụng các bộ định thời để: Định khoảng thời gian, đếm sự kiện,
tạo tốc độ baud cho port nối tiếp trong.
b. Các thanh ghi của bộ định thời
- Các thanh ghi của Timer 0 và Timer 1:
+ Thanh ghi chế độ Timer (TMOD):
Thanh ghi TMOD chứa hai nhóm 4 bit dùng để đặt chế độ làm việc cho Timer 0
và Timer 1.
Bit Tên Timer
Mô tả
7 GATE
1
Bit (mở) cổng, khi lên 1 Timer chỉ chạy khi INT1 ở mức
cao.
6
C/T

1
Bit chọn chế độ Counter/ Timer của Timer 1:
C/T =1: bộ đếm sự kiện.
C/T =0: bộ định khoảng thời gian.
5
M1
1
Bit 1 chọn chế độ
4
M0
1
Bit 0 chọn chế độ
của Timer 1
của Timer 1

3

GATE

0

Bit (mở) cổng.


2
1
0

C/T
M1

M0

0
0
0

Bit chọn Counter/Timer của Timer 0.
Bit 1 chọn chế độ của Timer 0.
Bit 0 chọn chế độ của Timer 0.

M1M0 =00: chế độ 0: Timer 13 bit.
M1M0 =01: chế độ 1: Timer 16 bit.
M1M0 =10: chế độ 2: tự động nạp lại 8 bit.
M1M0 =11: chế độ 3: tách Timer.
+Thanh ghi điều khiển Timer (TCON):
Thanh ghi TCON chứa các bit trạng thái và các bit điều khiển cho Timer 0 và
Timer 1.
Bit
Ký hiệu Địa chỉ
Mô tả
TCON.7
TF1
8FH Cờ báo tràn Timer 1, được đặt bởi phần cứng khi
tràn, được xóa bởi phần mềm hoặc phần cứng khi
bộ xử lý chỉ đến chương trình phục vụ ngắt.
TCON.6
TR1
8EH Bit điều khiển Timer 1 chạy. Đặt/ xóa bằng phần
mềm cho Timer chạy / dừng.
TCON.5

TF0
8DH Cờ báo tràn Timer 0.
TCON.4
TR0
8CH Bit điều khiển Timer 0 chạy.
TCON.3
IT1
8BH Cờ ngắt do Timer 1.
TCON.2
IE1
8AH Cờ ngắt 1 bên ngoài.
TCON.1
IT0
89H Cờ ngắt do Timer 0.
TCON.0
IE0
88H Cờ ngắt 0 bên ngoài.
+ Các thanh ghi chứa giá trị của các bộ định thời:
Các Timer 0 và Timer 1 đều là các Timer 16 bit, mỗi Timer có 2 thanh ghi 8 bit
dùng để chứa giá trị khởi tạo hoặc giá trị hiện thời của các Timer. Cụ thể, Timer
0 có TH0 và TL0; Timer 1 có TH1 và TL1. Điểm cần chú ý là các thanh ghi này
không định địa chỉ bit.
TH0 (8 bits)
TL0 (8 bits)
TH1 (8 bits)
TL1 (8 bits)
Timer 0
Timer 1
2.2.4. Port nối tiếp
a. Giới thiệu:

AT89S52 có một Port nối tiếp trong chip có thể hoạt động ở nhiều chế độ khác
nhau, nhiều tốc độ khác nhau. Chức năng chủ yếu của Port nối tiếp là thực hiện
chuyển đổi song song sang nối tiếp với dữ liệu xuất và chuyển đổi nối tiếp sang
song song với dữ liệu nhập để có thể giao tiếp với máy tính qua cổng nối tiếp
hoặc các thiết bịn tương tự.
Port nối tiếp có thể hoạt động song công ( thu và phát đồng thời) và đệm lúc thu
cho phép một ký tự sẽ được thu và được giữ trong khi ký tự thứ hai được nhận.
Nếu CPU đọc ký tự thứ nhất trước khi ký tự thứ hai được thu đầy đủ thì dữ liệu
sẽ không bị mất.
b. Các thanh ghi của Port nối tiếp
Có hai thanh ghi chức năng đặc biệt cho phép phần mềm truy xuất đến port nối
tiếp là: SBUF và SCON.
+ Thanh ghi điều khiển Port nối tiếp (SCON- Serial Controller):
Thanh ghi điều khiển port nối tiếp (SCON) ở địa chỉ 98H là thanh ghi có định


địa chỉ bit, chứa các bit trạng thái và các bit điều khiển liên quan tới port nối tiếp.
Các bit điều khiển đặt chế độ hoạt động cho Port nối tiếp, các bit trạng thái báo
cáo kết thúc việc phát hoặc thu một ký tự. Các bit trạng thái có thể được kiểm
tra bằng phần mềm hoặc có thể được lập trình để tạo ngắt.
Bit
Ký hiệu Địa chỉ
Mô tả
SCON.7
SM0
9FH
Serial Mode 0: Bit 0 chọn 00:chế độ 0
chế độ cho port nối tiếp.
01:chế độ 1
SCON.6

SM1
9EH
Serial Mode 1: Bit 1 chọn 10:chế độ 2
chế độ cho port nối tiếp.
11:chế độ 3
SCON.5
SM2
9DH
Serial Mode 2: Bit 2 chọn chế độ cho port nối
tiếp. Bit này cho phép truyền thông đa xử lý.
SCON.4
REN
9CH
Receive Enable: Bit cho phép thu, REN phải
được đặt bằng 1 để cho phép nhận các ký tự.
SCON.3
TB8
9BH
Transmitted Bit: Bit truyền thứ 9, sử dụng trong
chế độ UART 9 bit.
SCON.2
RB8
9AH
Received Bit: Bit nhận thứ 9, sử dụng trong chế
độ UART 9 bit.
SCON.1
TI
99H
Transmitted Interrupt: Cờ ngắt truyền, TI được
đặt bằng 1 khi kết thúc việc truyền 1 ký tự, TI

được xóa bằng phần mềm.
SCON.0
RI
98H
Received Interrupt: Cờ ngắt nhận, RI được đặt
bằng 1 khi kết thúc việc nhận 1 ký tự, RI được
xóa bằng phần mềm.


Trước khi sử dụng Port nối tiếp phải khởi động SCON để chọn đúng chế độ.
+ Thanh ghi đệm truyền nhận ở Port nối tiếp (SBUF- Serial Buffer):
Thanh ghi này có chức năng đệm các ký tự khi chúng được nhận về từ port nối
tiếp hoặc được truyền đi từ port nối tiếp, việc truyền nhận qua port nối tiếp thực
chất là việc truy xuất thanh ghi này.
c. Trao đổi dữ liệu qua port nối tiếp
Thao tác trao đổi dữ liệu qua port nối tiếp bao gồm 3 thao tác chính sau:
- Khởi tạo cổng nối tiếp: Thao tác này bao gồm các việc như:
+ Truy xuất SCON để đặt các thông số như chế độ hoạt động, cho phép thu...
+ Thiết lập hoặc xóa bit SMOD của thanh ghi PCON để đặt hệ số chia của tốc
độ baud.
+ Truy xuất các thanh ghi của các bộ Timer 1 và Timer 2 để đặt tốc độ baud cho
port nối tiếp (chỉ với chế độ 1 và 3).
- Kiểm tra cờ TI (khi truyền) và kiểm tra cờ RI (khi nhận).
- Ghi/ đọc byte dữ liệu ở SBUF.
2.2.5. Xử lý ngắt
AT89S52 có 6 nguồn ngắt:
- Ngắt ngoài đến từ chân /INT0.
- Ngắt ngoài đến từ chân /INT1.
- Ngắt do bộ Timer 0.
- Ngắt do bộ Timer 1.

- Ngắt do bộ Timer 2.
- Ngắt do Port nối tiếp.
6 nguồn ngắt này được xóa khi Reset và được đặt riêng bằng phần mềm bởi các
bit trong các thanh ghi cho phép ngắt (IE), thanh ghi ưu tiên ngắt (IP).
- Thanh ghi cho phép ngắt IE (Interrupt Enable):
EA
ET2
ES
ET1
EX1
ET0
EX0
Bit
IE.7
IE.6
IE.5
IE.4
IE.3
IE.2
IE.1
IE.0

Ký hiệu
EA
ET2
ES
ET1
EX1
ET0
EX0


Địa chỉ bit
AFH
AEH
ADH
ACH
ABH
AAH
A9H
A8H

Mô tả (1: cho phép; 0: cấm)
Cho phép hoặc cấm toàn bộ.
Không được định nghĩa.
Cho phép ngắt từ Timer 2 (8052).
Cho phép ngắt Port nối tiếp.
Cho phép ngắt từ Timer 1.
Cho phép ngắt ngoài 1.
Cho phép ngắt từ Timer 0.
Cho phép ngắt ngoài 0.

- Thanh ghi ưu tiên ngắt (IP):
Mỗi nguồn ngắt được lập trình riêng để đặt vào một trong hai mức ưu tiên qua
thanh ghi chức năng đặc biệt được địa chỉ bit IP (Interrupt Priority: ưu tiên ngắt)
ở địa chỉ B8H.


-

-


PT2

PS

PT1

PX1

PT0

PX0

Bit
Ký hiệu
Địa chỉ bit
Mô tả (1: mức cao; 0: mức thấp)
IP.7
Không được định nghĩa
IP.6
Không được định nghĩa
IP.5
PT2
BDH
Ưu tiên cho ngắt từ Timer 2
IP.4
PS
BCH
Ưu tiên cho ngắt port nối tiếp.
IP.3

PT1
BBH
Ưu tiên cho ngắt từ Timer 1.
IP.2
PX1
BAH
Ưu tiên cho ngắt ngoài 1.
IP.1
PT0
B9H
Ưu tiên cho ngắt từ Timer 0.
IP.0
PX0
B8H
Ưu tiên cho ngắt ngoài 0.
Các Vector ngắt:
Khi một ngắt nào đó được chấp nhận, giá trị được nạp vào PC được gọi là
Vector ngắt. Nó là địa chỉ bắt đầu của chương trình con phục vụ ngắt ISR
(Interrupt Service Rountine) tương ứng với nguồn tạo ngắt. Các Vector ngắt
được liệt kê như sau:
Ngắt
Cờ
Địa chỉ Vector
Số hiệu
Reset hệ thống
RST
0000H
Bên ngoài 0
IE0
0003H

0
Timer 0
TF0
000BH
1
Bên ngoài 1
IE1
0013H
2
Timer 1
TF1
001BH
3
Port nối tiếp
TI hoặc RI
0023H
4
Timer 2
TX2 hoặc EX2
002BH
5
Khi chỉ đến một ngắt, cờ gây ngắt tự động bị xóa bởi phần cứng, ngoại trừ RI và
TI phải được xóa bởi phần mềm.

CHƯƠNG 2: MẠCH THỰC TẾ VÀ PHẦN MỀM


1. Chương trình nạp chip AT89c4051
#include<REGX51.h>
#include<stdio.h>

#include<math.h>
unsigned int i, j;
// Khai bao bien 2_byte
unsigned char d1, d2, d3, d4; // Khai bao bien 1_byte
unsigned char M[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x00,0x90};// Khai
//bao ma quet 7 doan.
unsigned char N[10];
void hienthi(void)
{
++j;
P3_3=1;
P3_4=1;
P3_5=1;
P3_7=1;
if (j==1)
{
P3_3=0;
P3_4=1;
P3_5=1;
P3_7=1;
P1=M[d1];
// Tra ma 7 thanh cua hang don vi
}
if (j==2)
{
P3_3=1;
P3_4=0;
P3_5=1;
P3_7=1;
P1=M[d2];

// Tra ma 7 thanh cua hang chuc
}
if (j==3)
{
P3_3=1;
P3_4=1;
P3_5=0;
P3_7=1;
P1=M[d3];
// Tra ma 7 thanh cua hang tram
}
if (j==4)
{
j=0;
P3_3=1;
P3_4=1;
P3_5=1;
P3_7=0;
P1=M[d4]; // Tra ma 7 thanh cua hang nghin
}
}
//Ham ngat Timer_0
void ngat_Timer_0 (void) interrupt 1 //Ngat Timer_0
{
TR0=0;
//Dung Timer


TH0=-2000/256;
//Nap lai byte cao

TL0=-2000%256;
//Nap lai byte thap
TR0=1;
//Chay Timer
hienthi();
//Goi ham hien thi
}
void main(void)
{
EA=0;
TMOD=0x21;
SCON=0x52;
TH1=TL1=-3;
TR1=1;
TH0=-2000/256;
//Nap lai byte cao
TL0=-2000%256;
//Nap lai byte thap
ET0=1;
//Ngat Timer_1.
EA=1;
//thanh ghi cho phep su dung cac ngat
TR0=1;
while(1)
//Lap vo tan
{
for (i=1;i<=4;++i)
N[i]=_getkey();
d4=N[4]-0x30;
d3=N[3]-0x30;

d2=N[2]-0x30;
d1=N[1]-0x30;
}
}

2. Chương trình hiển thị trên màn hình máy tính (VB)
'Khai bao cac bien
Dim gio As Integer
Dim phut As Integer
Dim giay As Integer
Dim ngay As Integer
Dim thang As Integer
Dim nam As Integer
Dim N1 As Integer
Dim N2 As Integer
Dim N3 As Integer
Dim N4 As Integer
Private Sub cmdBoqua_Click()
Timer1 = True
cmdBoqua.Enabled = False
cmdCapnhat.Enabled = False
End Sub
Private Sub cmdCapnhat_Click()
Timer1 = True
Time = DTPicker1.Value
Date = DTPicker2.Value
cmdBoqua.Enabled = False
cmdCapnhat.Enabled = False



End Sub
Private Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.Settings = "9600,N,8,1"
MSComm1.InputLen = 0
MSComm1.RThreshold = 1
MSComm1.SThreshold = 0
MSComm1.PortOpen = True
End Sub
Private Sub Timer1_Timer()
Label1.Caption = Time
Label2.Caption = Date
gio = Hour(Time)
phut = Minute(Time)
giay = Second(Time)
ngay = Day(Date)
thang = Month(Date)
nam = Year(Date)
If Option1.Value = True Then
N4 = gio \ 10
N3 = gio Mod 10
N2 = phut \ 10
N1 = phut Mod 10
End If
If Option2.Value = True Then
N4 = phut \ 10
N3 = phut Mod 10
N2 = giay \ 10
N1 = giay Mod 10
End If

If Option3.Value = True Then
N4 = ngay \ 10
N3 = ngay Mod 10
N2 = thang \ 10
N1 = thang Mod 10
End If
If Option4.Value = True Then
N4 = thang \ 10
N3 = thang Mod 10
N2 = ((nam Mod 1000) Mod 100) \ 10
N1 = ((nam Mod 1000) Mod 100) Mod 10
End If
MSComm1.Output = Chr(N1 + 48)
MSComm1.Output = Chr(N2 + 48)
MSComm1.Output = Chr(N3 + 48)
MSComm1.Output = Chr(N4 + 48)
End Sub.

3. Sơ đồ mạch nguyên lý.


5V

5V

5V
20

DIGIT D2


XTAL1

2
C3
33p

Q4
A1015

R6
1k5

5v

1

3
C1-

VCC
T2OUT

7
8

C2-

4

6


15

P1

DG2

D1
LED 7 SEG X 4

1
6
2
7
3
8
4
9
5

C2+

R2IN

V-

GND

R2OUT
T2IN


5

9
10

RXD
TXD

U2
MAX232

C1+

V+

2

10uF/16V

16

DG3

DG1

11

a
b

c
d
e
f
g
dp

10

R7
R8
R9
R10
R11
R12
R13
R14

D Connector 9
C7
C8
10uF/16V 10uF/16V

VDD

5V
1

D2
3


NGUON AC

AC

V+

AC

V-

3

OUT
GND
U3
7805

1

VDD

4

C9
1000uF

C11
104


DIODE BRIDGE

C10
10uF

C12
104

R15
1k5
1

2

3
2
1

IN

2

P2

2

led1

4. Sơ đồ mạch in.
4


2
1
3

2

1

3

1

1

1
2

1

2

1

2

1

2


2

1

3

2

3

1

4

2

1

2

1
2

2

1

1
2


11

1

2

3

1

2

3

1

1

2

2

2
1

1

2

1


20

2

19

1

2

3

18

1

2

12

11

10

9

8

7


1

2

3

4

5

6

5
9

1

1

16

1

2

2

15


2

4

17

1

2

3

14

5

16

1

2

1

4

13

6


15

1

2

2

5

12

7

14

1

2

6

11

8

13

1


2

2

7

10

2

2

9

12

1

2

1

8

9

1

1


10

11

4
8

1

3
7
2
6
1

1

2

10

5. Giao diện trên máy tính.

2

3

1

2


3

DG0

dp
dp

C5
10uF/16V

a
b
c
d
e
f
g

C4
C6
104

3

XTAL
C2
33p

DIGIT D3


1k5

11
7
4
2
1
10
5

1

Y1

10

AT89C2051

Q3
A1015

R5

6

DIGIT D0
DIGIT D1
DIGIT D2
DIGIT D3


1k5

8

P3.3/INT1
P3.4/T0
P3.5/T1
P3.7

Q2
A1015

R3

DG0

RST/VPP

XTAL2

7
8
9
11

DIGIT D1

1k5


9

P3.2/INT0

1

RST

Q1
A1015

R1

DG1

6

DIGIT D0

12

R4
8k2

P3.0/RXD
P3.1/TXD

a
b
c

d
e
f
g
dp

DG2

RXD
TXD
S1

XTAL1
XTAL2

2
3

GND

XTAL1
XTAL2

RST

12
13
14
15
16

17
18
19

P1.0/AIN0
P1.1/AIN1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7

DG3

5
4

VCC

U1
C1
10uf

R2
100





×