Tải bản đầy đủ (.docx) (43 trang)

Bài Tập Lớn Vi Xử Lý

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 (1.78 MB, 43 trang )

MỤC LỤC

T

Lời Cảm Ơn

rong những năm gần đây những tiến bộ của khoa học kĩ thuật đã đóng góp rất nhiều vào
thành công cho các lĩnh vực của đời sống xã hội .Các ngành Tự động hóa, Đo lường và Điều
khiển cũng đã có những tiến bộ vượt bậc về mặt công nghệ và giải pháp, trong đó sự hiểu
biết và khả năng ứng dụng kỹ thuật vi xử lý nói chung và kỹ thuật vi điều khiển nói riêng là
rất cần thiết đối với công nhân, cử nhân, kỹ sư… hiện nay. Chính điều đó đã giúp ích rất nhiều cho hệ
thống điều khiển tự động thay thế con người trong các công việc đòi hỏi sự chính xác và kỹ thuật cao.
Để hiểu rõ hơn về vai trò cũng như sự hữu ích của các hệ thống vi điều khiển này trong thực tế
thì nhóm sinh viên chúng em sau một thời gian học tập được các thầy cô trong khoa giảng dạy về kiến
thức chuyên ngành đồng thời dưới sự giúp đỡ tận tình của thầy *** đã tiến hành nghiên cứu và thực hiện
đề tài: “Điều khiển hệ thống đóng bao sản phẩm”.
Với đề tài này giúp chúng ta có thể biết được một hệ thống đóng gói sản phẩm hoạt động như
thế nào, sự hoạt động chính xác cao của các băng chuyền mà không cần tác động trực tiếp của con người
.Hơn nữa là giúp chúng ta tầm quan trọng của các vi điều khiển trong việc điều khiển hệ thống đòi hỏi
độ chính xác và kỹ thuật cao.
Trong mô hình của chúng em sử dụng là vi điều khiển AT89S52 cùng 1 số các phụ kiện hỗ trợ
khác .Cùng với sự hỗ trợ của các phần mềm Keil-C Proteus Progisp để giúp đỡ trong quá trình thực hiện.
Do thời gian và trình độ còn hạn chế nên có thể chúng em vẫn còn rất nhiều thiếu sót, chúng em
rất mong nhận sự góp ý nhiều hơn để có thể hoàn thiện ngày một tốt hơn.
Cuối cùng chúng em xin gửi lời cảm ơn đặc biệt đến thầy đã tạo điều kiện ,giúp đỡ cũng như
đưa ra nhiều lời khuyên cho chúng em hoàn thành đề tài này một cách tốt đẹp.
Chúng em xin chân thành cảm ơn.


I


Tổng quan về Vi sử lý trong Đo lường và
Điều khiển
Có thể nói việc sử dụng các loại vi điều khiển và vi xử lý trong các thiết bị điện tử

tự động ở Việt Nam rất đa dạng, phong phú tùy vào yêu cầu kỹ thuật và giá thành sản
phẩm.
Đối với các thiết bị như các máy ATM, máy giặt thường sử dụng vi điều khiển
8051, các bộ điều khiển trong robot công nghiệp, trong hệ thống ô tô thường sử dụng
PIC, AVR, PsoC, còn trong điện thoại sử dụng các chip ARM…

1

Cấu trúc hệ thống đo lường điều khiển có sử dụng Vi xử lý

I.1.1

Khái quát chung về hệ thống.

Việc ứng dụng khoa học công nghệ vào sản xuất công nghiệp nhằm mục tiêu tăng năng xuất lao
động, cải thiện chất lượng sản phẩm, độ chính xác cao, giá thành hạ ...
Các hệ thống đo lường điều khiển được đưa vào sản xuất trong các xí nghiệp, nhà máy với độ tin
cậy cao, hoạt động ổn định, ít hư hỏng và giảm nhân công lao động. Điều này đòi hỏi hệ thống điều
khiển có khả năng xử lý, kiểm soát được các sự cố và có thể tự khắc phục được sự cố, các sai sót khi vận
hành. Một hệ thống như trên gọi là hệ thống điều khiển
Tự động hoá là bước phát triển tiếp theo sau cơ khí hoá và điện khí hoá. Tự động hoá là quá trình
sử dụng thiết bị dể thay thế chức năng kiểm tra và điều khiển của con người trong một quy trình sản
xuất. Hệ thống tự động hoá bắt đầu xuất hiện với việc sử dụng các thiết bị đo lường kiểm tra các thông
số công nghệ và chất lượng sản phẩm. Các hệ thông này thông báo khá chính xác các thông tin về trạng
thái của thiết bị, các thông số của quy trình công nghệ v.v... Các thông tin này trước đây chỉ có những
người dày dạn kinh nghiệm mới chuẩn đoán được, nhưng cũng chỉ bảo đảm ở mức độ chính xác tương

đối. Các thông tin quá trình hoàn thiện quy trình công nghệ.
Như vạy các hệ thống đo lường điểu khiển đã góp phần quan trọng trong điều khiển các dây chyền
sản xuất cần độ chính xác cao trong các nhà máy xí nghiệp, nâng cao năng suất lao động, phát triển kinh
tế.

I.1.2

Hệ thống đóng bao sản phẩm có sử dụng vi xử lý

2


2

Giới thiệu một số vi điều khiển thông dụng có trên thị trường Việt Nam

1 Vi điều khiển 8051

Hình 1.2.1. 2 hình ảnh về AT89S52
8051 - là vi điều khiển đơn tinh thể kiến
Hình 1.2.1. 1 sơ đồ chân 8051

trúc Harvard, lần đầu tiên được sản xuất bởi
Intel năm 1980, để dùng trong các hệ thống

nhúng. Trong những năm 1980 và đầu những năm 1990 đã rất nổi tiếng. Tuy nhiên hiện
tại đã cũ và được thay thế bằng các thiết bị hiện đại hơn, với các lõi phối hợp 8051, được
sản xuất bởi hơn 20 nhà sản xuất độc lập như Atmel, Maxim IC (công ty con của Dallas
Semiconductor), NXP Semiconductors (Philips Semiconductor trước đây), Winbond,
Silicon Laboratories, Texas Instruments và Cypress Semiconductor. Tên gọi chính thức

của họ vi điều khiển Intel 8051 - MCS 51. Những vi điều khiển Intel 8051 được sản xuất
với việc dùng công nghệ MOSFET, những những bản sau, chứa kí hiệu “C” trong tên,
như 80C51, dùng công nghệ CMOS và yêu cầu công suất thấp, hơn những cái MOSFET
trước (điều này cho phép trang bị cho các thiết bị với nguồn là pin). Các thông số kỹ
thuật: 8 bit ALU, 8 bit thanh ghi. 8 bit dữ liệu bus 16 bit địa chỉ bus vì vậy không gian bộ
nhớ tối đa cho ROM và RAM lên tới 64 kb Bộ nhớ dữ liệu SRAM 128 bytes Bộ nhớ
chương trình ROM 4 kb. 32 chân vào/ra đa hướng. Giao tiếp nối tiếp UART. Hai bộ
3


timer/counter 16 bit. Hai ngắt ngoài. Sơ đồ chân của 8051: Sơ đồ khối điều khiển: Lập
trình cho 8051: Các nhà sản xuất 8051 đều hỗ trợ ngôn ngữ lập trình Assembler tuy nhiên
ngôn ngữ này thường ít được dùng cho những ứng dụng lớn do tính phù hợp của nó, vì
vậy trong các ứng dụng thực tế hay sử dụng ngôn ngữ C. Ngoài ra còn một số ngôn ngữ
khác được phát triển cho 8051 như Pascal, Basic, Forth.

2 Vi điều khiển AVR
Là dòng vi điều khiển do hãng Atmel sản xuất có nhiều loại AVR như:





32-bit AVR UC3.
8/16-bit AVR XMEGA.
8-bit mega AVR.
8-bit tiny AVR.

Vi điều khiển Atmega 16: Là vi điều khiển 8 bit với tiêu thụ điện năng thấp dựa trên
kiến trúc RISC (Reduced Instruction Set Computer). Vào ra Analog – digital và ngược

lại. Với công nghệ này cho phép các lệnh thực thi chỉ trong một chu kì xung nhịp, vì thế
tốc độ xử lý dữ liệu có thể đạt đến 1 triệu lệnh trên giây ở tần số 1Mhz. Vi điều khiển này
cho phép người thiết kế có thể tối ưu hoá chế độ tiêu thụ năng lượng mà vẫn đảm bảo tốc
độ xử lý. Lõi AVR có tập lệnh phong phú với số lượng với 32 thanh ghi làm việc chung
với nhau. Tất cả 32 thanh ghi đều được nối trực tiếp với ALU (Arithmetic Logic Unit),
cho phép 2 thanh ghi truy cập độc lập trong một chỉ lệnh đơn trong một chu kỳ xung
nhịp. Kiến trúc đạt được có tốc độ xử lý nhanh gấp 10 lần vi điều khiển dạng CISC
(Complex Instruction Set Computer) thông thường. Atmega 16 được hỗ trợ đầy đủ phần
mềm và công cụ phát triển hệ thống bao gồm: Trình dịch Assembly như AVR studio của
Atmel, Trình dịch C như win AVR, CodeVisionAVR C, ICCAVR. C - CMPPILER của
GNU… Trình dịch C đã được nhiều người dùng và đánh giá tương đối mạnh, dễ tiếp cận
đối với những người bắt đầu tìm hiểu AVR, đó là trình dịch CodeVisionAVR C. Phần
mềm này hỗ trợ nhiều ứng dụng và có nhiều hàm có sẵn nên việc lập trình tốt hơn. - Bộ
nhớ: Flash 16KB EEPROM 512 Byte SRAM 1KB. - Ngoại vi: Hai timer 8 bit Một timer
16 bit Bộ counter với tần số riêng Bốn bộ điều chế độ rộng xung PWM. Tám kênh ADC
10 bit. USART. Giao tiếp SPI, Giao diện I2C. Watchdog timer. Bộ so sánh tương tự trên
chip. - Tính năng: Tập lệnh gồm 131 lệnh, hầu hết thực hiện trong một chu kỳ máy. Xử lý
16 triệu lệnh ở tần số 16 MHZ. 32 chân vào/ra có thể lập trình được. Sáu chế độ sleep .
4


40 pin kiểu PDIP, 44 pin kiểu TQFP và kiểu QFL/MLF. 32 thanh ghi 8 bit đa dụng. Ngắt
trong và ngắt ngoài. Điện áp hoạt động từ 2,7-5,5V cho Atmega 16A.

3

V
i

điều khiển PIC

PIC



Hình 1. 2.2một số hình ảnh về AVR

RISC được sản

một họ vi điều khiển
xuất

bởi

công

ty

Microchip Technology. Dòng PIC đầu tiên là PIC1650 được phát triển bởi
Microelectronics Division thuộc General Instrument . PIC bắt nguồn là chữ viết tắt của
"Programmable Intelligent Computer" (Máy tính khả trình thông minh). Là vi điều khiển
với kiến trúc RISC thực thi một lệnh với một chu kỳ máy (bằng bốn chu kỳ của bộ dao
động). Ngày nay có nhiều dòng PIC được sản xuất với hàng loạt các mô đun ngoại vi tích
hợp sẵn như ADC, PWM, USART, SPI…với bộ nhớ chương trình từ 512 word đến 32
Kword. Các họ vi điều khiển PIC: - Họ 8 bit: PIC 10/ PIC 12/ PIC 16/ PIC 18 - Họ 16 bit:
PIC 24F/ PIC 24H/ dsPIC 30/ dsPIC 33 - Họ 32 bit: PIC 32. Một vài đặc tính:










Chân vào/ra I/O có thể lập trình được.
Flash và ROM có thể tuỳ chọn từ 256 byte đến 512 Kbyte
Bộ dao động bên trong.
8/16/32 bit Timers.
Bộ nhớ EEPROM nội
Chuẩn giao tiếp nối tiếp đồng bộ và không đồng bộ USART
MSSP Peripheral cho giao tiếp I2C và SPI
Các chế độ so sánh, bắt giữ và điều chế độ rộng xung PWM.
5









Bộ so sánh điện áp.
Bộ chuyển đổi ADC (tần số có thể lên tới 1 MHz).
Hộ trợ các giao thức USB, CAN, Ethernet.
Mô đun điều khiển động cơ, mô đun đọc encoder.
Hộ trợ bộ nhớ ngoài.
DSP những tính năng xử lý tín hiệu số (dsPIC)

Lập trình cho PIC: Hãng Microchip cung cấp môi trường lập trình MPLAB nó bao

gồm phần mềm mô phỏng, trình dịch ASM, liên kết và gỡ rối. Ngoài ra hãng này cũng
bán trình biên dịch C cho các dòng PIC18 và dsPIC tích hợp trong MPLAB. Ngoài ra còn
một số công ty khác cung cấp trình biên dịch C, PASCAL, BASIC cho PIC đó có thể là
phần mềm thương mại hoặc phần mềm mã nguồn mở.

4
Hình 1.2.3 Một số hình ảnh về
PIC
Vi điều khiển ARM
Cấu trúc ARM (viết tắt từ
tên gốc là Acorn RISC Machine) là một loại cấu trúc vi xử lý 32-bit kiểu RISC được sử
dụng rộng rãi trong các thiết kế nhúng. Được phát triển lần đầu trong một dự án của công
ty máy tính Acorn. Do có đặc điểm tiết kiệm năng lượng, các bộ CPU ARM chiếm ưu thế
trong các sản phẩm điện tử di động, mà với các sản phẩm này việc tiêu tán công suất thấp
là một mục tiêu thiết kế quan trọng hàng đầu. Ngày nay, hơn 75% CPU nhúng 32-bit là
thuộc họ ARM, điều này khiến ARM trở thành cấu trúc 32-bit được sản xuất nhiều nhất
trên thế giới. CPU ARM được tìm thấy khắp nơi trong các sản phẩm thương mại điện tử,
từ thiết bị cầm tay (PDA, điện thoại di động, máy đa phương tiện, máy trò chơi cầm tay,
và máy tính cầm tay) cho đến các thiết bị ngoại vi máy tính (ổ đĩa cứng, bộ định tuyến để
6


bàn.). Một nhánh nổi tiếng của họ ARM là các vi xử lý Xscale của Intel. Giới thiệu về vi
điều khiển LPC2148: Là dòng vi điều khiển ARM được sản xuất bởi hãng Philips. Tính
năng:














Vi điều khiển 16/32-bit ARM7TDMI-S
40k RAM tĩnh (8k +32k), 512k flash
Tích hợp USB 2.0
Hỗ trợ hai bộ ADC 10 bit
Một bộ DAC 10 bit
2 bộ timer 32 bit, 6 ngõ điều chế độ rộng xung
Đồng hồ thời gian thực hỗ trợ tần số 32kHz
Khả năng thiết lập chế độ ưu tiên và định địa chỉ cho ngắt
45 chân GPIO vào ra đa dụng
9 chân ngắt ngoài (tích cực cạnh hoặc tích cực mức)
CPU clock đạt tối đa 60MHz thông qua bộ PLL lập trình được
Xung PLCK hoạt động độc lập.

On-chip Flash Memory: LPC 2148 có 512K bộ nhớ Flash có thể được dùng để lưu
trữ code và dữ liệu. Trong khi thực thi ứng dụng, vẫn có thể xóa hoặc lập trình Flash
thông qua IAP (In Application Programming). Khi đó trình loader trên chip được sử
dụng, bộ nhớ trống còn lại là 500K. Bộ nhớ Flash có thể ghi xóa được ít nhất 100000 lần,
lưu trữ dữ liệu đến 20 năm. On-chip Static RAM: LPC 2148 có 32K RAM tĩnh, có thể
được truy xuất theo đơn vị byte, half word & word. Bộ điều khiển SRAM sử dụng
phương thức write-back buffer để ngăn chặn tình trạng treo CPU khi có thao tác ghi. Bộ
đệm luôn giữ dữ liệu cuối cùng từ chương trình gửi tới bộ nhớ. Dữ liệu chỉ được ghi vào
SRAM khi có 1 thao tác ghi khác từ chương trình. Lập trình cho ARM: Ngôn ngữ lập

trình chính cho ARM hiện nay là ngôn ngữ C. Các trình biên dịch cho ARM thường được
dùng:





3

Keil ARM.
IAR.
HTPICC for ARM.
ImageCraft ICCV7 for ARM

Tổng quan về ngôn ngữ C và các hàm, kiểu dữ liệu hay dùng cho việc lập trình
cho Vi điều khiển

1 Ngôn ngữ C
7


C là ngôn ngữ lập trình cấp cao, được sử dụng rất phổ biến để lập trình hệ thống
cùng với Assembler và phát triển các ứng dụng.
Vào những năm cuối thập kỷ 60 đầu thập kỷ 70 của thế kỷ XX, Dennish Ritchie
(làm việc tại phòng thí nghiệm Bell) đã phát triển ngôn ngữ lập trình C dựa trên ngôn ngữ
BCPL (do Martin Richards đưa ra vào năm 1967) và ngôn ngữ B (do Ken Thompson phát
triển từ ngôn ngữ BCPL vào năm 1970 khi viết hệ điều hành UNIX đầu tiên trên máy
PDP-7) và được cài đặt lần đầu tiên trên hệ điều hành UNIX của máy DEC PDP-11.
Năm 1978, Dennish Ritchie và B.W Kernighan đã cho xuất bản quyển “Ngôn ngữ
lập trình C” và được phổ biến rộng rãi đến nay.

Lúc ban đầu, C được thiết kế nhằm lập trình trong môi trường của hệ điều hành
Unix nhằm mục đích hỗ trợ cho các công việc lập trình phức tạp. Nhưng về sau, với
những nhu cầu phát triển ngày một tăng của công việc lập trình, C đã vượt qua khuôn khổ
của phòng thí nghiệm Bell và nhanh chóng hội nhập vào thế giới lập trình để rồi các công
ty lập trình sử dụng một cách rộng rãi. Sau đó, các công ty sản xuất phần mềm lần lượt
đưa ra các phiên bản hỗ trợ cho việc lập trình bằng ngôn ngữ C và chuẩn ANSI C cũng
được khai sinh từ đó.
Ngôn ngữ lập trình C là một ngôn ngữ lập trình hệ thống rất mạnh và rất “mềm
dẻo”, có một thư viện gồm rất nhiều các hàm (function) đã được tạo sẵn. Người lập trình
có thể tận dụng các hàm này để giải quyết các bài toán mà không cần phải tạo mới. Hơn
thế nữa, ngôn ngữ C hỗ trợ rất nhiều phép toán nên phù hợp cho việc giải quyết các bài
toán kỹ thuật có nhiều công thức phức tạp. Ngoài ra, C cũng cho phép người lập trình tự
định nghĩa thêm các kiểu dữ liệu trừu tượng khác. Tuy nhiên, điều mà người mới vừa học
lập trình C thường gặp “rắc rối” là “hơi khó hiểu” do sự “mềm dẻo” của C. Dù vậy, C
được phổ biến khá rộng rãi và đã trở thành một công cụ lập trình khá mạnh, được sử
dụng như là một ngôn ngữ lập trình chủ yếu trong việc xây dựng những phần mềm hiện
nay.
Ngôn ngữ C có những đặc điểm cơ bản sau:
• Tính cô đọng (compact): C chỉ có 32 từ khóa chuẩn và 40 toán tử chuẩn, nhưng hầu hết

đều được biểu diễn bằng những chuỗi ký tự ngắn gọn.
8


• Tính cấu trúc (structured): C có một tập hợp những chỉ thị của lập trình như cấu trúc lựa

chọn, lặp… Từ đó các chương trình viết bằng C được tổ chức rõ ràng, dễ hiểu.
• Tính tương thích (compatible): C có bộ tiền xử lý và một thư viện chuẩn vô cùng phong
phú nên khi chuyển từ máy tính này sang máy tính khác các chương trình viết bằng C
vẫn hoàn toàn tương thích.

• Tính linh động (flexible): C là một ngôn ngữ rất uyển chuyển và cú pháp, chấp nhận

nhiều cách thể hiện, có thể thu gọn kích thước của các mã lệnh làm chương trình chạy
nhanh hơn.
• Biên dịch (compile): C cho phép biên dịch nhiều tập tin chương trình riêng rẽ thành các

tập tin đối tượng (object) và liên kết (link) các đối tượng đó lại với nhau thành một
chương trình có thể thực thi được (executable) thống nhất.
Hoặc là: (wikipedia)

2 Hàm
 Cấu trúc :

[kiểu_giá_trị_trả_về] tên_hàm([danh sách tham số]);
{
Các khai báo
…………….
Các câu lệnh
}





Trong đó:
Tên_hàm: là bất kỳ tên hợp lệ nào.
[kiểu_giá_trị_trả_về]: là kiểu dữ liệu của kết quả trả lại cho hàm nó gọi.
[danh sách tham số]: mô tả kiểu dữ liệu cùng thứ tự của các tham số hàm

nhận được khi nó được gọi.

• Các khai báo và câu lệnh trong cặp dấu {} tạo thành phần thân của
hàm(khối).
Sự hoạt động của 1 hàm:
9


Cấp phát bộ nhớ cho các đối và biến toàn cục.
Gán giá trị của cá tham số thực sự cho các đối tương ứng.
Thực hiện các câu lệnh trong thân hàm.
Khi gặp câu lệnh return hoặc dấu } cuối cùng của thân hàm thì máy sẽ xóa các đối






và các biến cục bộ khỏi bộ nhớ và hàm kết thúc.

Nếu hàm kết thúc bởi câu lệnh return có chứa biểu thức thì máy sẽ tính toán giá trị
của biểu thức chuyển đổi kiểu phù hợp và gán cho tên hàm.
Vd 1 số hàm:
Hàm delay:
Void delay( int time)
{
While(time--);
}
Hàm main:
Void main()
{
Các chương trình chính…

}

3 Kiểu dữ liệu thường dùng cho việc lập trình vi điều khiển
1

Các kiểu dữ liệu:
Kiểu ký tự (char):

-

Một giá trị kiểu char chiếm 1 byte và biểu diễn được một ký tự trong bảng mã
ASCII
-

Kiểu số nguyên:

10


Một giá trị kiểu số nguyên là một phần tử của một tập các số nguyên mà máy tính
có thể biểu diễn . Trong ngôn ngữ lập trình C có nhiều kiểu dữ liệu số nguyên với dải giá
trị khác nhau cụ thể:
Kiểu
Char
Unsigned char
Int
Unsigned int
Short int
Unsigned Short
Long Int

Unsigned Long

-

Phạm vi biểu diễn
-128 -> 127
0 -> 255
-32768 -> 32767
0 -> 65535
-32768 -> 32767
0 -> 32767
-2147483648 -> 2147483647
0 -> 4294967295

Kích thước(byte)
1
1
2
2
2
2
4
4

Kiểu số thực:
Một giá trị kiểu số thực là một phần tử của một tập các số thực mà máy tính có thể

biểu diễn . Trong ngôn ngữ lập trình C có nhiều kiểu dữ liệu số thực với dải giá trị khác
nhau cụ thể:
Kiểu

Float
Double
Long double
2

Phạm vi biểu diễn
3.4E-38 -> 3.4E+38
1.7E-311 -> 1.7E3+311
3.4E-4932 -> 3.4E+4932

Kích thước(byte)
4
8
10

Các toán tử điều khiển chương trình:
I

Cấu trúc điều khiển if
*Cấu trúc rẽ nhánh if dạng khuyết
Cú pháp câu lệnh:
If(bt)
Công_việc;
Trong đó:
- if là từ khóa
- bt là mộth biểu thức
- công_việc có thể là một lệnh đơn hay khối lệnh

11



*Cấu trúc rẽ nhánh if dạng đầy đủ
Cú pháp câu lệnh
If(bt)
Công_việc 1;
Else
Công_việc 2;
Trong đó:
- if, else là từ khóa
- bt là một biểu thức
- công_việc 1, công_việc 2 có thể là một lệnh đơn hay khối lệnh
II

Cấu trúc điều khiển switch
Cú pháp câu lệnh:
Switch (biểu_thức)
{
case e1: Khối_lệnh_1;[break;]
case e2: Khối_lệnh_2;[break;]
…………………
case e2: Khối_lệnh_n;[break;]
[default: Khối_lệnh_n+1;]
}
Trong đó:
- switch, case, default là các từ khóa
- biểu_thức: là một biểu thức nguyên bất kỳ

12



- ei: là giá trị nguyên mà biểu thức có thể nhận được . Có thể là kiểu
char vì nó có thể chuyển đổi thành kiểu int
- Những phần đặt trong hai dâu[và] có thể có hoặc không
III

Cấu trúc lặp while
Cú pháp câu lệnh
While(bt) công_việc;
Trong đó:
-

IV

while là từ khóa.
bt là một biểu thức.
công_việc có thể là một lệnh đơn hay một khối lệnh.

Cấu trúc lặp do…while
Cú pháp câu lệnh
Do
Công_việc;
While(bt);
Trong đó:
while, do là từ khóa
bt là một biểu thức
công_việc liệt kê các câu lệnh cần phải thực hiện
Cấu trúc lặp for
-

V


Cú pháp câu lệnh
For(bt1;bt2;bt3)
Công_việc;
Trong đó:
-

for là từ khóa
bt1, bt2, bt3 là các biểu thức
13


-

II

1

công_việc có thể là một lệnh đơn hay một khối lệnh

Cấu trúc phần cứng của 8051 và các thành
phần cơ bản

Cấu trúc phần cứng 8051

1 Sơ đồ khối
-

Kiến trúc cơ bản bên trong 8051 bao gồm các khối chức năng sau :
CPU (Central Processing Unit): đơn vị điều khiển trung tâm

Bộ nhớ chương trình ROM bao gồm 4 Kbyte
Bộ nhớ dữ liệu RAM bao gồm 128 byte
Bốn cổng xuất nhập
Hai bộ định thời/bộ đếm 16 bit thực hiện chức năng định thời và đếm sự kiện
Bộ giao diện nối tiếp (cổng nối tiếp)
Khối điều khiển ngắt với hai nguồn ngắt ngoài
Bộ chia tần số

Hình 2.1.1-1: Sơ đồ khối của bộ vi điều khiển 8051
14


2 Sơ đồ chân và chức năng các chân của vi điều khiển 8051
Hình 2.2 cho ta sơ đồ chân của chip 8051, mô tả chức năng các chân như sau:
* Chân 1 đến 8: Được gọi là Cổng 1 (Port 1), Tám chân này có duy nhất 1 chức
năng là xuất và nhập. Cổng 1 có thể xuất và nhập theo bit hoặc byte. Ta đánh tên cho mỗi
chân của Port 1 là P1.X (X = 0 đến 7)

Hình 2.1.2-2: Sơ đồ chân của 8051
* Chân 9: Là chân vào reset của 8051 Khi tín hiệu này được đưa lên mức cao trong
ít nhất là 2 chu kỳ máy, các thanh ghi trong bộ vi điều khiển được tải những giá trị thích
hợp để khởi động hệ thống. Hay nói cách khác là vi điều khiển sẽ bị reset nếu chân này
được kích hoạt mức cao.

15


Hình 2.1.2-3: Sơ đồ mạch reset ngoài của 8051
* Chân


10 đến 17: Được

gọi là Cổng 3 (Port 3) Tám chân này ngoài chức năng là xuất và nhập như các chân ở
cổng 1 (chân 1 đến 8) thì mỗi chân này còn có chức năng riêng nữa, cụ thể như sau:

Hình 2.1.2-4: Chân số 10-17

* Chân 18 và 19: (XTAL1 & XTAL2)
Hai chân này được sử dụng để nối với bộ dao động ngoài.

16


Hình 2.1.2-5: Mạch dao động ngoài
Thông thường một bộ dao động thạch anh sẽ được nối tới các chân đầu vào XTAL1
(chân 19) và XTAL2 (chân 18) cùng với hai tụ gốm giá trị khoảng 30pF. Một phía của tụ
điện được nối xuống đất như hình trên.
Các hệ thống xây dựng trên 8051 thường có tần số thạch anh từ 10 đến 40 MHz,
thông thường ta dùng thạch anh 12 Mhz.
* Chân 20: Được nối vào chân 0V của nguồn cấp.
* Chân 21 đến chân 28: Được gọi là cổng 2 (Port 2)
Tám chân của cổng 2 có 2 công dụng, ngoài chức năng là cổng xuất và nhập như
cổng 1 thì cổng 2 này còn là byte cao của bus địa chỉ khi sử dụng bộ nhớ ngoài.
* Chân 29 (PSEN):
Chân PSEN là chân điều khiển đọc chương trình ở bộ nhớ ngoài, nó được nối với
chân OE của ROM ngoài để cho phép đọc các byte mã lệnh trên ROM ngoài. PSEN ở
mức thấp trong thời gian đọc mã lệnh.
Khi thực hiện chương trình trong ROM nội thì PSEN được duy trì ở mức cao.
* Chân 30 (ALE): Chân ALE cho phép tách các đường dữ liệu và các đường địa
chỉ tại Port 0 và Port 2.

17


* Chân 31 (EA): Tín hiệu chân EA cho phép chọn bộ nhớ chương trình là bộ nhớ
trong hay ngoài vi điều khiển. Nếu chân EA được nối ở mức cao (nối nguồn Vcc), thì vi
điều khiển thi hành chương trình trong ROM nội. Nếu chân EA ở mức thấp (được nối
GND) thì vi điều khiển thi hành chương trình từ bộ nhớ ngoài.
* Chân 32 đến 39: Được gọi là cổng 0 (Port 0)
Cổng 0 gồm 8 chân cũng có 2 công dụng, ngoài chức năng xuất nhập, cổng 0 còn là
bus đa hợp dữ liệu và địa chỉ, chức năng này sẽ được sử dụng khi 8051 giao tiếp với các
biết bị ngoài có kiến trúc Bus như các vi mạch nhớ...
Vì cổng P0 là một máng mở khác so với các cổng P1, P2 và P3 nên các chân ở cổng
0 phải được nối với điện trở kéo khi sử dụng các chân này như chân vào/ra. Điện trở này
tùy thuộc vào đặc tính ngõ vào của thành phần ghép nối với chân của port 0. Thường ta
dùng điện trở kéo khoảng 4K7 đến 10K.

Hình 2.1.2-6:Nối điện trở kéo xuống cho cổng 0 của 8051

* Chân 40: chân nguồn của vi điều khiển, được nối vào chân Vcc của nguồn.

3 Tổ chức bộ nhớ
18


Trên vi điều khiển 8051/8052 đều có cả bộ nhớ chương trình (ROM) và bộ nhớ dữ
liệu (RAM). Tuy nhiên dung lượng của các bộ nhớ trên chip là hạn chế. Khi thiết kế các
ứng dụng đòi hỏi bộ nhớ lớn người ta có thể dùng bộ nhớ ngoài.
1

Bộ nhớ chương trình

Bộ nhớ chương trình là bộ nhớ chỉ đọc, là nơi lưu trữ chương trình của vi điều

khiển. Bộ nhớ chương trình của họ 8051 có thể thuộc một trong các loại sau ROM,
EPROM, FLASH hoặc không có bộ nhớ chương trình trên chip. Với họ vi điều khiển
89xx, bộ nhớ chương trình được tích hợp sẵn trong chip có kích thước nhỏ nhất là
4kByte. Với các vi điều khiển không tích hợp sẵn bộ nhớ chương trình trên chip, buộc
phải thiết kế bộ nhớ chương trình bên ngoài.
Địa chỉ đầu tiên của bộ nhớ chương trình là 0000H, chính là địa chỉ reset của vi điều
khiển. Ngay khi bật nguồn hoặc reset vi điều khiển, thì CPU sẽ nhảy đến thực hiện lệnh ở
địa chỉ 0000H này.
Khi sử dụng bộ nhớ trên chip thì chân EA phải được nối lên mức logic cao (+5V).
Nếu bạn muốn mở rộng bộ nhớ chương trình thì chúng ta phải dùng bộ nhớ ngoài với
dung lượng tối đa là 64Kbyte.
2

Bộ nhớ dữ liệu
Bộ nhớ dữ liệu tồn tại độc lập so với bộ nhớ chương trình. Họ vi điều khiển 8051 có

bộ nhớ dữ liệu tích hợp trên chip nhỏ nhất là 128byte và có thể mở rộng với bộ nhớ dữ
liệu ngoài lên tới 64kByte.

2

Các chức năng Timer và Ngắt của 8051

1 Ngắt của 8051
1

K/N ngắt
Ngắt (Interrupt) - như tên của nó, là một số sự kiện khẩn cấp bên trong hoặc bên


ngoài bộ vi điều khiển xảy ra, buộc vi điều khiển tạm dừng thực hiện chương trình hiện
tại, phục vụ ngay lập tức nhiệm vụ mà ngắt yêu cầu – nhiệm vụ này gọi là trình phục vụ
ngắt (ISR: Interrupt Service Routine).
19


2

Ngắt khác với thăm dò
Trong phương pháp sử dụng ngắt : mỗi khi có một thiết bị bất kỳ cần được phục vụ

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ừng tất cả những gì nó đang thực hiện để chuyển sang
phục vụ thiết bị gọi ngắt. Chương trình ngắt được gọi là trình phục vụ ngắt ISR(Interrupt
Service Routine) hay còn gọi là trình quản lý ngắt (Interrupt handler). Sau khi phục vụ
ngắt xong, bộ vi xử lý lại quay trở lại điểm bị ngắt trước đó và tiếp tục thực hiện công
việc.
Trong phương pháp thăm dò: bộ vi điều khiển kiểm tra liên tục tình trạng của tất
cả các thiết bị, nếu thiết bị nào có yêu cầu thì nó dừng lại phục vụ thiết bị đó. Sau đó nó
tiếp tục kiểm tra tình trạng của thiết bị kế tiếp cho đến hết. Phương pháp thăm dò rất đơn
giản, nhưng nó lại rất lãng phí thời gian để kiểm tra các thiết bị kể cả khi thiết bị đó
không cần phục vụ. Trong trường hợp có quá nhiều thiết bị thì phương án thăm dò tỏ ra
không hiệu quả, gây ra chậm trễ cho các thiết bị cần phục vụ.
*Điểm mạnh của phương pháp ngắt là:
Bộ vi điều khiển có thể phục vụ được rất nhiều thiết bị (tất nhiên là không tại cùng
một thời điểm). Mỗi thiết bị có thể nhận được sự chú ý của bộ vi điều khiển dựa trên mức
ưu tiên được gán cho nó. Đối với phương pháp thăm dò thì không thể gán mức ưu tiên
cho các thiết bị vì nó kiểm tra tất cả mọi thiết bị theo kiểu hỏi vòng.
Quan trọng hơn, trong phương pháp ngắt thì bộ vi điều khiển còn có thể che (làm

lơ) một yêu cầu phục vụ của thiết bị. Điều này lại một lần nữa không thể thực hiện được
trong phương pháp thăm dò.
Lý do quan trọng nhất mà phương pháp ngắt được ưu chuộng là vì nó không lãng
phí thời gian cho các thiết bị không cần phục vụ. Còn phương pháp thăm dò làm lãng phí
thời gian của bộ vi điều khiển bằng cách hỏi dò từng thiết bị kể cả khi chúng không cần
phục vụ.
Ví dụ trong các bộ định thời khi ta dùng một vòng lặp kiểm tra và đợi cho đến khi
bộ định thời quay trở về 0. Trong ví dụ đó, nếu sử dụng ngắt thì ta không cần bận tâm đến
việc kiểm tra cờ bộ định thời, do vậy không lãng phí thời gian để chờ đợi, trong khi đó ta
có thể làm việc khác có ích hơn.
3

Các bước khi thực hiện một ngắt
20


1 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.
2 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).
3 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 chi của một trình phục vụ ngát.
4 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).
5 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ỉ
đó.
4


Sáu ngắt trong 8051
Thực tế chỉ có 5 ngắt dành cho người dùng trong 8051 nhưng các nhà sản xuất nói

rằng có 6 ngắt vì họ tính cả lệnh RESET. Sáu ngắt của 8051 được phân bố như sau:
1

RESET: Khi chân RESET được kích hoạt từ 8051, bộ đếm chương trình nhảy về

địa chỉ 0000H. Đây là địa chỉ bật lại nguồn.
2 2 ngắt dành cho các bộ định thời: 1 cho Timer0 và 1 cho Timer1. Địa chỉ tương
3

ứng của các ngắt này là 000BH và 001BH.
2 ngắt dành cho các ngắt phần cứng bên ngoài: chân 12 (P3.2) và 13 (P3.3) của
cổng P3 là các ngắt phần cứng bên ngoài INT0 và INT1 tương ứng. Địa chỉ

4

tương ứng của các ngắt ngoài này là 0003H và 0013H.
Truyền thông nối tiếp: có 1 ngắt chung cho cả nhận và truyền dữ liệu nối tiếp.
Địa chỉ của ngắt này trong bảng vector ngắt là 0023H.

5

Trình phục vụ ngắt
Đối với mỗi ngắt thì phải có một trình phục vụ ngắt (ISR) hay trình quản lý ngắt để

đưa ra nhiệm vụ cho bộ vi điều khiển khi được gọi ngắt. Khi một ngắt được gọi thì bộ vi
điều khiển sẽ chạy trình phục vụ ngắt. Đối với mỗi ngắt thì có một vị trí cố định trong bộ

nhớ để giữ địa chỉ ISR của nó. Nhóm vị trí bộ nhớ được dành riêng để lưu giữ địa chỉ của
các ISR được gọi là bảng vector ngắt.
21


Ngắt
Reset
Ngắt ngoài 0
Timer 0
Ngắt ngoài 1
Timer 1
Ngắt truyền thông

Cờ Ngắt
IE0
IF0
IE1
TF1
RI/TI

Địa chỉ trình phục vụ ngắt
0000h
0003h
000Bh
0013h
001Bh
0023h

Số thứ tự ngắt
0

1
2
3
4

Hình 2.2.1.5: Bảng vector ngắt
6

Các bước cho phép và cấm ngắt
Khi bật lại nguồn 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 trừ khi chúng được kích hoạt.
Các ngắt phải được kích hoạt bằng phần mềm để bộ vi điều khiển đáp ứng chúng.
Có một thanh ghi được gọi là thanh ghi cho phép ngắt IE (Interrupt Enable) – ở địa chỉ
A8H chịu trách nhiệm về việc cho phép và cấm các ngắt. Hình 2 trình bày chi tiết về
thanh ghi IE.

Hình 2.2.1.6: Thanh ghi cho phép ngắt IE.
7

Để cho phép một ngắt ta phải thực hiện các bước sau:
Ø Nếu EA = 0 thì không có ngắt nào được đáp ứng cho dù bit tương ứng của nó

trong IEcó giá trị cao. Bit D7 - EA của thanh ghi IE phải được bật lên cao để cho phép
các bit còn lại của thanh ghi hoạt động được.
22


Ø Nếu EA = 1 thì tất cả mọi ngắt đều được phép và sẽ được đáp ứng nếu các bit
tương ứng của chúng trong IE có mức cao.

8

Lập trình các ngắt bộ định thời

**Cờ quay về 0 của bộ định thời và ngắt
Chúng ta đã biết rằng cờ bộ định thời TF được bật lên cao khi bộ định thời đạt giá
trị cực đại và quay về 0 (Roll - over). Trong các bài trước chúng ta cũng chỉ ra cách kiểm
tra cờ TF bằng một vòng lặp. Trong khi thăm dò cờ TF thì ta phải đợi cho đến khi cờ TF
được bật lên. Vấn đề với phương pháp này là bộ vi điều khiển bị trói buộc trong khi chờ
cờ TF được bật và không thể làm được bất kỳ việc gì khác.
Sử dụng các ngắt sẽ giải quyết được vấn đề này và tránh được sự trói buộc bộ vi
điều khiển. Nếu bộ ngắt định thời trong thanh ghi IE được phép thì mỗi khi nó quay trở
về 0 bộ vi điều khiển sẽ bị ngắt, bất chấp nó đang thực hiện việc gì và nhảy tới bảng
vector ngắt để phục vụ ISR. Bằng cách này thì bộ vi điều khiển có thể làm những công
việc khác cho đến khi nó được thông báo rằng bộ định thời đã quay về 0.

Hình 2.2.1.8: Ngắt bộ định thời TF0 và TF1
9

Lập trình ngắt truyền thông nối tiếp
I

Các cờ RI và TI và các ngắt
Cờ ngắt truyền TI (Transfer interrupt) được bật lên khi bit cuối cùng của khung dữ

liệu - bit stop được truyền đi, báo rằng thanh ghi SBUF sẵn sàng truyền byte kế tiếp.
Trong trường hợp cờ RI (Receive Interrupt) thì nó được bật lên khi toàn bộ khung dữ liệu
kể cả bit stop đã được nhận.
Chừng nào còn nói về truyền thông nối tiếp thì tất cả mọi khái niệm trên đây đều áp
dụng giống như nhau cho dù sử dụng phương pháp thăm dò hay sử dụng phương pháp

ngắt. Sự khác nhau duy nhất giữa hai phương pháp này là ở cách phục vụ quá trình
truyền thông nối tiếp như thế nào:

23


Ø Trong phương pháp thăm dò thì chúng ta phải đợi cho cờ (TI hay RI) bật lên và
trong lúc chờ đợi thì ta không thể làm gì được cả.
Ø Còn trong phương pháp ngắt thì ta được báo khi 8051 đã nhận được một byte
hoặc nó sẵn sàng truyền byte kế tiếp và ta có thể làm các công việc khác trong khi chờ
truyền thông nối tiếp được thực hiện.
Trong 8051 chỉ có một ngắt dành riêng cho truyền thông nối tiếp. Ngắt này được
dùng cho cả truyền và nhận dữ liệu. Nếu bit ngắt truyền thông ES - IE.4 trong thanh
ghi IE được phép, thì khi 1 trong 2 cờ RI hoặc TI bật lên, 8051 sẽ nhận được ngắt và
nhảy đến địa chỉ trình phục vụ ngắt dành cho truyền thông nối tiếp 0023H trong bảng
vector ngắt để thực hiện nó. Trong trình ISR này chúng ta phải kiểm tra các cờ TI và RI
để xem cờ nào gây ra ngắt để đáp ứng một cách phù hợp.

Hình 2.2.1.9 Ngắt truyền thông có thể do hai cờ TI và RI gọi.
II

Sử dụng cổng COM nối tiếp trong 8051
Trong các ứng dụng, ngắt nối tiếp chủ yếu được sử dụng để nhận dữ liệu và không

bao giờ được sử dụng để truyền dữ liệu nối tiếp. Điều này giống như việc báo chuông để
ta biết và nhận điện thoại vì ta không thể biết trước được lúc nào có điện thoại, còn nếu
muốn gọi điện thoại thì ta không cần đổ chuông để báo trước.
III

Xoá cờ RI và TI trước khi thoát khỏi ngắt truyền thông nối tiếp

Để ý rằng lệnh cuối cùng trước khi trở về từ ISR là lệnh xoá các cờ RI và TI. Điều

này tương phản với ngắt ngoài và ngắt bộ định thời là đều được 8051 xoá các cờ.
10

Lập trình các ngắt phần cứng bên ngoài
Bộ vi điều khiển 8051 có 2 ngắt phần cứng bên ngoài ở chân 12 (P3.2) và chân 13

(P3.3) gọi là ngắt INT0 và INT1.

24


Như đã nói ở trên thì chúng được phép và bị cấm bằng việc sử dụng thanh ghi IE.
Nhưng cấu hình cho ngắt ngoài có phần phức tạp hơn.Có hai mức kích hoạt cho các ngắt
phần cứng ngoài:

Hình 2.2.1.10-1 Ngắt ngoài INT0 và INT1
I

Ngắt theo mức
Ở chế độ ngắt theo mức thì các chân INT0 và INT1 bình thường ở mức cao và nếu

một tín hiệu ở mức thấp được cấp tới thì chúng ghi nhãn ngắt. Sau đó bộ vi điều khiển
dừng tất cả mọi công việc nó đang thực hiện và nhảy đến bảng vector ngắt để phục vụ
ngắt. Đây là chế độ ngắt mặc định khi cấp nguồn cho 8051.
Tín hiệu mức thấp tại chân INTx phải được lấy đi trước khi thực hiện lệnh cuối
cùng của trình phục vụ ngắt, nếu không một ngắt khác sẽ lại được tạo ra, và vi điều khiển
sẽ thực hiện ngắt liên tục.
Theo bảng dữ liệu từ nhà sản xuất của bộ vi điều khiển thì “chân ngắt phải được giữ

ở mức thấp cho đến khi bắt đầu thực hiện trình phục vụ ngắt ISR. Nếu chân INTx được
đưa trở lại mức cao trước khi bắt đầu thực hiện ISR thì sẽ chẳng có ngắt nào xảy ra”. Do
vậy, để bảo đảm việc kích hoạt ngắt phần cứng tại các chân INTx phải đảm bảo rằng thời
gian tồn tại tín hiệu mức thấp là khoảng 4 chu trình máy và không được bé hơn, nếu
không đủ lâu thì ngắt không được thực hiện (Xem hình 2.12).

25


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

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