MỤC LỤC
RAM bao gồm nhiều thành phần : Phần lưu trữ đa dụng, phần lưu trữ địa chỉ hóa từng bit, các thanh ghi (BANK) và các thanh ghi chức năng đặc biệt ( Special Funtion Registers). Chương trình và dữ liệu có thể chứa bên trong AT89C51 nhưng AT89C51 vẫn có thể kết nối với 64K Byte bộ nhớ chương trình và 64KByte bộ nhớ dữ liệu mở rộng. Nếu không dùng lệnh khởi động SP hoặc khi RESET lại AT89C51 thì SP sẽ bắt đầu tại địa chỉ mặc định là 07H và dữ liệu đầu tiên sẽ được cất vào ô nhớ ngăn xếp có địa chỉ là 08H.
Ngăn xếp được truy xuất trực tiếp bằng các lệnh PUSH và POP để lưu trữ tạm thời và lấy lại dữ liệu hoặc truy xuất ngầm bằng lệnh gọi chương trình con ACALL, LCALL và các lệnh trở về RET, RETI để lưu trữ giá trị của bộ đếm chương trình khi bắt đầu thực hiện chương trình con và lấy lại khi kết thúc chương trình con. Có một thanh ghi được gọi là cho phép ngắt IE (Interrup Enable), chịu trách nhiệm về việc cho phép ngắt và cấm các ngắt IE là thanh ghi có thể định địa chỉ bit.
Bộ đếm chương trình có nhiệm vụ trỏ đến địa chỉ của lệnh kế tiếp cần được thực hiện. Vấn đề tiếp theo là, khi 8051 được bật nguồn thì địa chỉ khởi đầu được bắt đầu từ đâu?. Mỗi họ vi điều khiển khi được bật nguồn đều được bắt đầu từ những địa chỉ khác nhau.
Bật nguồn có nghĩa là cấp điện áp Vcc đến chân reset, nói cách khác khi 8051 được cấp nguồn, thì bộ đếm chương trình có giá trị 0000. Dưới đây là toàn bộ trình tự hoạt động của bộ đếm chương trình trong quá trình nhận và thực thi một chương trình mẫu. Để hiểu rừ hơn về bộ đếm chương trỡnh, ta sẽ xem xột hoạt động của bộ đếm chương trình mỗi khi nhận và thực hiện lệnh.
Như có thể thấy mã lệnh và toán hạng của từng lệnh được liệt kể ở bên trái của tệp liệt kê. • Nạp mã lệnh đầu tiên từ vị trí nhớ đầu tiên 0000 của ROM chương trình. Do bộ đếm chương trình có ý nghĩa và có cách thức làm việc như vậy lên ở một số bộ vi xử lý, đặc biệt là dòng Intel X86, bộ đếm chương trình còn được gọi là con trỏ lệnh IP.
Điểm lưu ý số 2 là lệnh đâu tiên của Rom chương trình đều đặt ở 0000, còn lệnh cuối cùng phục thuộc vào dung lượng của ROM/Chíp của mỗi thành viên của họ 8051.
Để ý rằng ta có thể chuyển dữ liệu giữa thanh ghi tích luỹ A và thanh ghi Rn (n từ 0 đến 7) nhưng việc chuyển dữ liệu giữa các thanh ghi Rn thì không được phép. Trong hầu hết các chương trình dữ liệu cần được xử lý thường ở trong một số ngăn của bộ nhớ RAM hoặc trong ROM .Rất nhiều cách để truy cập dữ liệu này mà phần tiếp theo sẽ xét đến. Mặc dù toàn bộ byte của bộ nhớ RAM có thể được truy cập bằng chế độ đánh địa chỉ trực tiếp, nhưng chế độ này thường được sử dụng nhất để truy cập các ngăn nhớ RAM từ 30H đến 7FH.
Trong chế độ đánh địa chỉ trực tiếp thì dữ liệu ở trong một ngăn nhớ RAM mà địa chỉ của nó được biết và địa chỉ này được cho như là một phần của lệnh. Mặc dù sử dụng các tên R0 - R7 dễ hơn các địa chỉ bộ nhớ của chúng nhưng các ngăn nhớ 30H đến 7FH của RAM không thể được truy cập theo bất kỳ cách nào khác là theo địa chỉ của chúng vì chúng không có tên. • không phải tất cả mọi địa chỉ từ 80H đến FFH đều do SFH sử dụng, nhưng vị trí ngăn nhớ từ 80H đến FFH chưa dùnglà để dữ trữ và lập trình viên 8051 cũng không được sử dụng.
Điều này có nghĩa là việc sử dụng của chế độ đánh địa chỉ này bị giới hạn bởi việc truy cập các vị trí ngăn nhớ của RAM và các thanh ghi với địa chỉ được cho bên trong 8051. Hay nói cách khác các thanh ghi R2 - R7 không có thể dùng được để giữ địa chỉ của toán hạng nằm trong RAM khi sử dụng chế độ đánh địa chỉ này khi Ro và R1 được dùng như các con trỏ, nghĩa là khi chúng giữ các địa chỉ của các ngăn nhớ RAM thì trước chúng phải đặt dấu (@) như chỉ ra dưới đây. Một trong những ưu điểm của chế độ đánh địa chỉ gián tiếp thanh ghi là nó làm cho việc truy cập dữ liệu năng động hơn so với chế độ đánh địa chỉ trực tiếp.
Như đã nói ở phần trước rằng R0 và R1 là các thanh ghi duy nhất có thể được dùng để làm các con trỏ trong chế độ đánh địa chỉ gián tiếp thanh ghi. Vì R0 và R1 là các thanh ghi 8 bit, nên việc sử dụng của chúng bị hạn chế ở việc truy cập mọi thông tin trong các ngăn nhớ RAM bên trong (các ngăn nhớ từ 30H đến 7FH và các thanh ghi SFR). Do các phân tử dữ liệu được cất trong không gian mã (chương trình) của ROM trên chip của 8051, nó phải dùng lệnh Movc thay cho lệnh Mov (chủ C ở cuối lệnh là chỉ mà lệnh Code).
- LM7850C làm nhiệm vụ ổn áp nguồn ra 5v rồi cấp cho mạch điều khiển - nguồn cấp cho mạch có thể dùng nguồn của máy tính thông qua cổng USB -Điện trở R24 có nhiệm vụ hạn chế dòng. Chương trình lập trình sẵn được nạp vào trong vi điều khiển 8951 sẽ điều khiển các khối xuất dữ liệu hàng, và giải mã cột thông qua các Port của vi điều khiển. Khối này làm nhiệm vụ xuất dữ liệu chứa trong vi điều khiển ra hàng của bảng đèn LED ma trận để điều khiển các bóng đèn của LED ma trận hiển thị dòng thông báo mong muốn.
-Chân 12 là chân chốt dữ liệu trạng thái của tín hiệu sẽ đuợc lưu lại trong một khoảng thời gian nhằm ổn định trạng thái đầu ra cho tới khi có tác động của xung chôt tiếp theo. Do dòng ra khỏi bộ giải mã là rất nhỏ không đủ công suất cung cấp cho ma trận led do đó chúng ta phải nối cácđầu ra của bộ giải mã với một khối khuếch đại công suất. -Để dữ liệu từ vi điều khiển đưa ra hiển thị được trên bảng đèn theo một trật tự nhất định (hiển thị đúng chữ hoặc đúng hình ảnh) thì dữ liệu gửi ra này phải được đồng bộ với tín hiệu quét cột.
--Khi dữ liệu từ ô nhớ đầu tiên gởi ra bảng đèn thì chỉ có cột đèn đầu tiên là được phép sáng (có sự cho phép của tín hiệu quét cột), các cột còn lại không được phép sáng (không có sự cho phép của tín hiệu quét cột). Tương tự như thế, khi dữ liệu từ ô nhớ thứ hai gởi ra thì chỉ có cột thứ hai của bảng đèn là được phép sáng, các cột còn lại thì không, cho đến cột thứ 56 được hiển thị dữ liệu từ ô nhớ thứ 56 Đây được tính là một lần quét. Như vậy, xét tại một thời điểm nhất định thì chỉ có một cột LED được phép sáng (LED nào trong cột được phép sáng thì do dữ liệu từ vi điều khiển gởi đến qua Port P2 quyết định).
--Sau khi quét 56 ô nhớ lưu giữ trong bộ nhớ ROM của vi điều khiển đủ lâu (đủ thời gian để người xem có thể đọc được chữ trên bảng đèn, bằng cách quét đi quét lại nhiều lần) thì vi điều khiển sẽ điều khiển chuyển sang quét 56 ô nhớ kế tiếp (dữ liệu được dịch đi một ô nhớ). Đầu tiên cần phải khai báo dữ liệu (nạp dữ liệu vào các ô nhớ của Rom 8951) theo từng byte, mỗi byte chính là mã của một cột (gồm 8 led), khi byte đó được xuất ra ứng với cột được phép sáng thì với bít 1 led sẽ sáng, bít 0 led sẽ tắt. Các byte này sẽ được cất vào các ô nhớ liên tiếp của bộ nhớ Rom của vi điều khiển 8951, khi chúng ta muốn truy xuất dữ liệu thì chỉ việc truy xuất vào các ô nhớ đã đánh địa chỉ.
Ở đây bộ đếm được dùng là bộ đếm giảm, giá trị thanh chứa được gán đầu tiên là 56 cột (56 byte dữ liệu ) sẽ được quét rất nhanh và quét làm nhiều lần để mắt ta cú thể thấy được hỡnh ảnh một cỏch rừ nột ( hiện tượng lưu ảnh trờn vừng mạc ). Dùng mạch nạp ROM và chạy chương trình proload V2.1 for 89series programmer của hãng Sun Rom chương trình được down load trrực tiếp từ Web của hãng Sun Rom.http://www surom.com-Dùng phần mềm Keil mởFile để viết chương trình tên chương trrinh phải có đuôi.