You are on page 1of 10

Phần 1: lý thuyết.

CÂU 1:

Các bước lập trình.

1. Cài đặt SCON để tạo chế độ truyền.


2. Cài đặt TMOD và TH1 để tạo tốc độ truyền thích hợp.
3. Cho TR1=1 (chạy timer để tạo tốc độ truyền)
4. Xóa cờ TI (TI=0)
5. Gửi byte cần truyền vào SBUF (SBUF=data)
6. Check TI nếu truyền xong thì quay lại bước 4 để truyền tiếp.

VD:

#include <REGX51.H>

Void init(void)

SCON=0x50; // các bạn xem thêm tài liệu để biết các bit của SCON nhé.

TMOD=0x20; // timer1 chế độ 2

TH1=TL1=0xFD;// tạo tốc độ baud 9600

TR1=1; // cho timer1 chạy

Void main(void)

init();

while(TI==0);

TI=0;

SBUF=0x41;

}
CÂU 2:

_ 8051 có 6 ngắt: reset, ngắt ngoài 0, ngắt timer 0, ngắt ngoài 0, ngắt timer 0, ngắt
truyền thông nối tiếp.

+ Reset: ngắt xảy ra khi mới bật nguồn hay khi có tím hiệu ngắt trên chân
reset (khi có mức cao ít nhất 2 chu kỳ máy trên chân 9), khi xảy ra ngắt bộ đếm
chương trình nhảy về 0000h

+ Ngắt ngoài 0: xảy ra khi có tín hiệu ngắt trên chân INT0 (chân P3.2), khi
xảy ra ngắt bộ đếm chương trình đưa con trỏ đến địa chỉ 0003h

+ Ngắt timer 0: xảy ra khi cờ báo tràn TF0 lên 1, khi xảy ra ngắt bộ đếm
chương trình đưa con trỏ đến địa chỉ 000Bh

+ Ngắt ngoài 1: xảy ra khi có tín hiệu ngắt trên chân INT1 (chân P3.3), khi
xảy ra ngắt bộ đếm chương trình đưa con trỏ đến địa chỉ 0013h

+ Ngắt timer 1: xảy ra khi cờ báo tràn TF1 lên 1, khi xảy ra ngắt bộ đếm
chương trình đưa con trỏ đến địa chỉ 001Bh

+ Ngắt truyền thông: xảy ra khi cờ TI hoặc RI lên 1, khi xảy ra ngắt bộ đếm
chương trình đưa con trỏ đến địa chỉ 0023h

/*************************************************************/

CÂU 3:

_ 1 chu kỳ máy bằng 12 lần chu kỳ thạch anh (Tm=12*Txtal). Với Fxtal=12MHz
 Txtal=1/12MHz  Tm=1/1MHz = 1us.

_ VĐK 8051 thường dùng 2 loại thạch anh là 12MHz và 11.0592MHz.

+ 12MHz: dễ tính toán chu kỳ máy.

+ 11.0592MHz: dùng khi truyền thông nối tiếp, tạo ra tốc độ baud chính xác,
phù hợp với tốc độ của máy tính.

/************************************************************/
CÂU 4:

Port 0 (các chân 32 – 39): là port có 2 chức năng.

- Chức năng I/O (xuất/nhập): Trong các hệ thống điều khiển đơn giản sử dụng bộ
nhớ bên trong không dùng bộ nhớ mở rộng bên ngoài thì port 0 được dùng làm các
đường điều khiển IO (Input- Output). khi dùng chức năng này thì Port 0 phải dùng
thêm các điện trở kéo lên(pull-up), giá trị của điện trở phụ thuộc vào thành phần
kết nối với Port. Khi dng lm ng vo, Port 0 phải được set mức logic 1 trước đó.
- Trong các hệ thống điều khiển lớn sử dụng bộ nhớ mở rộng bên ngoài thì port 0
có chức năng là bus địa chỉ và bus dữ liệu AD7 ÷ AD0. (Address: địa chỉ, data: dữ
liệu)
/*************************************************************/

CÂU 7:

Port1 (chân 1 – 8): chỉ có một chức năng là I/O, không dùng cho mục đích khác.
Port 1 đã có điện trở kéo lên nên không cần thêm điện trở ngoài.Khi dùng làm ngõ
vào, Port 1 phải được set mức logic 1 trước đó. Cổng ra tùy chọn là 0 hay 1.

/***************************************************************/

CÂU 15:

Port 2 (chân 21 – 28): là port có 2 chức năng.

- Chức năng I/O (xuất / nhập): Port 2 đã có điện trở kéo lên nên không cần thêm
điện trở ngoài. Khi dùng làm ngõ vào, Port 2 phải được set mức logic 1 trước đó.
Cổng ra tùy chọn là 0 hay 1.

- Chức năng địa chỉ: dùng làm 8 bit địa chỉ cao khi cần bộ nhớ ngoài có

địa chỉ 16 bit. Khi đó, Port 2 không được dùng cho mục đích I/O.

/***************************************************************/

CÂU 3:

Port 3 (chân 10 – 17): là port có nhiều chức năng.


- Chức năng I/O. Port 2 đã có điện trở kéo lên nên không cần thêm điện trở ngoài.
Khi dùng làm ngõ vào, Port 3 phải được set mức logic 1 trước đó.Cổng ra tùy chọn
là 0 hay 1.

- Chức năng khác mô tả như sau:

Chân Tên Chức năng


P3.0 RXD Nhận dữ liệu nối tiếp
P3.1 TXD Truyền dữ liệu nối tiếp
P3.2 INT0 Ngắt ngoài 0
P3.3 INT1 Ngắt ngoài 1
P3.4 T0 Ngõ vào bộ định thời 0
P3.5 T1 Ngõ vào bộ định thời 1
P3.6 WR Tín hiệu điều khiển ghi dữ liệu lên bộ nhớ ngoài.
P3.7 RD Tín hiệu điều khiển đọc từ bộ nhớ dữ liệu ngoài.

/*************************************************************/

CÂU 5:
Thanh ghi TMOD (TIMER MODE)

GATE1 C/T1 M11 M01 GATE0 C/T0 M10 M00

_GATE0: bit mở cồng.

+nếu GATE0=0: khởi động bộ định thời bằng phần mềm(đưa TR0 lên mức
1)

+nếu GATE0=1: khởi động bộ định thời bằng phần cứng (đưa TR0 và chân
INT0 lên mức 1)

_ C/T0:
+C/T0=0: đếm bằng xung ngoài tại chân T0(P3.4). tức là khi có xung tác
động vào T0 thì TH0 và TL0 tăng lên 1 đơn vị.

+ C/T0=1: đếm bằng xung dao động nội. Tức là khi chu kỳ máy tăng thì
TH0 và TL0 tăng theo.
_ M10 và M00: 2 bit dùng để chọn chế độ.

M10 M00 Chế độ


0 0 Chế độ 13 bít (thanh ghi TH0 và 5 bit thấp thanh ghi TL0)
0 1 Chế độ 16 bit (dùng cả 2 thanh ghi TH0 và TL0)
1 0 Chế độ 8 bit tự nap lại giá trị (khi tràn thì giá trị TH0 sẽ tự nạp lại
vào TL0)
1 1 Không dùng

4 bít cao tương tự nhé.

/*****************************************************************/

CÂU 6:

8051 có 2 bộ định thời: timer0 và timer1. Chức năng giống nhau nên ta sẽ tìm hiểu
1 bộ timer0 còn timer1 tương tự.

_ Các thanh ghi liên quan đến timer0: TMOD, TCON, TH0,TL0.

+ TMOD dùng để chọn chế độ hoạt động cho timer (như trình bày ở câu 5)

+ TH0 và TL0: là 2 thanh ghi chứa giá trị đếm của timer0.

+ TCON: thanh ghi điều khiển timer.


TCON:

TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

Ta chỉ xét 4 bit cao, còn 4 bit thấp dùng cho ngăt.
+ TF0: là cờ báo tràn timer0. Mỗi khi giá trị thanh ghi đếm tràn thì TF0 tự
động nhảy lên mức 1.

+ TR0: dùng để dừng hoặc chạy bộ timer.

Nếu TR0=0: timer0 dừng. Nếu TR0=1 thì timer sẽ chạy.

/*************************************************************/

CÂU 8:
Thanh ghi IE:

EA - ET2 ES ET1 EX1 ET0 EX0


EA: cấm hoặc cho phép tất cả ngắt. Khi EA=0 thì không có 1 ngắt nào được thực
hiện. Khi EA=1 thì các ngắt được sự dụng hay không do các bit tương ứng còn lại
quy định.

EX0: dùng cho ngắt ngoài 0. Nếu EX0=0 thì ngắt ngoài 0 ko đc sử dụng. Nếu
EX0=1 thì cho phép ngắt ngoài xảy ra khi có tín hiệu ngắt trên chân INT0.

Tương tự với các bit còn lại.

ET0: dùng cho ngắt timer0

EX1: dùng cho ngắt ngoài 1

ET1: dùng cho ngắt timer1

ES: dùng cho ngắt truyền thông

ET2: dùng cho ngắt timer2 của 8052.

VD: cho phép ngắt ngoài 0, ngắt ngoài 1, ngắt timer 1

IE=10001101B; hay IE=0x19;

/*****************************************************************/

CÂU 10:

Các bước lập trình.


1. Cài đặt SCON để tạo chế độ nhận.
2. Cài đặt TMOD và TH1 để tạo tốc độ thích hợp.
3. Cho TR1=1 (chạy timer để tạo tốc độ)
4. Xóa cờ RI (RI=0)
5. Check RI nếu nhận xong thì RI=1và SBUF đã có dữ liệu, ta cất dữ liệu vào
nơi nào đó rồi quay lại bước 4 để nhận tiếp.

VD:

#include <REGX51.H>

char dl;

Void init(void)

SCON=0x50; // các bạn xem thêm tài liệu để biết các bit của SCON nhé.

TMOD=0x20; // timer1 chế độ 2

TH1=TL1=0xFA;// tạo tốc độ baud 4800

TR1=1; // cho timer1 chạy

Void main(void)

init();

while(RI==0);

RI=0;

dl=SBUF;

CÂU 11: 2 trường hợp :

+ vào ra cả cổng
+vào ra từng bít.

Để lập trình vào ra qua cổng. Ta xác định các chân trên Port là chân vào hay ra rồi
gán giá trị cho nó. Nếu là cổng vào thì ta phải đặt nên mức cao(1). Nếu là cồng ra
thì ta đặt nó ở mức thấp(0).

+ Phối hợp cả phương pháp vào và ra là kĩ thuật đọc sửa ghi. Vào ra cả cổng nhưng
muốn giữ nguyên 1 số bit.

/*******************************************************/

CÂU 12:

Để lập trình bộ đếm của timer:

_ đưa bít C/Tx=1;

_ xác định các bit M1x và M0x để chọn chế độ đếm.

_ thiết lập giá trị đếm ban đầu cho timer qua thanh ghi THx và TLx. Nếu không thì
mặc định sẽ đếm từ 0.

_ đưa bit TRx=1 để cho phép bộ đếm hoạt động.

VD

#include <REGX51.H> //khai báo thư viện 89x51

main() //chương trình chính

TMOD=0x60; //0x60=0110 000 : C/T=1, bộ đếm 1, chế độ 2 tự nạp

TH1=0x00; //xóa bộ đếm ban đầu

P3_5=1; //set chân vào cho bộ đếm

TR1=1; //khởi động bộ đếm 1

while(1) //vòng lặp vô hạn

{
P2=TL1; //hiển thị số đếm được ra cổng P2

/**************************************************************/

CÂU 13:

_ Xác định tần số UART: tần số uart bằng tần số chu ký máy chia cho 32. Mà tần
số chu kỳ máy lại bằng tần số thạc anh chia cho 12.

Fuart=Fxtal:(12x32).

Fxtal=11,0592MHz.  Fuart= 11059200/(12x32)=28800Hz=28,8KHz

Baud= Fuart*2MOD/(256-val)

 val= 256- Fuart*2MOD/Baud

Baud=4800, giả thiết MOD=0  val=256- (28800/8400=250) 


TH1=250=0xFA;

/*************************************************************/

CÂU 14:

Các tham số chính của 8051.

-4 KB PEROM (Flash Programmable and Erasable Read Only Memory), có

khả năng tới 1000 chu kỳ ghi xoá

- Tần số hoạt động từ: 0Hz đến 24 MHz

- 128 Byte RAM nội.

- 4 Port xuất /nhập I/O 8 bit.

- 2 bộTimer/counter 16 Bit.
- 6 nguồn ngắt.

- Giao tiếp nối tiếp điều khiển bằng phần cứng.

- 64 KB vùng nhớ mã ngoài

- 64 KB vùng nhớ dữ liệu ngoài.

- Cho phép xử lý bit.

Sự giống và khác nhau cơ bản giữa 8031, 8051, 8052

Đặc tính 8031 8051 8052


ROM trên chip 0K 4K 8K
(byte)
RAM (byte) 128 128 256
Bộ định thời 2 2 3
Ngắt 6 6 8
Chân vào ra 32 32 32
Cổng nối tiếp 1 1 1

You might also like