Ngày nay, trong thời đại thế giới bước vào thời kỳ kỷ nguyên số thì việc ứng dụng những thành tựu khoa học công nghệ vào cuộc sống là điều thật sự cần thiết. Với sự phát triển vượt bậc của các ngành kỹ thuật điện tử đã cho ra đời hàng loạt các thành tựu là các sản phẩm, thiết bị có sự chính xác cao cùng với tốc độ vượt bậc trong khi kích cỡ nhỏ gọn, vừa phải đã đáp ứng được những yêu cầu phức tạp, bức thiết của con người, làm chất lượng cuộc sống xã hội ngày càng trở nên thuận tiện, hiện đại, phong phú hơn. Và trong số các thành tựu đó, không thể không nhắc đến đó là các bộ vi điều khiển những phát minh tuyệt diệu và cũng là những thiết bị không thể thiếu trong thời kỳ kỷ nguyên số hiện nay.
Trang 1Danh sách thành viên tham gia viết báo cáo
1
2
3
Nhận xét của giáo viên
Tp Hồ Chí Minh, tháng 6 năm 2022.
Trang 2Mục lục
A MỞ ĐẦU 3
B NỘI DUNG 5
Chương 1: Tổng quan 5
1.1 Đối tượng nghiên cứu 5
1.2 Công cụ hỗ trợ 6
1.3 Khái quát về vi điều khiển 6
1.4 Họ vi điều khiển 8051 7
Chương 2: Tìm hiểu về vi điều khiển 8051 9
2.1 Sơ đồ khối, sơ đồ chân của vi điều khiển 8051 9
2.2 Tổ chức bộ nhớ bên trong 8051 13
2.3 Kiến trúc vi điều khiển 8051 17
Chương 3: Truyền thông nối tiếp UART 21
3.1 Các cơ sở của truyền thông nối tiếp 21
3.2 Truyền thông nối tiếp trong 8051 24
Chương 4 Ngắt trong 8051 29
4.1 Sơ lược về ngắt 29
4.2 Các ngắt trong vi điều khiển 8051 30
4.3 Quy trình thực hiện một ngắt 32
4.4 Các bước cho phép cấm ngắt 32
4.5 Lập trình các ngắt bộ định thời 33
4.6 Lập trình các ngắt phần cứng bên ngoài 33
4.7 Các thanh ghi điều khiển ngắt 35
4.8 Ưu tiên ngắt 35
4.9 Lập trình ngắt và truyền thông nối tiếp 35
Trang 3C Kết Quả Và Mô Phỏng 37
CHƯƠNG 1: LẬP TRÌNH VÀ MÔ PHỎNG 37
1.1 Lập trình cho 8501 37
1.2 Mô phỏng và kết quả 40
D HƯỚNG PHÁT TRIỂN ĐỀ TÀI 50
Tài liệu tham khảo 51
Trang 4A MỞ ĐẦU
Ngày nay, trong thời đại thế giới bước vào thời kỳ kỷ nguyên số thì việc ứng dụngnhững thành tựu khoa học công nghệ vào cuộc sống là điều thật sự cần thiết Với sựphát triển vượt bậc của các ngành kỹ thuật điện tử đã cho ra đời hàng loạt các thànhtựu là các sản phẩm, thiết bị có sự chính xác cao cùng với tốc độ vượt bậc trong khikích cỡ nhỏ gọn, vừa phải đã đáp ứng được những yêu cầu phức tạp, bức thiết của conngười, làm chất lượng cuộc sống xã hội ngày càng trở nên thuận tiện, hiện đại, phongphú hơn Và trong số các thành tựu đó, không thể không nhắc đến đó là các bộ vi điềukhiển - những phát minh tuyệt diệu và cũng là những thiết bị không thể thiếu trongthời kỳ kỷ nguyên số hiện nay
Vi điều khiển là những thiết bị không thể thiếu cấu thành nên những thiết bị, máymóc quen thuộc xung quanh chúng ta Hằng ngày, ta tiếp xúc với những thiết bị giadụng như các loại máy lạnh, máy ảnh, lò vi sóng,…hay đến cả những thiết bị thu phát,liên lạc như tivi thông minh, điện thoại di động, máy tính xách tay, laptop… hay cảnhững thiết bị văn phòng như máy fax, máy in, ta còn có các hệ thống tưới tiêu tựđộng trong nông nghiệp hay các cánh tay robot tự động trong các nhà máy… hoặcthậm chí là những thiết bị vệ tinh ngoài vũ trụ… Tất cả đều được gắn vào những con
vi điều khiển nhỏ bé phục vụ cuộc sống con người Vi điều khiển ứng dụng nhiều vôcùng trong cuộc sống và được các nhà sản xuất ưa chuộng vì khá dễ sử dụng, bảo trìđơn giản và quan trọng nhất là có thể thực hiện được rất nhiều công việc nhiệm vụ màngười lập trình định hướng
Chính vì vi điều khiển có nhiều ứng dụng tiện ích như vậy nên việc ứng dụng cáccon vi điều khiển vào máy tính cũng được phát triển và nâng cao theo Vi điều khiểndung trong máy tính thông dụng nhất là vi điều khiển 8051 dùng để giao tiếp các thiết
bị ngoại vi, ngắt và truyền thông Tuy nhiên, các bộ vi điều khiển tuy đơn giản nhưng
để vận hành được lại rất phức tạp vì bản chất của vi điều khiển là một chiếc máy tính
đa năng có thể thực hiện được các nhiệm vụ khác nhau Chính vì vậy mà nhóm em đãlựa chọn đề tài: “Lập trình vi điều khiển 8051 sử dụng ngôn ngữ lập trình C giao tiếpngắt và truyền thông” làm đề tài tiểu luận cuối kỳ Mặc dù đã cố gắng tìm hiểu và
Trang 5mong thầy tận tình góp ý, chỉ bảo để chúng em có thêm nhiều kiến thức cũng nhưkhắc phục được những lỗi sai để việc học tập được tốt hơn Chúng em xin chân thànhcảm ơn thầy
Nội dung của bài báo cáo bao gồm các chương sau:
Chương 1: Tổng quan
Chương 2: Vi điều khiển 8051
Chương 3: Truyền thông nối tiếp UART
Chương 4: Ngắt trong 8051
Chương 5 : Kết quả và mô phỏng
Trang 61.1.2 Ngôn ngữ lập trình C
Khi sử dụng ngôn ngữ C người lập trình không cần hiểu sâu sắc về cấu trúc của
bộ vi điều khiển Một người chưa quen với một vi điểu khiển cho trước sẽ xây dựngđược chương trình một cách nhanh chóng hơn, do không phải mất thời gian tìm hiểukiến trúc của vi điều khiển đó Và việc sử dụng lại các chương trình đã xây dựng trước
đó cũng dễ dàng hơn, có thể sử dụng toàn bộ hoặc sửa chữa một phần Chương trìnhviết bằng ngôn ngữ bậc cao cũng sẽ được một phần mềm trên máy tính gọi là trình
biên dịch (Compiler) chuyển sang dạng hợp ngữ trước khi chuyển sang mã máy 1.1.3 Hoạt động ngắt
Ngắt (Interrupt), 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).
Trang 7Là một trình biên dịch C, môi trường phát triển tích hợp và bộ tạo chương trình
tự động được thiết kế cho họ các vi điều khiển ARM, 8051, STM của Atmel
1.2.2 Proteus
- Phần mềm cho phép thiết kế, kiểm tra và bố trí các bảng mạch in chuyên nghiệpmột cách nhanh chóng
1.2.3 Virtual Serial Driver
- Phần mềm để tạo ra các cổng nối tiếp ảo và kết nối chúng theo cặp thông quadây cáp null-modem ảo
1.2.4 Hercules SETUP
- Mô phỏng thiết bị đầu cuối cổng nối tiếp (thiết bị đầu cuối 485 hoặc 232), thiết bị đầu cuối UDP / IP và thiết bị đầu cuối máy chủ máy khách TCP / IP
RS-1.3 Khái quát về vi điều khiển
Vi điều khiển (MCU – viết tắt cho cụm từ: Micro Control Unit) là một máy tính
trên chip điều khiển các đối tượng, quy trình hoặc sự kiện Bất cứ điều gì lưu trữ, kiểmsoát, tính toán hoặc hiển thị thông tin có thể có một vi điều khiển trong đó Khônggiống như bộ vi xử lý, đòi hỏi các thành phần khác, như bộ nhớ, để hoạt động, vi điềukhiển tự nó là một máy tính và được sử dụng trong các hệ thống nhỏ hơn
Một số thiết bị có vi điều khiển đó là: các điều khiển từ xa của TV, điện thoại diđộng, máy tính và các thành phần máy tính như bàn phím, chuột, modem và máy in,…
Trang 81.3.1 Kiến trúc vi điều khiển
Thực ra với điều khiển cũng là một cấu trúc nhỏ gồm các linh kiện điện tử ở kíchthước micro hoặc nano, các tình trạng này được kết hợp với nhau và được nối với cácthiết bị bên ngoài qua các chân vi điều khiển
Kiến trúc máy tính hay kiến trúc vi điều khiển cũng tương tự nhau Do đó các bạn
có thể tìm hiểu về kiến trúc máy tính để hiểu rõ về kiến trúc của vi điều khiển Haikiến trúc này rất phổ biến hiện nay đó là kiến trúc Von Neumann và kiến trúc Harvar
Sự khác biệt chủ yếu giữa hai kiến trúc này chính là việc tổ chức bộ nhớ dữ liệu vào
bộ nhớ chương trình kiến trúc Von Neumann tổ chức bộ nhớ dữ liệu và bộ nhớchương trình chung với nhau, chính vì vậy đường truyền (bus) của kiến trúc VonNeumann là đường truyền chung, trong đó kiến trúc Harvard tách rời bộ nhớ dữ liệuvào bộ nhớ chương trình
Mỗi kiến trúc này có một đặc điểm riêng rẽ khác nhau kiến trúc Von Neumanntận dụng được tài nguyên bộ nhớ trong khi đó kiến trúc Harvard sẽ đạt được tốc độ xử
lý cao hơn, mặt khác đường truyền dữ liệu và đường truyền lệnh điều khiển chươngtrình có thể có dung lượng khác nhau
1.4 Họ vi điều khiển 8051
1.4.1 Tóm tắt về lịch sử 8051
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, 4K byte ROM trên chip, hai bộ định thời, mộtcổng nối tiếp và 4 cổng (đều rộng 8 bit) vào ra tất cả được đặt trên một chip Lúc ấy
nó được coi là một “hệ thống trên chip” 8051 là một bộ xử lý 8 bit có nghĩa là CPU
chỉ có thể làm việc với 8 bit dữ liệu tại một thời điểm Dữ liệu lớn hơn 8 bit được chia
ra thành các dữ liệu 8 bit để cho xử lý 8051 có tất cả 4 cổng vào - ra I/O mỗi cổngrộng 8 bit Mặc dù 8051 có thể có một ROM trên chip cực đại là 64 K byte, nhưng cácnhà sản xuất lúc đó đã cho xuất xưởng chỉ với 4K byte ROM trên chip
8051 đã trở nên phổ biến sau khi Intel cho phép các nhà sản xuất khác sản xuất vàbán bất kỳ dạng biến thế nào của 8051 mà họ thích với điều kiện họ phải để mã lạitương thích với 8051 Điều này dẫn đến sự ra đời nhiều phiên bản của 8051 với cáctốc độ khác nhau và dung lượng ROM trên chip khác nhau được bán bởi hơn nửa cácnhà sản xuất Điều này quan trọng là mặc dù có nhiều biến thể khác nhau của 8051 về
Trang 9tốc độ và dung lương nhớ ROM trên chip, nhưng tất cả chúng đều tương thích với
8051 ban đầu về các lệnh Điều này có nghĩa là nếu ta viết chương trình của mình chomột phiên bản nào đó thì nó cũng sẽ chạy với mọi phiên bản bất kỳ khác mà khôngphân biệt nó từ hãng sản xuất nào
cả mọi chương trình viết cho 8051 đều chạy trên 8052 nhưng điều ngược lại là khôngđúng
Một thành viên khác nữa của 8051 là chip 8031 Chip này thường được coi như là
8051 không có ROM trên chip vì nó có OK byte ROM trên chip Để sử dụng chip này
ta phải bổ xung ROM ngoài cho nó ROM ngoài phải chứa chương trình mà 8031 sẽnạp và thực hiện So với 8051 mà chương trình được chứa trong ROM trên chip bịgiới hạn bởi 4K byte, còn ROM ngoài chứa chương trinh được gắn vào 8031 thì cóthể lớn đến 64K byte Khi bổ xung cổng, như vậy chỉ còn lại 2 cổng để thao tác Đểgiải quyết vấn đề này ta có thể bổ xung cổng vào - ra cho 8031 Phối ghép 8031 với bộnhớ và cổng vào - ra chẳng hạn với chip 8255 Ngoài ra còn có các phiên bản khácnhau về tốc độ của 8031 từ các hãng sản xuất khác nhau
Trang 10Chương 2: Tìm hiểu về vi điều khiển 8051
2.1 Sơ đồ khối, sơ đồ chân của vi điều khiển 8051
2.1.1 Giới thiệu sơ lược
Trang 11Dallas Semiconductor), NXP Semiconductors (Philips Semiconductor trước đây),Winbond, Silicon Laboratories, Texas Instruments và Cypress Semiconductor Têngọ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ệuSRAM 128 bytes Bộ nhớ chương trình ROM 4 kb 32 chân vào/ra đa hướng Giao tiếpnối tiếp UART Hai bộ timer/counter 16 bit Hai ngắt ngoài
Lập trình cho 8051: Các nhà sản xuất 8051 đều hỗ trợ ngôn ngữ lập trìnhAssembler tuy nhiên ngôn ngữ này thường ít được dùng cho những ứng dụng lớn dotí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.1.2 Cấu hình chân
Hình 2.2: Cấu hình chân vi điều khiển 8051
Trang 12VCC: Điện áp cung cấp cho nguồn nuôi VĐK Dòng 8051 sử dụng điện áp5VDC Chú ý điện áp 5V tại chân này phải được lọc kỹ trước khi cấp vào và nên đặtmột tụ gốm 10uF để chống nhiễu ngay tại chân Vcc của VĐK.
GND: Nối với mass nguồn
RST : Ngõ vào RESET, chân RESET ở mức cao trong 2 chu kỳ máy khi bộ daođộng đang chạy sẽ RESET chip Lắp mạch Reset như hình sau:
XTAL1, XTAL2: Chân cấp nguồn dao động
AT 89S52 có một bộ chia tần bên trong chip, bộ này sẽ cấp xung clock cho cáckhối trên chip từ nguồn dao động bên ngoài qua 2 chân XTAL1 và XTAL2 Bộ chiatần hoạt động ở 2 chế độ:
Trang 13Hình 2.4 Cách mắc thạch anh.
Chế độ 1(mặc định): Ở chế độ này tần số thạch anh được chia làm 12 lần, nghĩa lànếu lệnh được thực hiện trong 1 chu kỳ máy và tần số thạch anh là 12Mhz thì thờigian thực hiện lệnh đó là 1us
Chế độ 2: Thạch anh được chia làm 6 lần, chế độ này được cài đặt bằng các thanhghi CLKCON0 và CLKCON1
PORT 0: Port 0 là một cổng 8 bit I/O 2 chiều Khi mức logic 1 được viết vào cácPIN của PORT 0, Pin đó có thể được sử dụng là cổng vào trở kháng cao Port 0 cũng
có thể được cấu hình thành bus ghép kênh 8 bit địa chỉ/dữ liệu thấp trong quá trìnhtruy nhập bộ nhớ ngoài, ở chế độ này các PIN của PORT 0 sẽ được kéo lên bêntrong.Ngoài ra PORT 0 cũng được sử dụng để nạp dữ liệu cho chip
PORT 1: Port 1 là cổng I/O 2 chiều có trở treo bên trong Khi mức logic 1 đượcviết vào PIN của PORT 1, PIN đó được kéo lên bởi 1 trở treo bên trong, và có thểđược sử dụng là cổng vào
Ngoài ra các PIN P1.0 và P1.1 có thể được cấu hình là đầu vào của bộ Timer 2(AT89S52, AT89C52) Các pin P1.5, P1.6, P1.7 (AT89S51, AT89S52) lần lượt là cácPIN MOSI, MISO, SCK khi sử dụng để nạp cho chip qua ISP (In- SystemPrograming)
PORT 2 : Port 2 là cổng I/O 2 chiều có trở treo bên trong Khi mức logic 1 đượcviết vào PIN của PORT 2, PIN đó được kéo lên bởi 1 trở treo bên trong, và có thểđược sử dụng là cổng vào Port 2 cũng có thể được cấu hình thành bus ghép kênh 8 bitđịa chỉ cao trong quá trình truy nhập bộ nhớ ngoài với 16 bit địa chỉ
PORT 3 : Port 3 là cổng I/O 2 chiều có trở treo bên trong Khi mức logic 1 đượcviết vào PIN của PORT 3, PIN đó được kéo lên bởi 1 trở treo bên trong, và có thểđược sử dụng là cổng vào
Ngoài ra các Pin của PORT 3 cũng có thêm các chức năng đặc biệt khác:
Bảng 2.2: Chức năng các chân của Port 3
Trang 14P3.2 INT0 B2H Ngõ vào ngắt ngoài 0
2.1.3 Sơ đồ khối
Hình 2.5 Sơ đồ khối vi điều khiển 8051
Chip 8051 có các đặc trưng như sau:
4KB ROM
128 byte RAM
4 port xuất nhập (I/O port) 8 bit
2 bộ định thời 16 bit
Mạch giao tiếp nối tiếp
Không gian nhớ chương trình ngoài 64K b
Không gian nhớ dữ liệu ngoài 64K b
Bộ xử lý bit
Trang 15210 vị trí nhớ được định địa chỉ, mỗi vị trí 1 bit
Nhân/chia trong 4µs
2.2 Tổ chức bộ nhớ bên trong 8051
Các vi điều khiển thuộc họ 8051 đều tổ chức thành 2 không gian chương trình và
dữ liệu Kiến trúc vi xử lý 8 bit của 8051 này cho phép truy nhập và tính toán nhanhhơn đối với không gian dữ liệu nhờ việc phân chia 2 không gian bộ nhớ chương trình
và dữ liệu như trên Tuy nhiên bộ nhớ ngoài được truy nhập bởi hệ thống 16 bit địachỉ vẫn có thể thực hiện nhờ thanh ghi con trỏ
Bộ nhớ chương trình (ROM, EPROM) là bộ nhớ chỉ đọc, có thể mở rộng tối đa64Kbyte Với họ vi điều khiển 89xx, bộ nhớ chương trình được tích hợp sẵn trongchip 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 Ví dụ
sử dụng EPROM: 2764 (64Kbyte), khi đó chân PSEN phải ở mức tích cực (5V)
Hình 2.6 : Cấu trúc bộ nhớ chương trình
Bộ nhớ dữ liệu (RAM) tồn tại độc lập so với bộ nhớ chương trình Họ vi điềukhiể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ộngvới bộ nhớ dữ liệu ngoài lên tới 64kByte Với những vi điều khiển không tích hợpROM trên chip thì vẫn có RAM trên chip là 128byte Khi sử dụng RAM ngoài, CPUđọc và ghi dữ liệu nhờ tín hiệu trên các chân RD và WR Khi sử dụng cả bộ nhớ
Trang 16chương trình và bộ nhớ dữ liệu bên ngoài thì buộc phải kết hợp chân RD và PSEN bởicổng logic AND để phân biệt tín hiệu truy xuất dữ liệu trên ROM hay RAM ngoài.
2.2.1 Bộ nhớ chương trình:
Hình 2.7: Cấu trúc bộ nhớ chương trình
Hình 2.8 : Các địa chỉ ngắt trong bộ nhớ chương trình
Mỗi khi xảy ra ngắt, con trỏ của CPU sẽ nhảy đến đúng địa chỉ ngắt tương ứng vàthực thi chương trình tại đó Ví dụ ngắt ngoài 0 sẽ có địa chỉ là 0003H, khi xảy ra ngắtngoài 0 thì con trỏ chương trình sẽ nhảy đến đúng địa chỉ 0003H để thực thi chươngtrình tại đó Nếu trong chương trình ứng dụng không xử dụng đến ngắt ngoài 0 thì địachỉ 0003H vẫn có thể dùng cho mục đích khác (sử dụng cho bộ nhớ chương trình)
Trang 172.2.2 Bộ nhớ dữ liệu
Hình 2.9 Cấu trúc bộ nhớ dữ liệu
Hình 2.9 mô tả cấu trúc bộ nhớ dữ liệu trong và bộ nhớ dữ liệu ngoài của họ viđiều khiển 8051 CPU sẽ dùng đến các chân RD và WR khi truy cập đến bộ nhớ dữliệu ngoài
Hình 2.10 :Cấu trúc bộ nhớ trong
Hình 2.10 mô tả cấu trúc bộ nhớ dữ liệu trong chip, được chia thành 3 khối là 128byte thấp, 128 byte cao và 128 byte đặc biệt
Trang 18Hình 2.11 : Cấu trúc 128 byte thấp của bộ nhớ dữ liệu trong
Hình 2.11 mô tả cấu trúc 128 byte thấp của bộ nhớ dữ liệu của họ vi điều khiển
8051 32 byte đầu tiên (00H-1FH) được sử dụng cho 4 bộ 8 thanh ghi R0-R7 Hai bitcủa thanh ghi đặc biệt PSW sẽ lựa chọn 1 trong 4 bộ thanh ghi mà vi điều khiển sẽdùng trong khi thực thi chương trình.
8051 chứa 210 vị trí bit được định địa chỉ trong đó 128 bit chứa trong các byte ởđịa chỉ từ 20H đến 2FH (16 byte x 8 bit = 128 bit) và phần còn lại chứa trong cácthanh ghi đặc biệt Ngoài ra 8051 còn có các port xuất/nhập có thể định địa chỉtừng bit, điều này làm đơn giản việc giao tiếp bằng phần mềm với các thiết bịxuất/nhập đơn bit.
Vùng RAM đa mục đích có 80 byte đặt ở địa chỉ từ 30H đến 7FH, bên dưới vùngnày từ địa chỉ 00H đến 2FH là vùng nhớ có thể được sử dụng tương tự Bất kỳ vị trínhớ nào trong vùng RAM đa mục đích đều có thể được truy xuất tự do bằng cách sửdụng các kiểu định địa chỉ trực tiếp hoặc gián tiếp.
Bất kỳ vị trí nhớ nào trong vùng RAM đa mục đích đều có thể được truy xuất tự
do bằng cách sử dụng các kiểu định địa chỉ trực tiếp hoặc gián tiếp.
Hình 2.12 128 byte cao của bộ nhớ dữ liệu.
Cũng như các thanh ghi từ R0 đến R7, ta có 21 thanh ghi chức năng đặc biệt SFRchiếm phần trên của Ram nội từ địa chỉ 80H đến FFH Cần lưu ý là không phải tất cả
128 địa chỉ từ 80H đến FFH đều được định nghĩa mà chỉ có 21 địa chỉ được địnhnghĩa
Trang 192.3 Kiến trúc vi điều khiển 8051
8051 có 21 thanh ghi chức năng đặc biệt SFR chiếm phần trên của Ram nội từ địachỉ 80H đến FFH Cần lưu ý là không phải tất cả 128 địa chỉ từ 80H đến FFH đềuđược định nghĩa mà chỉ có 21 địa chỉ được định nghĩa Hình mô tả các thanh ghi đặcbiệt trong vùng nhớ dữ liệu 80H đến FFH
Hình 2.13 Các thanh ghi đặc biệt 2.3.1 Thanh ghi chính
Thanh ghi tính toán chính của vi điều khiển 8051 ACC (Accumulator) Là thanhghi đặc biệt của 8051 dùng để thực hiện các phép toán của CPU, thường kí hiệu là A.
2.3.2 Thanh ghi phụ
Thanh ghi tính toán phụ của vi điều khiển 8051 là B Thanh ghi B ở địa chỉ F0H
được dùng chung với thanh chứa A trong các phép toán nhân, chia Thanh ghi trạng thái chương trình (PSW)
Thanh ghi trạng thái chương trình PSW là thanh ghi mô tả toàn bộ trạng tháichương trình đang hoạt động của hệ thống
Bảng 2.3: Mô tả thanh ghi từ trạng thái chương trình PSW
Trang 202.3.3 Thanh ghi ngăn xếp (Stack Pointer)
Con trỏ stack SP (stack pointer) là 1 thanh ghi 8 bit ở địa chỉ 81H SP chứa địa chỉcủa dữ liệu hiện đang ở đỉnh của stack Các lệnh liên quan đến satck bao gồm lệnh cất
dữ liệu vào stack và lệnh lấy dữ liệu ra khỏi stack Việc cất vào stack làm tăng SPtrước khi ghi dữ liệu và việc lấy dữ liệu ra khỏi stack sẽ giảm SP Vùng stack của
8051 được giữ trong RAM nội và được giới hạn đến các địa chỉ truy xuất được bởikiểu định địa chỉ gián tiếp
2.3.4 Con trỏ dữ liệu DPTR
Con trỏ dữ liệu DPTR (data pointer) được dùng để truy xuất bộ nhớ chương trìnhngoài hoặc bộ nhớ dữ liệu ngoài DPTR là một thanh ghi 16 bit có địa chỉ là 82H(DPL, byte thấp) và 83H (DPH, byte cao)
2.3.5 Thanh ghi các cổng P0-P3
Các port xuất/nhập của 8051 bao gồm Port 0 tại địa chỉ 80H, Port 1 tại địa chỉ90H, Port 2 tại địa chỉ A0H và Port 3 tại địa chỉ B0H Tất cả các port đều được địnhđịa chỉ từng bit nhằm cung cấp các khả năng giao tiếp mạnh
2.3.6 Thanh ghi bộ đệm truyền thông nối tiếp (Serial Data Buffer)
Bộ đệm truyền thông được chia thành hai bộ đệm, bộ đệm truyền dữ liệu và bộ
Trang 21chuyển vào bộ đệm truyền dữ liệu và sẽ được lưu giữ ở đó cho đến khi quá trìnhtruyền dữ liệu qua truyền thông nối tiếp kết thúc Khi thực hiện việc chuyển dữ liệu từSBUF ra ngoài, dữ liệu sẽ được lấy từ bộ đệm nhận dữ liệu của truyền thông nối tiếp.
2.3.7 Thanh ghi của bộ định thời/bộ đếm
8051 có 2 bộ đếm/định thời (counter/timer) 16 bit để định các khoảng thời gianhoặc để đếm các sự kiện Các cặp thanh ghi (TH0, TL0) và (TH1, TL1) là các thanhghi của bộ đếm thời gian Bộ định thời 0 có địa chỉ 8AH (TL0, byte thấp) và 8CH(TH0, byte cao) Bộ định thời 1 có địa chỉ 8BH (TL1, byte thấp) và 8DH (TH1, bytecao)
Hoạt động của bộ định thời được thiết lập bởi thanh ghi chế độ định thời TMOD(Timer Mode Register) ở địa chỉ 88H Chỉ có TCON được định địa chỉ từng bit
2.3.8 Các thanh ghi điều khiển
Các thanh ghi điều khiển đặc biệt như IP, IE, TMOD, TCON, SCON và PCON làcác thanh ghi điều khiển và ghi nhận trạng thái của hệ thống ngắt, bộ đếm/định thời,truyền thông nối tiếp
Trang 22Chương 3: Truyền thông nối tiếp UART
Các máy tính truyền dữ liệu theo hai cách: Song song và nối tiếp Trong truyền dữliệu song song thường cần rất nhiều đường dây dẫn chỉ để truyền dữ liệu đến một thiết
bị chỉ cách xa vài bước Ví dụ của truyền dữ liệu song song là các máy in hoặc các ổcứng, mỗi thiết bị sử dụng một đường cáp với nhiều dây dẫn Mặc dù trong các trườnghợp như vậy thì nhiều dữ liệu được truyền đi trong một khoảng thời gian ngắn bằngcách dùng nhiều dây dẫn song song, nhưng khoảng cách thì không thể lớn được Vìcác đường cáp dài làm suy giảm thậm chí làm méo tín hiệu Ngoài ra, các đường cápdài có giá thành cao Vì những lý do này, để truyền dữ liệu đi xa thì phải sử dụngphương pháp truyền nối tiếp
3.1 Các cơ sở của truyền thông nối tiếp
Trong truyền thông nối tiếp dữ liệu được gửi đi từng bit một, so với truyền songsong thì là một hoặc nhiều byte được truyền đi cùng một lúc
Hình 3.1 Sơ đồ truyền dữ liệu nối tiếp so với sơ đồ truyền song song.
Trong truyền thông nối tiếp, một đường dữ liệu duy nhất được dùng thay chonhiều đường dữ liệu của truyền thông song song không chỉ giúp giảm giá thành, giúp
hệ thống đơn giản hơn nhiều mà nó còn mở ra khả năng để hai máy tính ở cách xanhau có truyền thông qua đường thoại
Truyền thông dữ liệu nối tiếp sử dụng hai phương pháp là đồng bộ và không đồngbộ:
- Trong truyền đồng bộ: thì bộ truyền và bộ thu được đồng bộ hóa qua một đườngtín hiệu đồng hồ bên ngoài Khái niệm “đồng bộ” để chỉ sự “báo trước” trong quá
Trang 23đường dữ liệu và 1 đường xung nhịp Cứ mỗi lần tb1 muốn truyền 1 bit dữ liệu, tb1điều khiển đường xung nhịp chuyển từ mức thấp lên mức cao báo cho tb2 sẵn sàng
nhận một bit Bằng cách “báo trước” này tất cả các bit dữ liệu có thể truyền/nhận dễ dàng với ít “rủi ro” trong quá trình truyền Tuy nhiên, cách truyền này đòi hỏi ít nhất
2 đường truyền (dữ liệu và clock) cho 1 quá trình truyền hoặc nhận
- Khác với cách truyền đồng bộ, truyền thông không đồng bộ chỉ cần một đường
truyền cho một quá trình “Khung dữ liệu” đã được chuẩn hóa bởi các thiết bị nên
không cần đường xung nhịp báo trước dữ liệu đến Ví dụ: 2 thiết bị đang giao tiếp vớinhau theo phương pháp này, chúng đã được thỏa thuận với nhau rằng cứ 1ms thì sẽ có
1 bit dữ liệu truyền đến, như thế thiết bị nhận chỉ cần kiểm tra và đọc đường truyềnmỗi mili-giây để đọc các bit dữ liệu và sau đó kết hợp chúng lại thành dữ liệu có ýnghĩa Truyền thông nối tiếp không đồng bộ vì thế hiệu quả hơn truyền thông đồng bộ(không cần nhiều đường truyền) Tuy nhiên, để quá trình truyền thành công thì việctuân thủ các tiêu chuẩn truyền là hết sức quan trọng
Trong 8051 có một bộ truyền dữ liệu không đồng bộ (UART - UniversalAsynchronous serial Reveiver and Transmitter) Trước tiên chúng ta sẽ tìm hiểu cáckhái niệm quan trọng trong phương pháp truyền thông nối tiếp không đồng bộ
3.1.1 Baud rate (tốc độ Baud)
Để việc truyền và nhận không đồng bộ xảy ra thành công thì các thiết bị tham giaphải “thống nhất” với nhau về khoảng thời gian dành cho 1 bit truyền, hay nói cáchkhác tốc độ truyền phải được cài đặt như nhau trước, tốc độ này gọi là tốc độ Baud
Theo định nghĩa, tốc độ baud là số bit truyền trong 1 giây.
Ví dụ: nếu tốc độ baud được đặt là 19200 thì thời gian dành cho 1 bit truyền là1/19200 ~ 52.083us
3.1.2 Frame (khung truyền)
Dữ liệu đi vào ở đầu thu của đường dữ liệu trong truyền dữ liệu nối tiếp là mộtdãy các số 0 và 1, và rất khó để hiểu được ý nghĩa của các dữ liệu ấy nếu bên phát vàbên thu không cùng thống nhất về một tập các luật, một thủ tục, về cách dữ liệu đượcđóng gói, bao nhiêu bit tạo nên một ký tự và khi nào dữ liệu bắt đầu và kết thúc Bên
Trang 24cạnh tốc độ baud, khung truyền là một yếu tố quan trọng tạo nên sự thành công khi
truyền và nhận
Khung truyền bao gồm các quy định về số bit trong mỗi lần truyền, các bit “báo” như bit Start và bit Stop, các bit kiểm tra như Parity, ngoài ra số lượng các bit trong một data cũng được quy định bởi khung truyền.
- Start bit là bit đầu tiên được truyền trong một frame truyền, bit này có chức
năng báo cho thiết bị nhận biết rằng có một gói dữ liệu sắp được truyền tới Start là bitbắt buộc phải có trong khung truyền, và nó là một bit thấp (0)
- Data hay dữ liệu cần truyền là thông tin chính mà chúng ta cần gởi và nhận.
Data không nhất thiết phải là gói 8 bit, với 8051 ta có thể quy định số lượng bit củadata là 08 hoặc 09 bit Trong truyền thông nối tiếp UART, bit có trọng số nhỏ nhất(LSB - Least Significant Bit, bit bên phải) của data sẽ được truyền trước và cuối cùng
là bit có trọng số lớn nhất (MSB - Most Significant Bit, bit bên trái)
- Parity bit là bit dùng để kiểm tra dữ liệu truyền có đúng không (một cách tương
đối) Có 2 loại parity là parity chẵn (even parity) và parity lẻ (odd parity) Parity chẵnnghĩa là số lượng số “1” trong dữ liệu bao gồm bit parity luôn là số chẵn Ngược lạitổng số lượng các số “1” trong parity lẻ luôn là số lẻ
Ví dụ: nếu dữ liệu của bạn là 10111011 nhị phân, có tất cả 6 số “1” trong dữ liệunày, nếu quy định parity chẵn được dùng, bit parity sẽ mang giá trị 0 để đảm bảo tổngcác số “1” là số chẵn (6 số 1) Nếu parity lẻ được yêu cầu thì giá trị của parity bit là 1.Sau khi truyền chuỗi dữ liệu kèm theo cả bit parity trên, bên nhận thu được và kiểmtra lại tổng số số “1” (bao gồm cả bit parity), nếu vi phạm quy định parity đã đặt trướcthì ta khẳng định là dữ liệu nhận được là sai
Parity bit không phải là bit bắt buộc và vì thế chúng ta có thể loại bit này khỏi
khung truyền
- Stop bits là 01 hoặc nhiều bit báo cho thiết bị nhận rằng một gói dữ liệu đã được
gởi xong Sau khi nhận được stop bits, thiết bị nhận sẽ tiến hành kiểm tra khung
Trang 25truyền để đảm bảo tính chính xác của dữ liệu Stop bits là các bit bắt buộc xuất hiệntrong khung truyền, trong 8051 có thể là 01 hoặc 02 bit, và chúng là các bit cao (1).
Hình 3.2 Một khung truyền trong truyền thông nối tiếp không đồng bộ
Hình trên là một ví dụ của một khung truyền của UART (truyền thông nối tiếpkhông đồng bộ): khung truyền này được bắt đầu bằng 01 start bit, tiếp theo là 08 bitdata, sau đó là 01 bit parity dùng kiểm tra dữ liệu và cuối cùng là 02 bits stop
3.2 Truyền thông nối tiếp trong 8051
3.2.1 Phần cứng
Trong 8051 có hai chân được dùng cho truyền và nhận dữ liệu nối tiếp Hai chânnày được gọi là TxD và RxD, là một phần của cổng P3 (đó là P3.0-chân 10 và P3.1-chân 11) Các chân này hoạt động với mức logic TTL (mức logic cao “1” được gáncho Vcc và mức logic thấp được gán cho 0v)
Vì các máy tính được sử dụng rất rộng rãi để truyền thông với các hệ thống viđiều khiển, do vậy ta chủ yếu tập trung vào truyền thông nối tiếp của 8051 với cổngCOM – RS232 của PC
Trang 26Hình 3.3 Sơ đồ chân vi điều khiên 8051
Để cho phép tương thích giữa các thiết bị truyền thông dữ liệu được sản xuất bởicác hãng khác nhau thì một chuẩn giao diện được gọi là RS232 đã được thiết lập bởihiệp hội công nghiệp điện tử EIA vào năm 19960 Năm 1963 nó được sửa chỉnh vàđược gọi là RS232A và vào các năm 1965 và 1969 thì được đổi thành RS232B vàRS232C ở đây chúng ta đơn giản chỉ hiểu là RS232 Ngày nay RS232 là chuẩn giaodiện I/O vào - ra nối tiếp được sử dụng rộng rãi nhất Chuẩn này được sử dụng trongmáy tính PC và hàng loạt các thiết bị khác nhau
Trang 27Tránh tín hiệu mạng dữ liệu
Dữ liệu được nhận
Dữ liệu được gửiĐầu dữ liệu sẵn sàngĐất của tín hiệu
Dữ liệu sẵn sàngYêu cầu gửiXoá để gửiBáo chuông
Nối ghép 8051 tới RS232:
Chuẩn RS232 được thiết lập trước họ logic TTL rất lâu do vậy điện áp đầu vào
và đầu ra của nó không tương thích với mức TTL Trong RS232 thì mức logic 1 được
biểu diển từ điện áp - 3v đến -25v trong khi đó mức 0 thì ứng với điện áp + 3v đến+25v làm cho điện áp - 3v đến + 3v là không xác định Vì lý do này để kết nối một