1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Bài giảng vi điều khiển 8051 (tt)

133 239 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 133
Dung lượng 4,16 MB

Nội dung

Để sử dụng chíp này để phát triển yêu cầu truy cập đến một bộ đốt PROM cũng như bộ xoá UV- EPROM để xoá nội dung của bộ nhớ UV-EPROM bên trong 8751 trước khi ta cóthể lập trình lại nó..

Trang 1

Bài 1: Giới thiệu họ Vi điều khiển 8051

Nội dung trong bài này:

Phần I: chúng ta sẽ xem xét một số thành viên khác nhau của họ bộ vi điều

khiển 8051 và các đặc điểm bên trong của chúng Đồng thời ta điểm qua một sốnhà sản xuất khác nhau và các sản phẩm của họ có trên thị trường

Phần II: Giới thiệu Kiến trúc Vi điều khiển 8051.

I - Tổng quan về họ 8051

1.1 Tóm tắt về lịch sử của 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 chíp, hai bộ địnhthời, một cổ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ộtchíp Lúc ấy nó được coi là một “hệ thống trên chíp” 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ớnhơ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ổng rộng 8 bit (xem hình 1) Mặc dù 8051 có thể có một ROM

trên chíp cực đại là 64 K byte, nhưng các nhà sản xuất lúc đó đã cho xuất xưởngchỉ với 4K byte ROM trên chíp Điều này sẽ được bàn chi tiết hơn sau này

8051 đã trở nên phổ biến sau khi Intel cho phép các nhà sản xuất khác sảnxuấ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ại tươ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ác tốc độ khác nhau và dung lượng ROM trên chíp khác nhau được bánbởi hơn nửa các nhà 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ề tốc độ và dung lương nhớ ROM trên chíp, 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 taviết chương trình của mình cho một phiên bản nào đó thì nó cũng sẽ chạy với mọiphiên bản bất kỳ khác mà không phân biệt nó từ hãng sản xuất nào

Trang 2

Bộ vi điều khiển 8051 là thành viên đầu tiên của họ 8051 Hãng Intel ký hiệu

nó như là MCS51 Bảng 1 trình bày các đặc tính của 8051

có 8K byte ROM Trên chíp thay vì 4K byte như 8051

Trang 3

ROM trên chíp 4K byte 8K byte OK

b- Bộ vi điều khiển 8031.

Một thành viên khác nữa của 8051 là chíp 8031 Chíp này thường được coinhư là 8051 không có ROM trên chíp vì nó có OK byte ROM trên chíp Để sửdụng chíp này ta phải bổ xung ROM ngoài cho nó ROM ngoài phải chứa chươngtrình mà 8031 sẽ nạp và thực hiện So với 8051 mà chương trình được chứa trongROM trên chíp bị giới hạn bởi 4K byte, còn ROM ngoài chứa chương trinh đượcgắ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 2cổ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 phép 8031 với bộ nhớ và cổng vào - ra chẳng hạn với chíp 8255 đượctrình bày ở chương 14 Ngoài ra còn có các phiên bản khác nhau về tốc độ của

8031 từ các hãng sản xuất khác nhau

1.4 Các bộ vi điều khiển 8051 từ các hãng khác nhau

Mặc dù 8051 là thành viên phổi biến nhất của họ 8051 nhưng chúng ta sẽ thấy nó trong kho linh kiện Đó là do 8051 có dưới nhiều dạng kiểu bộ nhớ khácnhau như UV - PROM, Flash và NV - RAM mà chúng đều có số đăng ký linh kiệnkhác nhau Việc bàn luận về các kiểu dạng bộ nhớ ROM khác nhau sẽ được trình

Trang 4

bày ở chương 14 Phiên bản UV-PROM của 8051 là 8751 Phiên bản Flash ROMđược bán bởi nhiều hãng khác nhau chẳng hạn của Atmel corp với tên gọi làAT89C51 còn phiên bản NV-RAM của 8051 do Dalas Semi Conductor cung cấpthì được gọi là DS5000 Ngoài ra còn có phiên bản OTP (khả trình một lần) của

8051 được sản xuất bởi rất nhiều hãng

a- Bộ vi điều khiển 8751

Chíp 8751 chỉ có 4K byte bộ nhớ UV-EPROM trên chíp Để sử dụng chíp này để phát triển yêu cầu truy cập đến một bộ đốt PROM cũng như bộ xoá UV- EPROM để xoá nội dung của bộ nhớ UV-EPROM bên trong 8751 trước khi ta cóthể lập trình lại nó Do một thực tế là ROM trên chíp đối với 8751 là UV-EPROMnên cần phải mất 20 phút để xoá 8751 trước khi nó có thể được lập trình trở lại.Điều này đã dẫn đến nhiều nhà sản xuất giới thiệu các phiên bản Flash Rom vàUV-RAM của 8051 Ngoài ra còn có nhiều phiên bản với các tốc độ khác nhaucủa 8751 từ nhiều hãng khác nhau

b- Bộ vi điều khiển AT8951 từ Atmel Corporation

Chíp 8051 phổ biến này có ROM trên chíp ở dạng bộ nhớ Flash Điều này

là lý tưởng đối với những phát triển nhanh vì bộ nhớ Flash có thể được xoá trongvài giây trong tương quan so với 20 phút hoặc hơn mà 8751 yêu cầu Vì lý do này

mà AT89C51 để phát triển một hệ thống dựa trên bộ vi điều khiển yêu cầu một bộđốt ROM mà có hỗ trợ bộ nhớ Flash Tuy nhiên lại không yêu cầu bộ xoá ROM.Lưu ý rằng trong bộ nhớ Flash ta phải xoá toàn bộ nội dung của ROM nhằm để lậptrình lại cho nó Việc xoá bộ nhớ Flash được thực hiện bởi chính bộ đốt PROM vàđây chính là lý do tại sao lại không cần đến bộ xoá Để loại trừ nhu cầu đối với một

bộ đốt PROM hãng Atmel đang nghiên cứu một phiên bản của AT 89C51 có thểđược lập trình qua cổng truyền thông COM của máy tính IBM PC

Trang 5

Số linh kiện ROM RAM Chân I/

Bảng 3: Các phiên bản của 8051 từ Atmel (Flash ROM).

Chữ C trong ký hiệu AT89C51 là CMOS

Cũng có những phiên bản đóng vỏ và tốc độ khác nhau của những sản phẩm trên đây Xem bảng 1.6 Ví dụ để ý rằng chữ “C” đứng trước số 51 trong AT 89C51 -12PC là ký hiệu cho CMOS “12” ký hiệu cho 12 MHZ và “P” là kiểu đóng

vỏ DIP và chữ “C” cuối cùng là ký hiệu cho thương mại (ngược với chữ “M” là

quân sự ) Thông thường AT89C51 - 12PC rất lý tưởng cho các dự án của học sinh, sinh viên.

Trang 6

c- Bộ vi điều khiển DS5000 từ hãng Dallas Semiconductor

Một phiên bản phổ biến khác nữa của 8051 là DS5000 của hãng DallasSemiconductor Bộ nhớ ROM trên chíp của DS5000 ở dưới dạng NV-RAM Khảnăng đọc/ ghi của nó cho phép chương trình được nạp vào ROM trên chíp trongkhi nó vẫn ở trong hệ thống (không cần phải lấy ra) Điều này còn có thể được thựchiện thông qua cổng nối tiếp của máy tính IBM PC Việc nạp chương trình trong

hệ thống (in-system) của DS5000 thông qua cổng nối tiếp của PC làm cho nó trởthành một hệ thống phát triển tại chỗ lý tưởng Một ưu việt của NV-RAM là khảnăng thay đổi nội dung của ROM theo từng byte tại một thời điểm Điều này tươngphản với bộ nhớ Flash và EPROM mà bộ nhớ của chúng phải được xoá sạch trướckhi lập trình lại cho chúng

Bảng 5: Các phiên bản 8051 từ hãng Dallas Semiconductor.

Chữ “T” đứng sau 5000 là có đồng hồ thời gian thực

Lưu ý rằng đồng hồ thời gian thực RTC là khác với bộ định thời Timer.RTC tạo và giữ thời gian l phút giờ, ngày, tháng - năm kể cả khi tắt nguồn

Còn có nhiều phiên bản DS5000 với những tốc độ và kiểu đóng gói khácnhau.( Xem bảng 1.8) Ví dụ DS5000-8-8 có 8K NV-RAM và tốc đọ 8MHZ.Thông thường DS5000-8-12 hoặc DS5000T-8-12 là lý tưởng đối với các dự án củasinh viên

Trang 7

8MHz12MHz8MHz8MHz (with RTC)12MHz

12MHz (with RTC)

Bảng 6:Các phiên bản của DS5000 với các tốc độ khác nhau

d- Phiên bản OTP của 8051

Các phiên bản OTP của 8051 là các chíp 8051 có thể lập trình được một lần

và được cung cấp từ nhiều hãng sản xuất khác nhau Các phiên bản Flash và RAM thường được dùng để phát triển sản phẩm mẫu Khi một sản pohẩm đượcthiết kế và được hoàn thiện tuyệt đối thì phiên bản OTP của 8051 được dùng đểsản hàng loạt vì nó rẻ hơn rất nhiều theo giá thành một đơn vị sản phẩm

NV-e- Họ 8051 từ Hãng Philips

Một nhà sản xuất chính của họ 8051 khác nữa là Philips Corporation Thậtvậy, hãng này có một dải lựa chọn rộng lớn cho các bộ vi điều khiển họ 8051.Nhiều sản phẩm của hãng đã có kèm theo các đặc tính như các bộ chuyển đổiADC, DAC, cổng I/0 mở rộng và cả các phiên bản OTP và Flash

II - Giới thiệu Kiến trúc Vi điều khiển 8051

2.1 Tổ chức bộ nhớ

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, hình 1 và hình 2 sẽ mô tả điều này 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 nhanh hơn đối với không gian dữ liệunhờ việc phân chia 2 không gian bộ nhớ chương trình và dữ liệu như trên Tuynhiên bộ nhớ ngoài được truy nhập bởi hệ thống 16 bit địa chỉ vẫn có thể thực hiệnnhờ 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 trong

Trang 8

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

Ví dụ sử dụng EPROM: 2764 (64Kbyte), khi đó chân PSEN phải ở mức tích cực(5V)

Hình 1: Cấu trúc vi điều khiển 89C51

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ề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 Với những vi điều khiển khôngtích hợp ROM trên chip thì vẫn có RAM trên chip là 128byte Khi sử dụng RAMngoà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ớ chươ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ởi cổng logic AND để phân biệt tín hiệu truy xuất dữ liệu trên ROM hayRAM ngoài

Trang 9

Bộ nhớ chương trình:

Hình 2: Cấu trúc bộ nhớ chương trình

Hình 3: Địa chỉ các ngắt trên bộ nhớ chương trình

Hình 2 mô tả cấu trúc bộ nhớ chương trình Sau khi khởi động, CPU bắt đầu thực hiện chương trình ở vị trí 0000H Hình 3 mô tả địa chỉ ngắt mặc định trên

bộ nhớ chương trình Mối khi xảy ra ngắt, con trỏ của CPU sẽ nhảy đến đúng địachỉ 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ắt ngoài 0 thì con trỏ chương trình sẽ nhảy đến đúng địa chỉ0003H để thực thi chương trình tại đó Nếu trong chương trình ứng dụng không xử

Trang 10

dụng đến ngắt ngoài 0 thì địa chỉ 0003H vẫn có thể dùng cho mục đích khác (sửdụng cho bộ nhớ chương trình).

Bộ nhớ dữ liệu:

Hình 4: Cấu trúc bộ nhớ dữ liệu

Hình 4 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 5 mô tả cấu trúc bộ nhớ dữ liệu trong chip, được chia thành 3 khối là

128 byte thấp, 128 byte cao và 128 byte đặc biệt

Hình 5: Cấu trúc bộ nhớ trong

Trang 11

Hình 6 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 R7 Hai bit củ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

R0-Hình 6: Cấu trúc 128 byte thấp của bộ nhớ dữ liệu trong

8051 chứa 210 vị trí bit được định địa chỉ trong đó 128 bit chứa trongcác byte ở địa chỉ từ 20H đến 2FH (16 byte x 8 bit = 128 bit) và phần còn lại chứatrong các thanh 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ướivùng nà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ự dobằng cách sử dụng các kiểu định địa chỉ trực tiếp hoặc gián tiếp

Trang 12

Bất kỳ vị trí nhớ nào trong vùng RAM đa mục đích đều có thể được truyxuấ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

Cũng như các thanh ghi từ R0 đến R7, ta có 21 thanh ghi chức năng đặcbiệt SFR chiế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 định nghĩa

Hình 7: 128 byte cao của bộ nhớ dữ liệu

2.2 Các thanh ghi đặc biệt

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ừ đị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 định nghĩa Hình 8 mô tả các

thanh ghi đặc biệt trong vùng nhớ dữ liệu 80H đến FFH và giá trị của chúng saukhi Reset

Trang 13

Hình 8: Các thanh ghi đặc biệt

Thanh ghi chính:

Thanh ghi tính toán chính của vi điều khiển 8051 ACC (Accumulator) Làthanh ghi đặ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

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 Lệnh

Trang 14

MUL AB nhân 2 số 8 bit không dấu chứa trong A và B và chứa kết quả 16 bit vàocặp thanh ghi B, A (thanh chứa A cất byte thấp và thanh ghi B cất byte cao).

Lệnh chia DIV AB chia A bởi B, thương số cất trong thanh chứa A và dư

số cất trong thanh ghi B Thanh ghi B còn được xử lý như một thanh ghi nháp Cácbit được định địa chỉ của thanh ghi B có địa chỉ từ F0H đến F7H

Thanh ghi trạng thái chương trình (PSW):

Thanh ghi trạng thái chương trình PSW (địa chỉ: D0H) là thanh ghi mô tả

toàn bộ trạng thái chương trình đang hoạt động của hệ thống Bảng 7 và Bảng 8 sẽ

mô tả thanh ghi này

Bảng 7: Thanh ghi trạng thái chương trình PSW

Trang 15

Cờ nhớ (Carry Flag): được Set nếu có Bit nhớ từ

Bit 7 trong phép cộng hoặc có Bit mượn cho Bit 7trong phép trừ

Cờ nhớ phụ: được Set trong phép cộng nếu có

Bit nhớ từ Bit 3 sang Bit 4 hoặc kết quả trong 4Bit thấp nằm trong khoảng 0AH->0FH

PSW.2 OV D2H Cờ tràn (Overflow Flag): được Set khi phép toán

có dấu có kết quả > +127 hoặc < -128

Cờ kiểm tra chẵn lẻ: được Set hoặc Clear bởi

phần cứng sau mỗi 1 chu kỳ lệnh, để chỉ ra rằng

có 1 số chẵn hoặc số lẻ Bit 1 trong thanh chứa

Bảng 8: Chi tiết các bit trong thanh ghi PSW

Thanh ghi ngăn xếp (Stack Pointer):

Trang 16

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 baogồ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 stacklàm tăng SP trướ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ởi kiểu định địa chỉ gián tiếp Các lệnh PUSH và POP sẽ cất dữliệu vào stack và lấy dữ liệu từ stack, các lệnh gọi chương trình con (ACALL,LCALL) và lệnh trở về (RET, RETI) cũng cất và phục hồi nội dung của

bộ đếm chương trình PC (Program counter)

Con trỏ dữ liệu DPTR:

Con trỏ dữ liệu DPTR (data pointer) được dùng để truy xuất bộ nhớ chươngtrình ngoà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)

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 địachỉ 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

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ộ đệm nhận dữ liệu Khi dữ liệu được chuyển vào thanh ghi SBUF, dữ liệu sẽđược chuyển vào bộ đệm truyền dữ liệu và sẽ được lưu giữ ở đó cho đến khi quátrình truyề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ềnthông nối tiếp

Thanh ghi của bộ định thời/bộ đếm:

Trang 17

8051 có 2 bộ đếm/định thời (counter/timer) 16 bit để định các khoảng thờigian hoặc để đếm các sự kiện Các cặp thanh ghi (TH0, TL0) và (TH1, TL1) là cácthanh ghi 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, byte cao)

Hoạt động của bộ định thời được thiết lập bởi thanh ghi chế độ định thờiTMOD (Timer Mode Register) ở địa chỉ 88H Chỉ có TCON được định địa chỉtừng bit

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 Chi tiết của các thanh ghi này sẽ được mô tảsau

Trang 19

Bài 2: Các chân, cổng vào/ra

số hãng cung cấp một phiên bản 8051 có 20 chân với số cổng vào-ra ít hơn cho cácứng dụng yêu cầu thấp hơn Tuy nhiên, vì hầu hết các nhà phát triển chính sử dụngchíp đóng vỏ 40 chân với hai hàng chân DIP nên ta chỉ tập trung mô tả phiên bảnnày

Hình 1: Sơ đồ bố trí chân của 8051.

Trang 20

Trên hình 1 là sơ đồ bố trí chân của 8051 Ta thấy rằng trong 40 chân thì

có 32 chân dành cho các cổng P0, P1, P2 và P3 với mỗi cổng có 8 chân Các chân còn lại được dành cho nguồn V CC , đất GND, các chân dao động XTAL1 và XTAL2, chân Reset RST, chân cho phép chốt địa chỉ ALE, chân truy cập địa chỉ ngoài EA, cho phép cất chương trình PSEN Trong 8 chân này thì

6 chân V CC , GND, XTAL1, XTAL2,RST và EA được các họ 8051 sử dụng Hay

nói cách khác là chúng phải được nối để cho hệ thống làm việc Còn hai chân khác

là PSEN và ALE được sử dụng chủ yếu trong các họ 8031.

1.1 Chân V CC

Chân số 40 là V CC , có chức năng cấp điện áp nguồn cho chíp Nguồn điện

áp là+5V.

1.2 Chân GND

Chân số 20 là GND, được nối với đất.

1.3 Chân XTAL1 và XTAL2

8051 có một bộ dao động trên chíp nhưng nó yêu cầu có một xung đồng hồngoài để chạy nó 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) Bộ dao động thạch anh được nối tới XTAL1 vàXTAL2 cũng cần 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ư được trình bày trên hình 2a.

Cần phải lưu ý rằng có nhiều tốc độ khác nhau của họ 8051 Tốc độ được coi

như là tần số cực đại của bộ dao động được nối tới chân XTAL Một bộ vi điều khiển 8051 yêu cầu một tinh thể thạch anh có tần số không lớn hơn 20MHz Khi

8051 được nối tới một bộ dao động tinh thể thạch anh và cấp nguồn thì ta có thể

quan sát tần số trên chân XTAL2 bằng máy hiện sóng Nếu ta quyết định sử dụng

một nguồn tần số khác bộ dao động thạch anh, chẳng hạn như là bộ dao động TTL

Trang 21

thì nó sẽ được nối tới chân XTAL1, còn chân XTAL2 thì để hở không nối như hình 2b.

Hình 2: a) Nối XTAL tới thạch anh b) Nối XTAL tới nguồn đồng bộ

ngoài

1.4 Chân RST

RST là chân số 9 - Reset Nó là một chân đầu vào có mức tích cực cao (bình

thường ở mức thấp) Khi cấp xung cao tới chân này thì bộ vi điều khiển sẽ đượcReset và kết thúc mọi hoạt động Điều này thường được coi như là sự tái bật

nguồn Khi kích hoạt tái bật nguồn sẽ làm mất mọi giá trị trên các thanh ghi Hình

3 liệt kê các thanh ghi đặc biệt của 8051 và giá trị của chúng sau khi Reset.

Trang 22

Hình 3: Giá trị một số thanh ghi sau RESET.

Lưu ý rằng giá trị của bộ đếm chương trình PC là 0 khi tái lập để ép CPUnạp mã lệnh đầu tiên từ bộ nhớ ROM tại vị trí ngăn nhớ 0000 Điều này có nghĩa là

ta phải đặt dòng đầu tiên của mã nguồn tại vị trí ngăn nhớ 0 của ROM vì đây là mã

mà sau khi CPU thức tỉnh sẽ tìm lệnh đầu tiên Hình 4 trình bày cách nối chân RST với mạch Reset.

Trang 23

Các thành viên họ 8051 như 8751, 98C51 hoặc DS5000 đều có ROM trên

chíp lưu cất chương trình Trong các trường hợp như vậy thì chân EA được nối tới Vcc Đối với các thành viên của họ như 8031 và 8032 mà không có ROM trên

chíp thì mã chương trình được lưu cất ở trên bộ nhớ ROM ngoài và chúng được

nạp cho 8031/32 Do vậy, đối với 8031 thì chân EA phải được nối đất để báo rằng

mã chương trình được cất ở ngoài

Các chân mô tả ở trên đều phải được nối mà không cần thành phần nàođược sử dụng Còn hai chân dưới đây được sử dụng chủ yếu trong hệ thống vi điều

khiển 8031.

Trang 24

1.6 Chân PSEN

PSEN là chân đầu ra cho phép cất chương trình (Program Store Enable)

trong hệ thống Trên vi điều khiển 8031, chương trình được cất ở bộ nhớ ROMngoài thì chân này được nối tới chân OE của ROM

1.7 Chân ALE

Chân cho phép chốt địa chỉ ALE là chân đầu ra tích cực cao Khi nối 8031 tới bộ nhớ ngoài thì cổng P0 dùng để trao đổi cả địa chỉ và dữ liệu Hay nói cách khác 8031 dồn cả địa chỉ và dữ liệu qua cổng P0 để tiết kiệm số chân Chân ALE được sử dụng để phân kênh địa chỉ và dữ liệu.

1.8 Các chân cổng vào/ra và các chức năng của chúng

Bốn cổng P0, P1, P2 và P3 đều sử dụng 8 chân và tạo thành cổng 8 bít Tất cả các cổng khi Reset đều được cấu hình như các đầu ra, sẵn sàng để được sử dụng

như các cổng đầu ra Muốn sử dụng cổng nào trong số các cổng này làm đầu vàothì nó phải được lập trình

1.8.1 Cổng P0

Cổng P0 chiếm tất cả 8 chân (từ chân 32 đến 39) Nó có thể được dùng như cổng đầu ra, để sử dụng các chân của cổng P0 vừa làm đầu ra, vừa làm đầu vào thì

mỗi chân phải được nối tới một điện trở kéo bên ngoài 10kW Điều này là do một

thực tế là cổngP0 là một máng mở khác với các cổng P1, P2 và P3 Khái niệm

máng mở được sử dụng trong các chíp MOS về chừng mực nào đó nó giống nhưcollector hở đối với các chíp TTL

Trong bất kỳ hệ thống nào sử dụng 8751, 89C51 hoặc DS5000 ta thường nối

cổng P0 tới các điện trở kéo (Xem hình 5), bằng cách này ta có thể sử dụng được cổngP0 cho cả 2 trường hợp đầu ra và đầu vào Với những điện trở kéo ngoài được nối, khi Reset cổng P0 được cấu hình như một cổng đầu ra.

Trang 25

Hình 5: Cổng P0 với các điện trở kéo.

Cổng P0 là đầu vào: Với các điện trở được nối tới cổng P0 nhằm để tạo nó

thành cổng đầu vào thì nó phải được lập trình bằng cách ghi 1 tới tất cả các bit

của P0.

Vai trò kép của cổng P0: Như trên hình 1, cổng P0 được gán là các bit địa chỉAD0 - AD7 cho phép nó được sử dụng vừa cho địa chỉ, vừa cho dữ liệu Khi nối 8051/31 tới bộ nhớ ngoài thì cổng P0 cung cấp cả địa chỉ và dữ liệu, 8051 dồn dữ liệu và địa chỉ qua cổng P0 để tiết kiệm số chân ALE được sử dụng để tách địa

chỉ và dữ liệu với sự trợ giúp của IC chốt dữ liệu 74LS373

1.8.2 Cổng P1

Cổng P1 cũng chiếm tất cả 8 chân (từ chân 1 đến chân 8) nó có thể được sử dụng như đầu vào hoặc đầu ra So với cổng P0 thì cổng này không cần đến điện trở kéo vì nó đã có các điện trở kéo bên trong Trong quá trình Reset thì cổng P1 được

cấu hình như một cổng đầu ra

Cổng P1 là đầu vào: Tương tự P0, để biến cổng P1 thành đầu vào thì nó

phải được lập trình bằng cách ghi 1 đến tất cả các bit của nó

Trang 26

1.8.3 Cổng P2

Cổng P2 cũng chiếm 8 chân (các chân từ 21 đến 28) Nó có thể được sử dụng như đầu vào hoặc đầu ra, giống như cổng P1, cổng P2 cũng không cần điện trở kéo vì nó đã có các điện trở kéo bên trong Khi Reset, thì cổng P2 được cấu

hình như một cổng đầu ra

Cổng P2 là đầu vào: Để tạo cổng P2 như đầu vào thì nó phải được lập trình

bằng cách ghi các số 1 tới tất cả các chân của nó

Vai trò kép của P2: Trong các hệ thống 8751, 89C51 và DS5000 thì P2 được dùng như đầu ra Tuy nhiên trong hệ thống 80312 thì cổng P2 có thể được dùng cùng với P0 để tạo ra địa chỉ 16 bit đối với bộ nhớ ngoài Như chỉ ra trên hình 1 cổng P2cũng được chỉ định như là các bit địa chỉ A8 - A15 báo chức

năng kép của nó Vì một bộ 8031 có khả năng truy cập 64k byte bộ nhớ ngoài, nên

nó cần một đường địa chỉ 16 bít Trong khi P0 cung cấp 8 bit thấp qua A0 - A7 Công việc của P2 là cung cấp các bít địa chỉ A8 - A15 Hay nói cách khác khi

8031 được nối tới bộ nhớ ngoài thì P2 được dùng cho 8 bít cao của địa chỉ 16 bit

và nó không thể dùng cho vào/ra

Từ những trình bày trên đây ta có thể kết luận rằng trong các hệ thống vi

điều khiển 8751, 89C51 hoặc DS5000 thì ta có các cống P0, P1, P2 và P3 cho các

thao tác vào ra và như thế là có thể đủ cho các ứng dụng với hầu hết các bộ vi điều

khiển Ngoài ra cổng P3 còn để dành cho các chức năng đặc biệt khác mà ta sẽ

cùng bàn dưới đây

1.8.4 Cổng P3

Cổng P3 chiếm tổng cộng là 8 chân từ chân 10 đến chân 17 Nó có thể được sử dụng như đầu vào hoặc đầu ra Cống P3 không cần các điện trở kéo cũng như P1 vàP2 Mặc dù cổng P3 được cấu hình như một cống đầu ra khi Reset,

nhưng đây không phải là cách nó được sử dụng phổ biến nhất

Trang 27

Cống P3 được bổ sung các chức năng quan trọng, đặc biệt Bảng 2 cung cấp các chức năng khác của cống P3 Thông tin này áp dụng cho cả 8051 và 8031:

· Các bit P3.0 và P3.1 cung cấp tín hiệu nhận và phát dữ liệu trong truyền thông

dữ liệu nối tiếp.

· Các bit P3.2 và P3.3 được dành cho các ngắt ngoài.

· Bit P3.4 và P3.5 được dùng cho các bộ định thời 0 và 1.

· Cuối cùng các bit P3.6 và P3.7 để ghi và đọc các bộ nhớ ngoài khi được nối tới

các hệ thống 8031

Trang 29

Bài 3: Ngôn Ngữ Lập Trình C [Keil C] Cơ Bản Cho 8051

Nội dung trong bài này:

1 Giới thiệu ngôn ngữ C

Trong kỹ thuật lập trình vi điều khiển nói chung, ngôn ngữ lập trình được sửdụng thường chia làm 2 loại: Ngôn ngữ bậc thấp và Ngôn ngữ bậc cao

Ngôn ngữ bậc cao là các ngôn ngữ gần vơi ngôn ngữ con người hơn, do đóviệc lập trình bằng các ngôn ngữ này trở nên dễ dàng và đơn giản hơn Có thể kểđến một số ngôn ngữ lập trình bậc cao như C, Basic, Pascal… trong dó C là ngônngữ thông dụng hơn cả trong kỹ thuật vi điều khiển Về bản chất, sử dụng các ngônngữ này thay cho ngôn ngữ bậc thấp là giảm tải cho lập trình viên trong việcnghiên cứu các tập lệnh và xây dựng các cấu trúc giải thuật Chương trình viếtbằ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êndịch (Compiler) chuyển sang dạng hợp ngữ trước khi chuyển sang mã máy

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 Có nghĩa là với 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ểu kiế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

2 Ngôn ngữ C

2.1 Kiểu dữ liệu

Trang 30

2.1.1 Kiểu dữ liệu trong C

* Khai báo biến:

- Cú pháp: Kiểu_dữ_liệu Vùng_nhớ Tên_biến _at_ Đia_chỉ;

Ví dụ: Unsigned char data x;

- Khi khai báo biến có thể gán luôn cho biến giá trị ban đầu

Ví dụ: Thay vì: unsigned char x;

x = 0;

Ta chỉ cần: unsigned char x = 0;

- Có thể khai báo nhiều biến cùng một kiểu một lúc

Ví dụ: Unsigned int x,y,z,t;

- Chỉ định vùng nhớ: từ khoá “Vùng_nhớ” cho phép người dùng có thể chỉ ra vùngnhớ sử dụng để lưu trữ các biến sử dụng trong chương trình Các vùng nhớ có thể

sử dụng là:

CODE, DATA, DATAB, IDATA, PDATA, XDTA Khi không khai báo vùng nhớtrình dịch Keil C sẽ mặc định đó là vùng nhớ DATA

Trang 31

Vùng nhớ Ý nghĩa

CODE Bộ nhớ mã nguồn chương trình

DATA Bộ nhớ dữ liệu gồm 128 Byte thấp của RAM trong vi điều khiển

BDATA Bộ nhớ dữ liệu có thê định địa chỉ bit, nằm trong vùng nhớDATA

IDATA Bộ nhớ dữ liệu gồm 128 Byte cao của RAM trong vi điều khiểnchỉ có ở một số dòng vi điều khiển sau này

PDATA Bố nhớ dữ liệu ngoài gồm 256 Byte, được truy cập bởi địa chỉ đặttrên P0

XDATA Bộ nhớ dữ liệu ngoài có dung lượng có thể lên đến 64 KB, đượctruy cập bởi địa chỉ đặt trên P0 và P2

* Định nghĩa lại kiểu

- Cú pháp: Typedef Kiễu_dữ_liệu Tên_biến;

- Tên_biến sau này sẽ được sử dụng như một kiểu dữ liệu mới và có thể dùng đểkhai báo các biến khác

Ví dụ: Typedef int m5[5];

Dùng tên m5 khai báo hai biến tên a và b có kiểu dữ liệu là mảng 1 chiểu 5phần tử: m5 a,b;

Trang 32

2.1.2 Kiểu dữ liệu trong Keil C

- sbit, sfr, sfr16: dùng để định nghĩa các cho các thanh ghi chức năng hoặc cáccổng trên vi điều khiển dùng để truy nhập các đoạn dữ liệu 1 bit, 8 bit, 16 bit

2.1.3 Mảng

Mảng là một tập hợp nhiều phần tử cùng một kiểu giá trị và chung một tên.Các phần tử của mảng phân biệt với nhau bởi chỉ số hay số thứ tự của phần tửtrong dãy phẩn tử Mỗi phần tử có vai trò như một biến và lưu trữ được một giá trịđộc lập với các phần tử khác của mảng

Mảng có thể là mảng một chiều hoặc mảng nhiều chiều

Khai báo:

- Cú pháp: Tên_kiểu Vùng_nhớ Tên_mảng[số_phần_tử_mảng];

Khi bỏ trống số phần tử mảng ta sẽ có mảng có số phần tử bất kì

Ví dụ: Unsigned int data a[5],b[2] [3];

Với khai báo trên ta sẽ có: mảng a là mảng một chiều 5 phần tử Mảng b làmảng hai chiều, tổng số phần tử là 6

Chỉ số của mảng bắt đầu từ số 0 Mảng có bao nhiêu chiều phải cung cấpđầy đủ bấy nhiêu chỉ số

Ví du: Phần tử mảng 2 chiều:

b[0] [1] là đúng

Khi viết: b[0] là sai

Trang 33

2.1.4 Con trỏ

Khi ta khai báo một biến, biến đó sẽ được cấp phát một khoảng nhớ bao gồmmột số byte nhất định dùng để lưu trữ giá trị Địa chỉ đầu tiên của khoảng nhớ đóchính là địa chỉ của biến được khai báo

Con trỏ là một biến dùng để chứa địa chỉ mà không chứa giá trị, hay giá trịcủa con trỏ chính là địa chỉ khoảng nhớ mà nó trỏ tới

Với các vùng nhớ cụ thể con trỏ tới vùng nhớ đó chiếm dung lượng phụthuộc vào độ lớn của vùng nhớ đó Con trỏ tổng quát khi không xác định trướcvùng nhớ sẽ có dung lượng lớn nhất vì vậy tốt nhất nên sử dụng con trỏ cụ thể

Khai báo biến con trỏ:

- Cú pháp: Kiểu_Dữ_liệu Vùng_nhớ *Tên_biến;

- Ví dụ: int *int_ptr;

long data *long_ptr;

- khi không chỉ rõ vùng nhớ con trỏ sẽ được coi là con trỏ tổng quát

Trang 34

2.1.5 Kiểu dữ liệu cấu trúc

Kiểu dữ liệu cấu trúc là một tập hợp các biến, các mảng và cả các kiểu cấutrúc khác được biểu thị bởi một tên duy nhất kiểu dữ liệu cấu trúc dùng để lưu trữcác giá trị, thông tin có liên quan đến nhau

Định nghĩa và khai báo biến cấu trúc:

- Định nghĩa: Typedef struct { Khai báo các biến thành phần;

Trang 36

2.2.4 Phép toán thao tác Bit

^ Phép hoặc loại trừ (XOR) Bit_1 ^ Bit_2

*= a*=5 <=> a=a*5 /= a/=5 <=> a=a/5

%= a%=5 <=> a=a%5

Trang 37

2.3 Cấu trúc chương trình C

2.3.1 Cấu trúc chương trình

* Cấu trúc:

1 Khai báo chỉ thị tiền xử lý

2 Khai báo các biến toàn cục

3 Khai báo nguyên mẫu các hàm

// Khai báo biến toàn cục:

Unsigned char code Led_arr[3];

Unsigned char data dem;

Unsigned int xdata X;

//*********************************

// Khai báo nguyên mẫu hàm

Void delay(unsigned int n);

bit kiemtra(unsigned int a);

Khai báo biến cục bô;

Mã chương trình kiểm tra biến a;

}

Trang 38

Chú ý: Hàm không khai báo nguyên mẫu phải được xây dựng trước hàm có

lời gọi hàm đó Ở ví dụ trên do hàm “bit kiemtra(unsigned int a)” đã được khai báonguyên mẫu hàm ở trên nên có thể xây dựng hàm ở bất kì vị trí nào trong chươngtrình

Tuy nhiên chúng ta nên khai báo nguyên mẫu hàm trước hàm main, và xâydựng các hàm phụ ở sau hàm main Như thế sẽ tạo thói quen lập trình gọn gànghơn, và cũng tạo thuận lợi hơn cho việc xem lại code, tìm kiếm và sửa lỗi sau này

2.3.2 Chỉ thị tiền xử lý

Các chỉ thị tiền sử lý không phải là các lệnh của ngôn ngữ C mà là các lệnhgiúp cho việc soạn thảo chương trình nguồn C trước khi biên dịch Khi dịch mộtchương trình C thì không phải chính bản chương trình nguồn mà ta soạn thảo đượcdịch Trước khi dịch, các lệnh tiền xử lý sẽ chỉnh lý bản gốc, sau đó bản chỉnh lýnày sẽ được dịch Có ba cách chỉnh lý được dùng là:

+ Phép thay thế #Define

+ Phép chèn tệp #Include

+ Phép lựa chọn biên dịch #Ifdef

Các chỉ thị tiền xử lý giúp ta viết chương trình ngắn gọn hơn và tổ chứcbiên dịch, gỡ rối chương trình linh hoạt, hiệu quả hơn

* Chỉ thị #Define: Chỉ thị #define cho phép tạo các macro thay thế đơn giản

- Cú pháp: #Define Tên_thay_thế dãy_kí_tự

Một Tên_thay_thế có thể được định nghĩa lại nhiều lần, nhưng trước khi địnhnghĩa lại phải giải phóng định nghĩa bằng chỉ thị:

Trang 40

Ở cách 1: nếu tên_macro chưa được định nghĩa thì “Đoạn chương trình” sẽ đượcdịch, ngược lại thì “Đoạn chương trình” sẽ bị bỏ qua.

Chú thích trong chương trình sẽ không ảnh hưởng đến chương trình mà tasoạn thảo vì trình dịch sẽ bỏ qua tất cả lời chú thích khi biên dịch chương trìnhsang mã máy

Lời giải thích được đặt sau dấu “//” nếu chú thích chỉ viết trên một dònghoặc trong cặp dấu “\*” và “*\

Ngày đăng: 05/12/2015, 22:16

TỪ KHÓA LIÊN QUAN

w