Họ vi xử lý 8051

Chia sẻ: Nguyen Hong Thao | Ngày: | Loại File: DOCX | Số trang:29

0
139
lượt xem
55
download

Họ vi xử lý 8051

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Vào năm 1971 tập đoàn Intel đã giới thi ệu 8080, b ộ vi x ử lí thành công đ ầu tiên, ti ếp đó không lâu Motorola, RCA, MOS Technology và Zilog cũng đã giới thiệu các

Chủ đề:
Lưu

Nội dung Text: Họ vi xử lý 8051

  1. Họ vi xử lý 8051 Lời mở đầu Vào năm 1971 tập đoàn Intel đã giới thi ệu 8080, b ộ vi x ử lí thành công đ ầu tiên, ti ếp đó không lâu Motorola, RCA, MOS Technology và Zilog cũng đã giới thiệu các bộ vi xử lí t ương tự : 6800, 1801, 6502 và Z80. Bản thân các vi mạch này tuy không có nhi ều hi ệu qu ả s ử d ụng nh ưng khi là một phần của một máy tinh đơn board (Single Board Computer) , chúng trở thành thành phần trung tâm trong các sản phẩm có ích dùng để nghiên cứu và thi ết kế. Năm 1976 Intel giới thiệu bộ vi điều khiển( Micro Controller) 8748, một chip tương tự như các bộ vi xử lí và là chip đầu tiên trong họ vi điều khiển MCS-48. 8748 là m ột vi m ạch ch ứa trên 17000 transistor bao gồm một CPU, 1K byte EPROM, 64 byte RAM, 27 chân xu ất nh ập và m ột b ộ đ ịnh th ời 8 bit. Sự ra đời của IC này và các IC khác, của họ MCS-48 đã nhanh chóng tr ở thành chu ẩn công nghiệp trong các ứng dụng hướng điều khiển (Control Oriented Application). Độ phức tạp, kích thước và khả năng của bộ vi đi ều khi ển đ ược tăng thêm môt b ậc quan trọng vào năm 1980 khi Intel công bố chip 8051, bộ vi điều khiển đầu tiên của họ vi điều khiển MCS- 51. So với 8048, chip 8051 chứa trên 60000 transistor bao gồm 4K byte ROM, 128 byte RAM, 32 đường xuất nhập, 1 port nối tiếp và 2 bộ định thời 16 bit. Vi điều khiển 8051 cũng như họ vi điều khiển MCS-51 là một trong những bộ vi điều khiển 8- bit mạnh và linh hoạt nhất, đã trở thành bộ vi điều khiển hàng đầu trong những năm gần đây. Những bộ vi xử lý dùng chung thường gặp như họ Intel x86 (8086, 80286, 80386, 80486, Pentium..) hoặc họ 680x0 của Motorola (6800, 68010, 68020, 68030, 68040…). Những bộ vi xử lý này không có RAM, ROM và không có các port I/O trên chip, do đố khi sử dụng thiết kế hệ thống phải bổ sung thêm RAM, ROM, I/O và các bộ định thời (Timer/Counter) ngoài để cho chúng hoạt động được. Tuy việc này làm cho hệ thống cồng kềnh, phức tạp và giá thành cao hơn nhưng chúng lại có ưu điểm là linh hoạt hơn so với vi điều khiển.                 Trong khi đó với vi điều khiển nó có sẵn : 1 CPU( bộ vi xử lý) cùng 1 lượng cố định RAM, ROM, các  cổng I/O và Timer/Counter được tích hợp tất cả trên cùng 1 chip. Mục lục Bài 1: Ki ến trúc h ọ vi x ử lý 8051 1.1 Tổ chức bộ nhớ 1.2 Các thanh ghi đặc biệt 1.3 Truy xuất địa chỉ 1.4 Tập lệnh assembly 1.5 Câu hỏi kiểm tra Bài 2. Các bài th ực hành 2.1 Đi ều khi ển Led 2 .1.1 Đi ề u khi ển 1 led 2 .1.2 Đi ề u khi ển nhi ều led 2 .1.3 Đi ề u khi ển l ần l ượ t led 2 .1.4 Các bài m ở r ộng   2.2 Giao ti ế p v ới công t ắc 2.2.1 Điều khiển bật tắt led
  2. 2.2.2 Led chạy khi nhấn công tắc 2.3 Đi ều khi ển led 7 thanh 2.3.1 Cách hiển thị led 7 thanh 2.3.2 Phối hợp điều khiển các thanh 2.3.3 Điều khiển led 7 thanh hiện số 2.3.4 Điều khiển led 7 thanh hiện chữ 2.3.5 Điều khiển nhiều led 7 thanh 1 2.3.6 Điều khiển nhiều led 7 thanh 2
  3. 1. Kiến trúc vi điều khiển 8051 1.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.1.1 và hình  1.1.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ệ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 địa chỉ 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 đa 64Kbyte. 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. Ví dụ sử  dụng EPROM: 2764 (64Kbyte), khi đó chân PSEN phải ở mức tích cực (5V). Hình 1.1.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ông tích hợp ROM 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ớ 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 hay RAM ngoài. Bộ nh ớ ch ươ ng trình:  Hình 1.1.2 Cấu trúc bộ nhớ chương trình
  4. Hình 1.1.3 Địa chỉ các ngắt trên bộ nhớ chương trình     Hình 1.1.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 1.1.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 đị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ắ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ử 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ởi vậy khi lập trình bằng ngôn ngữ Assembly, phần đầu chương  trình bao giờ cũng phải cho chương trình nhảy đến địa chỉ cao hơn địa chỉ chứa các ngắt và mã lệnh viết cho các  ngắt thì phải viết đúng địa chỉ của các ngắt tương ứng.  B ộ nh ớ d ữ li ệu: Hình 1.1.4 Cấu trúc bộ nhớ dữ liệu Hình 1.1.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 1.1.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.
  5. Hình 1.1.5 Cấu trúc bộ nhớ trong Hình 1.1.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 R0­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. Hình 1.1.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 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á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 ưới vù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ự 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. Cũng như các thanh ghi từ R0 đến R7, ta 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 1.1.7. 128 byte cao của bộ nhớ dữ liệu. 1.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 1.2.1 mô tả các thanh ghi đặc biệt trong vùng nh ớ d ữ li ệu 80H đ ến FFH.
  6. Hình 1.2.1 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 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ào cặ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ác bit đ ượ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 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. Hình 1.2.2 và 1.2.2 sẽ mô tả thanh ghi này. Hình 1.2.1 Thanh ghi trạng thái chương trình PSW
  7.  Hình 1.2.2 Chi tiết các bit trong thanh ghi PSW 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 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 ương trì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 đị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. Thanh ghi b ộ đ ệm truy ền thông n ối ti ếp (Serial Data Buffer)  
  8. 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ền thông nối tiếp. 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 gian ho ặc đ ể đ ếm các sự kiện. Các cặp thanh ghi (TH0, TL0) và (TH1, TL1) là các thanh 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ời TMOD (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. 1.3 Truy xuất địa chỉ 8051 có các kiểu truy xuất địa chỉ khác nhau: o Thanh ghi (Register) Trực tiếp (Direct) o Gián tiếp (Indirect) o Tức thời (Immediate) o Tương đối (Relative) o Tuyệt đối (Absolute) o o Dài (Long) Chỉ số (Indexed) o Truy xu ất đ ịa ch ỉ thanh ghi 8051 cho phép truy xuất 8 thanh ghi “làm vi ệc”, được đánh s ố t ừ R0 → R7. Các l ệnh s ử d ụng ki ểu định địa chỉ thanh ghi được mã hóa bằng các dùng 3 bit thấp nhất của opcode( c ủa lệnh) để ch ỉ ra 1 thanh ghi bên trong không gian địa chỉ logic này. Vậy : 1 mã ch ức năng + đ ịa ch ỉ toán h ạng → 1 l ệnh ngắn 1 byte. Truy xu ất đ ịa ch ỉ ki ểu tr ực ti ếp Kiểu định địa chỉ trực tiếp được sử dụng để truy xuất các biến nhớ hoặc các thanh ghi trên chip. Một byte thêm vào tiếp theo opcode dùng để xác định đ ịa ch ỉ. Trong 8051 có 128 byte b ộ nh ớ RAM. Bộ nhớ RAM được gán địa chỉ từ 00H đến FFH và được phân chia như sau: Các ngăn nhớ từ 00H đến 1FH được gán cho các băng thanh ghi và ngăn xếp o Các ngăn nhớ từ 20H đến 2FH được dành cho không gian định địa chỉ bít đ ể lưu d ữ liệu theo o từng bit Các ngăn nhớ từ 30H đến 7FH là không gian để lưu dữ liệu có kích th ước 1 byte o
  9. Chế độ định địa chỉ trực tiếp có thể truy cập toàn bộ không gian của b ộ nh ớ RAM. Tuy nhiên, ch ế độ này thường được dùng để truy cập các ngăn nhớ RAM t ừ 30H đến 7FH, vì thực t ế đ ối v ới không gian nhớ danh cho băng thanh ghi thì đã được truy cập b ằng tên thanh ghi nh ư R0- R7. ở ch ế đ ộ định địa chỉ trực tiếp , địa chỉ ngăn nhớ RAM chứa dữ liệu là toán hạng của l ệnh. Ví dụ: ; sao nội dung ngăn nhớ 40H của RAM vào R0 MOV R0, 40 ; chuyển nội dung ngăn nhớ 7FH vào R4. MOV R4, 7FH     Một ứng dụng quan trọng của chế độ định địa chỉ trực tiếp là ngăn xếp. Trong họ 8051, chỉ có chế  độ định địa chỉ trực tiếp là được phép cất và lấy dữ liệu từ ngăn xếp Truy xu ất đ ịa ch ỉ ki ểu gián ti ếp Ở chế độ này, thanh ghi được dùng để trỏ đến dữ liệu có trong bộ nhớ. Nếu dữ liệu có trên chip CPU thì chỉ các thanh ghi R0 và R1 m ới đ ược s ử d ụng, và nh ư v ậy cũng có nghĩa là không thể dùng các thanh ghi R2-R7 để trỏ đến địa chỉ của toán hạng ở ch ế đ ộ định đ ịa chỉ này. Nếu R0 và R1 được dùng làm con trỏ, nghĩa là chúng l ưu đ ịa ch ỉ của ngăn nh ớ RAM thì trước các thanh ghi cần đặt dấu " @" như các ví dụ sau: ; chuyển ngăn nhớ RAM có địa chỉ ở R0 vào A MOV A, @R0 ; chuyển B vào ngăn nhớ RAM có địa chỉ ở R1 MOV @R1, B Chú ý: ở đây R0 cũng như R1 đều có dấu "@" đứng trước. Nếu không có dấu "@" đ ứng trước thì đó là lệnh chuyển nội dung thanh ghi R0 và R1 chứ không ph ải d ữ liệu ngăn nh ớ có đ ịa ch ỉ trong R0 và R1. Một trong những ưu diểm của chế độ định địa chỉ gián tiếp là cho phép truy c ập d ữ li ệu linh hoạt hơn so với chế độ định địa chỉ trực tiếp. Tuy nhiên R0 và R1 là các thanh ghi 8 bit, nên chúng chỉ được phép truy cập đến các ngăn nhớ RAM trong, từ địa chỉ 30H đến 7FH và các thanh ghi SFR. Trong thực tế, có nhiều trường hợp cần truy cập dữ liệu được cất ở RAM ngoài hoặc không gian ROM trên chip. Trong những trường hợp đó chúng ta cần s ử dụng thanh ghi 16 bit DPTR. Truy xu ất đ ịa ch ỉ ki ểu t ức th ời Khi toán hạng là một hằng số thay vì là một biến, hằng s ố này có th ể đ ưa vào l ệnh và đây là byte dữ liệu tức thời. Trong hợp ngữ, các toàn hạng tức thời được nhận biết nhờ vào ký tự ‘# ‘ đặt trước chúng. Toán hạng này có thể là một hằng số học, một biến hoặc một biểu thức s ố học sử d ụng các h ằng s ố, các ký hiệu và các toán tử. Trình dịch hợp ngữ tính giá trị và thay th ế d ữ liệu t ức thời vào trong l ệnh. Ví dụ lệnh : MOV A, #12 ;Nạp giá trị 12(OCH) vào thanh chứa A Tất cả các lệnh sử dụng kiểu định địa chỉ tức thời đều sử dụng hằng dữ liệu 8 bit làm d ữ li ệu t ức thời. Có một ngoại lệ khi ta khởi động con trỏ dữ liệu 16-bit DPTR, hằng đ ịa chỉ 16 bit đ ược c ần đ ến. Truy xu ất đ ịa ch ỉ ki ểu t ươ ng đ ối
  10. Kiểu định địa chỉ tương đối chỉ được sử dụng cho các lệnh nhảy. Một địa chỉ tương đối là một giá trị 8 bit có dấu. Giá trị này được cộng với một bộ đếm chương trình đ ể t ạo ra đ ịa ch ỉ c ủa l ệnh tiếp theo cần thực thi. Định địa chỉ tương đối có điểm lợi là cung cấp cho ta mã không ph ụ thu ộc vào vị trí, nhưng lại có điểm bất lợi là các đích nhảy bị giới hạn trong t ầm. Truy xu ất đ ịa ch ỉ ki ểu tuy ệt đ ối Kiểu định địa chỉ này được sử dụng với các lệnh ACAll và AJMP. Đây là các lệnh 2 byte cho phép rẽ nhánh chương trình trong trang 2k hiện hành của bộ nhớ chương trình b ằng cách cung c ấp 11 bit thấp của địa chỉ đích. Trong đó có 3 bit cao (A8-A10) và 8 bit th ấp (A0-A7) thành l ập byte th ứ 2 c ủa lệnh Truy xu ất đ ịa ch ỉ ki ểu dài Kiểu định địa chỉ dài chỉ được dùng cho các lệnh LCALL và LJMP. Các lệnh 3 byte này ch ứa đ ịa chỉ đích 16 bit. Lợi ích của kiểu định địa chỉ này là sử dụng hết toàn bộ không gian nh ớ ch ương trình 64K, nhưng lại có điểm bất lợi là lệnh dài đến 3-byte và phụ thuộc vào vị trí. Truy xu ất đ ịa ch ỉ ki ểu ch ỉ s ố Chế độ định địa chỉ chỉ số được sử dụng rộng rãi khi truy cập các phần t ử d ữ li ệu của bảng trong không gian ROM chương trình của 8051. Lệnh được dùng cho m ục đích này là "MOVC A, @A+DPTR". Thanh ghi 16 bit DPTR và thanh ghi A được dùng để t ạo ra đ ịa chỉ c ủa phần t ử d ữ li ệu được lưu trong ROM trên chip. ở lệnh này, nội dung của A được cộng với nội dung thanh ghi 16- bit DPTR để tạo ra địa chỉ 16 bit. 1.4 Các loại lệnh Các l ệnh s ố h ọc
  11. Các l ệ nh logic
  12. C ác l ệnh di chuy ển d ữ li ệu
  13. C ác l ệnh x ử lý bit
  14. C ác l ệnh r ẽ nhánh
  15. C ác l ệnh d ịch và quay Các l ệnh làm vi ệc v ới ngăn x ếp   1.5 Câu hỏi kiểm tra
  16.   1 . S ự khác bi ệ t gi ữa vi đi ều khi ển và vi x ử lý? 2 . Hãy cho bi ết m ột ví d ụ v ề vi đi ều khi ển và vi x ử lý? Vì sao? 3 . N ế u s ử d ụ ng b ộ nh ớ ch ươ ng trình ngoài và b ộ nh ớ d ữ li ệu ngoài thì nh ững c ổng nào c ủa 8051 đ ượ c s ử d ụng đ ể truy xu ất b ộ nh ớ ch ươ ng trình và b ộ nh ớ n goài 4 . Các vi đi ều khi ển thu ộc h ọ 8051 có ít nh ất m ấy b ộ đ ịnh th ời/b ộ đ ếm.
  17. 2. Thực hành điều khiển các thiết bị vào ra  2.1 Điều khiển LED 2.1.1 Đi ề u khi ển b ật t ắt 1 led Đầu tiên bài học sẽ thực hành điều khiển 1 led sáng tối thật đơn giản. Mạch điện điều khiển bao gồm 1 led và 1 điện trở nối tiếp nhau. Bài học này sẽ áp dụng cho vi điều khiển 89S51 tuy nhiên hoàn toàn có thể áp dụng cho các vi điều khiển khác thuộc họ 8051. Bài thực hành này sẽ điều khiển việc cho phép dòng điện chạy qua led làm led sáng hoặc tối. B ướ c 1: Thiết kế mạch ứng dụng cho vi điều khiển như hình 2.1.1. Trong đó chân P0.0 được nối với Ka-tốt của led. Nếu P0.0 = 1 thì led sẽ không sáng, P0.0 = 0 led sẽ sáng. Hình 2.1.1 Sơ đồ nguyên lý mạch điều khiển led B ướ c 2:     Lập trình điều khiển Led theo ngôn ngữ lập trình Assembly (có thể dùng chương trình Reads51)     Nội dung chương trình: =============================================================== ; không sử dụng ngắt org 0h start: Clr P0.0 ; Bật led sáng call delay; Gọi hàm trễ Setb P0.0 ; Tắt led call delay; Gọi hàm trễ sjmp start; Quay trở về ban đầu ;============================================= ;subroutine delay created to rise delay time ;============================================= delay: mov R1,#255 del1: mov R2,#255 Chờ đến khi R2 giảm về 0 del2: djnz R2,del2 djnz R1,del1 Chờ đến khi R1 giảm về 0 ret end =============================================================== B ướ c 3: Biên dịch chương trình trên bằng các chương trình biên dịch chuyên dụng cho vi điều khiển như Reads51. Sau khi biên dịch, chươn trình sẽ tạo ra file mã máy mà vi điều khiển dựa vào đó để hoạt động. Thông thường file đó sẽ có dạng tên_file.hex. Việc đặt tên file là do người dùng tự đặt. B ướ c 4
  18. Nạp file mã máy mà chương trình biên dịch vừa tạo ra bằng các công cụ và mạch nạp như trong trang web này hướng dẫn làm như: mạch nạp 89xxxx, mạch nạp 89Cxx, mạch nạp 89Sxxxx, mạch nạp 89Sxx và AVR Sau khi nạp file mã máy vào vi điều khiển 89S51. Gắn vi điều khiển vào mạch ứng dụng, sẽ thấy kết quả của bài học.  2.1 Điều khiển LED 2.1.2 Đi ề u khi ển b ật t ắt nhi ều led Phần trước đã giới thiệu cách điều khiển bật tắt 1 led, phần này sẽ hướng dẫn cách điều khiển nhiều led (8 led). Step 1st Build the circuit as shown in figure 2.1.2. As you seen on figure 2.1.2. P0.0 trough P0.7 is connected to LED's  katode each. Remember, that all we want to do with this lesson is make four LED blink change reversed. B ướ c 1: Thiết kế mạch ứng dụng cho vi điều khiển như hình 2.1.2. Trong đó các chân P0.0 đến P0.7 được nối với Ka- tốt của led. Hình 2.1.2 Sơ đồ nguyên lý mạch điều khiển led B ướ c 2:     Lập trình điều khiển Led theo ngôn ngữ lập trình Assembly (có thể dùng chương trình Reads51)     Nội dung chương trình: =============================================================== org 0h start: mov P0,#11110000b; Bật các led nối với P0.0-P0.3 call delay ; Gọi hàm trễ mov P0,#00001111b; Bật các led nối với P3.4-P0.7 Gọi hàm trễ call delay; sjmp start; Trở lại từ đầu ;============================================= ;subroutine delay created to rise delay time ;============================================= delay: mov R1,#255 ; Cho R1 = 255 del1: mov R2,#255 ; Cho R2 = 255 ; Chờ đến khi R2 = 0 del2: djnz R2,del2 djnz R1,del1 ; Chờ đến khi R1 = 0
  19. ret end =============================================================== B ướ c 3: Biên dịch chương trình trên bằng các chương trình biên dịch chuyên dụng cho vi điều khiển như Reads51. Sau khi biên dịch, chươn trình sẽ tạo ra file mã máy mà vi điều khiển dựa vào đó để hoạt động. Thông thường file đó sẽ có dạng tên_file.hex. Việc đặt tên file là do người dùng tự đặt. B ướ c 4 Nạp file mã máy mà chương trình biên dịch vừa tạo ra bằng các công cụ và mạch nạp như trong trang web này hướng dẫn làm như: mạch nạp 89xxxx, mạch nạp 89Cxx, mạch nạp 89Sxxxx, mạch nạp 89Sxx và AVR Sau khi nạp file mã máy vào vi điều khiển 89S51. Gắn vi điều khiển vào mạch ứng dụng, sẽ thấy kết quả của bài học.  2.1 Điều khiển LED 2.1.3 Đi ề u khi ển b ật t ắt l ần l ượ t các led Phần trước đã giới thiệu cách điều khiển bật tắt nhiều led cùng lúc, phần này sẽ hướng dẫn cách điều khiển bật tắt lần lượt các led (8 led). B ướ c 1: Thiết kế mạch ứng dụng cho vi điều khiển như hình 2.1.3. Trong đó các chân P0.0 đến P0.7 được nối với Ka- tốt của led. Hình 2.1.3 Sơ đồ nguyên lý mạch điều khiển lần lượt các led B ướ c 2:     Lập trình điều khiển Led theo ngôn ngữ lập trình Assembly (có thể dùng chương trình Reads51)     Nội dung chương trình: =============================================================== org 0h start: mov P0,#11111110b; Bật led nối với P0.0 call delay ; Tạo trễ mov P0,#11111101b; Bật led nối với P0.1 call delay ; Tạo trễ mov P0,#11111011b; Bật led nối với P0.2 call delay ; Tạo trễ mov P0,#11110111b; Bật led nối với P0.3 call delay ; Tạo trễ
Đồng bộ tài khoản