You are on page 1of 72

Câu 1 các thanh ghi liên quan đến Timer/Counter của 8051

Tên thanh ghi Tên đầy đủ Chức năng


TCON Timer control Điều khiển
TMOD Timer mode Chọn chế độ
TH0 Timer High 0 Byte cao của bộ định thời T0
TL0 Timer Low 0 Byte thấp của bộ định thời T0
TH1 Timer High 1 Byte cao của bộ định thời T1
TL1 Timer Low 1 Byte thấp của bộ định thời T1

Muốn sử dụng timer 0 ở chế độ 2 , counter 1 ở chế độ 1 thì thanh ghi TMOD có giá trị bằng
bao nhiêu?
TMOD= 0101 0010 (0x52)

Câu 2.
A, sơ đồ khối

Thiết bị ngoại vi sử dụng trong hệ thống :

 Cảm biến LM35


 IC chuyển đổi ADC 0804
 Alarm
 lCD

Nguyên lý và các bước thực hiện tính toán đo giá trị:


Nối đầu vào của LM35 với chân Vin+ của ADC. do cảm biến LM35 chỉ xuất đc tín hiệu tương tự ta dung
ADC 0804 để chuyển đổi tín hiệu tương tự sang tín hiệu số. Để tính toán đo giá trị nhiệt độ, ta sẽ tính
điện áp ra Vout.
Vout =(read ADC x 5)/255 ( tín hiệu LM35 là 5V nên nhân 5)
 Nhiệt độ = Vout/10(mv) = (read ADC x 500)/255

Chú ý: read ADC: giá trị đọc của ADC


Câu 1: Các thành phần chính của 8051:

OSC Bộ phát xung nhịp đồng bộ cho hệ thống, max: 24Mhz


quyết định tốc độ xử lý của 8051 (liên quan đến thời gian/lệnh, Timer,
Interrupt);
ROM Bộ nhớ chương trình (lưu các mã lệnh của chương trình),
RAM Bộ nhớ dữ liệu (lưu trữ dữ liệu tạm thời, thanh ghi đặc biệt)

TIMER/COUNTER Bộ đếm thời gian/bộ đếm xung

Interrupt Control khối điều khiển ngắt

BUS Control khối điều khiển các Bus địa chỉ (Address Bus), Bus dữ liệu (Address Data), Bus
điều khiển (Control Bus).
I/O Port Cổng vào/ra (P0, P1, P2, P3: 8 bit ~ 8 chân).
Serial port Cổng truyền thông nối tiếp
cpu Bộ xử lý của vi điều khiển
Câu 2
A, sơ đồ khối
TH XUNG
CẢNH BÁO

(led đơn)
TỐC ĐỘ

encoder

ĐỂ thực hiện hệ thống trên các ngoại vi cần dung là:


Encoder ( đo tốc độ)
Led đơn ( cảnh báo)
C, Nguyên lý:
Sử dụng timer 1 ở chế độ 1 dùng counter để đếm xung của encoder.
Sử dụng timer 0 định thời gian ngắt (ts) tgian này được lập trình để có thể thay đổi
tùy vào mục đích ý đồ người sử dụng nhưng ta nên chọn Ts sao cho việc tính toán tộc
độ độgn cơ là đơn giản nhất;
Giả sử trong Ts được xác định bởi bộ định thời timer 0 thì timer 1 ở chế độ Counter 1
đếm được Count-xung, chu kỳ của xung là:
T = Ts/Count (s)
 Tốc độ n= 60f/N = 60.Count/N.Ts
Để tính toán độgn cơ được dễ dàng, ta chọn:
60/N.Ts = 1 lúc đó n= Count (v/s)
Thay N = 360 => Ts = 0,17 s
 Chỉ cần hiển thị số Count ( số xung)
Chú thích: Ts : thời gian ngắt
N : xung/vòng
CÁC THANH LIÊN QUAN ĐẾN NGẮT CỦA 8051
Thanh ghi TCON : chứa các cờ ngắt timer, cờ ngắt ngoài, và bti lựa chọn kiểu ngắt ngoài.
Scon : chứa các cờ ngắt truyền thông nối tiếp
IE : thanh ghi cho phép ngắt
IP : thanh ghi ưu tiên ngắt
CÁC LOẠI NGẮT

CÁC LOẠI NGẮT CỜ NGẮT STT NGẮT


RESET
Ngắt ngoài 0 IE0 0
Timer 0 TF0 1
Ngắt ngoài 1 IE1 2
Timer 1 TF1 3
Ngắt truyền thông RI/TI 4

đếm số sản phẩm trên bang tải với cảm biến quang sử dụng ngắt timer.

Câu 2.
A, sơ đồ khối
Thiết bị ngoại vi sử dụng trong hệ thống :

 Cảm biến LM35


 IC chuyển đổi ADC 0804
 Alarm
 lCD

Nguyên lý và các bước thực hiện tính toán đo giá trị:


Nối đầu vào của LM35 với chân Vin+ của ADC. do cảm biến LM35 chỉ xuất đc tín hiệu tương tự ta dung
ADC 0804 để chuyển đổi tín hiệu tương tự sang tín hiệu số. Để tính toán đo giá trị nhiệt độ, ta sẽ tính
điện áp ra Vout.
Vout =(read ADC x 5)/255 ( tín hiệu LM35 là 5V nên nhân 5)
 Nhiệt độ = Vout/10(mv) = (read ADC x 500)/255

Chú ý: read ADC: giá trị đọc của ADC


Câu 1: Các thành phần chính của 8051:

OSC Bộ phát xung nhịp đồng bộ cho hệ thống, max: 24Mhz


quyết định tốc độ xử lý của 8051 (liên quan đến thời gian/lệnh, Timer,
Interrupt);
ROM Bộ nhớ chương trình (lưu các mã lệnh của chương trình),

RAM Bộ nhớ dữ liệu (lưu trữ dữ liệu tạm thời, thanh ghi đặc biệt)
TIMER/COUNTER Bộ đếm thời gian/bộ đếm xung

Interrupt Control khối điều khiển ngắt

BUS Control khối điều khiển các Bus địa chỉ (Address Bus), Bus dữ liệu (Address Data), Bus
điều khiển (Control Bus).
I/O Port Cổng vào/ra (P0, P1, P2, P3: 8 bit ~ 8 chân).
Serial port Cổng truyền thông nối tiếp
cpu Bộ xử lý của vi điều khiển
Câu 2.
A, sơ đồ khối

Thiết bị ngoại vi sử dụng trong hệ thống :

 Cảm biến LM35


 IC chuyển đổi ADC 0804
 Alarm
 lCD

Nguyên lý và các bước thực hiện tính toán đo giá trị:


Nối đầu vào của LM35 với chân Vin+ của ADC. do cảm biến LM35 chỉ xuất đc tín hiệu tương tự ta dung
ADC 0804 để chuyển đổi tín hiệu tương tự sang tín hiệu số. Để tính toán đo giá trị nhiệt độ, ta sẽ tính
điện áp ra Vout.
Vout =(read ADC x 5)/255 ( tín hiệu LM35 là 5V nên nhân 5)
 Nhiệt độ = Vout/10(mv) = (read ADC x 500)/255

Chú ý: read ADC: giá trị đọc của ADC


Câu 1: Các thành phần chính của 8051:

OSC Bộ phát xung nhịp đồng bộ cho hệ thống, max: 24Mhz


quyết định tốc độ xử lý của 8051 (liên quan đến thời gian/lệnh, Timer,
Interrupt);
ROM Bộ nhớ chương trình (lưu các mã lệnh của chương trình),

RAM Bộ nhớ dữ liệu (lưu trữ dữ liệu tạm thời, thanh ghi đặc biệt)

TIMER/COUNTER Bộ đếm thời gian/bộ đếm xung

Interrupt Control khối điều khiển ngắt

BUS Control khối điều khiển các Bus địa chỉ (Address Bus), Bus dữ liệu (Address Data), Bus
điều khiển (Control Bus).

I/O Port Cổng vào/ra (P0, P1, P2, P3: 8 bit ~ 8 chân).
Serial port Cổng truyền thông nối tiếp
cpu Bộ xử lý của vi điều khiển
Câu 2
A, sơ đồ khối
TH XUNG
CẢNH BÁO

(led đơn)
TỐC ĐỘ

encoder

ĐỂ thực hiện hệ thống trên các ngoại vi cần dung là:


Encoder ( đo tốc độ)
Led đơn ( cảnh báo)
C, Nguyên lý:
Sử dụng timer 1 ở chế độ 1 dùng counter để đếm xung của encoder.
Sử dụng timer 0 định thời gian ngắt (ts) tgian này được lập trình để có thể thay đổi
tùy vào mục đích ý đồ người sử dụng nhưng ta nên chọn Ts sao cho việc tính toán tộc
độ độgn cơ là đơn giản nhất;
Giả sử trong Ts được xác định bởi bộ định thời timer 0 thì timer 1 ở chế độ Counter 1
đếm được Count-xung, chu kỳ của xung là:
T = Ts/Count (s)
 Tốc độ n= 60f/N = 60.Count/N.Ts
Để tính toán độgn cơ được dễ dàng, ta chọn:
60/N.Ts = 1 lúc đó n= Count (v/s)
Thay N = 360 => Ts = 0,17 s
 Chỉ cần hiển thị số Count ( số xung)
Chú thích: Ts : thời gian ngắt
N : xung/vòng
Câu 1: Các thành phần chính của 8051:

OSC Bộ phát xung nhịp đồng bộ cho hệ thống, max: 24Mhz


quyết định tốc độ xử lý của 8051 (liên quan đến thời gian/lệnh, Timer,
Interrupt);
ROM Bộ nhớ chương trình (lưu các mã lệnh của chương trình),

RAM Bộ nhớ dữ liệu (lưu trữ dữ liệu tạm thời, thanh ghi đặc biệt)

TIMER/COUNTER Bộ đếm thời gian/bộ đếm xung

Interrupt Control khối điều khiển ngắt

BUS Control khối điều khiển các Bus địa chỉ (Address Bus), Bus dữ liệu (Address Data), Bus
điều khiển (Control Bus).
I/O Port Cổng vào/ra (P0, P1, P2, P3: 8 bit ~ 8 chân).
Serial port Cổng truyền thông nối tiếp
cpu Bộ xử lý của vi điều khiển
Câu 2.
A, sơ đồ khối

Thiết bị ngoại vi sử dụng trong hệ thống :

 Cảm biến LM35


 IC chuyển đổi ADC 0804
 Alarm
 lCD

Nguyên lý và các bước thực hiện tính toán đo giá trị:


Nối đầu vào của LM35 với chân Vin+ của ADC. do cảm biến LM35 chỉ xuất đc tín hiệu tương tự ta dung
ADC 0804 để chuyển đổi tín hiệu tương tự sang tín hiệu số. Để tính toán đo giá trị nhiệt độ, ta sẽ tính
điện áp ra Vout.
Vout =(read ADC x 5)/255 ( tín hiệu LM35 là 5V nên nhân 5)
 Nhiệt độ = Vout/10(mv) = (read ADC x 500)/255

Chú ý: read ADC: giá trị đọc của ADC


CÁC THANH LIÊN QUAN ĐẾN NGẮT CỦA 8051
Thanh ghi TCON : chứa các cờ ngắt timer, cờ ngắt ngoài, và bti lựa chọn kiểu ngắt ngoài.
Scon : chứa các cờ ngắt truyền thông nối tiếp
IE : thanh ghi cho phép ngắt
IP : thanh ghi ưu tiên ngắt
CÁC LOẠI NGẮT

CÁC LOẠI NGẮT CỜ NGẮT STT NGẮT


RESET
Ngắt ngoài 0 IE0 0
Timer 0 TF0 1
Ngắt ngoài 1 IE1 2
Timer 1 TF1 3
Ngắt truyền thông RI/TI 4

đếm số sản phẩm trên bang tải với cảm biến quang sử dụng ngắt timer.

Câu 2
A, sơ đồ khối
TH XUNG
CẢNH BÁO

(led đơn)
TỐC ĐỘ

encoder

ĐỂ thực hiện hệ thống trên các ngoại vi cần dung là:


Encoder ( đo tốc độ)
Led đơn ( cảnh báo)
C, Nguyên lý:
Sử dụng timer 1 ở chế độ 1 dùng counter để đếm xung của encoder.
Sử dụng timer 0 định thời gian ngắt (ts) tgian này được lập trình để có thể thay đổi
tùy vào mục đích ý đồ người sử dụng nhưng ta nên chọn Ts sao cho việc tính toán tộc
độ độgn cơ là đơn giản nhất;
Giả sử trong Ts được xác định bởi bộ định thời timer 0 thì timer 1 ở chế độ Counter 1
đếm được Count-xung, chu kỳ của xung là:
T = Ts/Count (s)
 Tốc độ n= 60f/N = 60.Count/N.Ts
Để tính toán độgn cơ được dễ dàng, ta chọn:
60/N.Ts = 1 lúc đó n= Count (v/s)
Thay N = 360 => Ts = 0,17 s
 Chỉ cần hiển thị số Count ( số xung)
Chú thích: Ts : thời gian ngắt
N : xung/vòng
Câu 1: Các thành phần chính của 8051:

OSC Bộ phát xung nhịp đồng bộ cho hệ thống, max: 24Mhz


quyết định tốc độ xử lý của 8051 (liên quan đến thời gian/lệnh, Timer,
Interrupt);
ROM Bộ nhớ chương trình (lưu các mã lệnh của chương trình),

RAM Bộ nhớ dữ liệu (lưu trữ dữ liệu tạm thời, thanh ghi đặc biệt)

TIMER/COUNTER Bộ đếm thời gian/bộ đếm xung

Interrupt Control khối điều khiển ngắt

BUS Control khối điều khiển các Bus địa chỉ (Address Bus), Bus dữ liệu (Address Data), Bus
điều khiển (Control Bus).
I/O Port Cổng vào/ra (P0, P1, P2, P3: 8 bit ~ 8 chân).
Serial port Cổng truyền thông nối tiếp
cpu Bộ xử lý của vi điều khiển

Câu 2
A, sơ đồ khối
TH XUNG
CẢNH BÁO

(led đơn)
TỐC ĐỘ

encoder

ĐỂ thực hiện hệ thống trên các ngoại vi cần dung là:


Encoder ( đo tốc độ)
Led đơn ( cảnh báo)
C, Nguyên lý:
Sử dụng timer 1 ở chế độ 1 dùng counter để đếm xung của encoder.
Sử dụng timer 0 định thời gian ngắt (ts) tgian này được lập trình để có thể thay đổi
tùy vào mục đích ý đồ người sử dụng nhưng ta nên chọn Ts sao cho việc tính toán tộc
độ độgn cơ là đơn giản nhất;
Giả sử trong Ts được xác định bởi bộ định thời timer 0 thì timer 1 ở chế độ Counter 1
đếm được Count-xung, chu kỳ của xung là:
T = Ts/Count (s)
 Tốc độ n= 60f/N = 60.Count/N.Ts
Để tính toán độgn cơ được dễ dàng, ta chọn:
60/N.Ts = 1 lúc đó n= Count (v/s)
Thay N = 360 => Ts = 0,17 s
 Chỉ cần hiển thị số Count ( số xung)
Chú thích: Ts : thời gian ngắt
N : xung/vòng
1. Vi xử lý 8051 chia thành 2 không gian bộ nhớ
 Bộ nhớ chương trình (ROM)
 Bộ nhớ dữ liệu (RAM).
( ROM : Dùng để lưu trữ chương trình điều khiển cho chip 8051 hoạt động
Có 4kb ROM trong, địa chỉ truy xuất: 000h – fffh)
RAM dùng để lưu trữ các dữ liệu và tham số.
Có 128byte Ram Trong, địa chỉ truy xuất 00H – 7FH

 Thanh ghi A là thanh ghi quan trọng, dùng để lưu trữ các toán hạng và kết quả của phép tính. có
độ dài 8 bits, có địa chỉ là E0H
 Thanh ghi B ở địa chỉ F0H, được dùng với thanh ghi A để thực hiện các phép toán số học. Khi
thực hiện lệnh chia với thanh ghi A. Ngoài ra thanh ghi B còn được dùng như một thanh ghi đệm
có nhiều chức năng.
 Con trỏ ngăn xếp SP là một thanh ghi có địa chỉ 81H, dùng quản lí và xử lí các nhóm dữ liệu
liên tục.Giá trị mặc định của SP là 07H.
 Con trỏ dữ liệu DPTR thường được sử dụng khi truy xuất dữ liệu từ bộ nhớ ROM hoặc bộ nhớ từ
bên ngoài.
Dưới đây là những bước hoạt động của timer ở chế độ 1:

 Đây là bộ định thời 16 bit, do vậy nó cho phép các giá trị 0000 đến FFFFHđược nạp vào các
thanh ghi TL và TH của bộ định thời.
 Sau khi TL và TH được nạp một giá trị khởi tạo 16 bit thì bộ định thời phải được khởi động.
Điều này được thực hiện bởi việc SET bit TR0 đối vớiTimer 0 và SET bit TR1 đối
với Timer 1.
 Sau khi bộ định thời được khởi động, nó bắt đầu đếm lên. Nó đếm lên cho đến khi đạt được
giới hạn FFFFH của nó. Sau đó, khi nó quay từ FFFFH về 0000thì nó bật lên bit
cờ TF được gọi là cờ bộ định thời. Cờ bộ định thời này có thể được hiển thị. Khi cờ bộ định
thời này được thiết lập, để dừng bộ định thời: ta thực hiện xóa các bit TR0 đối với Timer
0 hoặc TR1 đối với Timer 1. Ở đây cũng cần phải nhắc lại là đối với mỗi bộ định thời đều có
cờ TF riêng của mình: TF0 đối với Timer 0 và TF1 đối với Timer 1.
 Sau khi bộ định thời đạt được giới hạn của nó là giá trị FFFFH, muốn lặp lại quá trình thì
các thanh ghi TH và TL phải được nạp lại với giá trị ban đầu và cờTF phải được xóa về 0
Câu 2
a, Sơ đồ khối

ENCONDER VXL LCD

b, Phân bố ngoại vi:

 Encoder
 Hiển thi lcd ( led 7 thanh)
 Đồng hồ đo xung
C, giả sử đường kính truyền động là 10mm
pi=3,14
 chu vi hình tròn= pi x d= 31,4mm
mà số xung/vòng= 100 xung
 số mm/xung= 31,4/100= 0,314mm
 1 xung -> 0,314mm
 X xung ->H/1000 m
 H= x/1000

Đề 1
A, Nguyên lý đo nhiệt độ, đề xuất phương pháp xử lý tín hiệu ra từ lm35 và tính toán nhiệt độ
-Nguyên lý đo nhiệt độ : Sử dụng cảm biến nhiệt độ lm35 để đo nhiệt độ, lm35 sẽ đo nhiệt độ
môi trường và xuất giá trị Analog dạng điện áp 0-1.5V ,tuy nhiên giá trị điện áp này khá nhỏ, để
tăng độ chính xác ta đưa tín hiệu điện áp này qua khối chuẩn hóa rồi đến khối ADC đến VXL để
VXl có thể đọc, tính toán được giá trị nhiệt độ để hiển thị và cảnh báo

B,Sơ đồ khối

C,Thuật toán dự kiến:


Return data
ĐỀ 3

A, Nguyên lý đo nhiệt độ, đề xuất phương pháp xử lý tín hiệu ra từ lm35 và tính toán nhiệt độ
-Nguyên lý đo nhiệt độ : Sử dụng cảm biến nhiệt độ lm35 để đo nhiệt độ, lm35 sẽ đo nhiệt độ
môi trường và xuất giá trị Analog dạng điện áp 0-1.5V ,tuy nhiên giá trị điện áp này khá nhỏ, để
tăng độ chính xác ta đưa tín hiệu điện áp này qua khối chuẩn hóa rồi đến khối ADC đến VXL để
VXl có thể đọc, tính toán được giá trị nhiệt độ để hiển thị và cảnh báo

B,Sơ đồ khối

C,Thuật toán dự kiến:


Return Data

ĐỀ 4
A,Nguyên lý đo, phương pháp xử lý tín hiệu và tính toán chiều dài
-Encoder được gắn đồng trục với trục quay của máy cắt, gọi đường kính trục quay là D. Khi tấm tôn đi
qua và trục quay, encoder sẽ bắt đầu đếm xung ,Khi trục quay quay được 1 vòng thì enconder cũng quay
được 1 vòng = 100 xung, và chiều dài của tấm tôn đi qua bằng với chu vi của trục quay C= Pi*D
 Ta đưa chân tín hiệu của encoder vào chân ngắt ngoài của VXL để đếm xung. VD số xung đếm được
là P
Chiều dài tấm tôn L = P/100*C (m)
B,Sơ đồ khối

-Khối cảm biến: Encoder gắn đồng trục với trục quay để chuyển đổi giá trị độ dài ( Không điện), thành tín
hiệu xung ( điện ) sau đó gửi đến
-Khối vi điều khiển để tính toán giá trị chiều dài và xuất tín hiệu lến khối LED 7 thanh để hiển thị,giám
sát
C.Lưu đồ thuật toán
ĐỀ 6
A,Nguyên lý đo mức, Phương pháp xử lý tín hiệu ra từ cảm biến và tính toán mức
-Hệ thống sử dụng cảm biến mức ( Dạng que) có đầu ra dạng Analog ( Điện áp) từ 0-2,5V tương ứng với
chiều cao của mức nước 0-5m. Do tín hiệu ra của cảm biển nhỏ  Cho tín hiệu đó đưa qua khối chuẩn
hóa tín hiệu về 0-5V. Sau đo đưa qua khối ADC 0804 để chuyển đổi về tín hiệu số 0-255 để vi xử lý có
thể đọc và tính toán ra mực nước để hiển thị lên LCD
B,

C.lưu đồ thuật toán


Return data
ĐỀ 7

A,Nguyên lý đo lưu lượng và xác định các tín hiệu điều khiển xuất từ vđk đến các ngoại vi
- Hệ thống đo lưu lượng trên sử dụng cảm biến lưu lượng với dải đo 0-15 lít/s tương ứng với ngõ ra
dạng xung vuông có tần số 0-1kHz. TÍn hiệu từ cảm biến sẽ được đưa vào chân ngắt ngoài 0 P3.2
để đọc và xử lý, tính toán ra giá trị của lưu lượng
- Các tín hiệu điều khiển xuất từ VĐK tới các ngoại vi gồm:
+ Tín hiệu điều khiển các led 7 thanh theo phương pháp quét led để hiện thị giá trị lưu lượng
+ Tín hiệu điều khiển led đơn để cảnh báo khi giá trị lưu lượng vượt ngưỡng 14l/s
B, Sơ đồ khối

-Khối cảm biển: Nhận biết và chuyển đổi tín hiệu lưu lượng ( KHông điện ) thành tín hiệu dạng xung
( Điện) để vi điều khiển có thể nhận biết và tính toán được
-Khối vi điều khiển: Nhận tín hiệu từ cảm biến để tính toán, xuất tín hiệu đến led 7 thanh và led đơn để
hiển thị và cảnh báo
-Khối hiển thị, cảnh báo: Hiển thị giá trị lưu lượng để giám sát, quản lý cũng như cảnh báo khi giá trị lưu
lượng vượt ngưỡng cho phép
Khối cảnh báo:
ĐỀ 12
A,Nguyên lý đo mức, Phương pháp xử lý tín hiệu ra từ cảm biến và tính toán mức
-Hệ thống sử dụng cảm biến mức ( Dạng que) có đầu ra dạng Analog ( Điện áp) từ 0-5V tương ứng với
chiều cao của mức nước 0-5m. . Sau đo đưa qua khối ADC 0804 để chuyển đổi về tín hiệu số 0-255 để vi
ử lý có thể đọc và tính toán ra mực nước để hiển thị lên LCD
B,SƠ ĐỒ KHỐI

C.lưu đồ thuật toán


ĐỀ 13
A, Nguyên lý đo nhiệt độ, đề xuất phương pháp xử lý tín hiệu ra từ lm35 và tính toán nhiệt độ
-Nguyên lý đo nhiệt độ : Sử dụng cảm biến nhiệt độ lm35 để đo nhiệt độ, lm35 sẽ đo nhiệt độ
môi trường và xuất giá trị Analog dạng điện áp 0-1.5V ,tuy nhiên giá trị điện áp này khá nhỏ, để
tăng độ chính xác ta đưa tín hiệu điện áp này qua khối chuẩn hóa rồi đến khối ADC đến VXL để
VXl có thể đọc, tính toán được giá trị nhiệt độ để hiển thị và cảnh báo

B,Sơ đồ khối

C,Thuật toán dự kiến:


ĐỀ 15

A, Nguyên lý đo nhiệt độ, đề xuất phương pháp xử lý tín hiệu ra từ lm35 và tính toán nhiệt độ
-Nguyên lý đo nhiệt độ : Sử dụng cảm biến nhiệt độ để đo nhiệt độ, Cảm biếnsẽ đo nhiệt độ môi
trường và xuất giá trị Analog dạng điện áp 0-5V ,ta đưa tín hiệu điện áp này qua khối ADC đến
VXL để VXl có thể đọc, tính toán được giá trị nhiệt độ để hiển thị
-Để tính toán giá trị nhiệt độ
+ Vin = data*Vref/255
1V=a (độC)= 160 độ C
 Nhiệt độ: T= 160*data*5/255
 Data là dữ liệu đọc từ ADC

B, Sơ đồ khối

C,Lưu đồ thuật toán


HIỂN THỊ LCD
HIỂN THỊ LED 7 THANH
Lập trình giao tiếp hiển thị màn hình LCD và led 7 thanh
LCD kí tự LCD1602 .
Mục đích:
 Xây dựng công cụ hiển thị trực quan, dễ dàng trong việc hiển thị các thông báo, các
thông số ( nhiệt độ, số đếm…), là công cụ gỡ lỗi chương trình cực kì hữu dụng.

Nguyên
tắc:
 LCD thực chất là 1 màn hình đi kèm IC điều khiển chuyên dụng. Việc hiển thị lên LCD
chẳng qua chỉ là việc giao tiếp với IC điều khiển đó, và IC sẽ tự đảm nhiệm phần công
việc đưa các dữ liệu hiển thị lên màn hình. Việc giao tiếp với LCD là dạng giao tiếp song
song. Có 2 chế độ giao tiếp 8 bít và 4 bít. Với codevisionAVR sẽ cấu hình giao tiếp chế
độ 4 bit.
 Mỗi kí tự trên màn hình được cấu tạo từ một ma trận điểm 5x7 ( 5 cột, 7 hàng) như hình
bên, chữ b được hiển thị dưới dạng ma trận.
 Khả năng hiển thị : 2 hàng, mỗi hàng có thể hiển thị được 16 kí tự (1602)

Tìm hiểu về màn hình LCD 1602.


Có tất cả 16 chân bao gồm
 Chân 1 : nguồn âm
 Chân 2 : nối với +5V
 Chân 3: Nối với biến trở để điều khiển độ tương phản
 Chân 4: Chân RS là chân chọn thanh ghi lệnh (0) hay thanh ghi dữ liệu (1).
 Chân 5: Chân RW : mức 1 tương ứng với việc đọc dữ liệu từ LCD, mức 0 tương ứng với
việc ghi dữ liệu lên LCD
 Chân 6 : chân EN : chân cho phép thao tác với LCD, Xung tích cực từ 1->0
 Chân 7 đến 14 : 8 chân dữ liệu D0-D7
 Chân 15 và 16 : chân cấp nguồn cho đèn nền LCD, thường 1 trong 2 chân được nối với
biến trở để điều khiển độ sáng đèn nền.

Các kí tự có thể hiển thị trên LCD1602 ( theo bảng mã ascii)
Các hàm trong điều khiển LCD:
lcd_gotoxy(unsigned char x, Hàm định tọa độ X là giá trị vị trí theo chiều ngang (0-
unsigned char y) con trỏ trong LCD >15), y là giá trị theo chiều dọc (0-
>1)
lcd_putchar(char c) Ghi một kí tự lên C là kí tự cần hiển thị, VD chữ ‘A’
LCD
lcd_puts(char *str) Ghi một chuỗi kí *str là một chuỗi kí tự ( lưu trong bộ
tự lên LCD nhớ RAM)
lcd_clear(void) Hàm xóa LCD
lcd_init() Hàm khởi tạo LCD
 Lưu ý : Xem thêm tài liệu Datasheet LCD1602 để hiểu rõ hơn về giao tiếp và điều khiển
loại màn hình này.
1. Viết lại chương trình thực hiện hiển thị giá trị của biến đếm counter ( giống ví dụ số
2) nhưng tổ chức chương trình theo các chương trình con.
o 1 chương trình con tăng biến counter và kiểm tra giá trị của nó
o 1 chương trình con tách số
o 1 chương trình con hiển thị các giá trị vừa tách.
2. Có 6 phím đầu vào ( P.3_0 đến P3_6) . Viết chương trình quét phím và hiển thị số thứ
tự của phím lên LCD. VD nếu phím 1 được bấm sẽ hiển thị “Nut 1”, nếu phím 2 được
bấm sẽ hiển thị “ Nut 2”.
3. Viết chương trình hiển thị số lần bấm phím lên LCD. Với phím bấm nối vào P3_0.
4. Khi hiển thị số đếm Counter lên màn hình, nếu số đếm <10 ta sẽ thấy số hiển thị trên
màn hình là 008, 009… nếu số đếm <100 sẽ hiển thị như 045, 046.. Hãy viết chương
trình loại bỏ các số 0 thừa khi hiển thị trên màn hình.
Thảo luận : Xây dựng lưu đồ giải thuật chương trình.
Hãy xem xét đoạn chương trình hiển thị số đếm counter lên màn hình LCD. Phân tích các công
việc của đoạn mã cho bài tập này ta thấy:
1. Phải khai báo biến, xác lập cho việc hiển thị LCD.
2. Thực hiện việc đếm tăng biến
3. Thực hiện tách số cần đếm thành những kí tự đơn
4. Hiển thị lên màn LCD
5. Lặp lại từ bước thứ 2.
Ta có thể xây dựng được 1 lưu đồ, miêu tả quá trình thực hiện bài toán như sau:

Bắt đầu (main)

Khai báo các biến, giá trị


của biến
Khởi tạo ngoại vi

Gọi chương trình con quét phím

Lưu đồ giải thuật này mô tả lại thứ tự công việc thực hiện trong vòng main (chương trình
chính).
Gọi chương trình con tách số
 Từng chương trình con lại có thể viết ra lưu đồ thuật toán riêng, ví dụ như sau sẽ nêu ra
lưu đồ giải thuật cho việc quét phím đầu vào.

Gọi chương trình con hiển thị


Quét phím

Lặp lạiCó
bước
nút2bấm ? Sai

Đúng

Tăng biến counter


Kết thúc
 Việc viết lưu đồ giải thuật, đối với các chương trình con có thể không cần thiết tuy nhiên
nếu một chương trình lớn, với nhiều hàm con, thực hiện nhiều công việc khác nhau thì
viết lưu đồ giải thuật là việc nên làm. Ở lưu đô, tùy mức độ chi tiết sẽ thể hiện thuật toán,
thể hiện cách thức thực hiện một bài toán như thế nào.
 Nhiều khi, chỉ cần nhìn vào lưu đồ giải thuật ta sẽ biết bài lập trình có đúng hay không.
 Đây là công cụ hữu ích cho việc thuyết trình một bài lập trình, hướng dẫn cho một người
khác viết chương trình...sẽ giúp mình và người khác có cái nhìn tổng quan về bài toán và
có thể đánh giá được phương hướng lập trình thực hiện bài toán có đúng hay không.

Thảo luận : Hiển thị LED 7 thanh


 Cấu tạo led 7 thanh:
 Gồm 7 thanh đoạn và 1 dấu chấm
(thập phân).
 Mỗi thanh đoạn đó là 1 bóng led, mỗi
led có 1 cực điều khiển, được đánh thứ
tự từ a->f, và tất cả chúng có 1 cực
chung. Nếu cực chung này là cực
dương của các bóng led, nó là led
dương chung, nếu là cực âm đó là led
âm chung.
 Muốn hiển thị số nào, ta chỉ cần bật
các led tương ứng để chúng sáng lên tạo thành số cần hiển thị.

Nếu có led 7 thanh loại dương chung ( cực dương của các bóng led trong đó được nối chung
với nhau và nối với cực A, chân số 3 và 8 của led). Như thế, muốn led sáng được ta phải có 2
điều kiện:
 Đưa mức 0 tương ứng với số cần hiển thị vào các thanh đoạn a,b,c,d,e,f,g
 Đưa mức 1 vào cực dương chung ( chân số 3 và 8 của led)

VD: hiển thị số 2 lên màn hình 7 thanh, ta sẽ đưa vào các thanh đoạn a->g như sau:
 abcdefgh=00100101( dạng nhị phân) đồng thời đưa mức 1 vào cực dương chung.
7 3
a A
6 8
b A
4
c
2
d
1
e
9
f
10
g
5
DP
DS?

Cùng nhận xét bài lập trình hiển thị số 0 ra led 7 thanh. ( loại led đơn)
 Cực dương chung của led được nối P3 các thanh đoạn được nối vào P2.
 Mảng font_7seg có 10 phần tử, chứa mã led 7 thanh của các số từ 0 đến 9. Mảng này là 1
mảng hằng số. Vị trí của các phần tử trong mảng được đánh số từ 0 đến 9. Phần tử số 0
chứa mã led 7 của số 0, phần tử số 1 chứa mã led 7 của số 1….
 Muốn truy cập đến phần tử nào ta phải dùng chỉ số của nó trong mảng. VD, muốn lấy mã
của số 8 ra để hiển thị trên màn hình, ta truy cập thông qua vị trí số 8 trong bảng mã, số 8
trong ngoặc chỉ thị vị trí thứ 8 trong bảng mã led 7 thanh như sau:
o P2=font_7seg[8]; - Lấy mã 7 thanh của số 8 trong bảng mã 7 thanh gán ra P2 để
hiển thị
 Ta cũng có thể gán trực tiếp mã led của số cần hiển thị ra led 7 thanh:
o P2=0b00000011; - Hiển thị số 0
 Cần lưu ý việc lập mã led 7 thanh, cần xem xét lại mạch kết nối như thế nào. Nếu bít cao
nhất của P2 nối với thanh a của led, mã số 0 sẽ là 0b00000011, nếu bít thấp nhất nối với
thanh a của led thì mã số 0 sẽ là 0b11000000.
 Quét led 7 thanh:

Quét led 7 thanh:


 Với 1 LED 7 thanh, việc hiển thị, hiển nhiên là rất dễ, nhưng với nhiều led 7 thanh, việc
hiển thị sẽ khó khăn hơn. Thử nghĩ xem mỗi led 7 thanh cần đến 9 chân của vi điều khiển
( 8 chân cho các dữ liệu a->h và 1 chân dương- hoặc âm – chung). Nếu cũng cách nối
như vậy sẽ cần đến 36 chân vi điều khiển riêng cho việc hiển thị 7 thanh.
 Ở đây, ta dùng phương pháp quét led và lợi dụng hiệu ứng lưu ảnh trên võng mạc 24
hình/ giây.
 Tất cả các thanh a của các led nối với nhau, thanh b nối với nhau…và nối tới vi điều
khiển, tổng cộng mất 8 chân. Mỗi chân dương chung của 1 led s ẽ được nối tới 1 chân của
vi điều khiển. Như thế, với 4 led 7 thanh ta sẽ cần dùng 12 chân vi điều khiển.
 Từng LED trong 4 led 7 thanh này sẽ được gán dữ liệu và được bật lên. Tại một thời
điểm, chỉ có duy nhất 1 led sáng ( theo ý ta) mà thôi, hiểu cách khác khi 1 led 7 thanh
đang hiển thị thì các led khác sẽ tắt. Chẳng hạn ta muốn hiển thị số 1234, cách làm như
sau:
o Đưa dữ liệu mã led số 1 ra, bật chân cho phép của led 1, giữ cho nó sáng rồi tắt đi.
o Kế tiếp, đưa mã led số 2 ra, bật chân cho phép của led 2, giữ cho nó sáng rồi tắt
đi… cứ thế đến hết 4 led.
 Việc hiển thị như thế, tưởng rằng màn hình led sẽ nhấp nháy, nhưng với tốc độ của chíp
cực cao, đủ để bật và tắt các led >24 hình/ giây làm cho mắt ta không phân biệt được và
chỉ có cảm giác rằng các led sáng cùng 1 thời điểm.
 Việc bật tắt led liên tục như thế gọi là việc quét led. Nguyên lý này có thể áp dụng cho
điều khiển bảng led ma trận, với giả sử rằng mỗi cột trên bảng led ma trận tương ứng với
một led 7 thanh.

+5
U1 +5
3
19 20
2 OE VCC
1
1 DIR +5 Q1
I/O32J1 2 18 11 12 R14 A1
A1 B1 a A1
I/O31 GND 3 17 7 9 1K
A2 B2 b DIG1 DIG2 DIG3 DIG4 A2
I/O30 4 16 4 8
A3 B3 c DP3 A3 +5 Q2
I/O29 5 15 2 6
A4 B4 d A4 R2
I/O28 6 14 1 A2
A5 B5 e
I/O27 7 13 10 1K
A6 B6 f DP2
I/O26 8 12 5
A7 B7 g +5 Q3
I/O25 9 11 3
A8 B8 DP R3 A3
10 DS1 1K
GND
+5 Q4
74HC245AD
GND R4 A4
1K
7SEG

Một vài điểm cần chú ý:


 Do tích hợp IC điều khiển, màn hình Lcd có khả năng hiển thị tất cả các kí tự, kể cả các
kí tự không có trên bàn phím ( chữ có dấu, tiếng việt, tiếng trung…) trong khi đó màn
hình led 7 chỉ hiện thị được các số và một vài kí tự đơn giản.
 Màn hình Lcd, chỉ cần cấp dữ liệu lên 1 lần, và sau đó nó tự hiển thị không cần đến vi
điều khiển. Trong khi đó, với led 7 ta phải thực hiện liên tục việc quét led để đảm bảo nó
luôn hiển thị đúng.
Chủ đề 4 :
Ngắt ngoài
Mục đích:
 Bình thường muốn kiểm tra trạng thái tín hiệu ở 1 chân đầu vào của vi điều khiển, chúng
ta thường dùng lệnh if : VD if ( P 30 =¿ 0 ) … , đây còn được gọi là phương pháp thăm dò
( Polling). Bằng các câu lệnh phần mềm, chúng ta kiểm tra được trạng thái tín hiệu ở đầu
vào. Với cách này, vi điều khiển phải luôn thực thi lệnh, luôn mất thời gian liên tục kiểm
tra trạng thái chân cổng.
 Với phương pháp ngắt, bộ vi điều khiển không mất thời gian kiểm tra trạng thái chân
cổng, bởi ngắt là 1 ngoại vi phần cứng của nó, hoạt động độc lập với vi điều khiển. Khi
xảy ra ngắt ( giống như khi ta bấm nút nối vào chân PINE.2) bộ vi điều khiển lập tức
dừng toàn bộ hoạt động của nó trong vòng main, và rồi sau đó thực hiện đoạn chương
trình, do chúng ta đã ấn định trong bài lập trình.

Hoạt động:
Để dễ hình dung hoạt động của một ngắt chúng ta xem xét 2 ví dụ sau:
 Trong một lớp học, giáo viên đang giảng bài rất say sưa, sinh viên chăm chú nghe
giảng, chính là vòng (main) hay đó là chương trình chính trong bài lập trình. Nếu
không có chuyện gì xảy ra, giáo viên cứ tiếp tục công việc của mình và sinh viên vẫn cứ
chăm chú nghe giảng cho đến hết giờ. Đột nhiên mất điện. Các sinh viên nói chuyện
rầm rầm trong lớp, giảng viên cũng ngừng không giảng nữa. Khi nào có điện, giáo viên
lại tiếp tục bài giảng của mình ( tiếp tục từ lúc mất điện), và sinh viên lại chăm chú nghe
giảng.Thời điểm mất điện là không được báo trước, nó xảy ra đột ngột. Việc sinh
viên ồn ào khi mất điện, đó là điều tất nhiên sẽ xảy ra, đã biết trước. Có thể coi việc
mất là 1 sự kiện ngắt, nó ngắt tạm thời việc giảng dạy của giáo viên. Sau khi có điện
trở lại, giáo viên sẽ lại tiếp tục bài giảng của mình đúng thời điểm đang giảng lúc
trước.Việc giáo viên ngừng giảng và học sinh nói chuyện là chương trình phục vụ
ngắt.
 Bộ vi điều khiển 8051 thường có 2 nguồn ngắt ngoài tại chan P3.2 và P3.3
Chương trình ví dụ mẫu
Thảo luận : Ngắt và đáp ứng ngắt.
 Nếu dùng ngắt, khi có tín hiệu cảm biến thì bộ vi xử lý sẽ tự nó dừng toàn bộ công việc
đang làm và lập tức tắt bơm nước – một cách hoàn toàn tự động- và không bao giờ xảy ra
tình trạng bể nước đầy tràn.
 Như thế, với những ứng dụng cần phải đáp ứng nhanh nhạy, với những công việc cần độ
ưu tiên cao, việc sử dụng ngắt là cực kì hiệu quả.
 Với những công việc cần sự tuần tự, lặp lại liên tục sau 1 khoảng thời gian nhất định ta
sẽ cần đến ngắt timer, VD như bạn muốn nhấp nháy 1 bóng đèn báo mỗi giây 1 lần, hoặc
phát một xung có tần số cố định nào đó.

Chủ đề 5 :

Timer trong 8051


Có thể nói đây là phần ngoại vi khó nhất của vi điều khiển 8051.
Timer/Counter là các ngoại vi
độc lập với bộ xử lý. Chức năng chính
của các bộ Timer/Counter, cũng như
tên gọi của chúng, là các bộ định thì
( tạo ra một khoảng thời gian, đếm
thời gian…) và đếm sự kiện.. Chế độ
hoạt động thông thường nhất của
timer là chế độ đếm thời gian dựa trên
thạch anh trên chíp.
Thạch anh trên chíp, ngoài việc
cung cấp dao động cho bộ CPU hoạt động còn được dùng để cung cấp cho bộ Timer/Counter.
Tần số hoạt động, hay sự đếm nhanh, chậm của timer hoàn toàn phụ thuộc vào thạch anh trong
chế độ này. Chúng ta hãy xem đối với thạch anh 12MHZ được dùng trong hệ thống
 1 dao động : là khoảng thời gian nhỏ nhất mà dao động lặp lại trạng thái trước đó của
1
nó.Chu kỳ của dao động là khoảng thời gian xảy ra 1 dao động f = trong đó, F là tần số
T
và T là chu kỳ dao động.
 Tần số dao động của thạch anh là 12MHZ hay nói cách khác, nó tạo ra 1 triệu dao động
trong 1 giây. Đối với CPU của chíp, mỗi một dao động sẽ làm CPU thực hiện 1 phép tính
số học và như thế, trong 1 giây, CPU của chíp 8051 có thể tính toán được 1 triệu phép
tính.
 Tần số thạch anh trước khi vào đến bộ timer/Counter sẽ la 1.000.000 (hz). Thời gian tồn
tại của 1 xung trong trường hợp này sẽ là
1(s ) 1(s) 1000000 (micro giây)
f= hay T = = =1(μs−micro giây)
T f 1000000(hz)
 Trong bộ đếm timer/counter có 2 thanh ghi giá trị , nếu là timer 0 thì đó là thanh ghi TH0
và TL0 và đều là thanh ghi 8 bít. Tổng hợp 2 thanh ghi này ta được 1 thanh ghi 16 bit tạm
gọi là T0. như thế giá trị cao nhất có thể có của thanh ghi này 216−1=65535 ( tương ứng
với 65536 giá trị từ 0 đến 65535).
 Mỗi một xung đầu vào timer/counter sẽ làm cho bộ đếm timer/Counter tăng lên 1 đơn vị,
hay mỗi xung này sẽ làm giá trị của thanh ghi T0 tăng lên 1 đơn vị. Khi giá trị của T0
tăng lên đến đỉnh ( giá trị 65535) thì nó lại quay trở lại giá trị thấp nhất =0.
 Như thế, để thanh ghi T0 tăng đến giá trị cao nhất, bắt đầu từ giá trị 0 thì nó cần tới
65536 dao động, hay nói cách khác, nó cần tới 65536 x 1 ( μs )=65536(μs )~65ms.
Có thể biểu diễn hoạt động của Timer/Counter bằng biểu đồ như sau:

 Giá trị của thanh ghi T0 được biểu


thị bằng đường thẳng đậm. Giá trị
của nó tăng từ 0 đến giá trị cao nhất
65535, sau đó lại khởi động từ giá
trị 0. Như thế, khoảng thời gian t để
giá trị của thanh ghi T0 thực hiện
mỗi một chu kỳ là 65,536ms.
 Ở sơ đồ thứ 2 này, giá trị của thanh
ghi T0 tăng từ 0 đến 65536 và sau
khi nó tràn ( tại thời điểm 65536)
thì tức khắc được nạp một giá trị
khác là 55536 khiến cho bộ timer
lại tiếp tục đếm tăng…cứ thế nó sẽ
hoàn tất mỗi một chu kỳ đếm của nó
trong 10000 chu kỳ máy hay 10ms.
Giá trị nạp lại (55536) là một giá trị
bất kỳ do người dùng tự tính toán sao cho phù hợp, và được thực hiện bằng phần mềm.
 Mỗi khi bộ timer đếm tràn (thời điểm vượt qua giá trị 65535 trở về 0) sẽ tạo ra 1 ngắt
timer.

C. Vi điều khiển AT89s52


1. Đặc điểm chung
Các đặc điểm của chip AT89S52 được tóm tắt như sau:
 8 KByte bộ nhớ có thể lập trình nhanh, có khả năng tới 1000 chu kỳ ghi/xoá
 Tần số hoạt động từ: 0Hz đến 24 MHz
 3 mức khóa bộ nhớ lập trình
 3 bộ Timer/counter 16 Bit
 128 Byte RAM nội.
 4 Port xuất /nhập I/O 8 bit.
 Giao tiếp nối tiếp.
 64 KB vùng nhớ mã ngoài
 64 KB vùng nhớ dữ liệu ngoại.
 4 s cho hoạt động nhân hoặc
chia

1.5 Chân EA

EA có nghĩa là truy cập ngoài


(External Access): là chân số 31 trên vỏ kiểu
DIP.
1.6 Chân PSEN

PSEN là chân đầu ra cho phép cất


chương trình (Program Store Enable) trong hệ
thống. Trên vi điều khiển 8031, chương trình
được cất ở bộ nhớ ROM ngoài thì chân này được nối tới chân OE của ROM.

1.7 Chân ALE

Chân cho phép chốt địa chỉ ALE là chân đầu ra tích cực cao. Khi nối 8051 tới bộ nhớ ngoài thì
cổng P0 dùng để trao đổi cả địa chỉ và dữ liệu. Hay nói cách khác 8051 dồn cả địa chỉ và dữ liệu qua
cổng P0 để tiết kiệm số chân. Chân ALE được sử dụng để phân kênh địa chỉ và dữ liệu.
2. Các chân cổng
Port 0: từ chân 32 ðến chân 39 (P0.0 _P0.7). Port 0 có 2 chức nãng: trong các thiết kế
cỡ nhỏ không dùng bộ nhớ mở rộng nó có chức nãng nhý các ðýờng IO, ðối với thiết kế lớn
có bộ nhớ mở rộng nó ðýợc kết hợp giữa bus ðịa chỉ và bus dữ liệu.
Port 1: từ chân 1 ðến chân 9 (P1.0 _ P1.7). Port 1 là port IO dùng cho giao tiếp với
thiết bị bên ngoài nếu cần.

Port 2: từ chân 21 ðến chân 28 (P2.0 _P2.7). Port 2 là một port có tác dụng kép dùng
nhý các ðýờng xuất/nhập hoặc là byte cao của bus ðịa chỉ ðối với các thiết bị dùng bộ nhớ
mở rộng.

Port 3: từ chân 10 ðến chân 17 (P3.0 _ P3.7). Port 3 là port có tác dụng kép. Các chân
của port này có nhiều chức nãng, có công dụng chuyển ðổi có liên hệ ðến các ðặc tính ðặc
biệt của 89S52 nhý ở bảng sau:

Bit Tên Chức năng chuyển đổi

P3.0 RXD Ngõ vào dữ liệu nối tiếp.


P3.1 TXD Ngõ xuất dữ liệu nối tiếp.
P3.2 INT0 Ngõ vào ngắt cứng thứ 0.
P3.3 INT1 Ngõ vào ngắt cứng thứ 1.
P3.4 T0 Ngõ vào TIMER/ COUNTER thứ 0.
P3.5 T1 Ngõ vào của TIMER/ COUNTER thứ 1.
P3.6 WR Tín hiệu ghi dữ liệu lên bộ nhớ ngoài.
P3.7 RD Tín hiệu đọc bộ nhớ dữ liệu ngoài.

3. Các thanh ghi Timer

TÊN THANH GHI TÁC DỤNG ĐỊA CHỈ ĐỊA CHỈ HÓA BIT

TCON Điều khiển các bộ đếm – định thời 88h Có

TMOD Chọn kiểu cho các bộ đếm – định thời 89h Không

TL0 Byte thấp của timer 0 8Ah Không

TL1 Byte thấp của timer 1 8Bh Không

TH0 Byte cao của timer 0 8Ch Không

TL0 Byte cao của timer 1 8Dh Không

 Thanh ghi TMOD:


Là thanh ghi dùng để chọn chế độ cho các bộ timer.

BIT TÊN TIMER/ TÁC DỤNG


COUNTER

7 GATE 1 GATE=0 :Timer 1 bật khi TR1=1. GATE=1 :Timer 1 bật khi TR1=1
và chân INT1=1

6 C/T 1 C/T=1 : Chọn đếm sự kiện. C/T=0 : Chọn ghi giờ cho timer 1

5 M1 1 Bit 1 chọn kiểu của timer 1

4 M0 1 Bit 0 chọn kiểu của timer 1

3 GATE 0 GATE=0 :Timer 0 bật khi TR0=1. GATE=1 :Timer 0 bật khi TR0=1
và chân INT0=1

2 C/T 0 C/T=1 : Chọn đếm sự kiện. C/T=0 : Chọn ghi giờ cho timer 0

1 M1 0 Bit 1 chọn kiểu của timer 0

0 M0 0 Bit 0 chọn kiểu của timer 0

Các chế độ của timer

M1 M0 CHẾ ĐỘ MÔ TẢ

0 0 0 Chế độ timer 13 bit. Nghĩa là timer sử dụng 5 bit TH và 8 bit TL

0 1 1 Chế độ timer 16 bit. Nghĩa là timer sử dụng 8 bit TH và 8 bit TL

1 0 2 Chế độ timer 8 bit, còn TH dùng để nạp lại giá trị khởi đầu cho TL khi
TL tràn

1 1 3 TL0 và TH0 được sử dụng như hai timer độc lập. TL0 được điều khiển
bằng các bit của timer 0,TH0 được điều khiển bằng các bit timer 1.

 Thanh ghi TCON:


Là thanh ghi dùng để khởi động và điều khiển các bộ timer. Thanh ghi này được địa chỉ hoá các
bit.

BIT KÍ HIỆU ĐỊA CHỈ TÁC DỤNG

TCON.7 TF1 8Fh Bit tràn của timer 1. Khi xảy ra tràn, TF1 tự động bật lên.
( timer
Flag)

TCON.6 TR1 8Eh Bit điều khiển bật tắt bộ timer 1

TCON.5 TF0 8Dh Bit tràn của timer 0. Khi xảy ra tràn, TF0 tự động bật lên.

TCON.4 TR0 8Ch Bit điều khiển bật tắt bộ timer 0

TCON.3 IE1 8Bh Cờ cạnh ngắt ngoài 1. Được bật khi có cạnh xuống ở chân
INT1. Được xoá khi thoát khỏi ngắt cứng định hướng đến thủ
tục phục vụ ngắt ngoài 1.

TCON.2 IT1 8Ah Cờ kiểu ngắt 1 ngoài. Nếu cờ này bật, ngắt ngoài sẽ được kích
hoạt khi có cạnh xuống ở chân INT1. Nếu không thì ngắt
ngoài sẽ được bật khi có mức thấp ở chân INT1.

TCON.1 IE0 89h Cờ cạnh ngắt ngoài 0 Được bật khi có cạnh xuống ở chân
INT0. Được xoá khi thoát khỏi ngắt cứng định hướng đến thủ
tục phục vụ ngắt ngoài 0.

TCON.0 IT0 88h Cờ kiểu ngắt 0 ngoài. Nếu cờ này bật, ngắt ngoài sẽ được kích
hoạt khi có cạnh xuống ở chân INT0. Nếu không thì ngắt
ngoài sẽ được bật khi có mức thấp ở chân INT0.

 Thanh ghi THx và TLx


Các thanh ghi cơ sở của bộ định thời.
Cả hai bộ định thời Timer 0 và Timer 1 đều có độ dài 16 bít được truy cập như hai thanh
ghi tách biệt byte thấp và byte cao. Chúng ta sẽ bàn riêng về từng thanh ghi.
Các thanh ghi của bộ Timer 0.
Thanh ghi 16 bít của bộ Timer 0 được truy cập như byte thấp và byte cao. Thanh ghi
byte thấp được gọi là TL0 (Timer 0 bow byte) và thanh ghi byte cao là TH0 (Timer 0

Các thanh ghi của bộ Timer 1.


Bộ định thời gian Timer 1 cũng dài 16 bít và thanh ghi 16 bít của nó được chia ra thành
hai byte là TL1 và TH1. Các thanh ghi này được truy cập và đọc giống như các thanh ghi của bộ
Timer 0 ở trên.

4. Các thanh ghi cờ ngắt

TÊN THANH GHI TÁC DỤNG ĐỊA CHỈ ĐỊA CHỈ HÓA BIT

IE Thanh ghi cho phép ngắt Có

IP Thanh ghi ưu tiên ngắt có

Khi Reset thì tất cả mọi ngắt đều bị cấm (bị che), có nghĩa là không có ngắt nào được bộ
vi điều khiển đáp ứng nếu chúng được kích hoạt. Các ngắt phải được cho phép bằng phần mềm
để bộ vi điều khiển có thể đáp ứng được. Có một thanh ghi được gọi là cho phép ngắt (Interrupt
Enable) chịu trách nhiệm về việc cho phép (không che) và cấm (che) các ngắt.

Thanh ghi IE

BIT KÍ HIỆU ĐỊA CHỈ TÁC DỤNG

IE.7 EA Bit cho phép ngắt tổng


EA=0 thì không ngắt nào được nhận.
EA=1 thì từng nguồn ngắt sẽ được mở hoặc
cấm bằng cách bật hoặc xóa bit cho phép tương ứng.
IE.6 - - -

IE.5 ET2 Bit enable hoặc disable ngắt tràn của Timer2

IE.4 ES ES=0 thì không cho phép ngắt nối tiếp.


ES=1 cho phép ngắt nối tiếp.
IE.3 ET1 Bit enable hoặc disable ngắt tràn của Timer0.
ET1=0 Không dùng ngắt timer 1
ET1=1 có dùng ngắt timer 1
IE.2 EX1 Bit enable hoặc disable ngắt ngòai 1.
EX0=0 Không cho phép ngắt ngoài 1
EX0=1 Cho phép ngắt ngoài 1
IE.1 ET0 Bit enable hoặc disable ngắt tràn của Timer0.
ET0=0 Không dùng ngắt timer 0
ET0=1 có dùng ngắt timer 0
IE.0 EX0 Bit enable hoặc disable ngắt ngòai 0.
EX0=0 Không cho phép ngắt ngoài 0
EX0=1 Cho phép ngắt ngoài 0

Mỗi một nguyên nhân ngắt được lập trình riêng để có một trong hai mức ưu tiên thông
qua thanh ghi chức năng đặc biệt được định địa chỉ bit, thanh ghi ưu tiên ngắt IP (interrupt
priority), thanh ghi này có địa chỉ byte là 0B8H như mô tả dưới đây.

Thanh ghi IP

BIT KÍ HIỆU ĐỊA CHỈ TÁC DỤNG

IE.5 PT2 ưu tiên cho ngắt bộ định thời 2.

IE.4 PS ưu tiên cho ngắt port nối tiếp.

IE.3 PT1 ưu tiên cho ngắt bộ định thời 1.

IE.2 PX1 ưu tiên cho ngắt ngòai 1.

IE.1 PT0 ưu tiên cho ngắt do bộ định thời 0.

IE.0 PX0 ưu tiên cho ngắt ngoài 0.

Khi hệ thống được thiết lập lại trạng thái ban đầu, thanh ghi IP sẽ mặc định đặt tất cả
các ngắt ở mức ưu tiên thấp. Ý tưởng “các mức ưu tiên” cho phép một trình phục vụ ngắt được
tạm thời dừng bỏi một ngắt khác nếu ngắt mới này có mức ưu tiên cao hơn mức ưu tiên của ngắt
hiện đang được phục vụ. Điều này hoàn toàn hợp lý đối với 8051 vì ta chỉ có 2 mức ưu tiên. Nếu
có ngắt với mức ưu tiên cao xuất hiện, trình phục vụ ngắt cho ngắt có mức ưu tiên thấp phải
tạm dừng (nghĩa là bị ngắt). Ta không thể tạm dừng một chương trình phục vụ ngắt có mức ưu
tiên cao.
Chương trình chính do được thực thi ở mức nền và không được kết hợp với một ngắt nào
nên luôn luôn bị ngắt cho dù các ngắt này có mức ưu tiên thấp hay cao. Nếu có 2 ngắt với mức
ưu tiên ngắt khác nhau xuất hiện đồng thời, ngắt có ưu tiên cao sẽ được phục vụ trước.

Nếu có 2 ngắt có cùng mức ưu tiên xuất hiện đồng thời, chuỗi vòng cố định sẽ xác định
ngắt nào được phục vụ trước. Chuỗi vòng này sẽ là: ngắt ngoài 0, ngắt do bộ định thời 0, ngắt
ngoài 1, ngắt do bộ định thời 1, ngắt do port nối tiếp, ngắt do bộ định thời 2.

5. Vecto ngắt

Khi một ngắt được chấp nhận, giá trị được nạp cho bộ đếm chương trình được gọi là
vector ngắt. Vector ngắt là địa chỉ bắt đầu của trình phục vụ ngắt của nguyên nhân ngắt tương
ứng. Các vector ngắt được cho ở bảng sau.

Ngắt do Cờ Địa chỉ vector


Reset hệ thống RST 0000H
Ngắt ngoài 0 IE0 0003H
Bộ định thời 0 TF0 000BH
Ngắt ngoài 1 IE1 0013H
Bộ định thời 1 TF1 001BH
Port nối tiếp RI hoặc T1 0023H
Bộ định thời 2 TF2 hoặc EXF2 002BH

6.. Các thanh ghi truyền thông nối tiếp

THANH GHI KÍ HIỆU ĐỊA CHỈ TÁC DỤNG

SCON PT2 ưu tiên cho ngắt bộ định thời 2.

SBUF PS ưu tiên cho ngắt port nối tiếp.

Thanh ghi SCON : Thanh ghi xác lập truyền thông

BIT KÍ HIỆU ĐỊA CHỈ TÁC DỤNG

SCON.7 SM0 9Fh Chế độ mode 1

SCON.6 SM1 9Eh Chế độ mode 1

SCON.5 SM2 9Dh Chế độ đa Master

SCON.4 REN 9Ch Cho phép nhận


SCON.3 TB8 9Bh Bít truyền, 9 bít trong chế độ truyền 2 và 3

SCON.2 RB8 9Ah Bít nhận, 9 bít trong chế độ nhận 2 và 3

SCON.1 TI 99h Cờ truyền. Giá trị sẽ tự set lên 1 khi đã truyền xong byte

SCON.0 RI 98h Cờ nhận. Giá trị sẽ tự set lên 1 khi đã nhận xong 1 byte

Riêng các bít SM0, SM1:

SM0 SM1 Mode Chế độ Baurate

0 0 0 8-bit Shift Register Oscillator / 12

0 1 1 8-bit UART Set by Timer 1 (*)

1 0 2 9-bit UART Oscillator / 32 (*)

1 1 3 9-bit UART Set by Timer 1 (*)

Thanh ghi SBUF : Thanh ghi bộ đệm truyền / nhận

Đây là thanh ghi giá trị truyền/ nhận của 8051. Nó vừa dùng làm bộ đệm truyền – Khi
muốn truyền đi 1 byte giá trị, hoặc là 1 bộ đệm nhận- sau khi nhận được 1 byte truyền về, giá
trị của byte sẽ được lưu trong nó.
Lưu đồ thuật toán bài toán đo ADC0808 /0804 hiển thị led 7 thanh
HÀM MAIN
KHỞI TẠO ADC0808
-Clock: Cấp cung
-ADDA,B,C; Chọn địa chỉ Analog ngõ vào
-ALE : Chốt địa chỉ Analog ngõ vào
-Start : Ra lệnh cho ADC bắt đầu chuyển đổi
-EOC( End of change): Kết thúc quá trình chuyển đổi
-OE (OUTPUT Enable): Cho phép mở đệm đầu ra để đọc kết quả
-Đầu ra của ADC0808 max=OUT1  OUT 8. Ngược với 8051: Max=P3.7 P3.0
DÙNG ADC0804 HIỂN THỊ LCD
Lưu đồ thuật toàn bài toán sử dụng ngắt ngoài và ngắt
timer
SƠ ĐỒ KHỐI
-Chức năng các khối:
+Khối cảm biến : Đo nhiệt độ và xuất tín hiệu Analog (Volt) đến chân của ADC0808 để đọc.
+Khối ADC 0808: Đọc tín hiệu tương tự từ cảm biến chuyển đổi thành tín hiệu số để VXL có thể hiểu và
tính toán.
+Khối vi điều khiển 8051: Nhận tín hiệu Digital từ khối ADC ,xử lý, tính toán ra giá trị thực. Điểu khiển
các led 7 thanh(Màn hình LCD),led đơn…, để hiển thị,cảnh báo giá trị đo.
+Khối LCD(led 7 thanh): Hiển thị giá trị đo từ cảm biến để giám sát
+Khối thạch anh (12Mhz): tạo xung clock cấp cho vi xử lý

You might also like