BỘ CÔNG THƯƠNG
TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA ĐIỆN
ĐỒ ÁN MÔN HỌC: VI XỬ LÝ TRONG ĐO
LƯỜNG VÀ ĐIỀU KHIỂN
ĐỀ TÀI:Điều khiển đèn tại ngã tư giao thông
GV HƯỚNG DẪN:
Nhóm SV thực hiện:
Hà Nội – 2018
Mục lục
Lời nói đầu........................................................................................5
Chương 1. CHƯƠNG 1: TỔNG QUAN VỀ VI XỬ LÍ TRONG
ĐO LƯỜNG VÀ ĐIỀU KHIỂN......................................................7
1
1.1.
Cấu trúc hệ thống đo lường điều khiển có sử dụng Vi xử lý.........................7
1.1.1.
Tổng quan..............................................................................................7
1.1.2.
Ứng dụng của Vi xử lý – vi điều khiển...................................................8
1.1.2.1.
Trong các sản phẩm dân dụng..........................................................8
1.1.2.2.
Trong quảng cáo..............................................................................9
1.1.2.3.
Các máy móc dân dụng....................................................................9
1.1.2.4.
Các sản phẩm giải trí.......................................................................9
1.1.2.5.
Trong các thiết bị y tế......................................................................9
1.1.2.6.
Các sản phẩm công nghiệp..............................................................9
1.1.3.
1.2.
Cấu trúc chung của một hệ vi xử lí.......................................................10
Một số vi điều khiển thông dụng ở Việt Nam..............................................11
1.2.1.
Vi điều khiển 8051................................................................................11
1.2.2.
Vi điều khiển AVR................................................................................13
1.2.3.
Vi điều khiển PIC.................................................................................15
1.2.4.
Vi điều khiển ARM..............................................................................16
1.3.
Tổng quan về ngôn ngữ C và các hàm thường dùng trong Vi điều khiển....18
1.3.1.
Tổng quan về ngôn ngữ C....................................................................18
1.3.2.
Một số hàm thông dụng dùng trong lập trình cho Vi điều khiển...........19
1.3.2.1.
Cấu trúc rẽ nhánh if dạng khuyết...................................................19
1.3.2.2.
Cấu trúc rẻ nhánh if dạng đầy đủ...................................................19
1.3.2.3.
Cấu trúc điều khiển switch.............................................................19
1.3.2.4.
Cấu trúc lặp while..........................................................................20
1.3.2.5.
Cấu trúc lặp do...while...................................................................20
1.3.3.
Các kiểu dữ liêu thường dùng trong vi điều khiển................................21
1.3.3.1.
Kiểu ký tự (char)............................................................................21
1.3.3.2.
Kiểu số nguyên..............................................................................21
1.3.3.3.
Kiểu số thực...................................................................................22
Chương 2.
2.1.
Cấu trúc phần cứng 8051 và các thành phần cơ
bản
22
Cấu trúc phần cứng 8051............................................................................22
2.1.1.
Sơ đồ khối của 8051.............................................................................22
2
2.1.2.
2.2.
Sơ đồ chân và chức năng các chân của vi điều khiển...........................23
Các chức năng Timer/counter và Ngắt của 8051.........................................28
2.2.1.
Timer/count trong 8051........................................................................28
2.2.1.1.
Giới thiệu chung về Timer/counter................................................28
2.2.1.2.
Các thanh ghi Timer/counter..........................................................28
2.2.1.3.
Các chế độ Timer/counter..............................................................29
2.2.1.4.
Các bước lập trình cho từng chế độ...............................................30
2.2.2.
Ngăt trong 8051....................................................................................31
2.2.2.1.
Định nghĩa ngắt và cấu trúc khai báo trình phục vụ ngắt...............31
2.2.2.2.
Các thanh ghi điều khiển ngắt........................................................32
2.2.2.3.
Cách khởi tạo chương trình ngắt....................................................34
Chương 3.
Xây dựng ứng dụng trên cơ sở 8051.....................35
3.1.
TỔNG QUAN VỀ HỆ THỐNG ĐÈN GIAO THÔNG...............................35
3.1.1.
Cấu trúc hệ thống đèn giao thông.........................................................35
3.1.2.
Cấu tạo.................................................................................................36
3.1.2.1. Các linh kiện sử dụng trong hệ thống đền giao thông sử dụng vi
điều khiển.......................................................................................................36
3.1.2.2. Các thành phần chính của hệ thống điều khiển đèn giao thông sử
dụng vi điều khiển..........................................................................................36
3.1.2.3.
khiển.
Nguyên Lý hoạt động của hệ thống đèn giao thông sử dụng vi điều
37
3.2.
Lưu đồ thuật toán........................................................................................38
3.3.
Chương trình điều khiển xây dựng trên Keil C...........................................39
3.4.
Kết quả mô phỏng, thiết kế mạch nguyên lý và thực nghiệm trên mạch thực
43
3.5.
Mở rộng thêm các chức năng của chương trình..........................................44
3.6.
Kết luận.......................................................................................................44
3
Danh mục bảng
Bảng 1:Bảng giá trị của các kiểu số nguyên........................................................................................18
Bảng 2:Giải giá trị của các kiểu dữ liệu số thực..................................................................................18
Bảng 3:Bảng mô tả chức năng riêng của cổng 3..................................................................................21
Bảng 4:Các thanh ghi cho Timer/counter :..........................................................................................24
Bảng 5:Chế độ hoạt động cho Timer....................................................................................................25
Bảng 6:Bảng vector ngắt 8051.............................................................................................................28
Danh mục hình vẽ
Hình 1:Bộ vi xử lý Intel 80486DX2.......................................................................................................7
Hình 2:Sơ đồ khối hệ vi xử lý..............................................................................................................10
Hình 3:Sơ đồ chân của 8051.................................................................................................................11
Hình 4:Sơ đồ khối của 8051.................................................................................................................12
Hình 5:Sơ đồ chân của AVR.................................................................................................................14
Hình 6:Sơ đồ khối của AVR.................................................................................................................15
4
Hình 7:Sơ đồ các khối chức năng của 8051........................................................................................23
Hình 8:Sơ đồ chân của 8051.................................................................................................................24
Hình 9:Sơ đồ mạch reset ngoài của 8051.............................................................................................25
Hình 10:Sơ đồ mạch dao động cấp cho 8051.......................................................................................26
Hình 11:Nối điện trở kéo cho công P0 của 8051.................................................................................27
Hình 12:Mô hình đèn giao thông tại ngã tư.........................................................................................36
Hình 13:Giản đồ thời gian cho chế độ 1..............................................................................................37
Hình 14:Lưu đồ thuật toán....................................................................................................................38
Hình 15: Mô phỏng mạch điều khiển...................................................................................................43
Hình 16: Mô phỏng mạch đèn giao thông tại ngã tư...........................................................................44
Hình 17:Mô hình thực tế.......................................................................................................................45
5
Lời nói đầu
Trong thời đại ngày nay,khi nhân loại đang trải qua những bước tiến vượt bậc
về khoa học kỹ thuật, thì lĩnh vực vi điều khiễn cũng đã có rất nhiều những phát
triển vượt bậc. Các bộ vi xử lý ngày các phát triển và hoàn thiện hơn, được sử dụng
trong hầu hết các hệ thống điều khiển tự động trong công nghiệp, khoa học kỹ thuật,
cũng như trong các thiết bị dân dụng. Chính nhờ vai trò và chức năng của vi xử lý đã
đem lại nhiều tính năng đặc biệt cho hệ thống điều khiển thay thế con người trong
các công việc đòi hỏi sự phức tạp và yêu cầu kỹ thuật cao.
Để áp dụng tính năng đặc biệt đó của vi xử lý vào thực tiễn thì nhóm sinh viên
chúng em cùng với sự hướng dẫn tận tình của thầy giáo đã tiến hành nghiên cứu và
thực hiện đề tài: “Điều khiển đèn tại ngã tư giao thông”.
Với mô hình này có thể giúp chúng ta điều khiển hệ thống đèn đường tắt mở
theo thời gian quy đinh mà không cần tới sự kiểm soát thường xuyên của con người.
Trong hệ thống này chúng em đã sử dụng chip AT89S52 là chính. Ngoài ra chúng
em còn sử dụng các linh kiện phụ trợ khác. Cùng với sự hỗ trợ đăc lực của các phần
mềm Keil C, Proteus, Progisp đã giúp đề tài được hoàn thiện hơn.
Chúng em xin đước gửi lời cảm ơn chân thành nhất đến thầy giáo đã tận tình
giúp đỡ chúng em doàn thiện bài tập lớn.Chúng em mông nhận được sự góp ý của
thầy để chúng em hoàn thiện báo cảo của mình tốt hơn nữa
Chúng em xin chân thành cảm ơn!
6
Chương 1. CHƯƠNG 1: TỔNG QUAN VỀ VI XỬ LÍ TRONG ĐO
LƯỜNG VÀ ĐIỀU KHIỂN
1.1.
Cấu trúc hệ thống đo lường điều khiển có sử dụng Vi xử lý
1.1.1. Tổng quan
Vi xử lý (viết tắt là µP hay uP), đôi khi còn được gọi là bộ vi xử lý, là một linh
kiện điện tử được chế tạo từ các tranzito thu nhỏ tích hợp lên trên một vi mạch tích
hợp hơn. Khối xử lý trung tâm (CPU) là một bộ vi xử lý được nhiều người biết đến
nhưng ngoài ra nhiều thành phần khác trong máy tính cũng có bộ vi xử lý riêng của
nó, ví dụ trên card màn hình (video card) chúng ta cũng có một bộ vi xử lý.
Hình 1:Bộ vi xử lý Intel 80486DX2
Trước khi xuất hiện các bộ vi xử lý, các CPU được xây dựng từ các mạch
tích hợp cỡ nhỏ riêng biệt, mỗi mạch tích hợp chỉ chứa khoảng vào chục tranzito. Do
đó, một CPU có thể là một bảng mạch gồm hàng ngàn hay hàng triệu vi mạch tích
hợp. ngày nay, công nghệ tích hợp đã phát triển, một CPU có thể tích hợp lên một
hoặc vài vi mạch tích hợp cỡ lớn, mỗi vi mạch tích hợp cỡ lớn chứa hàng ngàn hoặc
hàng triệu tranzito. Nhờ đó công suất tiêu thụ và giá thành của bộ vi xử lý đã giảm
đáng kể.
Vi điều khiển là một máy tính được tích hợp trên một chíp, nó thường được
sử dụng để điều khiển các thiết bị điện tử. Vi điều khiển, thực chất, là một hệ thống
7
bao gồm một vi xử lý có hiệu suất đủ dùng và giá thành thấp (khác với các bộ vi xử
lý đa năng dùng trong máy tính) kết hợp với các khối ngoại vi như bộ nhớ, các mô
đun vào/ra, các mô đun biến đổi số sang tương tự và tương tự sang số,... Ở máy tính
thì các mô đun thường được xây dựng bởi các chíp và mạch ngoài.
Vi điều khiển thường được dùng để xây dựng các hệ thống nhúng. Nó xuất
hiện khá nhiều trong các dụng cụ điện tử, thiết bị điện, máy giặt, lò vi sóng, điện
thoại, đầu đọc DVD, thiết bị đa phương tiện, dây chuyền tự động, v.v. Hầu hết các vi
điều khiển ngày nay được xây dựng dựa trên kiến trúc Harvard, kiến trúc này định
nghĩa bốn thành phần cần thiết của một hệ thống nhúng. Những thành phần này là
lõi CPU, bộ nhớ chương trình (thông thường là ROM hoặc bộ nhớ Flash), bộ nhớ dữ
liệu (RAM), một hoặc vài bộ định thời và các cổng vào/ra để giao tiếp với các thiết
bị ngoại vi và các môi trường bên ngoài - tất cả các khối này được thiết kế trong một
vi mạch tích hợp. Vi điều khiển khác với các bộ vi xử lý đa năng ở chỗ là nó có thể
hoạt động chỉ với vài vi mạch hỗ trợ bên ngoài.
1.1.2. Ứng dụng của Vi xử lý – vi điều khiển
Vi xử lý, chính là chip của các loại máy tính ngày nay, nên hẳn chúng ta đã biết rất
rõ nó có những ứng dụng gì. Ở đây, chỉ nói đên ứng dụng của vi điều khiển.
Vi điều khiển có thể dùng trong thiết kế các loại máy tính nhúng. Máy tính nhúng
có trong hầu hết các thiết bị tự động, thông minh ngày nay. Chúng ta có thể dùng vi
điều khiển để thiết kế bộ điều khiển cho các sản phẩm như:
1.1.2.1.
Trong các sản phẩm dân dụng
Cửa tự động ,khóa số
Tự động điều tiết ánh sáng thông minh (bật/tắt đèn theo thời gian, theo
cường độ ánh sáng,...)
Điều khiển các thiết bị từ xa (qua điều khiển, qua tiếng vỗ tay,...)
Điều tiết hơi ẩm, điều tiết nhiệt độ, điều tiết không khí, gió
Hệ thống vệ sinh thông minh,...
1.1.2.2.
Trong quảng cáo
Các loại biển quảng cáo nháy chữ
Quảng cáo ma trận LED (một màu, 3 màu, đa màu)
8
Điều khiển máy cuốn bạt quảng cáo,...
1.1.2.3.
Các máy móc dân dụng
Máy điều tiết độ ẩm cho vườn cây
Buồng ấp trứng gà/vịt
Đồng hồ số, đồng hồ số có điều khiển theo thời gian
1.1.2.4.
Các sản phẩm giải trí
Máy nghe nhạc
Máy chơi game
Đầu thu kỹ thuật số, đầu thu set-top-box,...
1.1.2.5.
Trong các thiết bị y tế
Máy móc thiết bị hỗ trợ: máy đo nhịp tim, máy đo đường huyết, máy đo
huyết áp, điện tim đồ, điện não đồ,…
Máy cắt/mài kính
Máy chụp chiếu (city, X-quang,...)
1.1.2.6.
Các sản phẩm công nghiệp
Điều khiển động cơ
Điều khiển số (PID, mờ,...)
Đo lường (đo điện áp, đo dòng điện, áp suất, nhiệt độ,...)
Cân băng tải, cân toa xe, cân ô tô,...
Máy cán thép: điều khiển động cơ máy cán, điều khiển máy quấn thép,..
Làm bộ điều khiển trung tâm cho RoBot
Ổn định tốc độ động cơ
Đếm sản phẩm của 1 nhà máy, xí nghiệp,…
Máy vận hành tự động (dạng CNC)
1.1.3. Cấu trúc chung của một hệ vi xử lí
Sơ đồ khối một máy tính cổ điển
9
Hình 2:Sơ đồ khối hệ vi xử lý
- ALU (đơn vị logic số học): thực hiện các bài toán cho máy tính bao gồm: +,
*, /,-, phép toán logic, …
- Control (điều khiển): điều khiển, kiểm soát các đường dữ liệu giữa các thành
phần của máy tính.
- Memory (bộ nhớ): lưu trữ chương trình hay các kết quả trung gian.
- Input (nhập), Output (Xuất): xuất nhập dữ liệu (còn gọi là thiết bị ngoại vi).
Về cơ bản kiến trúc của một vi xử lý gồm những phần cứng sau:
. Đơn vị xử lý trung tâm CPU (Central Processing Unit).
. Các bộ nhớ (Memories).
. Các cổng vào/ra (song song (Parallel I/O Ports), nối tiếp (Serial I/O Ports))
. Các bộ đếm/bộ định thời (Timers).
. Hệ thống BUS (Địa chỉ, dữ liệu, điều khiển)
Ngoài ra với mỗi loại vi điều khiển cụ thể còn có thể có thêm một số phần
cứng khác như bộ biến đổi tương tự-số ADC, bộ biến đổi số-tương tự DAC, các
10
mạch điều chế dạng sóng WG, điều chế độ rộng xung PWM…Bộ não của mỗi vi xử
lý chính là CPU, các phần cứng khác chỉ là các cơ quan chấp hành dưới quyền của
CPU. Mỗi cơ quan này đều có một cơ chế hoạt động nhất định mà CPU phải tuân
theo khi giao tiếp với chúng.
Để có thể giao tiếp và điều khiển các cơ quan chấp hành (các ngoại vi), CPU
sử dụng 03 loại tín hiệu cơ bản là tín hiệu địa chỉ (Address), tín hiệu dữ liệu (Data)
và tín hiệu điều khiển (Control). Về mặt vật lý thì các tín hiệu này là các đường nhỏ
dẫn điện nối từ CPU đến các ngoại vi hoặc thậm chí là giữa các ngoại vi với nhau.
Tập hợp các đường tín hiệu có cùng chức năng gọi là các bus. Như vậy ta có các bus
địa chỉ, bus dữ liệu và bus điều khiển.
1.2.
Một số vi điều khiển thông dụng ở Việt Nam
1.2.1. Vi điều khiển 8051
Hình 3:Sơ đồ chân của 8051
11
Hình 4:Sơ đồ khối của 8051
Intel 8051 - là vi điều khiển đơn tinh thể kiến 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ộ 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
12
đề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.
1.2.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
13
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 . 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.
Hình 5:Sơ đồ chân của AVR
14
Hình 6:Sơ đồ khối của AVR
1.2.3. Vi điều khiển PIC
PIC là một họ vi điều khiển RISC được sả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.
15
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.
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ở.
1.2.4. 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
để 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
16
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:
Keil ARM.
IAR.
17
HTPICC for ARM.
ImageCraft ICCV7 for ARM
1.3.
Tổng quan về ngôn ngữ C và các hàm thường dùng trong Vi điều
khiển.
1.3.1. Tổng quan về ngôn ngữ C
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.
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.
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.
18
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.
1.3.2. Một số hàm thông dụng dùng trong lập trình cho Vi điều khiển
1.3.2.1. Cấu trúc rẽ nhánh if dạng khuyết
Cú pháp câu lệnh
If(bt)
Công_việc1;
Trong đó:
-if 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
1.3.2.2.
Cú pháp câu lệnh
Cấu trúc rẻ nhánh if dạng đầy đủ
If(bt)
Công_việc1 ;
Else
Công-việc 2;
Trong đó:
-if,else là từ khóa
-bt là biểu thức
-Công_việc 1, Công_việc 2 có thể là một lệnh đơn hay một khối lệnh
1.3.2.3.
Cú pháp câu lệnh
Cấu trúc điều khiển switch
Switch (biểu_thức)
{
Case e1:Khối_lệnh_1;[break;]
19
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
*bieu_thuc:là một biểu thức nguyên bất kỳ
*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
1.3.2.4.
Cú pháp câu lệnh
Cấu trúc lặp while
While(bt)Công_việc;
Trong đó
-while là từ khóa
-bt là biểu thức
-Công_việc có thể là một lệnh đơn hay là một khối lệnh
1.3.2.5.
Cú pháp câu lệnh
Cấu trúc lặp do...while
Do
Công_việc;
While(bt);
Trong đó:
-while,do là từ khóa
-bt là biểu thức
-Công_việc liệt kê các câu lệnh cần thực hiện
20
Cấu trúc lặp for
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
-Công_việc có thể là một lệnh đơn hay một khối lệnh
1.3.3. Các kiểu dữ liêu thường dùng trong vi điều khiển
1.3.3.1. Kiểu ký tự (char)
Một giá trị kiểu char chiếm một byte và biểu diễn được một ký tự trong bảng
mã ASCII.
1.3.3.2.
Kiểu số nguyên
Một giá trịn 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ông ngữ lập trình C có nhiều kiểu dữ liệu số nguyên
với giả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 điều khiể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
Bảng 1:Bảng giá trị của các kiểu số nguyên
1.3.3.3.
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 hợp số thực mà máy tính có
thể biểu diễn. Trong ngôn ngữ lập trình C có những kiểu dữ liệu số thực với giải giá
trị khác nhau cụ thể:
Kiểu
Float
Double
Phạm vi biểu diễn
3.4E-38->3.4E+38
1.7E-311->1.7E3+311
Kích thước(byte)
4
8
21
Long double
3.4E-4932->3.4E+4932
10
Bảng 2:Giải giá trị của các kiểu dữ liệu số thực
Chương 2.
Cấu trúc phần cứng 8051 và các thành phần cơ bản
2.1.
Cấu trúc phần cứng 8051
2.1.1. Sơ đồ khối của 8051
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ố
The 8051 Block Diagram
Hình 7:Sơ đồ các khối chức năng của 8051
22
2.1.2. Sơ đồ chân và chức năng các chân của vi điều khiển
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 8: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.
23
Hình 9: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:
Bit
P3.0
P3.1
P3.2
P3.3
P3.4
P3.5
P3.6
P3.7
Tên
RxD
TxD
INT0
INT1
T0
T1
WR
RD
Chức năng
Chân nhận dữ liệu cho cổng nối tiếp
Chân truyền dữ liệu cho cổng nối tiếp
Chân ngắt bên ngoài 0
Chân ngắt bên ngoài 1
Ngõ vào Timer/counter 0
Ngõ vào Timer/counter 1
Xung ghi bộ nhớ dữ liệu ngoài
Xung đọc bộ nhớ dữ liệu ngoài
Bảng 3:Bảng mô tả chức năng riêng của cổng 3
* 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
24
Hình 10:Sơ đồ mạch dao động cấp cho 8051
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 33pF. 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ôngthườ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 1thì 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ânOE của ROM ngoài để cho phép đọc các byte mã lệnh trên ROM ngoài.
PSEN ở mức thấptrong 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.
* Chân 31 (EA):
25