Một cách sử dụng khác của chế độ định địa chỉ chỉ số là trong các lệnh nhảy, khi đó địa chỉ đích của lệnh được tính toán bằng cách cộng con trỏ cơ sở và nội dụng thanh chứa.. Mỗi lệnh mã
Trang 1Lời mở đầu
Ngày nay, những ứng dụng của vi điều khiển đã đi sâu vào đời sống sinh hoạt và sản xuất của con người, là một phần tất yếu không thể thiếu trong đời sông hiện đại Thế kỷ 21 được xem là thế kỷ của khoa học công nghệ, là thế kỷ mà máy móc được thiết kế và lập trình một cách tự động để thay thế các hoạt động của con người trong sản xuất, cũng như để phục vụ các công việc trong sinh hoạt Trong một cuộc sống mang tính tự động hoá cao thì các mạch vi xử lý như là một công cụ đắc lực, quan trọng , hỗ trợ cho con người thực hiện nhu cầu ngày càng cao và càng hoàn thiện của mình Một trong số những ứng dụng rộng rãi nhất của vi xử lý là trong ngành công nghiệp quảng cáo Hiện nay những mô hình quảng cáo bằng cách tạo chữ chạy đã rất phổ biến Vì vậy, qua quá trình học tập môn học vi điều khiển, cùng với sự hướng dẫn của giáo viên, chúng tôi đã chọn nội dung bài tập:
“Thiết kế mạch hiển thị chữ chạy dùng vi điều khiển 89C51”
Nội dung của bài tập gồm 3 phần:
Phần I: Giới thiệu về vi điều khiển 89C51
Phần II: Phần mềm cho họ vi điều khiển MCS-51
Phần III: Sơ đồ mạch và chương trình
Do điều kiện tiếp xúc với môn học không nhiều, kiến thức còn hạn chế nên bài tập của chúng tôi vẫn còn nhiều thiếu sót Chúng tôi rất mong được sự góp ý của thầy giáo và các bạn
Trang 2I Giới thiệu vi điều khiển 80C51
1 Những vấn đề chung:
Vi điều khiển 8051 là thành viên đầu tiên của họ MCS-51 và là lõi cho tất cả các vi điều khiển thuộc họ MCS-51 sau này Đặc trưng của lõi 8051 là: -CPU 8 bit được tối ưu cho các ứng dụng điều khiển
-Khả năng sử lý từng bit
-Không gian địa chỉ bộ nhớ chương trình 64K
-Không gian địa chỉ bộ nhớ dữ liệu 64K
-Có 4Kb bộ nhớ chương trình trên chip
-Có 128 byte RAM dữ liệu trên chip
-Có 32 đường vào/ra định địa chỉ riêng và 2 hướng
-Có 2 Timer/Counter 16 bit
-Cấu trúc ngắt 6 nguồn/ 5 vecto với 2 mức ưu tiên
-Bộ dao động on-chip
Cấu trúc cơ bản của lõi 8051 như sau:
Trang 31.1 Tổ chức bộ nhớ:
Tất cả các vi điều khiển họ MCS-51 đều có không gian địa chỉ riêng cho bộ nhớ chương trình và bộ nhớ dữ liệu Việc tách riêng bộ nhớ chương trình và bộ nhớ dữ liệu cho phép bộ nhớ dữ liệu được truy cập bởi các địa chỉ 8 bit và được truy cập bởi CPU 8 bit Ngoài ra các địa chỉ bộ nhớ 16 bit cũng có thể được tạo ra thông qua thanh ghi DPTR
Bộ nhớ chương trình chỉ có thể đọc mà không ghi được Có thể có đến 64Kb bộ nhớ chương trình Trong các phiên bản ROM và EPROM của vi điều khiển thì dung lượng 4K, 8K, hoặc 16K thuộc vùng địa chỉ thấp được cung cấp ngay trên chip Trong các phiên bản không chứa ROM thì toàn bộ
bộ nhớ chương trình là ở bên ngoài chip Tín hiệu đọc bộ nhớ ngoài là PSEN
Bộ nhớ dữ liệu có địa chỉ tách biệt với bộ nhớ chương trình Có đến 64Kb bộ nhớ RAM ngoài có thể được định địa chỉ trong không gian bộ nhớ
dữ liệu ngoài CPU tạo ra các tín hiệu đọc và ghi, RD và WR, cần thiết cho quá trình truy nhập bộ nhớ ngoài
Có thể kết hợp bộ nhớ chương trình ngoài và bộ nhớ dữ kiệu ngoài bằng cách sử dụng các tín hiệu RD và PSEN làm đầu vào cho mạch AND và
sử dụng đầu ra của nó như tín hiệu đọc bộ nhớ kết hợp chương trình và dữ liệu này
1.2 Các chế độ định địa chỉ:
Các chế độ định địa chỉ trong tập lệnh của MCS-51 gồm có:
Định địa chỉ trực tiếp:
Trong chế độ định địa chỉ trực tiếp, toán hạng được chỉ rõ bởi một trường địa chỉ 8 bit trong lệnh Chỉ có RAM dữ liệu trong và các thanh ghi chức năng đặc biệt (SFR) có thể được định địa chỉ trực tiếp
Trang 4Định địa chỉ gián tiếp:
Lệnh chỉ rõ một thanh ghi mà nội dụng chứa địa chỉ của toán hạng Cả RAM trong và ngoài đều có thể định địa chỉ gián tiếp Thanh ghi địa chỉ cho các địa chỉ 8 bit có thể là R0 hoặc R1 của băng thanh ghi được chọn, hoặc là con trỏ ngăn xếp Thanh ghi địa chỉ cho các địa chỉ 16 bit chỉ có thể là thanh ghi con trỏ dữ liệu 16 bit, DPTR
1.3 Các lệnh thanh ghi:
Các băng thanh ghi, gồm các thanh ghi từ R0 đến R7, có thể được truy nhập bởi các lệnh chứa mã thanh ghi 3 bit cùng với mã lệnh
Các lệnh chỉ rõ thanh ghi: một vài lệnh chỉ rõ thanh ghi cần truy nhập
Ví dụ một vài lệnh luôn làm việc với thanh chứa, hoặc con trỏ dữ liệu,…, vì vậy không có byte địa chỉ nào cần để trỏ đến nó Bản thân mã lệnh sữ thực hiện điều đó và đó là các lệnh có chức năng chỉ truy nhập đến một thanh ghi nào đó
Hằng số tức thời: giá trị của một hằng số có thể kết hợp ngay trong lệnh
Định địa chỉ chỉ số: chỉ có bộ nhớ chương trình là có thể truy nhập theo cách này, và nó chỉ có thể đọc Chế độ định địa chỉ này thay cho cách tìm kiếm trong bảng truyền thống Một thanh ghi cơ sở 16 bit (DPTR hoặc
bộ đếm chương trình) trỏ đến địa chỉ cơ sở của bảng, và thanh chứa sẽ lưu chỉ số phần tử của bảng Địa chỉ của phần tử bảng trong bộ nhớ chương trình được tạo ra bằng cách cộng nội dung thanh chứa với con trỏ cơ sở Một cách
sử dụng khác của chế độ định địa chỉ chỉ số là trong các lệnh nhảy, khi đó địa chỉ đích của lệnh được tính toán bằng cách cộng con trỏ cơ sở và nội dụng thanh chứa
2.Cấu trúc bộ vi xử lý AT89C51 (8051):
2.1 Sơ đồ chân:
Trang 5Vi xử lý AT8951 có 40 chân thì có 32 chân dnhà 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 Vcc, đất GND, các chân giao động XTLA1 và XTLA2, tái lập RST, cho phép chốt địa chỉ ALE, truy cập được địa chỉ ngoài EA, cho phép cất chương trình PSEN
2.2 Các thanh ghi chức năng đặc biệt :
Các thanh ghi chức năng đặc biệt (SFR) là các thanh ghi đảm nhiệm các chức năng khác nhau trong chíp Chúng nằm ở RAM bên trong chíp chiếm vùng không gian bộ nhớ 128 bytes được định địa chỉ từ 80h đến FFh
a) Thanh ghi tích luỹ (Acc):
Đây là thanh ghi quan trọng trong chíp, dùng để lưu trử các toán hạng và kết quả của phép tính Thanh ghi Acc dài 8 bist, có địa chỉ là E0h trong SFR
b) Thanh ghi B :
Thanh ghi thường sử dụng khi thực hiện các phép toán nhân, chia Đối với các lệnh khác, thanh ghi B có thể xem như là thanh ghi đệm tạm thời Trong SFR thanh ghi B dài 8 bits và có địa chỉ là F0h
c) Con trỏ ngăn xếp (SP):
Trang 6Thanh ghi này dài 8 bits, có địa chỉ trong SFR là 81h, giá trị của nó được tăng tự động trước khi thực hiện các lệnh CALL, PUSH Ngăn xếp có thể đặt bất cứ nơi nào trong RAM của chíp, nhưng sau khi khởi động lại ngăn xếp thì con trỏ ngăn xếp mặc định sẽ trỏ tới địa chỉ khởi đầu là 07h, vậy ngăn xếp sẽ được tạo ra bắt đầu từ 08h
d) Con trỏ dữ liệu (DPTR):
Là thanh ghi dài 16 bits, gồm hai thanh ghi dài 8 bit hợp lại là thanh ghi byte cao DPH và thanh ghi byte thấp DPL Con trỏ dữ liệu có thể sử dụng như là thanh ghi 16 bits hoặc hai thanh ghi 8 bits độc lập Trong SFR thanh ghi DPH có địa chỉ là 83h, còn thanh ghi DPL có địa chỉ là 82h
e) Từ trạng thái chương trình (PSW):
Là thanh ghi dài 8 bits, có địa chỉ trong SFR là D0h Thanh ghi PSW dùng để chứa thông tin về trạng thái chương trình Mỗi bit của PSW đảm nhiệm một chức năng cụ thể Thanh ghi này được phép truy cập ở dạng mức bit
Trang 7f) Đệm dữ liệu truyền nối tiếp (SBUF):
Đệm dữ liệu truyền nối tiếp gồm 2 thanh ghi, một thanh ghi đệm phát và một thanh ghi đệm thu Khi dữ liệu được truyền tới SBUF, nó được chuyển tới thanh ghi đệm thu và được giữ ở đấy để chế biến thành dạng truyền nối tiếp Khi dữ liệu được truyền từ SBUF nó chuyển đi từ thanh ghi đệm thu Địa chỉ của SBUF trong SFR là 99h
g) Thanh ghi thời gian cơ sở :
Trong chíp 8951 có hai đôi thanh ghi là TH0, TL0 và TH1, TL1 Mỗi đôi thanh ghi dài 16 bits dùng làm bộ đếm trong khối “thời gian/bộ đếm” tương ứng Địa chỉ của các thanh ghi này trong SFR là từ 8Ah đến 8Dh
h) Thanh ghi điều khiển Mode “thời gian/bộ đếm” (TMOD):
Trong chíp sử dụng kiểu “thời gian/bộ đếm”, điều khiển chức năng “thời gian” hay chức năng “bộ đếm” bằng thanh ghi TMOD Thanh ghi này dài
8 bits và có địa chỉ là 89h
i) Thanh ghi điều khiển “thời gian/bộ đếm” (TCON):
Tuy chíp hoạt động theo kiểu “thời gian” hay “bộ đếm”, nhưng trong mỗi kiểu lại có 4 chêếđộ hoạt động, viêc chọn hoạt đọng 1 trong 4 chế độ thực hiện bằng thanh ghi này Trong SFR thanh ghi TCON có đia chỉ là 88h
j) Thanh ghi điều khiển cổng nối tiếp (SCON):
Thanh ghi này giúp chíp thiết lập trạng thái và điều khiển cổng thực hiện chức năng truyền thông nối tiếp Thanh ghi có địa chỉ là 98h
k) Thanh ghi cho phép ngắt (IE):
Là thanh ghi dài 1 byte, có địa chỉ là A8h Chip có khả năng truy cập địa chỉ mức bit tới thanh ghi IE Trong thanh ghi này ngoài bit EA cho phép chip làm việc ở chế độ ngắt, còn các bit khác cho phép ngắt tương ứng khác hoạt động Khi bit có giá trị logic 0 thì ngắt tương ứng bị cấm, bit có mức logic 1 sẽ cho phép ngắt hoạt động
Trang 8II Phần mềm cho họ bộ vi điều khiển MCS - 51.
Bài tập sử dụng ngụn ngữ Assembly viết cho họ vi điều khiển MCS-51
1 Cấu trúc của một hợp ngữ.
Một chơng trình hợp ngữ bao gồm một chuỗi các dòng lệnh hợp ngữ Một lệnh hợp ngữ có chứa một từ gợi nhớ và tuỳ theo từng lệnh mà sau nó có một hoặc hai toán hạng Các toán hạng là các dữ liệu cần đợc thao tác và các
từ gợi nhớ là các lệnh đối với CPU nói nó làm gì với các dữ liệu
Cấu trúc một lệnh hợp ngữ bao gồm 4 trờng sau:
[Nhãn:] [từ gợi nhớ] [Các toán hạng] [;Chú giải]
Các trờng trong dấu ngoặc vuông là tuỳ chọn và không phải dòng lệnh nào cũng có chúng Các dấu ngoặc vuông không đợc viết vào
Trờng nhãn cho phép chơng trình tham chiếu đến một dòng lệnh bằng tên Nó không đợc viết quá 31 ký tự đối với trình dịch ASM-51, số ký tự của trờng nhãn phụ thuộc vào trình dịch hợp ngữ mà ta sử dụng
Từ gợi nhớ (lệnh) và các toán hạng là các trờng kết hợp với nhau thực thi công việc thực tế của chơng trình và hoàn thiện các nhiệm vụ mà chơng trình đợc viết cho chúng Trờng chú giải luôn phải bắt đầu bằng dấu chấm phẩy (;) Các chú giải có thể bắt đầu ở đầu dòng hoặc phần còn lại của dòng Hợp ngữ bỏ qua không dịch các chú giải nhng ngời lập trình nên dùng chúng
để mô tả chơng trình giúp cho chơng trình sáng sủa hơn
2 Tập lệnh mã ngữ của họ bộ vi điều khiển MCS - 51.
Tập lệnh Assembly của họ MCS - 51 đợc chia thành 5 nhóm là các lệnh số học, các lệnh logic, các lệnh chuyển số liệu, các lệnh xử lý bit và các lệnh rẽ nhánh Các lệnh xử lý bit là điểm mạnh cơ bản của họ MCS -51, vì nó thích hợp với các ứng dụng chỉ cần thay đổi giá trị 1 bít nh bật hoặc tắt một thiết bị
Tập lệnh mã ngữ của họ MCS - 51 đợc xây dựng trên cơ sở mã ngữ của các bộ vi xử lý 8 bit, với những phát triển nhằm tối u hoá cho các ứng dụng điều khiển Mỗi lệnh mã ngữ sẽ xử lý một byte hoặc một bit số liệu nằm ở một thanh ghi hoặc một ô nhớ nào đó, nên trong lệnh phải có địa chỉ của số liệu để CPU tìm đợc số liệu cần xử lý
Trang 9Cấu trúc mỗi lệnh mã ngữ của MCS - 51 gồm có một mã lệnh 8 bit quy định thao tác xử lý, kèm theo từ 0 đến 2 byte toán hạng là số liệu hoặc
địa chỉ cần thiết cho việc thực hiện lệnh
Các lệnh mã ngữ sử dụng nhiều phơng pháp định địa chỉ khác nhau Các phơng pháp định địa chỉ đợc sử dụng trong các lệnh mã ngữ là định địa chỉ tức thời, định địa chỉ trực tiếp, định địa chỉ gián tiếp, định địa chỉ thanh ghi, định địa chỉ tơng đối, định địa chỉ tuyệt đối, định địa chỉ dài và địa chỉ chỉ số
Các lệnh sử dụng địa chỉ tức thời có một toán hạng (ký hiệu là #data) chính là số liệu cần xử lý, trình biên dịch nhận biết toán hạng số liệu tức thời nhờ ký tự # đặt trớc toán hạng đó
Các lệnh sử dụng địa chỉ trực tiếp chỉ đợc dùng để truy cập vùng 128 byte thấp của bộ nhớ RAM trong và các thanh ghi chức năng đặc biệt SFR có
địa chỉ ở vùng 128 byte cao của bộ nhớ RAM trong, chúng có toán hạng (ký hiệu là Direct) là địa chỉ 8 bit của ô nhớ hoặc tên thanh ghi SFR chứa số liệu cần xử lý
Phơng pháp định địa chỉ gián tiếp cho phép xác định hoặc tính toán địa chỉ của biến để truy cập đến các ô nhớ có giá trị biến đổi khi chơng trình chạy, điều này không thể thực hiện đợc bằng định địa chỉ trực tiếp
Các lệnh sử dụng địa chỉ gián tiếp để truy cập bộ nhớ RAM trong phải dùng
các thanh ghi R0 hoặc R1 làm con trỏ dữ liệu (ký hiệu là @Ri, với i = 0 hoặc 1) Các lệnh truy cập đến bộ nhớ RAM ngoài phải dùng các thanh ghi R0, R1 hoặc thanh ghi 16 bit DPTR làm con trỏ dữ liệu (ký hiệu là @DPTR) Ký hiệu @Ri đợc hiểu là ô nhớ đợc trỏ bởi Ri, nghĩa là Ri chứa địa chỉ của ô nhớ cần tuy cập, do đó cần thiết lập địa chỉ của ô nhớ chứa số liệu cần xử lý
ở thanh ghi dùng làm con trỏ trớc khi thực hiện lệnh dùng con trỏ
Các lệnh sử dụng địa chỉ thanh ghi chỉ đợc dùng cho các thanh ghi của băng thanh ghi hiện thời, chúng có toán hạng là tên của một trong các thanh ghi R0 R7( ký hiệu Rn là thanh ghi thứ n, với n = 0 7)
Chỉ có các lệnh nhảy sử dụng địa chỉ tơng đối, chúng có một toán hạng (ký hiệu là Rel ) là tên nhãn của điểm nhảy đến và sẽ đợc trình biên dịch tính thành địa chỉ Offset bằng khoảng cách từ lệnh tiếp theo đến vị trí của nhãn, do đó địa chỉ tuyệt đối của điểm nhảy đến sẽ bằng giá trị hiện tại
Trang 10của bộ đếm chơng trình PC cộng với giá trị Offset Do Offset là giá trị 8 bit
có dấu nên tầm nhảy khi sử dụng địa chỉ tơng đối bị giới hạn trong khoảng cách 127 byte đến -128 byte từ vị trí của lệnh tiếp sau lệnh nhảy
Chỉ có các lệnh Acall và Ajmp sử dụng địa chỉ tuyệt đối, chúng có một toán hạng là tên nhãn của điểm nhảy đếnvà sẽ đợc trình biên dịch tính thành giá trị 11 bit Absolute bằng khoảng cách từ lệnh tiếp theo đến vị trí của nhãn và đó chính là 11 bit thấp của địa chỉ, còn 5 bit cao của địa chỉ sẽ là
5 bit cao hiện thời của bộ đếm chơng trình PC, do đó các lệnh trên chỉ có thể
rẽ nhánh chơng trình trong giới hạn 2K của bộ nhớ chơng trình
Chỉ có các lệnh Lcall và Ljmp sử dụng kểu định địa chỉ dài, chúng có một toán hạng là tên nhãn của điểm nhảy đến và sẽ đợc trình biên dịch tính thành giá trị địa chỉ 16 bit, do đó các lệnh trên cho phép rẽ nhánh chơng trình trong không gian 64K của bộ nhớ chơng trình
Chỉ có các lệnh Movc và Jmp sử dụng địa chỉ chỉ số, chúng có một toán hạng là địa chỉ chỉ số đợc tính bằng tổng của chỉ số đợc cất trong thanh chứa A với một giá trị cơ sở là nội dung hiện thời của bộ đếm chơng trình PC hoặc con trỏ dữ liệu DPTR ( ký hiệu là @A + PC hoặc @A + DPTR) Kiểu
địa chỉ chỉ số cho phép truy cập chính xác đến các phần tử của bảng số liệu
và đợc dùng để lập bảng rẽ nhánh chơng trình
Tập lệnh mã ngữ của họ MCS -51 đợc chia thành 5 nhóm là nhóm các lệnh số học, nhóm các lệnh logic, nhóm các lệnh di chuyển số liệu, nhóm các lệnh rẽ nhánh và nhóm các lệnh xử lý bit Mỗi dạng lệnh mã ngữ thực hiện một thao tác nhất định đối với số liệu, nhng khi sử dụng với các kiểu
định địa chỉ khác nhau sẽ tạo ra nhiều lệnh cụ thể, mỗi lệnh có mã lệnh và yêu cầu các toán hạng kèm theo khác nhau Để ngắn gọn và tiện cho sử dụng sau này, ta trình bày tập lệnh mã ngữ của họ MCS - 51 dới dạng các bảng theo từng nhóm lệnh ở phần phụ lục
Họ MCS - 51 hỗ trợ các lệnh xử lý theo bit, các bit có thể đợc set và xoá bằngmột lệnh Điều khiển đơn bit đợc dùng cho nhiều thiết bị xuất/nhập, bao gồm xuất ra rơ le, động cơ, các LED Lập trình cho bộ đếm/định thời (Coutter/Timer) dùng để định một khoảng thời gian hoặc đếm các sự kiện, truyền thông nối tiếp và khả năng lập trình các ngắt, từ đó cho phép ta thực hiện các ứng dụng trong thực tế một cách mềm dẻo
III Sơ đồ mạch và chương trỡnh: