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

Thực Hành Báo Cáo 89c52

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 (832.08 KB, 54 trang )

Khoa: Điện – Điện tử Lớp: CĐ Điện Tử 1 - K6
MỤC LỤC
LỚI NÓI ĐẦU ………………………………………………………………3
2.1.7. Thanh ghi TH2, TL2, RCAP2H và RCAP2L 15
2.2.2. Các ngắt của 8051 17
2.2.3. Các thanh ghi của ngắt 18
2.2.4.Các vector ngắt 19
2.2.5. Làm việc với ngắt 19
3.1.1. Mô phỏng 21
3.1.2. Code 21
3.2.1. Mô phỏng 23
3.2.2. Code 23
3.3.1. Mô phỏng 26
3.3.2. Code 26
3.4.1. Mô phỏng 29
3.4.2. Code 29
3.5.1. Mô phỏng 31
3.5.2. Code 31
3.6.1. Mô phỏng 32
3.6.2. Code 32
3.7.1. Mô phỏng 33
3.7.2. Code 33
3.8.1. Mô phỏng 34
3.8.2. Code 34
3.9.1. Mô phỏng 36
3.9.2. Code 36
3.9.1. Mô phỏng 37
3.9.1. Code 37
Bài tập lớn
1
Khoa: Điện – Điện tử Lớp: CĐ Điện Tử 1 - K6


LỜI MỞ ĐẦU
Trong những thập niên cuối thế kỷ 20, kỹ thuật điện tử đã liên tục có những
tiến bộ vượt bậc, đặc biệt là trong kỹ thuật chế tạo vi mạch điện tử. Sự ra đời và
phát triển nhanh chóng của kỹ thuật điện tử mà đặc trưng là kỹ thuật vi xử lý đã tạo
ra một bước ngoặt quan trọng trong sự phát triển của khoa học tính toán và xử lý
thông tin, nó ảnh hưởng quyết định đến con đường “tin học hoá” xã hội, tứ là con
đường mà thông tin đã và đang trở thành lực lượng sản xuất trực tiếp trong nền sản
xuất của kỷ nguyên tới.
Ngày nay, những ứng dụng của vi điều khiển đã đi sâu vào đời sống sinh hoạt
và sản xuất của con người, là một phần tất yếu không thể thiếu trong đời sông hiện
đại. Thế kỷ 21 được xem là thế kỷ của khoa học công nghệ, là thế kỷ mà máy móc
được thiết kế và lập trình một cách tự động để thay thế các hoạt động của con
người trong sản xuất, cũng như để phục vụ các công việc trong sinh hoạt. Trong
một cuộc sống mang tính tự động hoá cao thì các mạch vi xử lý như là một công cụ
đắc lực, quan trọng , hỗ trợ cho con người thực hiện nhu cầu ngày càng cao và càng
hoàn thiện của mình.
Đang là sinh viên ngồi trên ghế nhà trường, cơ hội tiếp cận, học tập những
công nghệ tiên tiến, hiện đại chưa nhiều, nên trong quá trình tự học và nghiên cứu,
nhóm chúng em đã cố gắng tìm hiểu về bộ vi xử lý AT89C51 , cũng như các ứng
dụng của nó trong các hệ vi xử lý. Với những gì nghiên cứu được, nhóm chúng em
đã làm thực hành ứng dụng thông qua việc thiết kế LED trái tim.
Với sự hướng dẫn của thầy giáo em xin trình bày bài làm của mình về công
nghệ trên để hiểu rõ hơn phần nào về cấu tạo chức năng và nguyên lý của hoạt
động của chíp AT89C51.
Em rất mong được sự chỉ bảo của thầy giáo và ý kiến đóng góp của các bạn để
bài làm được tốt hơn.
Em xin chân thành cảm ơn!
Bài tập lớn
2
Khoa: Điện – Điện tử Lớp: CĐ Điện Tử 1 - K6

Chương 1
TÌM HIỂU CẤU TRÚC CỦA VI ĐIỀU KHIỂN 8051
1.1. Giới thiệu chung
Vào năm 1981. Hãng Intel giới thiệu một số bộ vi điều khiển được gọi là
8051. Bộ vi điều khiển này có 128 byte RAM, 4 Kbyte ROM trên chíp, hai bộ định
thời, một cổng nối tiếp và 4 cổng vào ra tất cả được đặt trên một chíp. 8051 là bộ
xử lý 8 bit vì CPU chỉ làm việc với 8 bít dữ liệu tại một thời điểm. Dữ liệu lớn hơn
8 bít được chia thành các dữ liệu 8 bít để cho xử lý.
1.1.1. Một số khái niệm cơ bản
Vi xử lý (VXL):
Là thuật ngữ chung để đề cập đến kỹ thuật ứng dụng các công nghệ vi điện tử,
công nghệ tích hợp và xử lý theo chương trình với các chíp (vi xử lý) được chế tạo
chỉ tích hợp những phần cứng thiết yếu như CPU cùng với các giao tiếp với CPU
và các phần cứng khác. Trong giai đoạn này các phần cứng khác (kể cả bộ nhớ)
thường không được tích hợp trên chíp mà phải ghép nối thêm bên ngoài, các phần
cứng này được gọi là phần ngoại vi (Peri pherals).
Vi điều khiển (VĐK):
Là thuật ngữ dùng để chỉ các chíp xử lý được tích hợp các ngoại vi lên trên
cùng một IC, việc tích hợp thêm các ngoại vi vào trong cùng một IC với CPU tạo ra
nhiều lợi ích như làm giảm thiểu các ghép nối bên ngoài làm giảm thiểu các linh
kiện điện tử phụ, giảm chi phí cho thiết kế hệ thống, đơn giản hóa việc thiết kế hệ
thống, nâng cao hiệu xuất và tính linh hoạt.
Phương pháp lựa chọn một bộ VĐK:
Có 4 bộ vi điều khiển 8 bit chính. Đó là 6811 của Motorola, 8051 của Intel z8
của Xilog và Pic 16 × của Microchip Technology. Mỗi một kiểu loại trên đây đều
có một tập lệnh và thanh ghi riêng duy nhất, nếu chúng đều không tương thích lẫn
nhau. Cũng có những bộ vi điều khiển 16 bit và 32 bit được sản xuất bởi các hãng
Bài tập lớn
3
Khoa: Điện – Điện tử Lớp: CĐ Điện Tử 1 - K6

sản xuất chíp khác nhau. Với tất cả những bộ vi điều khiển khác nhau như thế này
thì lấy gì làm tiêu chuẩn lựa chọn mà các nhà thiết kế phải cân nhắc? Có ba tiêu
chuẩn để lựa chọn các bộ vi điều khiển là:
• Đáp ứng nhu cầu tính toán của bài toán một cách hiệu quả về mặt giá
thành và đầy đủ chức năng có thể nhìn thấy được (khả dĩ).
• Có sẵn các công cụ phát triển phần mềm chẳng hạn như các trình biên
dịch, trình hợp ngữ và gỡ rối.
• Nguồn các bộ vi điều khiển có sẵn nhiều và tin cậy.
Tiêu chuẩn đầu tiên và trước hết trong lựa chọn một bộ vi điều khiển là nó
phải đáp ứng nhu cầu bài toán về một mặt công suất tính toán và giá thành hiệu
quả. Trong khi phân tích các nhu cầu của một dự án dựa trên bộ vi điều khiển
chúng ta trước hết phải biết là bộ vi điều khiển nào 8 bit, 16 bit hay 32 bit có thể
đáp ứng tốt nhất nhu cầu tính toán của bài toán mộ tcách hiệu quả nhất? Những
tiêu chuẩn được đưa ra để cân nhắc là:
- Tốc độ: Tốc độ lớn nhất mà bộ vi điều khiển hỗ trợ là bao nhiêu.
- Kiểu đóng vỏ: Đó là kíểu 40 chân DIP hay QFP hay là kiểu đóng vỏ khác
(DIP -đóng vỏ theo 2 hàng chân. QFP là đóng vỏ vuông dẹt)
- Công suất tiêu thụ: Điều này đặc biệt khắt khe đối với những sản phẩm
dùng pin, bao gồm khả năng có sẵn trình lượng ngữ, gỡ rối, trình biên dịch ngôn
ngữ C hiệu quả về mã nguồn, trình mô phỏng hỗ trợ kỹ thuật và khả năng sử dụng
trong nhà và ngoài môi trường. Trong nhiều trường hợp sự hỗ trợ nhà cung cấp thứ
ba (nghĩa là nhà cung cấp khác không phải là hãng sản xuất chíp) cho chíp cũng tốt
như, nếu không được tốt hơn, sự hỗ trợ từ nhà sản xuất chíp.
Tiêu chuẩn thứ hai trong lựa chọn một bộ vi điều khiển là khả năng phát triển
các sản phẩm xung quanh nó dễ dàng như thế nào? Các cân nhắc chủ yếu với một
số nhà thiết kế điều này thậm chí còn quan trong hơn cả hai tiêu chuẩn đầu tiên.
Hiện nay, các bộ vi điều khiển 8 bit dấu đầu, họ 8051 là có số lương lớn nhất các
nhà cung cấp đa dạng (nhiều nguồn). Nhà cung cấp có nghĩa là nhà sản xuất bên
cạnh nhà sáng chế của bộ vi điều khiển. Trong trường hợp 8051 thì nhà sáng chế
của nó là Intel, nhưng hiện nay có rất nhiều hãng sản xuất nó (cũng như trước kia

đã sản xuất).
Bài tập lớn
4
Khoa: Điện – Điện tử Lớp: CĐ Điện Tử 1 - K6
Tiêu chuẩn thứ ba trong lựa chọn một bộ vi điều khiển là khả năng sẵn sàng
đáp ứng về số lượng trong hiện tại và tương lai.
- Dung lượng bộ nhớ RAM và ROM trên chíp.
- Số chân vào - ra và bộ định thời trên chíp
- Khả năng dễ dàng nâng cấp cho hiệu suất cao hoặc giảm công suất tiêu thụ.
- Giá thành cho một đơn vị: Điều này quan trọng quyết định giá thành cuối
cùng của sản phẩm mà một bộ vi điều khiển được sử dụng.
1.1.2. Các phiên bản của 8051
Bộ vi điều khiển 8051 các rất nhiều phiên bản với tên gọi, kí hiệu khác nhau
tùy thuộc vào kiểu bộ nhớ chương trình, công nghệ chế tạo và tần số làm việc.
VD: Phiên bản 8051 có bộ nhớ UV-PROM được ký hiệu là 8751. Phiên bản
Flash-ROM cũng được bán với nhiều hãng khác nhau như của Atmel với tên gọi
AT89C51, còn phiên bản NV-RAM của 8051 của Dalas Semiconductor cung cấp
thì được gọi là DS5000. Ngoài ra còn có phiên bản OTP (lập trình được 1 lần) cũng
được sản xuất bởi rất nhiều hãng.
Các phiên bản của 8051 từ hãng Atmel:
Bài tập lớn
5
Khoa: Điện – Điện tử Lớp: CĐ Điện Tử 1 - K6
Hình 1.1. Bố trí bên trong sơ đồ khối của 8051:
1.2. Cấu trúc của vi điều khiển 8051
1.2.1. Đơn vị xử lý trung tâm CPU
CPU có cấu tạo gồm có đơn vị xử lý số học và lôgic (ALU), các thanh ghi, các
khối lôgic và các mạch giao tiếp.
Chức năng của CPU là tiến hành các thao tác tính toán xử lý, đưa ra các tín
hiệu địa chỉ, dữ liệu và điều khiển nhằm thực hiện một nhiệm vụ nào đó do người

lập trình đưa ra thông qua các lệnh (Instructions).
Bộ nhớ
Nhìn chung có hai loại bộ nhớ là bộ nhớ chương trình và bộ nhớ dữ liệu. Bộ
nhớ chương trình dùng để chứa mã chương trình hướng dẫn CPU thực hiện một
nhiệm vụ nào đó. Thông thường thì bộ nhớ chương trình là các loại bộ nhớ “không
bay hơi” (non-volatile), nghĩa là không bị mất nội dung chứa bên trong khi ngừng
cung cấp nguồn nuôi. Có thể kể ra một số bộ nhớ thuộc loại này như: ROM,
PROM, EPROM, EEPROM, Flash. Bộ nhớ dữ liệu là bộ nhớ dùng để chứa dữ liệu
(bao gồm các tham số, các biến tạm thời…). Tùy thuộc loại dữ liệu mà bộ nhớ loại
này có thể là loại “không bay hơi” hoặc “bay hơi” (mất dữ liệu khi cắt nguồn nuôi).
Loại “bay hơi” thường thấylà các bộ nhớ SRAM.
1.2.2. Cổng vào/ra song song
Đây là các đường tín hiệu được nối với một số chân của IC dùng để giao tiếp
với thế giới bên ngoài IC. Giao tiếp ở đây là đưa điện áp ra hoặc đọc vào giá trị
Bài tập lớn
6
Khoa: Điện – Điện tử Lớp: CĐ Điện Tử 1 - K6
điện áp tại chân cổng. Các giá trị điện áp đưa ra hay đọc vào chỉ có thể được biểu
diễn bởi một trong hai giá trị lôgic (0 hoặc 1). Trong kỹ thuật vi xử lý, người ta
thường dùng quy ước lôgic dương: giá trị lôgic 0 ứng với mức điện áp thấp xấp xỉ
0VDC, giá trị lôgic 1 ứng với mức điện áp cao xấp xỉ +5VDC. Tùy loại vi xử lý mà
“khoảng xấp xỉ” đó là khác nhau nhưng nhìn chung là tương thích với mức
lôgic TTL. Mỗi cổng vào/ra song song thường gồm 08 đường vào/ra khác nhau và
gọi là các cổng 08 bit. Các đường tín hiệu vào/ra của các cổng và thuộc cùng một
cổng là độc lập với nhau. Điều đó có nghĩa là ta có thể đưa ra hay đọc vào các giá
trị lôgic khác nhau đối với từng chân cổng (từng đường tín hiệu vào/ra). Một điều
cần chú ý nữa đối với các cổng vào/ra đó là chúng có thể được tích hợp thêm (nói
đúng hơn là kiêm thêm) các chức năng đặc biệt liên quan đến các ngoại vi khác.
1.2.3. Cổng vào/ra nối tiếp
Khác với cổng song song,với cổng nối tiếp các bit dữ liệu được truyền lần lượt

trên cùng một đường tín hiệu thay vì truyền cùng một lúc trên các đường tín hiệu
khác nhau. Thông thường thì việc truyền dữ liệu bằng cổng nối tiếp phải tuân theo
một cơ chế, một giao thức hay một nguyên tắc nhất định. Có thể kể ra một số giao
thức như SPI, I2C, SCI…
Cổng nối tiếp có 02 kiểu truyền dữ liệu chính:
Truyền đồng bộ (synchronous): thiết bị truyền và thiết bị nhận đều dùng
chung một xung nhịp (clock).
Truyền dị bộ (asynchronous): thiết bị truyền và thiết bị nhận sử dụng hai nguồn
xung nhịp riêng. Tuy nhiên hai nguồn xung nhịp này không được khác nhau quá nhiều.
Xung nhịp là yếu tố không thể thiếu trong truyền dữ liệu nối tiếp và nó có vai
trò xác định giá trị của bit dữ liệu (hay nói đúng hơn là xác định thời điểm đọc
mức lôgic trên đường truyền dữ liệu).
Cổng nối tiếp có thể có một trong các tính năng sau:
Đơn công: thiết bị chỉ có thể hoặc truyền hoặc nhận dữ liệu.
Bán song công: thiết bị có thể truyền và nhận dữ liệu nhưng tại một thời điểm
chỉ có thể làm một trong hai việc đó.
Song công: thiết bị có thể truyền và nhận dữ liệu đồng thời.
Bộ đếm/Bộ định thời:
Bài tập lớn
7
Khoa: Điện – Điện tử Lớp: CĐ Điện Tử 1 - K6
Đây là các ngoại vi được thiết kế để thực hiện một nhiệm vụ đơn giản: đếm
các xung nhịp. Mỗi khi có thêm một xung nhịp tại đầu vào đếm thì giá trị của bộ
đếm sẽ được tăng lên 01 đơn vị (trong chế độ đếm tiến/đếm lên) hay giảm đi 01
đơn vị (trong chế độ đếm lùi/đếm xuống).
Xung nhịp đưa vào đếm có thể là một trong hai loại:
Xung nhịp bên trong IC. Đó là xung nhịp được tạo ra nhờ kết hợp mạch
dao động bên trong IC và các linh kiện phụ bên ngoài nối với IC. Ta có thể ví đó là
“nhịp tim” để toàn bộ các phần cứng bên trong vi xử lý (bao gồm cả CPU và các
ngoại vi) có thể hoạt động được. Trong trường hợp sử dụng xung nhịp loại này,

người ta gọi là các bộ định thời (timers). Do xung nhịp bên loại này thường đều
đặn nên ta có thể dùng để đếm thời gian một cách khá chính xác.
Xung nhịp bên ngoài IC. Đó là các tín hiệu lôgic thay đổi liên tục giữa 02 mức
0-1 và không nhất thiết phải là đều đặn. Trong trường hợp này người ta gọi là các
bộ đếm (counters). Ứng dụng phổ biến của các bộ đếm là đếm các sự kiện bên
ngoài như đếm các sản phầm chạy trên băng chuyền, đếm xe ra/vào kho bãi… Một
khái niệm quan trọng cần phải nói đến là sự kiện “tràn” (overflow). Nó được hiểu
là sự kiện bộ đếm đếm vượt quá giá trị tối đa mà nó có thể biểu diễn và quay trở về
giá trị 0. Với bộ đếm 8 bit, giá trị tối đa là 255 và là 65535 với bộ đếm 16bit.
Hình 1.2. Sơ đồ chân của AT98C51/AT89S51
Bài tập lớn
8
Khoa: Điện – Điện tử Lớp: CĐ Điện Tử 1 - K6
Chức năng các chân: Nhìn vào sơ đồ bố trí chân của 8051. Ta thấy có 32 chân
dành cho các cổng P0, P1, P2 và P3 với mỗi cổng có 8 chân. Các chân còn lại được
dành cho nguồn VCC, đất GND, các chân giao động XTAL1 và XTAL2 tái lập
RST cho phép chốt địa chỉ ALE truy cập được địa chỉ ngoài , cho phép cất chương
trình . Trong 8 chân này thì 6 chân VCC , GND, XTAL1, XTAL2, RST và được các
họ 8031 và 8051 sử dụng. Hay nói cách khác là chúng phải được nối để cho hệ thống
làm việc mà không cần biết bộ vi điều khiển thuộc họ 8051 hay 8031. Còn hai chân
khác là EA và ALE được sử dụng chủ yếu trong các hệ thống dựa trên 8031.
Chân VCC: Chân số 40 là VCC cấp điện áp nguồn chíp. Nguồn điện áp là +5V.
Chân GND: Chân số 20 là GND.
Chân XTAL1 và XTAL2: 8051 có một bộ giao động trên chíp nhưng nó yêu
cầu có một xung đồng hồ ngoài để chạy nó. Bộ giao động thạch anh thường xuyên
nhất được nối tới các chân đầu vào XTAL1 (chân 19) và XTAL2 (chân 18). Bộ
giao động thạch anh được nối tới XTAL1 và XTAL2 cũng cần hai tụ điện giá trị
30pF. Một phía của tụ điện được nối xuống đất . Cần phải lưu ý rằng có nhiều tốc
độ khác nhau của họ 8051. Tốc độ được coi như là tần số cực đại của bộ giao động
được nối tới chân XTAL.

Chân RST: Chân số 9 là chân tái lập RESET. Nó là một đầu vào và có mức
tích cực cao (bình thường ở mức thấp). Khi cấp xung cao tới chân này thì bộ vi
điều khiển sẽ tái lập và kết thúc mọi hoạt động. Điều này thường được coi như là sự
tái bật nguồn. Khi kích hoạt tái bật nguồn sẽ làm mất mọi giá trị trên các thanh ghi.
Bảng 4.1 cung cấp một cách liệt kê các thanh ghi của 8051 và các giá trị của chúng
sau khi tái bật nguồn.
Chân EA : Các thành viên họ 8051 như 8751, 98C51 hoặc DS5000 đều có
ROM trên chíp lưu cất chương trình. Trong các trường hợp như vậy thì chân được
nối tới VCC. Đối với các thành viên củ họ như 8031 và 8032 mà không có ROM
trên chíp thì mã chương trình được lưu cất ở trên bộ nhớ ROM ngoài và chúng
được nạp cho 8031/32. Do vậy, đối với 8031 thì chân phải được nối đất để báo
rằng mã chương trình được cất ở ngoài. có nghĩa là truy cập ngoài (External
Access) là chân số 31 trên vỏ kiểu DIP. Nó là một chân đầu vào và phải được nối
hoặc với VCC hoặc GND. Hay nói cách khác là nó không được để hở.
Bài tập lớn
9
Khoa: Điện – Điện tử Lớp: CĐ Điện Tử 1 - K6
Chân PSEN : Đây là chân đầu ra cho phép cất chương trình (Program Store
Enable) trong hệ thống dựa trên 8031 thì 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.
Chân ALE: Chân cho phép chốt địa chỉ ALE là chân đầu ra và được tích cực
cao. Khi nối 8031 tới bộ nhớ ngoài thì cổng 0 cũng được cấp địa chỉ và dữ liệu.
Hay nói cách khác 8031 dồn địa chỉ và dữ liệu qua cổng 0 để tiết kiệm số chân.
Chân ALE được sử dụng để phân kênh địa chỉ và dữ liệu bằng cách nối tới chân G
của chíp 74LS373.
Các cổng vào ra: bốn cổng P0, P1, P2 và P3 đều sử dụng 8 chân và tạothành
cổng 8 bít. Tất cả các cổng khi RESET đều được cấu hình như các đầura, sẵn sàng
để được sử dụng như các cổng đầu ra. Muốn sử dụng cổng nàotrong số các cổng
này làm đầu vào thì nó phải được lập trình.
Cổng P0: Cổng 0 chiếm tất cả 8 chân (từ chân 32 đến 39). Nó có thể được

dùng như cổng đầu ra, để sử dụng các chân của cổng 0 vừa làm đầu ra, vừa làm đầu
vào thì mỗi chân phải được nối tới một điện trở kéo bên ngoài 10kΩ. Điều này là
do một thực tế là cổng P0 là một màng mở khác với các cổng P1, P2 và P3.
Cổng P1: Cổng P1 cũng chiếm tất cả 8 chân (từ chân 1 đến chân 8) nó có thể
được sử dụng như đầu vào hoặc đầu ra. So với cổng P0 thì cổng này không cần đến
điện trở kéo vì nó đã có các điện trở kéo bên trong. Trong quá trình tái lập thì cổng
P1 được cấu hình như một cổng đầu ra. Để biến cổng P1 thành đầu vào thì nó phải
được lập trình ở mức logic cao đến tất cả các bit của nó.
Cổng P2: Cổng P2 cũng chiếm 8 chân (các chân từ 21 đến 28). Nó có thể được
sử dụng như đầu vào hoặc đầu ra giống như cổng P1, cổng P2 cũng không cần điện
trở kéo vì nó đã có các điện trở kéo bên trong. Khi tái lập, thì cổng P2 được cấu
hình như một cổng đầu ra. Để tạo cổng P2 như đầu vào thì nó phải được lập trình
bằng mức logic cao tới tất cả các chân của nó.
Vai trò kép của P2: Trong các hệ thống dựa trên 8751, 89C51 và DS5000 thì
P2 được dùng như đầu ra đơn giản. Tuy nhiên trong hệ thống dựa trên 80312 thì
cổng P2 phải được dùng cùng với P0 để tạo ra địa chỉ 16 bít đối với bộ nhớ ngoài.
Cổng P2 cũng được chỉ định như là A8 - A15 báo chức năng kép của nó. Vì một bộ
8051/31 có khả năng cung cấp 64kbyte bộ nhớ ngoài, nó cần một đường địa chỉ 16
Bài tập lớn
10
Khoa: Điện – Điện tử Lớp: CĐ Điện Tử 1 - K6
bít. Trong khi P.0 cung cấp 8 bit thấp qua A0 – A7. Công việc của P2 là cung cấp
các bít địa chỉ A8 - A15. Hay nói cách khác khi 8051/31được nối tới bộ nhớ ngoài
thì P2 được dùng cho 8 bít của địa chỉ 16 bit và nó không thể dùng cho vào ra.
Cổng P3: Cổng P3 chiếm tổng cộng là 8 chân từ chân 10 đến chân 17. Nó có
thể được sử dụng như đầu vào hoặc đầu ra. Cống P3 không cần các điện trở kéo
cũng như P1 và P2. Mặc dù cống P3 được cấu hình như một cống đầu ra khi tái lập,
nhưng đây không phải là cách nó được ứng dụng phổ biến nhất. Cống P3 có chức
năng bổ xung là cung cấp một số tín hiệu quan trọng đặc biệt chẳng hạn như các
ngắt. Bảng 1 cung cấp các chức năng khác của cống P3. Thông tin này áp dụng cho

cả 8051 và 8031.
Các bit P3.0 và P3.1 được dùng cho các tín hiệu nhận và phát dữ liệu trong
truyền thông dữ liệu nối tiếp. Các bit P3.2 và P3.3 được dành cho các ngắt ngoài.
Bit P3.4 và P3.5 được dùng cho các bộ định thời 0 và 1. Cuối cùng các bit P3.6 và
P3.7 được cấp cho các tín hiệu ghi và đọc các bộ nhớ ngoài được nối tới các hệ
thống dựa trên 8051/31. Trong các hệ thống dựa trên 8751, 89C51 hoặc D35000
thì các chân P3.6 và P3.7 được dùng cho vào - ra còn các chân khác của P3 được sử
dụng bình thường trong vai trò chức năng thay đổi.
Bài tập lớn
11
Khoa: Điện – Điện tử Lớp: CĐ Điện Tử 1 - K6
Chương 2
TÌM HIỂU TIMER VÀ NGẮT
2.1. TIMER trong 8051
2.1.1 Timer là gì?
Các bộ định thời (Timer) được sử dụng rất rộng dãi trong các ứng dụng đo
lường và điều khiển.
Vi điều khiển AT89S52 có 3 bộ định thời 16 bít Timer 0, Timer 1, Timer 2
trong đó Timer 0 và Timer 1 có bốn chế độ hoạt động, Timer 2 có ba chế độ hoạt
động. Các bộ định thời được sử dụng để định khoảng thời gian (hẹn giờ), đếm
các sự kiện xảy ra bên ngoài bộ vi điều khiển.Tùy thuộc vào ứng dụng, đầu vào
bộ định thời có thể là nguồn xung lấy từ xung nhịp của vi điều khiển hoặc nguồn
xung từ bên ngoài đưa đến.
Trong các ứng dụng định khoảng thời gian, Timer được lập trình sao cho sẽ
tràn sau một khoảng thời gian và thiết lập cờ tràn bằng 1. Cờ tràn được sử dụng
bởi trương trình để thực hiện một hành động tương ứng như kiểm tra các trạng
thái ngõ vào hay gửi các sự kiện ra các ngõ ra.Đếm sự kiện dùng để xác định số
lần xảy ra của một sự kiện. Trong ứng dụng này người ta đưa các sự kiện thành
sự chuyển mức từ 1 xuống 0 trên các chân T0, T1 hoặc T2 để dùng các timer
tưng ứng đếm các sự kiện đó. Ngoài ra các Timer còn được dùng để tạo xung

nhịp hoặc đo độ rộng xung.
2.1.2 Thanh ghi chế độ định thời (TMOD)
Thanh ghi TMOD chứa hai nhóm 4 bít dùng để đặt chế độ lsmf việc cho
Timer 0 và Timer 1.

Chức năng các bít trên thanh ghi chế độ định thời (TMOD):
Bài tập lớn
12
Khoa: Điện – Điện tử Lớp: CĐ Điện Tử 1 - K6
GATE 1: Bít mở cổng cho Timer 1, khi được đặt bằng 1 thì Timer 1chỉ chạy
khi chân INT 1 ở mức cao. Nếu bít này được đặt là 0 thì hoạt động của Timer 1
không bị ảnh hưởng bởi mức logic trên chân INT 1.
GATE 0: Bít mở cổng cho Timer 0, khi được đặt bằng 1 thì Timer 0 chỉ chạy
khi chân INT 0 ở mức cao. Nếu bít này được đặt là 0 thì hoạt động của Timer 0
không bị ảnh hưởng bởi mức logic trên chân INT 0.
C/#T1: Bít chọn chế độ Counter/Timer của Timer 1. Nếu 1 là đếm sự kiện,
nếu 0 là định thời gian.
C/#T0: Bít chọn chế độ Counter/Timer của Timer 0. Nếu 1 là đếm sự kiện,
nếu 0 là định thời gian.
M1-M0: Hai bít chọn chế độ làm việc của Timer (00,01,10,11).
2.1.3. Thanh ghi điều khiển Timer (TCON)
Thanh ghi TCON chứa các bít trạng thái và các bít điều khiển cho
Timer 0 và Timer 1.


Chức năng các bít trên thanh ghi điều khiển Timer (TCON):
TF1: Cờ báo tràn của Timer 1 được đặt bởi phần cứng khi có tràn, được xóa
bởi phần mềm hoặc phần cứng khi bị xử lý chỉ đến trình phục vụ ngắt.
TR1: Bít điều khiển Timer 1 hoạt động được đặt/xóa bằng phần mềm để điều
khiển cho Timer chạy/dừng.

TF0: Cờ báo tràn của Timer 0 được đặt bởi phần cứng khi có tràn, được xóa
bởi phần mềm hoặc phần cứng khi biij xử lý chỉ đến trình phục vụ ngắt.
TR0: Bít điều khiển Timer 0 hoạt động được đặt/xóa bằng phần mềm để điều
khiển cho Timer chạy/dừng.
IT1: Cờ ngắt do Timer 1.
IE1: Cờ ngắt ngoài 1.
IT0: Cờ ngắt do Timer 0.
IE0: Cờ ngắt ngoài 0.
Bài tập lớn
13
TF1 TR1 TF0 TR0 IT1 IE1 IT0 IE0
TCON.7 TCON.6 TCON.5 TCON.4 TCON.3 TCON.2 TCON.1 TCON.0
Khoa: Điện – Điện tử Lớp: CĐ Điện Tử 1 - K6
2.1.4. 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ó thanh ghi 8 bít
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

2.1.5. Thanh ghi T2CON

TF2: Cờ báo tràn của Timer 2, TF2 được đặt khi Timer 2 tràn và được xóa bằng
phần mềm TF 2 không được thiết lập khi TCLK hoặc RCLK được đặt bằng 1.
EXF2: Cờ ngắt ngoài của Timer 2, TXF2 =1, khi xảy ra sự nạp lại hoặc thu
nhận. EXF2 = 1 cũng gây ra ngắt do Timer 2 nếu như ngắt này được lập trình cho
phép, EXF2 được xóa bởi phần mềm.
RCLK: Bít chọn Timer cung cấp xung nhịp cho đường nhận cồng nối tiếp.
+ RCLK = 1 thì Timer 2 sẽ cung cấp tốc độ baud cho cổng nối tiếp
+ RCLK = 0 thì Timer 1 sẽ cung cấp tốc độ baud cho cổng nối tiếp
TCLK : Bít chọn Timer cung cấp xung nhịp cho đường truyền cồng nối tiếp.
EXEN2: Bít điều khiển hoạt động của Timer 2, khi EXEN2 = 1 việc nạp lại

hoặc thu nhận (Capture) diễn ra khi có sự chuyển trạng thái từ 1 sang 0 ở chân
T2EX nếu T2 không sử dụng để cung cấp tốc độ baud cho cổng nối tiếp.
TR2: Bít điều khiển hoạt động của Timer 2 (giống TR0 và TR1).
C/#T2: Bít chọn chế độ Counter/Timer của Timer 2.
CP/#RL2: Bít chọn chế độ thu nhận hay nạp lại của Timer 2. Khi
CP/#RL2C=1 việc thu nhận được thực hiện khi có xườn xuống ở chân T2EX và bít
EXEN2 được đặt là 1. Khi CP/#RL2C=0 việc nạp lại được thực hiện khi hoặc là
Bài tập lớn
14
TF2 EXF2 RCLK TCLK EXEN2 TR2 C/#T2 CP/#RL2
T2CON.7 T2CON.6 T2CON.5 T2CON.4 T2CON.3 T2CON.2 T2CON.1 T2CON.0
TH0 (8 bít) TL0 (8 bít)
Timer 0
TH1 (8 bít) TL1 (8 bít)
Timer 1
Khoa: Điện – Điện tử Lớp: CĐ Điện Tử 1 - K6
Timer 2 tràn hoặc là có sườn xuống ở chân T2EX và bít EXEN2 được đặt ở mức 1.
Nếu RCLK hoặc TCLK bằng 1, Bít này được bỏ qua, Timer 2 tự nạp lại khi tràn.
2.1.6. Thanh ghi T2MOD
Các bít từ T2MOD.7 đến T2MOD.2 không được sử dụng Bít T2MOD.1 ký
hiệu là T2OE cho phép đầu ra khi sử dụng Timer 2 để tạo xung
Bít T2MOD.0 ký hiệu là DCEN bít cho phép Timer 2 hoạt động như
một bộ đếm tiến/lùi.
2.1.7. Thanh ghi TH2, TL2, RCAP2H và RCAP2L
Giống như TH0,1 và TL01, TH2 và TL2 chứa các giá trị đếm của Timer 2, tuy
nhiên khác nhau là Timer 0,1 có thể dùng THx để chứa giá trị nạp lại còn Timer 2
dùng RCAP2H và RCAP2L để chứa giá trị cần nạp lại.
Chế độ 0:
Chế độ 0 là chế độ định thời 13 bít, chế độ này chỉ tương thích với các bị vị
điều khiển trước kia, giờ chế độ này không còn thích hợp, ít được sử dụng.Trong

chế độ này bộ định thời dùng 13 bít ( 8 bít TH và 5 bít TL) để chứa giá trị đếm, 3
bít thấp của TL không được sử dụng.
Nguyên lý hoạt động
Nguồn xung Clock được đưa tới Timer từ các nguồn khác nhau phụ thuộc vào bít
C/#Tx trong thanh ghi TMOD.
Nếu C/#Tx = 1, xung Clock được lấy từ bên ngoài qua chân Tx (T0, T1 hoặc T2)
Nếu C/#Tx = 0, xung Clock sẽ được lấy từ bộ chia tần trong chíp, tần số của
xung ở đây là 1/12 tần số của bộ dao động thạch anh (Fosc).
Nguồn xung Clock nói trên sẽ được điều khiển để đưa tới các Timer bằng các
bít TR, GATE và mức logic trên các chân INTx.
Nếu TRx = 0, các Timer sẽ bị cấm mà không cần quan tâm đến GATE và mức
logic trên các chân INTx (thể hiện là cổng AND).
Nếu TRx = 1, các Timer sẽ hoạt động khi hoặc là bít GATE = 0 hoặc là bít
GATE = 1 và trên chân INTx có mức logic là 1.
Chế độ 1
Trong chế độ 1, bô định thời dùng cả hai thanh ghi TH và TL để chứa giá trị
đếm, vì vậy chế độ này còn gọi là chế độ định thời 16 bít.Với chế độ 1 giá trị lớn
Bài tập lớn
15
Khoa: Điện – Điện tử Lớp: CĐ Điện Tử 1 - K6
nhất mà Timer chứa được là 65535 (tương ứng FFFFH), khi đếm quá giá trị này xẽ
xảy ra tràn, khi cờ tràn TF sẽ được đặt bằng 1. Sau khi tràn nếu muốn chương trình
đếm tiếp ta phải có câu lệnh nạp lại giá trị khở tạo sau khi dừng Timer bằng cách
xóa bít TR.
Chế độ 2
Trong chế độ 2 bộ Timer dùng TL để chứa các giá trị đếm và TH chứa giá trị
nạp lại vì vậy chế độ này được gọi là chế độ tự nạp lại 8 bít. Sau khi đếm quá 255
sẽ xảy ra tràn, khi đó TF được đặt bằng 1 đồng thời giá trị của Timer tự động được
nạp lại bằng nội dung TH.
Chế độ 3

Trong chế độ 3, Timer 0 được tách thành 2 bộ Timer 8 bít hoạt động độc lập
chế độ này sẽ giúp cung cấp thêm cho ta một bộ Timer nữa.
Nguyên lý hoạt động
Bộ Timer thứ nhất với nguồn xung Clock được lấy từ bộ chia tần trên chíp
hoặc từ bộ dao động bên ngoài qua chân T0 tùy thuộc vào giá trị của bít C/#T0 việc
điều khiển hoạt động của bộ thứ nhất do bit GATE, bít TR0 và mức logic trên chân
INT0(giống chế độ 0,1,2). Giá trị đếm chứa trong TL0, khi tràn cờ tràn TF0 = 1
gây ra ngắt bởi Timer 0.Bộ Timer thứ hai với nguồn xung Clock được lấy từ bộ
chia tần trên chíp viếc điều khiển hoạt động chỉ là việc đặt lại giá trị của bít TR0,
giá trị đếm chứa trong TH0 khi tràn cờ tràn TF1 = 1 gây ra ngắt bởi Timer 1.Khi
Timer 0 được tách thành 2 Timer 8 bít thì Timer 1 vẫn hoạt động bình thường với
các chế độ 0,1,2.
2.2. Ngắt trong 8051
2.2.1. Ngắt là gì?
Một bộ vi điều khiển có thể phục vụ một vài thiết bị, có hai cách để thực hiện
điều này đó là sử dụng các ngắt và thăm dò (polling). Trong phương pháp sử dụng
các ngắt thì mỗi khi có một thiết bị bất kỳ cần đến dịch vụ của nó thì nó báo cho bộ
vi điều khiển bằng cách gửi một tín hiệu ngắt.
Khi nhận được tín hiệu ngắt thì bộ vi điều khiển ngắt tất cả những gì nó đang
thực hiện để chuyển sang phục vụ thiết bị. Chương trình đi cùng với ngắt được gọi
Bài tập lớn
16
Khoa: Điện – Điện tử Lớp: CĐ Điện Tử 1 - K6
là trình dịch vụ ngắt ISR (Interrupt Service Routine) hay còn gọi là trình quản lý
ngắt (Interrupt handler).
Còn trong phương pháp thăm dò thì bộ vi điều khiển hiển thị liên tục tình
trạng của một thiết bị đã cho và điều kiện thoả mãn thì nó phục vụ thiết bị. Sau đó
nó chuyển sang hiển thị tình trạng của thiết bị kế tiếp cho đến khi tất cả đều được
phục vụ.
Khi kích hoạt một ngắt bộ vi điều khiển đi qua các bước sau:

Nó kết thúc lệnh đang thực hiện và lưu địa chỉ của lệnh kế tiếp (PC) vào ngăn
xếp.
Nó cũng lưu tình trạng hiện tại của tất cả các ngắt vào bên trong (nghĩa là
không lưu vào ngăn xếp).Nó nhảy đến một vị trí cố định trong bộ nhớ được gọi là
bảng véc tơ ngắt nới lưu giữ địa chỉ của một trình phục vụ ngắt.
Bộ vi điều khiển nhận địa chỉ ISR từ bảng véc tơ ngắt và nhảy tới đó. Nó bắt
đầu thực hiện trình phục vụ ngắt cho đến lệnh cuối cùng của ISR là RETI (trở về từ
ngắt).Khi thực hiện lệnh RETI bộ vi điều khiển quay trở về nơi nó đã bị ngắt.
Trước hết nó nhận địa chỉ của bộ đếm chương trình PC từ ngăn xếp bằng cách kéo
hai byte trên đỉnh của ngăn xếp vào PC. Sau đó bắt đầu thực hiện các lệnh từ địa
chỉ đó.
Lưu ý ở bước 5 đến vai trò nhạy cảm của ngăn xếp, vì lý do này mà chúng ta
phải cẩn thận khi thao tác các nội dung của ngăn xếp trong ISR. Đặc biệt trong ISR
cũng như bất kỳ chương trình con CALL nào số lần đẩy vào ngăn xếp (Push) và số
lần lấy ra từ nó (Pop) phải bằng nhau.
2.2.2. Các ngắt của 8051.
AT89S52 có 6 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
Bài tập lớn
17
Khoa: Điện – Điện tử Lớp: CĐ Điện Tử 1 - K6
• Ngắt do Port nối tiếp
6 ngắt này được xóa khi Reset và được đặt riêng bằng phần mềm bởi các bít
trong các thanh ghi cho phép ngắt (IE), thanh ghi ưu tiên ngắt (IP)
2.2.3. Các thanh ghi của ngắt
Thanh ghi cho phép ngắt IE (Interrupt Enable


EA: Cho phép hoặc cấm toàn bộ
-: Không được định nghĩa
ET2: Cho phép ngắt từ Timer 2
ES: Cho phép ngắt từ Port nối tiếp
ET1: Cho phép ngắt từ Timer 1
EX1: Cho phép ngắt ngoài 1
ET0: Cho phép ngắt từ Timer 0
EX0: Cho phép ngắt ngoài 0
Thanh ghi ưu tiên ngắt IP
-: Không được định nghĩa
-: Không được định nghĩa
PT2: Ưu tiên cho ngắt từ Timer 2
PS: Ưu tiên cho ngắt Port nối tiếp
PT1: Ưu tiên cho ngắt từ Timer 1
PX1: Ưu tiên cho ngắt ngoài 1
PT0: Ưu tiên cho ngắt từ Timer 0
PX0: Ưu tiên cho ngắt ngoài 0
Bài tập lớn
18
EA - ET2 ES ET1 EX1 ET0 EX0
7 6 5 4 3 2 1 0
- - PT2 PS PT1 PX1 PT0 PX0
7 6 5 4 3 2 1 0
Khoa: Điện – Điện tử Lớp: CĐ Điện Tử 1 - K6
2.2.4.Các vector ngắt
Khi có 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 IS (Interrupt
Service Routine) tương ứng với nguồn tạo ngắt.
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ằng phần mềm.
2.2.5. Làm việc với ngắt
Ngắt do các bộ timer, ngắt do cổng nối tiếp
Ngắt cổng nối tiếp khi hoặc cờ phát (TI) hoặc cờ thu (RI) được đặt lên mức
logic 1. Ngắt phát xảy ra khi bộ đếm truyền rỗng, ngắt thu xayra khi thu xong và
đang đợi SBUF để đọc (bô đệm truyền đầy).
Các ngắt do cổng nối tiếp khác với các ngắt do Timer. Cờ gây ra ngắt do Port
nối tiếp không bị xóa bằng phần cứng khi CPU chuyển tới ISR do có hai nguồn
ngắt do cổng nối tiếp TI và RI, nguồn ngắt phải được xác định trong ISR và cờ tạo
ngắt sẽ được xóa bởi phần mềm.
Ngắt ngoài
Các ngăt ngoài xảy ra khi có một mức thấp hặc cạnh xuống trên chân INT0
hoặc INT1 của bộ vi điều khiển.
Các cờ tạo ngắt này là các bít IE0 và IE1 trong TCON. Khi quyền điều khiển
đã chuyển đến ISR, cờ tạo ra ngắt chỉ được xòa khi ngắt được tích cực bằng cách
xuống, nếu ngắt được tích cực theo mức, thì nguồn yêu cầu ngắt bên ngoài sẽ điều
khiển mức của cờ thay đôit cho phần cứng.
Bài tập lớn
19
Khoa: Điện – Điện tử Lớp: CĐ Điện Tử 1 - K6
Cách thức tích cựu ngắt được đặt bởi các bít ITx trong thanh ghi SCON, nếu
ITx = 0, ngắt được tích cực bằng mức thấp, nếu ITx = 1, ngắt được tích cực bằng
cạnh xuống (sườn âm). Nếu ngắt ngoài được tác động bằng cạnh xuống thì nguồn
bên ngoài phải giữ chân INTx ở mức cao tối thiểu trong 1 chu kỳ máy để đảm bảo
cho CPU phát hiện được sườn xuống
Nếu ngắt ngoài tác động ở mức thấp thì nguồn bên ngoài phải giữ chân INTx
ở mức thấp cho đến khi ngắt được đáp ứng và không tác động nữa khi ISR hoàn tất
nếu không một ngắt khác sẽ được lặp lại.
Bài tập lớn
20

Khoa: Điện – Điện tử Lớp: CĐ Điện Tử 1 - K6
Chương 3
MỘT SỐ VÍ DỤ ỨNG DỤNG CƠ BẢN
3.1. Bài 1
Yêu cầu: Viết chương trình điều khiển 8 LED nối với PORT P2 nháy
4 trạng thái khác nhau.
3.1.1. Mô phỏng
3.1.2. Code
#include<reg52.h>
#include<math.h>
#define vua 10000
void delay(unsigned int time){
unsigned int i;
for(i=0;i<time;i++);}
Bài tập lớn
21
Khoa: Điện – Điện tử Lớp: CĐ Điện Tử 1 - K6
trang_thai_4(unsigned int tre, bit chedo,bit chieu){
char i;
unsigned int x=0;
/*Dao tu sang > tat (PIN nao dang o muc 1 dao thanh muc 0 va nguoc
lai) */
if (chedo==0) P2=x; else P2=~x;
delay(tre); // Tao tre
for(i=7;i>=0;i ){ // Vong lap tu PIN_8 den PIN_1
/*Chon chieu chay tu PIN_1 den PIN_8 hoac nguoc lai tu PIN_8 den
PIN_1*/
if (chieu==1) x=x+pow(2,i); else x=x+pow(2,7-i);
if (chedo==0) P2=x; else P2=~x;
delay(tre);}

}
void main(void){
(1){
trang_thai_4(vua,0,0);
trang_thai_4(vua,1,0);
trang_thai_4(vua,0,1);
trang_thai_4(vua,1,1);
/*Goi ham va truyen cac tham so
- Cac tham so 0 hoac 1 de chon trang thai
- Tuong ung voi gia tri nhi phan 00, 01, 10,11 cho ta 4 trang thai
Uu Diem: Ham ngan gon, linh hoat, mem deo trong qua trong dieu khien.
*/
}}
3.2 Bài 2
Bài tập lớn
22
Khoa: Điện – Điện tử Lớp: CĐ Điện Tử 1 - K6
Yêu cầu: Viết chương trình điều khiển 16 LED nháy 5 trạng thái
khác nhau.
3.2.1. Mô phỏng
3.2.2. Code
#include<reg52.h>
#include<math.h>
#define vua 10000
/*Ham tao ngat*/
void delay(unsigned int time){
unsigned int i;
for(i=0;i<time;i++);}
/*Hieu ung 1*/
hieu_ung_1(unsigned int tre, bit chieu, bit chedo){

/*Thiet lap, khoi tao gia tri ban dau*/
int i=0,j,k;
Bài tập lớn
23
Khoa: Điện – Điện tử Lớp: CĐ Điện Tử 1 - K6
unsigned int x=0, y=0,b=16;
/*Lua chon che do dao(~)
PIN nao dang la muc 0 se chuyen thanh muc 1 va nguoc lai*/
if (chedo==1){ P1=y;P2=x;} else{P1=~y;P2=~x;}
delay(tre);
/*Vong lap while- Linh hoat hon vong for*/
while(i<b){ //Lua chon chieu chay thuan hoac nguoc
if (chieu==1){j=i;k=i-8; }
if (chieu==0){j=b;k=b-8; }
if(j<8) { x=x+pow(2,j);}else{
y=y+pow(2,k);}
if (chedo==1){ P1=y;P2=x;} else{P1=~y;P2=~x;}
delay(tre);
/*Tang hoac giam gia tri bien sau moi vong lap while*/
if (chieu==1)i++;else b ;
}}
/*Hieu ung 2*/
hieu_ung_2(unsigned int tre,bit chedo,char solan){
int i;
unsigned int x;
/*Chon che do ban dau
Neu chedo=1 => x=0xaa nhap nhay xen ke
Neu chedo=0 x=0 Nhap nhay sang tat don thuan*/
if (chedo==1) x=0xaa; else x=0;
for(i=0;i<solan;i++){

x=~x;
P1=P2=x;
delay(tre);}
}
void main(void){
while(1){
Bài tập lớn
24
Khoa: Điện – Điện tử Lớp: CĐ Điện Tử 1 - K6
hieu_ung_2(vua,0,4);
hieu_ung_2(vua,1,4);
hieu_ung_1(vua,0,0);
hieu_ung_1(vua,0,1);
hieu_ung_1(vua,1,0);
hieu_ung_1(vua,1,1);
/*Goi ham va truyen cac tham so
- Cac tham so 0 hoac 1 de chon trang thai
- Tuong ung voi gia tri nhi phan 00, 01, 10,11 cho ta 4 trang thai
Uu Diem: Ham ngan gon, linh hoat, mem deo trong qua trong dieu khien.
*/
}}
3.3 Bài 3
Bài tập lớn
25

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×