You are on page 1of 53

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG

KHOA KỸ THUẬT ĐIỆN TỬ

------------o0o-----------

BÀI THỰC HÀNH


MÔN KỸ THUẬT VI XỬ LÝ

NGÀNH HỌC: ĐIỆN-ĐIỆN TỬ VÀ ĐIỆN TỬ-VIỄN THÔNG

ĐỐI TƯỢNG: ĐẠI HỌC

NGUYỄN QUỐC UY

-HÀ NỘI, 2016-


MỤC LỤC
Chuẩn bị 1:DOWNLOAD và cài đặt KeilC lập trình với 8051
Chuẩn bị 2: DOWNLOAD và cài đặt Protus 8.1 SP1
Bài 0:Bài mở đầu.
Bài 1: Hướng dẫn tạo project với KeilC lập trình 8051.
Bài 2:: Hướng dẫn tạo project với phần mềm Protus 8.1 SP1 và nạp code
mô phỏng .
Bài 3:Tổng quan cách khai báo biến,hằng và các kiểu dữ liệu rong ngôn
ngữ C.
Bài 4: Lập trình nháy LED đơn với 8051.
Bài 5:Lập trình LED 7 thanh với 8051 .
Bài 6: Lập rình LED Martrix với 8051.
Bài 7: Lập trình nút nhấn với 8051.
Bài 8:Lập trình điều khiển IC 74HC595.
Bài 9: Lập trình Bộ đếm -Bộ định thời(Timer/Counter) trong 8051.
Bài 10: Lập trình ngắt trong 8051.
BÀI MỞ ĐẦU
TỔNG QUAN VỀ VĐK 8051&MÔ PHỎNG TRÊN PROTUS

Hôm nay chúng ta sẽ đến với những kiến thức cơ bản về vi điều khiển 8051

1.Đối tượng tham gia học tập:


 Sinh viên đam mê lập trình nói chung và đam mê lập trình vi điều khiển nói
riêng.
 Sinh viên muốn qua kì thi “Kỹ thuật vi xử lí”
2.Yêu cầu:
 Có ý thức Tự học tập, tự nghiên cứu.
 Sinh viên đã hiểu biết cơ bản ít nhất một ngôn ngữ lập trình C.
 Chăm chỉ hoàn thành các bài tập nếu như các bạn muốn việc học là hiệu quả
và tiết kiệm thời gian của chính các bạn.
3.Hình thức học tập:
 Không nặng về lý thuyết, các bài thực hành sẽ ngắn gọn, dễ hiểu. Tuy nhiên,
cuối mỗi bài, yêu cầu các bạn nghiên cứu thêm và tự đặt ra các câu hỏi về ý
nghĩa mỗi dòng code trong các bài tập.
 Ghi lại mọi thắc mắc và hỏi trong tiết học để chúng ta cùng thảo luận và tối
ưu code được tốt hơn. Khuyến khích tự tìm kiếm câu trả lời trên google
Chuẩn bị 1:DOWNLOAD và cài đặt KeilC lập trình
với 8051
Có rất nhiều trình biên dịch hỗ trợ lập trình 8051 trong đó có một công cụ
được sử dụng nhiều là KeilC. KeilC hỗ trợ lập trình ASM và C với họ vi
điều khiển 8051. Sau đây là các bước để cài đặt trình biên dịch này.

1.Đầu tiên bạn download link dưới đây:


https://www.fshare.vn/file/ORHSCYLSWVGA
2.Hướng dẫn cài đặt:
(Chú ý các trình duyệt virus báo nhầm file keygen là virus, nên tắt chúng trước
khi giải nén)

Bước 1: Giải nén sau đó các bạn chạy file “c51v901.exe”, Chọn Next.


Bước 2: Tick vào ô “I agree to all the tems of the preceding License
Agreement”, chọn Next.

Bước 3: Chọn đường dẫn lưu thư mục cài đặt, sau đó chọn Next.
Bước 4: Điền thông tin cá nhân và chọn Next.
Bước 5: Chờ cho máy tiến hành cài đặt.

Bước 6: Sau khi cài đặt xong, chọn Finish.

(Có thể tích hoặc bỏ tích các ô tùy bạn)


Vậy là bạn đã cài đặt xong chương trình KeilC cho 8051.

Sau đây là hướng dẫn để crack dùng đầy đủ các chức năng của phần mềm

Bước 1: Chạy chương trình KeilC vừa cài đặt với quyền Admin (Click
chuột phải chọnRun as administrator), phần mền hiện thị chọn File -
> License Management.
Bước 2: Hộp thoại License Management xuất hiện, trong tab Single-User
License các bạn copy mã CID.
Bước 3: Chạy file “Keygen.exe”, paste mã vừa copy vào ô CID, kiểm
tra Taget đã chọn là C51 chưa, chọn Generate.

.Bước 4: Copy đoạn mã mới được generate


Bước 5: Trở lại hộp thoại License Management và paste vào ô New License
ID Code (LIC). Sau đó bấm Add LIC.

Bước 6: Close.

Như vậy việc crack đã xong.


Chuẩn bị 2: DOWNLOAD và cài đặt Protus 8.1 SP1
1.Đầu tiên các bạn download phần mềm dưới link sau:

https://www.fshare.vn/file/7D1RGOQFNRLE

2.Hướng dẫn cài đặt:

Bước 1: Giải nén sau đó chạy file “proteus8.1.SP1.exe”, click Next.

Bước 2: Chọn “I accept the terms of this agreement.”. Sau đó click Next.


Bước 3: Chọn “Use a locally installed license key”, click Next.

Bước 4: Click Next.


Bước 5: Chọn “Browse For Key File” 
Bước 6: Hộp thoại hiển thị lên, chọn tới file “Key.lxk” trong file giải nén
(…\Proteus 8.1 SP1 Pro\crack\(Step1) Before Installing Proteus/)
Bước 7. Click Install.
Bước 8: Hộp thoại hiển thị lên, click Yes

Bước 9: Click Close.// Dành cho máy chưa crack lần nào.B4-B9

Bước 10: Click Next.

Bước 11: Chọn Typical.


Bước 12: Chờ cho chương trình cài đặt
Bước 13: [Quan trọng] Không chạy Proteus. Click Close.
Bước 14: Copy đè thư mục BIN (…\Proteus 8.1 SP1 Pro\crack\(Step2)
After Installing Proteus) vào thư mục cài đặt Proteus. (Program Files (x86)
cho win 64bit, Program Files cho win 32bit)

Bước 15: Copy đè thư mục MODELS (…\Proteus 8.1 SP1 Pro\crack\


(Step2) After Installing Proteus) vào thư mục Proteus trong ProgramData
(Lưu ý thư mục này để ẩn nên phải cho show hiden files)

Bước 16: Xong. chạy Proteus xem thành quả nào.

Trên đây là hướng dẫn cài đặt Proteus 8.1 SP1 Pro.

Chúc các bạn thành công !


Bài 1: Hướng dẫn tạo project với KeilC lập trình
8051.
1.Chuẩn bị phần mềm KeilC cho 8051:

Cài đặt KeilC

2.Thực hành tạo project:

Bước 1: Chạy phần mềm, chọn Project->New uVision Project…

Bước 2: Hộp thoại hiển thị, các bạn tùy chọn vị trí lưu project và tên
project của mình, click Save.
Bước 3: Cửa sổ “Select Device for …” xuất hiện, phần Data base các bạn
chọn Atmel->AT89C52

Bước 4: Hộp thoại hiển thị tiếp theo, click No.

Sau đó ta có giao diện project như sau:


Bước 5: Để tạo một file mới cho chương trình chúng ta chọn vào biểu
tượng “New” (như hình) hoặc bấm tổ hợp phím Ctrl+N

Bước 6: Sau đó bấm Save hoặc Ctrl+S


Bước 7: Lưu tên file, với các file chương trình các bạn lưu dưới dạng file .c
và các file header các bạn lưu dưới dạng file .h . Sau đó bấm Save.

Kết quả như hình:


Nhưng file này chưa được add vào project của chúng ta, add file các bạn làm
tiếp như sau:

Bước 8: Click chuột phải vào Source Group 1, chọn Add Files to Group
‘Source Group 1’…
Bước 9: Cửa số hiển thị, các bạn click vào file main.c vừa tạo, click Add và
tắt cửa sổ.
File main.c đã được add vào project như sau:

Bước 10: Bước này thiết lập cho project xuất ra file .hex sau khi build.
Click vào biểu tượng Target Options…

Trong tab Output, tick vào Create HEX File. Sau đó bấm OK.
Bước 11: Viết 1 đoạn code cơ bản.

Bước 12: Build project bằng cách bấm vào biểu tượng ( vòng tròn đỏ như
hình) hoặc bấm phím F7. Sau đó xem kết quả.
Sau khi build, chúng ta sẽ thấy file .hex trong thư mục chứa project, file này sẽ
được nạp vào chip thông qua chương trình Proteus.
Bài 2:: Hướng dẫn tạo project với phần mềm Protus
8.1 SP1 và nạp code mô phỏng .

1.Đầu tiên các bạn chuẩn bị phần mềm Proteus 8.1 SP1:

Tiếp theo chuẩn bị 1 file .hex(Bài 1)

2.Thực hành tạo project:

Bước 1: Chạy phần mềm Proteus, chọn File -> New Project (hoặc bấm
Ctrl+N)

Bước 2: Đổi tên Project và thay đường dẫn chứa project theo ý các bạn.
Click Next.
Bước 3: Mình đang cần vẽ mạch nguyên lý nên mình chọn “Create a
schematic …”, chọn “DEFAULT”, click Next.

Bước 4: Do bài viết lần này mình không vẽ mạch in nên mình chọn “Do not
create a PCB layout.” Sau đó các bạn bấm Next.
Bước 5: Chọn “No Firmware Project”. Click Next.
Bước 6: Click Finish.

Vậy chúng ta đã tạo xong project trong Proteus. Bước tiếp theo các bạn vẽ mạch
nguyên lý và chạy mô phỏng code cho họ 8051.

Bước 7: Các bạn click vào biểu tượng chữ P màu đỏ như hình dưới để lấy
các linh kiện vẽ mạch.
Bước 8: Trong bài này mình sẽ vẽ demo cho họ 8051, ở đây là chip 89c52.
Phần “Keywords” các bạn điền “89c52”, chọn linh kiện trong ô “Results”,
sau đó bấm OK.
Để lấy nhiều thiết bị thì không cần bấm OK (vì ô cửa sổ sẽ mất đi), bạn chỉ việc
nhân Enter sau khi chọn xong một thiết bị là được. Chọn tiếp 6 devices sau:

 Nút nhấn: BUTTON


 Thạch anh: CRYSTAL
 Tụ gốm: CAP
 Tụ hóa 10u/50v: HITEMP10U50V
 Điện trở 1/4W: RES
 Led đơn xanh lá 5mm: LED-GREEN
Sau khi các bạn chọn xong kết quả như sau:
Bước 9: Sau khi đã lấy đủ linh kiện, các bạn chọn vào linh kiện mình muốn
vẽ. Click vào biểu tượng “Component Mode” (thứ 2 từ trên xuống) bên
thanh công cụ trái sau đó chọn chip AT89C52 và đặt vào phân vùng kẻ
xanh bên phải (dùng chuột trái).
Đừng quên Ctrl+Z nếu lỡ tay đặt nhiều thiết bị quá, hoặc có thể click chuột phải
2 lần vào thiết bị đó để xóa đi.

Bước 10: Lặp lại bước 9 với các linh kiện còn lại như hình:
Chú ý: GND (Đất) và VCC (Nguồn) các bạn lấy ở “Terminals Mode” khoanh
màu đỏ như hình dưới.

Các thao tác với mouse trong Proteus:

 Chọn linh kiện để vẽ:Chuột trái lên tên linh kiện trong cửa sổ “Object
selector”.
 Đặt linh kiện:Chuột trái lên cửa sổ mạch điện Right click lên linh kiện trong
cửa số mạch điện sẽ làm cho linh kiện đó được bao bởi màu “đỏ”, tức bạn
đang chọn linh kiện đó.
 Bỏ chọn linh kiện:thực hiện bằng cách chuột phải lên một vị trí trống trên
cửa sổ mạch điện.
 Delete linh kiện:Chuột phải 2 lần lên 1 linh kiện là delete linh kiện đó khỏi
cửa sổ mạch điện,  hoặc chuột phải 1 lần  lên 1 linh kiện đã được chọn trước
đó (có màu đỏ) cũng sẽ xóa linh kiện này.
 Di chuyển linh kiện:chọn linh kiện trước (chuột phải) và drag để di chuyển
linh kiện bằng chuột trái.
 Zoom To – Zoom Nhỏ mạch:Sử dụng con lăn chuột giữa để zoom mạch.
 Xoay và lật linh kiện:chọn linh kiện cần xoay hay lật, dùng các nút công cụ
để xoay hoặc lật linh kiện. Để tiết kiệm thời gian thì xoay lật linh kiện trước
khi đặt nó vào trong bản mạch.

Bước 11: Nối dây, không cần công cụ, để nối dây bạn chỉ cần rê mouse đến
điểm cần nối của linh kiện, bạn sẽ thấy xuất hiện 1 dấu chéo “x”, lúc đó hãy
click chuột và di chuyển (không cần giữ chuột) đến vị trí tiếp theo và click
lần nữa.

Như vậy là các bạn đã vẽ xong 1 mạch cơ bản sử dụng chip 89C52. Để mạch
hoạt động được, các bạn điền các thông số cho các linh kiện bằng các bước sau:

Bước 12: Nháy đúp chuột trái vào tụ C1 như hình,Cửa sổ hiển thị các bạn

điền vào giá trị “33pF”


Với thạch anh các bạn nhập giá trị 12MHz.
Các bạn lặp lại bước trên để được các thông số như hình:

Vậy là chúng ta đã vẽ xong mạch nguyên lý bằng Proteus với đầy đủ các thông
số của mạch.

Để chạy mô phỏng, bạn dùng đoạn code sau cho file KeilC và buil ra file .HEX,
sau đó nạp vào vi điều khiển bằng Proteus.

Code điều khiển led đơn.

#include <REGX52.H>

void Delay(unsigned int var)

while(var--);

}
void main (void)

while(1)

P1 = 0x00;

Delay(1000);

P1 = 0xff;

Delay(1000);

Sau khi build các bạn được file .hex, add file .hex vào chip 89c52 trong proteus
như sau:

Bước 13: Nháy đúp chuột vào chip AT89C52 trong mạch, cửa sổ hiển thị,
các bạn chọn đường dẫn tới file .hex, sau đó bấm OK.
Bước 14: Để chạy mô phỏng các bạn chọn Debug -> Run Simulation hoặc
bấm phím F12

Bước 15: Để tắt mô phỏng các bạn bấm Debug -> Stop VSM Debugging.
(Tab Message xuất hiện, các bạn tắt đi)
Vậy là chúng ta đã hoàn thành  tạo project với phần mềm Proteus 8.1 SP1
+ nạp code mô phỏng. Tận hưởng thành quả đầu tiên đi nào!

ĐÂY LÀ BÀI TẬP 1.1.


Bài 3:Tổng quan cách khai báo biến,hằng và các
kiểu dữ liệu trong ngôn ngữ C.
Để lập trình cho các họ vi điều khiển có thể sử dụng nhiều ngôn ngữ khác nhau,
nhiều trình biên dịch khác nhau, trong dó C là ngôn ngữ thông dụng hơn cả
trong kỹ thuật vi điều khiển.

Khi sử dụng ngôn ngữ C người lập trình không cần hiểu chi tiết về cấu trúc của
bộ vi điều khiển. Điều này sẽ giúp tiết kiệm rất nhiều thời gian khi chúng ta tiếp
cận một vi điều khiển mới.

Sau đây là một số kiến thức liên quan đến cách khai báo biến, hằng, các kiểu dữ
liệu cũng như các toán tử phổ biến hay sử dụng khi lập trình vi điều khiển bằng
ngôn ngữ C.

1.Khai báo biến.


Biến dùng để lưu trữ một giá trị nào đó. Bạn cứ tưởng tượng rằng giả sử bạn có
một cái bao và bạn có thể sử dụng cái bao đó với nhiều mục đích khác nhau như
dùng để chứa gạo, chưa ngô, chứa khoai, … thì lúc này cái bao đó được ví như
là một biến trong C.

Khai báo dữ liệu tổng quát trong C sử dụng với KeilC có dạng như sau:

Kiểu_dữ_liệu [Vùng_nhớ] Tên_biến [_at_ Đia_chỉ];

Hai thông tin [Vùng_Nhớ] và [Địa_chỉ] có thể thêm hoặc không lúc đó trình
biên dịch sẽ biên dịch tự động. Các vùng nhớ trong vi điều khiển 8051 được liệt
kê trong bảng sau:
Để gán giá trị cho biến ta chỉ việc dùng cú pháp Tên biến = x:
int x;
hoặc gán ngay trong quá trình khai báo:

int x = 5;

Sau khi khai báo biến đó các bạn có thể sử dụng biến đó trong chương trình của
mình cho các nhu cầu sử dụng trong chương trình của các bạn.

2.Khai báo hằng.


Để giúp tăng cường độ an toàn trong các chương trình, các giá trị có thể được
đánh dấu là các hằng bằng từ khóa định tính const. Với từ khóa này thì một biến
khai báo trở thành một hằng. Mọi thao tác do vô ý hay cố ý để điều chỉnh giá trị
của nó sẽ bị báo lỗi bởi hầu hết các trình dịch. Bởi vì sau khi đã dùng từ khóa
định tính const thì các giá trị của biến không thể thay đổi nữa nên người lập
trình phải gán giá trị ban đầu ngay lúc khai báo.
Chuẩn C cho phép hoán đổi vị trí của các hiệu chính. Thí dụ cả hai khai báo
hằng sau đây là tương đương:

int const Hang_So = 12;


const int Hang_So = 12;
Cả hai cách khai báo trên đều được chấp nhận. Sau khi thực hiện khai báo trên
chúng ta có biến Hang_So mang dữ liệu là 12 và không thể thay đổi trong suốt
quá trình thực thi chương trình.

3.Các kiểu dữ liệu.


Với C chúng ta có các kiểu dữ liệu sau hay được sử dụng. Các bạn có thể dễ
dàng thấy sự khác nhau giữa SỐ KHÔNG DẤU VÀ SỐ CÓ DẤU mặc dù
chúng có cùng độ dài (số lượng bit).

Tùy với mục đích sử dụng và dữ liệu tối đa mà các bạn nghĩ biến có thể đạt đến
các bạn nên chọn kiểu dữ liệu vừa đủ nhất để tránh lãng phí tài nguyên vì với
điều khiển 8051 thì số lượng Ram khá là hạn chế (128 Byte với dòng cũ và
thêm 128 Byte Ram với một dòng sau này được cấp phát ở vùng idata).

Ngoài ra, với riêng KeilC còn có thêm một số kiểu dữ liệu được sử dụng riêng
cho dòng vi điều khiển 8051. Bảng dữ liệu đó như sau:
– bit : Dùng để khai báo các biến có giá trị 0 hoặc một hay các biến logic trên
vùng RAM của vi điều khiển. Khi khai báo biến kiểu bit trình dịc Keil C sẽ mặc
định vùng nhớ sử dụng là BDATA.

– sbit, sfr, sfr16: Dùng để định nghĩa các cho các thanh ghi chức năng hoặc các
cổng trên vi điều khiển dùng để truy nhập các đoạn dữ liệu 1 bit, 8 bit, 16 bit.
SBIT có thể dùng khai bảo một chân của một cổng.

Trên đây là các thông tin cơ bản liên quan đến khai báo dữ liệu và hằng được sử
dụng trong suốt quá trình lập trình của chúng ta. Các bạn cần nắm chắc kiến
thức này để có thể tiếp cận sâu hơn về lập trình nói chung và lập trình vi điều
khiển nói riêng.
Bài 4: Lập trình nháy LED với 8051.
Ở bài này sẽ hướng dẫn các bạn lập trình điều khiển Output cơ bản thực hành
với LED đơn. Các bạn thực hiện vẽ mạch sau trong Proteus.

Các bạn chú ý: do là mô phỏng thử nghiệm chương trình nên mình vẽ mạch ở
mức độ cơ bản tuy nhiên ở mạch thật các bạn cần bổ sung nguồn, thạch anh và
mạch reset cho mạch để chương trình có thể chạy được. Với mạch như trên
chúng ta đã có thể thực hiện mô phỏng chương trình cơ bản với LED đơn.

a.Lập trình điều khiển từng Pin của vi điều khiển.


8051 cho phép chúng ta tác động tới từng chân IO của vi điều khiển. Để sử
dụng tính năng này chúng ta có thể sử dụng khai báo sbit để định nghĩa tên cho
chân chúng ta muốn sử dụng. Khai báo sbit được thực hiện theo mẫu sau:
sbit Tên_Chân_Định_Nghĩa = Địa_Chỉ_Pin;
Ví dụ cụ thể như sau:

sbit LED = P1^0;

Ở đây, chân P1.0 được định nghĩa có tên là LED.

Sau khi khai báo sbit như trên chúng ta có thể sử dụng Tên chân mà chúng ta
mới định nghĩa để có thể điều khiển độc lập từng chân. Khi các bạn gán chân đó
bằng giá trị 0 thì đầu ra sẽ ở mức 0V còn khi các bạn gán cho chân đó ở mức 1
thì sẽ có mức điện áp ra là 5V.

Ví dụ ở chương trình sau chúng ta sẽ sử dụng định nghĩa sbit để điều khiển chân
P1.0 của 8051 thực hiện chức năng nhấp nháy một con LED. Các bạn xem code
theo mẫu sau.

/* Khai bao su dung thu vien cho 89c52 */


#include <REGX52.H>
/* Su dung sbit de dinh nghia cho tung chan cua Vi dieu khien*/
sbit LED = P1^0; 
/* Trien khai ham tao do tre */
void Fn_Delay (unsigned intTime)
{
while(Time--);
}
/* Chuong trinh chinh */
void main(void)
{
/* Vong lap vo han */
while(1)
{
LED = 0;             // Xuat 0 ra chan LED
Fn_Delay(50000);      // Tre 1 thoi gian
LED = 1;             // Xuat 1 ra chan LED
Fn_Delay(50000);      // Tre 1 thoi gian
}
}

ĐÂY LÀ BÀI TẬP 1.2

Với việc lập trình như trên các bạn sẽ LED nối với chân P1.0 sẽ được thay đổi
giữa sáng và tắt. Ở đây có hàm Fn_Delay() có chức năng thay đổi tốc độ nhấp
nháy của con LED. Khi tham số truyền vào hàm này càng lớn thì độ trễ càng lâu
của nó cũng chỉ có 8 pin. Vì thế bạn có thể xuất data cho 8 pin một lúc với 1
dòng lệnh tức tần số nháy nháy các chậm. Các bạn có thể thay đổi thông số cho
hàm này để thấy rõ hơn.
Sau khi lập xong Project theo các bước đã hướng dẫn ở các bài trước các bạn gõ
các dòng code trên vào và thực hiện Build để tạo ra file hex sau đó  các bạn
chuyển file hex đó vào IC 89C52 trên Proteus và chạy chế độ mô phỏng. Các
bạn sẽ thấy kết quả. Như vậy là các bạn đã có thể điều khiển được một chân của
8051 ở chế độ Output.
Sau khi thực hiện cho chân P1.0 các bạn có thể thực hiện trên các chân khác
hoặc thực hiện nhiều hơn một chân nếu các bạn muốn.
b.Lập trình điều khiển theo Port của vi điều khiển.
Ngoài điều khiển theo từng chân chúng ta có thể xuất dữ liệu ouput theo cả Port
trên 8051. 8051 là một vi điều khiển 8 bit và một Port với điều kiện các  Pin đó
chung một Port. Để can thiệp đến một Port các bạn chỉ cần gán dữ liệu các bạn
mong muốn cho tên Port đó. Ví dụ như sau:

1 P2 = 0x55;
Với câu lệnh trên các bạn đã xuất dữ liệu trên Port 2 như sau: 0-1-0-1-0-1-0-1
tương ứng với chiều từ P2.7 tới P2.0.

Giới thiệu về toán tử | và &:

Toán tử | là toán tử OR bit còn toán tử & là toán tử AND bit. Các toán tử trên
thực hiện theo công thức sau:

0 | 0 = 0
0 | 1 = 1
1 | 1 = 1
0 & 0 = 0
0 & 1 = 0
1&1=1
 

Đây là 2 toán tử rất hay được sử dụng trong việc khi bạn muốn tác động đến
một vài bit trong một Port mà các bạn muốn xuất dữ liệu. Toán tử | thường được
dùng để đưa một Pin lên mức 1 còn toán tử & thường được sử dụng để đưa một
Pin về mức 0.

Ví dụ như sau:

P1 = P1 | 0x01; // Đưa pin P1.0 lên mức 1


P1 = P1 & 0xFE; // Đưa pin P1.0 về mức 0
 

Ngoài ra mình giới thiệu với các bạn 2 toán tử << và >>. Đây là 2 toán tử dùng
để dịch bít. Các bạn quan sát các ví dụ sau để hiểu rõ về 2 toán tử này:

0x01<<1 = 0x02; //00000001 -> 00000010


0x10>>1 = 0x08; //00010000 -> 00001000 
Các bạn chú ý 4 toán tử này vì có thể các bạn sẽ gặp rất nhiều trong các bài toán
sau này của các bạn.

Sau đây là một ví dụ mình sử dụng việc xuất dữ liệu trên một Port tạo hiệu ứng
LED chạy từ trên xuống và lặp lại. Các bạn có thể tham khảo.

1 /* Khai bao su dung thu vien cho 89c52 */


2
3 #include <REGX52.H>
4
5 /* Trien khai ham tao do tre */
6 void Fn_Delay (unsigned int _vrui_Time)
7 {
8 while(_vrui_Time--);
9 }
10
11 /* Chuong trinh chinh */
12 void main (void)
13 {
14 /* Khai bao bien i */
15 unsigned char i;
16 /* Vong lap vo han */
17 while(1)
18 {
19 for (i = 0; i < 8; i++)
20 {
21 P1 = 0x01<<i;
22 Fn_Delay(5000);
23 }
24 }
25 }
 

ĐÂY LÀ BÀI TẬP 1.3

Các bạn thực hiện Build chương trình trên và đưa vào mạch trên Proteus để thử
nghiệm chương trình. Chương trình có hiệu ứng có một LED sẽ chạy từ trên
xuống dưới sau khi đến vị trí cuối cùng nó lại xuất phát từ vị trí đầu tiên.

Câu hỏi:

 Muốn thay đổi thời gian sáng, tắt thì làm thế nào?
 Muốn 1 đèn ở một vị trí bất kì (trong Port 1) sáng tắt thì sao?
 Muốn 4 đèn bất kì sáng tắt luân phiên thì làm thế nào?
 Muốn đảo ngược chiều đèn sáng thì làm thế nào?
3.Bài tập:
Bài 1.4: Lập trình điều khiển 2 chân LED luôn phiên sáng (Tức là khi 1
chân sáng thì chân còn lại sẽ tắt và 2 chân thực hiện liên tiếp xen kẽ nhau).

CODE:
#include<REGX52.H>
void delay(unsigned int t)
{
while(t--);
}
void main(void)
{
while(1)
{
unsigned int i;
unsigned char L[]={0x05,0x0A,0x14,0x28,0x50,0xA0};
for(i=0;i<=5;i++) {
P1=L[i];
delay(50000); }
}
}

Bài 2.4: Lập trình trên một Port của 8051 thực hiện chức năng theo trò
chơi xếp hình.
Cụ thể như sau:
– Đầu tiên trên cùng có 1 LED sáng sau đó LED rơi dần xuống dưới và sẽ
dừng lại ở vị trí cuối cùng.
– Khi LED số 1 chạm đến vị trí dưới cùng thì xuất hiện 1 LED sáng ở vị trí ở
trên cùng và lặp lại việc rơi xuống dưới và dừng lại khi đến vị trí ngay trên
con LED cũ.
– Lặp lại như vậy cho đến khi số LED đầy trên cột và sẽ bắt đầu lại từ đầu.
Đây là một hình ảnh về kết quả của bài tập để các bạn hiểu rõ về yêu cầu.
#include<REGX52.H>
void delay(unsigned int t)
{ while(t--);}
void main(void)
{
while(1)
{
unsigned int i;
unsigned char
L[]={0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x81,0x82,0x84,0x88,0
x90,0xA0,0xC0,0xC1,0xC2,0xC4,0xC8,0xD0,0xE0,0xE1
,0xE2,0xE4,0xE8,0xF0,0xF1,0xF2,0xF4,0xF8,0xF9,0xFA,0xFD,0xFE,0xFF};
for(i=0;i<=36;i++)
{
P1=L[i];
delay(50000);
}
}
}

Yêu cầu với mỗi SINH VIÊN

THỬ TÌM CÁCH KHÁC THAY VÌ DÙNG MẢNG ĐỂ ĐẠT YÊU CẦU NHƯ
TRÊN. (1 ĐIỂM CỘNG CHO CẢ NHÓM)

TỰ TÌM MỘT ĐOẠN CODE HOẶC CODE MỘT ĐOẠN CODE ĐỂ ĐIỀU
KHIỂN 8-16 LED (PORT 1,2) THEO Ý MÌNH.

(VIẾT RA GIẤY NỘP CHO NHÓM TRƯỞNG)

You might also like