Sau hơn mười tuần thực hiện với nhiều cố gắng và nỗ lực của bản thân cùng với sự tận tình hướng dẫn của thầy Nguyễn Tiến Ban, tập đồ án này đã hoàn thành đúng thời gian qui định theo yêu cầu đặt ra là thiết kế một mạch điều khiển máy giặt dân dụng dùng vi điều khiển AT89C51.
Để thực hiện được yêu cầu trên em đã nghiên cứu, tìm hiểu những vấn đế về cấu tạo, nguyên lý hoạt động của các loại máy giặt,vi điều khiển, vi xử lí, các phương pháp điều khiển máy giặt từ cổ điển đến hiện đại và các vấn đề khác có liên quan đến đề tài.
Nội dung chính của đề tài này bao gồm những phần sau:
*Phần kiến thức.
- Khảo sát và nghiên cứu cấu tạo cũng như nguyên lý tẩy bẩn, nguyên lý hoạt động của các chủng loại máy giặt khác nhau.
- Khảo sát bộ vi điều khiển 8051.
*Phần thiết kế thi công .
- Xây dựng sơ đồ khối toàn mạch .
- Xây dựng lưu đồ thuật toán .
- Viết chương trình.
- Thi công lắp ráp và kiểm tra.
Trên đây là những nội dung mà em đã thực hiện được trong tập đồ án này.
84 trang |
Chia sẻ: baoanh98 | Lượt xem: 890 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Đề tài Tổng quan về máy giặt đi sâu nghiên cứu chế tạo thử bộ điều khiển máy giặt dân dụng ứng dụng vi xử lý, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
N) được địa chỉ hóa từng bit ở địa chỉ 98H.
Các thanh ghi ngắt (Interrupt Register):
8951 có cấu trúc 5 nguồn ngắt, 2 mức ưu tiên. Các ngắt bị cấm sau khi bị reset hệ thống và sẽ được cho phép bằng việc ghi thanh ghi cho phép ngắt (IE) ở địa chỉ A8H. Cả hai được địa chỉ hóa từng bit.
Thanh ghi điều khiển nguồn PCON (Power Control Register):
Thanh ghi PCON không có bit định vị. Nó ở địa chỉ 87H chứa nhiều bit điều khiển. Thanh ghi PCON được tóm tắt như sau:
Bit 7 (SMOD) : Bit có tốc độ Baud ở mode 1, 2, 3 ở Port nối tiếp khi set.
Bit 6, 5, 4 : Không có địa chỉ.
Bit 3 (GF1) : Bit cờ đa năng 1.
Bit 2 (GF0) : Bit cờ đa năng 2.
Bit 1 * (PD) : Set để khởi động mode Power Down và thoát để reset.
Bit 0 * (IDL) : Set để khởi động mode Idle và thoát khi ngắt mạch hoặc reset.
Các bit điều khiển Power Down và Idle có tác dụng chính trong tất cả các IC họ MSC-51 nhưng chỉ được thi hành trong sự biên dịch của CMOS.
2.2.3.3. Bộ nhớ ngoài (External Memory):
8951 có khả năng mở rộng bộ nhớ lên đến 64K byte bộ nhớ chương trình và 64k byte bộ nhớ dữ liệu ngoài. Do đó có thể dùng thêm RAM và EPROM nếu cần.
Khi dùng bộ nhớ ngoài, Port0 không còn chưc năng I/O nữa. Nó được kết hợp giữa bus địa chỉ (A0-A7) và bus dữ liệu (D0-D7) với tín hiệu ALE để chốt byte của bus địa chỉ chỉ khi bắt đầu mỗi chu kỳ bộ nhớ. Port2 được cho là byte cao của bus địa chỉ.
Truy xuất bộ nhớ mã ngoài (Acessing External Code Memory):
Bộ nhớ chương trình bên ngoài là bộ nhớ EPROM được cho phép của tín hiệu PSEN\. Sự kết nối phần cứng của bộ nhớ EPROM như sau:
Accessing External Code Memory (Truy xuất bộ nhớ mã ngoài)
Trong một chu kỳ máy tiêu biểu, tín hiệu ALE tích cực 2 lần. Lần thứ nhất cho phép 74HC373 mở cổng chốt địa chỉ byte thấp, khi ALE xuống 0 thì byte thấp và byte cao của bộ đếm chương trình đều có nhưng EPROM chưa xuất vì PSEN\ chưa tích cực, khi tín hiệu lên 1 trở lại thì Port 0 đã có dữ liệu là Opcode. ALE tích cực lần thứ hai được giải thích tương tự và byte 2 được đọc từ bộ nhớ chương trình. Nếu lệnh đang hiện hành là lệnh 1 byte thì CPU chỉ đọc Opcode, còn byte thứ hai bỏ đi.
Truy xuất bộ nhớ dữ liệu ngoài (Accessing External Data Memory) :
Bộ nhớ dữ liệu ngoài là một bộ nhớ RAM được đọc hoặc ghi khi được cho phép của tín hiệu RD\ và WR. Hai tín hiệu này nằm ở chân P3.7 (RD) và P3.6 (WR). Lệnh MOVX được dùng để truy xuất bộ nhớ dữ liệu ngoài và dùng một bộ đệm dữ liệu 16 bit (DPTR), R0 hoặc R1 như là một thanh ghi địa chỉ.
Các RAM có thể giao tiếp với 8951 tương tự cách thức như EPROM ngoại trừ chân RD\ của 8951 nối với chân OE\ (Output Enable) của RAM và chân WR\ của 8951 nối với chân WE\ của RAM. Sự nối các bus địa chỉ và dữ liệu tương tự như cách nối của EPROM.
Sự giải mã địa chỉ (Address Decoding):
Sự giải mã địa chỉ là một yêu cầu tất yếu để chọn EPROM, RAM, 8279, Sự giải mã địa chỉ đối với 8951 để chọn các vùng nhớ ngoài. Nếu các con EPROM hoặc RAM 8K được dùng thì các bus địa chỉ phải được giải mã để chọn các IC nhớ nằm trong phạm vi giới hạn 8K: 0000H - 1FFFH ; 2000H - 3FFFH,
Một cách cụ thể, IC giải mã 74HC138 được dùng với những ngõ ra của nó được nối với những ngõ vào chọn Chip CS (Chip Select) trên những IC nhớ EPROM, RAM, Hình sau đây cho phép kết nối nhiều EPROM và RAM.
Address Decoding (Giải mã địa chỉ)
Sự đè lên nhau của các vùng nhớ dữ liệu ngoài:
Vì bộ nhớ chương trình là EPROM, nên nảy sinh một vấn đề bất tiện khi phát triển phần mềm cho vi điều khiển. Một nhược điểm chung của 8951 là các vùng nhớ dữ liệu ngoài nằm đè lên nhau, vì tín hiệu PSEN\ được dùng để đọc bộ nhớ mã ngoài và tín hiệu RD\ được dùng để đọc bộ nhớ dữ liệu, nên một bộ nhớ RAM có thể chứa cả chương trình và dữ liệu bằng cách nối đường OE\ của RAM đến ngõ ra một cổng AND có hai ngõ vào PSEN\ và RD\. Sơ đồ mạch như hình sau cho phép bộ nhớ RAM có hai chức năng vừa là bộ nhớ chương trình vừa là bộ nhớ dữ liệu:
Overlapping the External code and data space
Vậy một chương trình có thể được load vào RAM bằng cách xem nó như bộ nhớ dữ liệu và thi hành chương trình bằng cách xem nó như bộ nhớ chương trình.
Hoạt động Reset:
8951 có ngõ vào reset RST tác động ở mức cao trong khoảng thời gian 2 chu kỳ xung máy, sau đó xuống mức thấp để 8951 bắt đầu làm việc. RST có thể kích tay bằng một phím nhấn thường hở, sơ đồ mạch reset như sau:
Manual Reset (Reset bằng tay)
Trạng thái của tất cả các thanh ghi trong 8951 sau khi reset hê thống được tóm tắt như sau:
Thanh ghi
Nội dung
Đếm chương trình PC
Thanh ghi tích lũyA
Thanh ghi B
Thanh ghi thái PSW
SP
DPRT
Port 0 đến port 3
IP
IE
Các thanh ghi định thời
SCON SBUF
PCON (HMOS)
PCON (CMOS)
0000H
00H
00H
00H
07H
0000H
FFH
XXX0 0000 B
0X0X 0000 B
00H
00H
00H
0XXX XXXXH
0XXX 0000 B
Thanh ghi quan trọng nhất là thanh ghi bộ đếm chương trình PC được reset tại địa chỉ 0000H. Khi ngõ vào RST xuống mức thấp, chương trình luôn bắt đầu tại địa chỉ 0000H của bộ nhớ chương trình. Nội dung của RAM trên chip không bị thay đổi bởi tác động của ngõ vào reset.
2.2. Tóm tắt tập lệnh của 8951 :
Các chương trình được cấu tạo từ nhiều lệnh, chúng được xây dựng logic, sự nối tiếp của các lệnh được nghĩ ra một cách hiệu quả và nhanh chóng, kết quả của chương trình khả thi.
Tập lệnh họ MSC-51 được sự kiểm tra của các mode định vị và các lệnh của chúng có các Opcode 8 bit. Điều này cung cấp khả năng 28= 256 lệnh được thi hành và một lệnh không được định nghĩa. Vài lệnh có 1 hoặc 2 byte bởi dữ liệu hoặc địa chỉ thêm vào Opcode. Trong toàn bộ các lệnh có 139 lệnh 1 byte, 92 lệnh 2 byte và 24 lệnh 3 byte.
2.2.1. Các mode định vị (Addressing Mode) :
Các mode định vị là một bộ phận thống nhất của tập lệnh. Chúng cho phép định rõ nguồn hoặc nơi gởi tới của dữ liệu ở các đường khác nhau tùy thuộc vào trạng thái của người lập trình. 8951 có 8 mode định vị được dùng như sau:
Thanh ghi.
Trực tiếp.
Gián tiếp.
Tức thời.
Tương đối.
Tuyệt đối.
Dài.
Định vị.
2.2.1.1. Sự định vị thanh ghi (Register Addressing):
Có 4 dãy thanh ghi 32 byte đầu tiên của RAM dữ liệu trên Chip địa chỉ 00H - 1FH, nhưng tại một thời điểm chỉ có một dãy hoạt động các bit PSW3, PSW4 của từ trạng thái chương trình sẽ quyết định dãy nào hoạt động.
Các lệnh để định vị thanh ghi được ghi mật mã bằng cách dùng bit trọng số thấp nhất của Opcode lệnh để chỉ một thanh ghi trong vùng địa chỉ theo logic này. Như vậy 1 mã chức năng và địa chỉ hoạt động có thể được kết hợp để tạo thành một lệnh ngắn 1 byte như sau:
Register Addressing.
Một vài lệnh dùng cụ thể cho 1 thanh ghi nào đó như thanh ghi A, DPTR.... mã Opcode tự nó cho biết thanh ghi vì các bit địa chỉ không cần biết đến.
2.2.1.2. Sự định địa chỉ trực tiếp (Direct Addressing):
Sự định địa chỉ trực tiếp có thể truy xuất bất kỳ giá trị nào trên Chip hoặc thanh ghi phần cứng trên Chip. Một byte địa chỉ trực tiếp được đưa vào Opcode để định rõ vị trí được dùng như sau:
Direct Addressing
Tùy thuộc các bit bậc cao của địa chỉ trực tiếp mà một trong 2 vùng nhớ được chọn. Khi bit 7 = 0, thì địa chỉ trực tiếp ở trong khoảng 0 - 127 (00H - 7FH) và 128 vị trí nhớ thấp của RAM trên Chip được chọn.
Tất cả các Port I/O, các thanh ghi chức năng đặc biệt, thanh ghi điều khiển hoặc thanh ghi trạng thái bao giờ cũng được quy định các địa chỉ trong khoảng 128 - 255 (80 - FFH). Khi byte địa chỉ trực tiếp nằm trong giới hạn này (ứng với bit 7 = 1) thì thanh ghi chức năng đặc biệt được truy xuất. Ví dụ Port 0 và Port 1 được quy định địa chỉ trực tiếp là 80H và 90H, P0, P1 là dạng thức rút gọn thuật nhớ của Port, thì sự biến thiên cho phép thay thế và hiểu dạng thức rút gọn thuật nhớ của chúng. Chẳng hạn lệnh: MOV P1, A sự biên dịch sẽ xác định địa chỉ trực tiếp của Port 1 là 90H đặt vào hai byte của lệnh (byte 1 của port 0).
2.2.1.3. Sự định vị địa chỉ gián tiếp (Indirect Addressing):
Sự định địa chỉ gián tiếp được tượng trưng bởi ký hiệu @ được đặt trước R0, R1 hay DPTR. R0 và R1 có thể hoạt động như một thanh ghi con trỏ mà nội dung của nó cho biết một địa chỉ trong RAM nội ở nơi mà dữ liệu được ghi hoặc được đọc. Bit có trọng số nhỏ nhất của Opcode lệnh sẽ xác định R0 hay R1 được dùng con trỏ Pointer.
2.2.1.4. Sự định địa chỉ tức thời (Immediate Addressing):
Sự định địa chỉ tức thời được tượng trưng bởi ký hiệu # được đứng trước một hằng số, 1 biến ký hiệu hoặc một biểu thức số học được sử dụng bởi các hằng, các ký hiệu, các hoạt động do người điều khiển. Trình biên dịch tính toán giá trị và thay thế dữ liệu tức thời. Byte lệnh thêm vô chứa trị số dữ liệu tức thời như sau:
2.2.1.5. Sự định địa chỉ tương đối:
Sự định địa chỉ tương đối chỉ sử dụng với những lệnh nhảy nào đó. Một địa chỉ tương đối (hoặc Offset) là một giá trị 8 bit mà nó được cộng vào bộ đếm chương trình PC để tạo thành địa chỉ một lệnh tiếp theo được thực thi. Phạm vi của sự nhảy nằm trong khoảng -128 – 127. Offset tương đối được gắn vào lệnh như một byte thêm vào như sau :
Những nơi nhảy đến thường được chỉ rõ bởi các nhãn và trình biên dịch xác định Offset Relative cho phù hợp.
Sự định vị tương đối đem lại thuận lợi cho việc cung cấp mã vị trí độc lập, nhưng bất lợi là chỉ nhảy ngắn trong phạm vi -128 – 127 byte.
2.2.1.6. Sự định địa chỉ tuyệt đối (Absolute Addressing):
Sự định địa chỉ tuyệt đối được dùng với các lệnh ACALL và AJMP. Các lệnh 2 byte cho phép phân chia trong trang 2K đang lưu hành của bộ nhớ mã của việc cung cấp 11 bit thấp để xác định địa chỉ trong trang 2K (A0A10 gồm A10A8 trong Opcode và A7A0 trong byte) và 5 bit cao để chọn trang 2K (5 bit cao đang lưu hành trong bộ đếm chương trình là 5 bit Opcode).
Sự định vị tuyệt đối đem lại thuận lợi cho các lệnh ngắn (2 byte), nhưng bất lợi trong việc giới hạn phạm vi nơi gởi đến và cung cấp mã có vị trí độc lập.
2.2.1.7. Sự định vị dài (Long Addressing):
Sự định vị dài được dùng với lệnh LCALL và LJMP. Các lệnh 3 byte này bao gồm một địa chỉ nơi gởi tới 16 bit đầy đủ là 2 byte và 3 byte của lệnh.
Ưu điểm của sự định vị dài là vùng nhớ mã 64K có thể được dùng hết, nhược điểm là các lệnh đó dài 3 byte và vị trí lệ thuộc. Sự phụ thuộc vào vị trí sẽ bất lợi bởi chương trình không thể thực thi tại địa chỉ khác.
2.2.1.8. Sự định địa chỉ phụ lục (Index Addressing):
Sự định địa chỉ phụ lục dùng một thanh ghi cơ bản (cũng như bộ đếm chương trình hoặc bộ đếm dữ liệu) và Offset (thanh ghiA) trong sự hình thành 1 địa chỉ liên quan bởi lệnh JMP hoặc MOVC.
Index Addressing.
Các bảng của lệnh nhảy hoặc các bảng tra được tạo nên một cách dễ dàng bằng cách dùng địa chỉ phụ lục.
2.2.2. Các kiểu lệnh (Instruction Types):
8951 chia ra 5 nhóm lệnh chính:
Các lệnh số học.
Lệnh logic.
Dịch chuyển dữ liệu.
Lý luận.
Rẽ nhánh chương trình.
Từng kiểu lệnh được mô tả như sau:
2.2.2.1. Các lệnh số học (Arithmetic Instrustion):
ADD A,
ADD A, Rn : (A) (A) + (Rn)
ADD A, direct : (A) (A) + (direct)
ADD A, @ Ri : (A) (A) + ((Ri))
ADD A, # data : (A) (A) + # data
ADDC A, Rn : (A) (A) + (C) + (Rn)
ADDC A, direct : (A) (A) + (C) + (direct)
ADDC A, @ Ri : (A) (A) + (C) + ((Ri))
ADDC A, # data : (A) (A) + (C) + # data
SUBB A,
SUBB A, Rn : (A) (A) - (C) - (Rn)
SUBB A, direct : (A) (A) - (C) - (direct)
SUBB A, @ Ri : (A) (A) - (C) - ((Ri))
SUBB A, # data : (A) (A) - (C) - # data
INC
INC A : (A) (A) + 1
INC direct : (direct) (direct) + 1
INC Ri : ((Ri)) ((Ri)) + 1
INC Rn : (Rn) (Rn) + 1
INC DPTR : (DPTR) (DPTR) + 1
DEC
DEC A : (A) (A) - 1
DEC direct : (direct) (direct) - 1
DEC @Ri : ((Ri)) ((Ri)) - 1
DEC Rn : (Rn) (Rn) - 1
MULL AB : (A) LOW [(A) x (B)];có ảnh hưởng cờ OV
: (B) HIGH [(A) x (B)];cờ Cary được xóa.
DIV AB : (A) Integer Result of [(A)/(B)]; cờ OV
: (B) Remainder of [(A)/(B)]; cờ Carry xóa
DA A :Điều chỉnh thanh ghi A thành số BCD đúng trong phép cộng BCD (thường DA A đi kèm với ADD, ADDC)
Nếu [(A3-A0)>9] và [(AC)=1] (A3A0) (A3A0) + 6.
Nếu [(A7-A4)>9] và [(C)=1] (A7A4) (A7A4) + 6.
2.2.2.2. Các hoạt động logic (Logic Operation):
Tất cả các lệnh logic sử dụng thanh ghi A như là một trong những toán hạng thực thi một chu kỳ máy, ngoài A ra mất 2 chu kỳ máy. Những hoạt động logic có thể được thực hiện trên bất kỳ byte nào trong vị trí nhớ dữ liệu nội mà không qua thanh ghi A.
Các hoạt động logic được tóm tắt như sau:
ANL
ANL A, Rn : (A) (A) AND (Rn).
ANL A, direct : (A) (A) AND (direct).
ANL A,@ Ri : (A) (A) AND ((Ri)).
ANL A, # data : (A) (A) AND (# data).
ANL direct, A : (direct) (direct) AND (A).
ANL direct, # data : (direct) (direct) AND # data.
ORL
ORL A, Rn : (A) (A) OR (Rn).
ORL A, direct : (A) (A) OR (direct).
ORL A,@ Ri : (A) (A) OR ((Ri)).
ORL A, # data : (A) (A) OR # data.
ORL direct, A : (direct) (direct) OR (A).
ORL direct, # data : (direct) (direct) OR # data.
XRL
XRL A, Rn : (A) (A) (Rn).
XRL A, direct : (A) (A) (direct).
XRL A,@ Ri : (A) (A) ((Ri)).
XRL A, # data : (A) (A) # data.
XRL direct, A : (direct) (direct) (A).
XRL direct, # data : (direct) (direct) # data.
CLR A : (A) 0
CLR C : (C) 0
CLR Bit : (Bit) 0
RL A : Quay vòng thanh ghi A qua trái 1 bit
(An + 1) (An); n = 06
(A0) (A7)
RLC A : Quay vòng thanh ghi A qua trái 1 bit có cờ Carry
(An + 1) (An); n = 06
(C) (A7)
(A0) (C)
RR A : Quay vòng thanh ghi A qua phải 1 bit
(An + 1) (An); n = 06
(A0) (A7)
RRC A : Quay vòng thanh ghi A qua phải 1 bit có cờ Carry
(An + 1) (An); n = 06
(C) (A7)
(A0) (C)
SWAP A : Đổi chổ 4 bit thấp và 4 bit cao của A cho nhau (A3A0)(A7A4).
2.2.2.3. Các lệnh rẽ nhánh:
Có nhiều lệnh để điều khiển lên chương trình bao gồm việc gọi hoặc trả lại từ chương trình con hoặc chia nhánh có điều kiện hay không có điều kiện.
Tất cả các lệnh rẽ nhánh đều không ảnh hưởng đến cờ. Ta có thể định nhản cần nhảy tới mà không cần rõ địa chỉ, trình biên dịch sẽ đặt địa chỉ nơi cần nhảy tới vào đúng khẩu lệnh đã đưa ra.
Sau đây là sự tóm tắt từng hoạt động của lệnh nhảy.
JC rel : Nhảy đến “rel” nếu cờ Carry C = 1.
JNC rel : Nhảy đến “rel” nếu cờ Carry C = 0.
JB bit, rel : Nhảy đến “rel” nếu (bit) = 1.
JNB bit, rel : Nhảy đến “rel” nếu (bit) = 0.
JBC bit, rel : Nhảy đến “rel” nếu bit = 1 và xóa bit.
ACALL addr11: Lệnh gọi tuyệt đối trong page 2K.
(PC) (PC) + 2
(SP) (SP) + 1
((SP)) (PC7PC0)
(SP) (SP) + 1
((SP)) (PC15PC8)
(PC10PC0) page Address.
LCALL addr16: Lệnh gọi dài chương trình con trong 64K.
(PC) (PC) + 3
(SP) (SP) + 1
((SP)) (PC7PC0)
(SP) (SP) + 1
((SP)) (PC15PC8)
(PC) Addr15Addr0.
RET : Kết thúc chương trình con trở về chương trình chính.
(PC15PC8) (SP)
(SP) (SP) - 1
(PC7PC0) ((SP))
(SP) (SP) -1.
RETI : Kết thúc thủ tục phục vụ ngắt quay về chương trình chính hoạt động tương tự như RET.
AJMP Addr11 : Nhảy tuyệt đối không điều kiện trong 2K.
(PC) (PC) + 2
(PC10PC0) page Address.
LJMP Addr16 : Nhảy dài không điều kiện trong 64K
Hoạt động tương tự lệnh LCALL.
SJMP rel :Nhảy ngắn không điều kiện trong (-128127) byte
(PC) (PC) + 2
(PC) (PC) + byte 2
JMP @ A + DPTR:Nhảy không điều kiện đến địa chỉ (A) + (DPTR)
(PC) (A) + (DPTR)
JZ rel : Nhảy đến A = 0. Thực hành lệnh kế nếu A 0.
(PC) (PC) + 2
(A) = 0 (PC) (PC) + byte 2
JNZ rel : Nhảy đến A 0. Thực hành lệnh kế nếu A = 0.
(PC) (PC) + 2
(A) 0 (PC) (PC) + byte 2
CJNE A, direct, rel : So sánh và nhảy đến A direct
(PC) (PC) + 3
(A) (direct) (PC) (PC) + Relative Address.
(A) < (direct) C = 1
(A) > (direct) C = 0
(A) = (direct). Thực hành lệnh kế tiếp
CJNE A, # data, rel : Tương tự lệnh CJNE A, direct, rel.
CJNE Rn, # data, rel : Tương tự lệnh CJNE A, direct, rel.
CJNE @ Ri, # data, rel : Tương tự lệnh CJNE A, direct, rel.
DJNE Rn, rel : Giảm Rn và nhảy nếu Rn 0.
(PC) (PC) + 2
(Rn) (Rn) -1
(Rn) 0 (PC) (PC) + byte 2.
DJNZ direct, rel : Tương tự lệnh DJNZ Rn, rel.
2.2.2.4. Các lệnh dịch chuyển dữ liệu:
Các lệnh dịch chuyển dữ liệu trong những vùng nhớ nội thực thi 1 hoặc 2 chu kỳ máy. Mẫu lệnh MOV , cho phép di chuyển dữ liệu bất kỳ 2 vùng nhớ nào của RAM nội hoặc các vùng nhớ của các thanh ghi chức năng đặc biệt mà không thông qua thanh ghi A.
Vùng Ngăn xếp của 8951 chỉ chứa 128 byte RAM nội, nếu con trỏ Ngăn xếp SP được tăng quá địa chỉ 7FH thì các byte được PUSH vào sẽ mất đi và các byte POP ra thì không biết rõ.
Các lệnh dịch chuyển bộ nhớ nội và bộ nhớ ngoại dùng sự định vị gián tiếp. Địa chỉ gián tiếp có thể dùng địa chỉ 1 byte (@ Ri) hoặc địa chỉ 2 byte (@ DPTR). Tất cả các lệnh dịch chuyển hoạt động trên toàn bộ nhớ ngoài thực thi trong 2 chu kỳ máy và dùng thanh ghi A làm toán hạng DESTINATION.
Việc đọc và ghi RAM ngoài (RD và WR) chỉ tích cực trong suốt quá trình thực thi của lệnh MOVX, còn bình thường RD và WR không tích cực (mức 1).
Tất cả các lệnh dịch chuyển đều không ảnh hưởng đến cờ. Hoạt động của từng lệnh được tóm tắt như sau:
MOV A,Rn : (A) (Rn)
MOV A, direct : (A) (direct)
MOV A, @ Ri : (A) ((Ri))
MOV A, # data : (A) # data
MOV Rn, A : (Rn) (A)
MOV Rn, direct : (Rn) (direct)
MOV Rn, # data : (Rn) # data
MOV direct, A : (direct) (A)
MOV direct, Rn : (direct) (Rn)
MOV direct, direct : (direct) (direct)
MOV direct, @ Ri : (direct) ((Ri))
MOV direct, # data : (direct) data
MOV @ Ri, A : ((Ri)) (A)
MOV @ Ri, direct : ((Ri)) (direct)
MOV @ Ri, # data : ((Ri)) # data
MOV DPTR, # data16 : (DPTR) # data16
MOV A, @ A + DPTR : (A) (A) + (DPTR)
MOV @ A + PC : (PC) (PC) + 1
(A) (A) + (PC)
MOVX A, @ Ri : (A) ((Ri))
MOVX A, @ DPTR : (A) ((DPTR))
MOVX @ Ri, A : ((Ri)) (A)
MOVX @ DPTR, A : ((DPTR)) (A)
PUSH direct : Cất dữ liệu vào Ngăn xếp
(SP) (SP) + 1
(SP) (Drirect)
POP direct : Lấy từ Ngăn xếp ra direct
(direct) ((SP))
(SP) (SP) - 1
XCH A, Rn : Đổi chỗ nội dung của A với Rn
(A) (Rn)
XCH A, direct : (A) (direct)
XCH A, @ Ri : (A) ((Ri))
XCHD A, @ Ri : Đổi chỗ 4 bit thấp của (A) với ((Ri))
(A3A0) ((Ri3Ri0))
2.2.2.5. Các lệnh luận lý (Boolean Instruction):
8951 chứa một bộ xử lí luận lý đầy đủ cho các hoạt động bit đơn, đây là một điểm mạnh của họ vi điều khiển MSC-51 mà các họ vi điều khiển khác không có.
RAM nội chứa 128 bit đơn vị và các vùng nhớ các thanh ghi chức năng đặc biệt cấp lên đến 128 đơn vị khác. Tất cả các đường Port là bit định vị, mỗi đường có thể được xử lí như Port đơn vị riêng biệt. Cách truy xuất các bit này không chỉ các lệnh rẽ nhánh không, mà là một danh mục đầy đủ các lệnh MOVE, SET, CLEAR, COMPLEMENT, OR, AND.
Toàn bộ sự truy xuất của bit dùng sự định vị trực tiếp với những địa chỉ từ 00H - 7FH trong 128 vùng nhớ thấp và 80H - FFH ở các vùng thanh ghi chức năng đặc biệt.
Bit Carry C trong thanh ghi PSW\ của từ trạng thái chương trình và được dùng như một sự tích lũy đơn của bộ xử lí luận lý. Bit Carry cũng là bit định vị và có địa chỉ trực tiếp vì nó nằm trong PSW. Hai lệnh CLR C và CLR CY đều có cùng tác dụng là xóa bit cờ Carry nhưng lệnh này mất 1 byte còn lệnh sau mất 2 byte.
Hoạt động của các lệnh luận lý được tóm tắt như sau:
CLR C : Xóa cờ Carry xuống 0. Có ảnh hưởng cờ Carry.
CLR BIT : Xóa bit xuống 0. Không ảnh hưởng cờ Carry
SET C : Set cờ Carry lên 1. Có ảnh hưởng cờ Carry.
SET BIT : Set bit lên 1. Không ảnh hưởng cờ Carry.
CPL C : Đảo bit cờ Carry. Có ảnh hưởng cờ Carry.
CPL BIT : Đảo bit. Không ảnh hưởng cờ Carry.
ANL C, BIT : (C) (C) AND (BIT) : Có ảnh hưởng cờ Carry.
ANL C, /BIT : (C) (C) AND NOT (BIT):Không ảnh hưởng cờ Carry.
ORL C, BIT : (C) (C) OR (BIT) : Tác động cờ Carry.
ORL C, /BIT : (C) (C) OR NOT (BIT) : Tác động cờ Carry.
MOV C, BIT : (C) (BIT) : Cờ Carry bị tác động.
MOV BIT, C : (BIT) (C) : Không ảnh hưởng cờ Carry.
2.2.2.6. Các lệnh xen vào (Miscellamous Intstruction):
NOP : Không hoạt động gì cả, chỉ tốn 1 byte và 1 chu kỳ máy. Ta dùng để delay những khoảng thời gian nhỏ.
2.3. Chương trình ngôn ngữ Assembly của 8951:
2.3.1. Giới thiệu :
Ngôn ngữ assembly giữa ngôn ngữ máy và ngôn ngữ cấp cao. Ngôn ngữ cấp cao được đặc trưng như: Pascal, C ... Còn chương trình ngôn ngữ máy là một chuỗi các byte nhị phân được đặc trưng bởi các lệnh mà máy tính có thể thực thi.
Ngôn ngữ assembly thay thế các mã nhị phân của ngôn ngữ máy để sử dụng các “thuật nhớ“ dễ dàng trong quá trình lập trình. Ví dụ lệnh cộng trong ngôn ngữ máy được đặc trưng bởi mã nhị phân “10110011” trong khi ngôn ngữ assembly là “ADD“.
Một chương trình ngôn ngữ assembly không thể thực thi bởi máy tính mà nó phải được dịch sang mã nhị phân ngôn ngữ máy.
Một linker là một chương trình mà nó kết hợp các chương trình đặc trưng Relocatable (modul) và thiết kế một chương trình đặc trưng tuyệt đối thực thi bằng máy tính.
Segment là một phần của bộ nhớ mã hoặc dữ liệu, nó có thể tái định vị được (Relocatable) hoặc tuyệt đối (Absolute ). Segment Relocatable có tên, kiểu và có thể được kết nối với Segment cục bộ khác. Segment Absolute không có tên và không thể đựơc kết nối Segment khác.
Modul chứa 1 hoặc nhiều segment hay các segment cục bộ . Một modul có thể là một “file” ở nhiều trường hợp cá biệt .
Một chương trình Modul Absolute đơn được hòa vào toàn bộ các Segment Absolute và Segment Relocatable từ tất cả các mode nhập.
Chương trình chỉ chứa các mã nhị phân thay cho các lệnh (với các địa chỉ và các hằng dữ liệu ) được hiểu bởi máy tính.
2.3.2. Hoạt động của trình biên dịch (Assembler Operation)
Có nhiều trình biên dịch với mục đích khác nhau có tác dụng là dễ hiểu các ứng dụng vi điều khiển. ASM51 là tiêu biểu chuẩn biên dịch của họ MSC-51. ASM51 là trình biên dịch mạnh có tác dụng hữu hiệu trên hệ thống phát triển INTEL và họ IBM PC của máy vi tính.
ASM51 được gọi hiện lên từ sự chỉ dẫn của hệ thống bởi:
ASM51 Source file (Assembly Control).
Trình biên dịch nhận một file nguồn với tư cách là ngõ nhập (PROGRAM.SCR) và họ phát ra một file đối tượng (PROGRAM.OBJ) và file listing (PROGRAM.LST).
Vì hầu hết các biên dịch xem xét chương trình nguồn 2 lần trong lúc thi hành sự dịch ngôn ngữ máy, nên chúng được mô tả qua 2 Pass biên dịch là Pass1 và Pass2.
Trong pass1, file nguồn được xem xét từng dòng và bảng ký hiệu xây dựng.
Bộ đếm Location mặc nhiên chọn 0 hoặc được đặt bởi chỉ thị ORG (đặt Origin).
Cũng như file được xem xét, bộ đếm Location được tăng lên bằng độ dài mỗi lệnh.
Chỉ thị data định nghĩa (đặc biệt hoặc DW) tăng bộ đếm Location bằng với số byte định rõ, các chỉ thị nhớ lưu trữ (DSO tăng bộ đếm Location bởi số byte dự trữ). Mỗi lần một nhãn được tìm thấy ở sự bắt đầu của một đường, thì nó được đặc trong bảng ký hiệu theo giá trị hiện hành của bộ đếm Location. Các ký hiệu được định nghĩa bởi dùng các chỉ thị tương đương (EQU) được đặc trong bảng ký hiệu, được cất giữ và sau đó dùng trong pass2.
Trong Pass2, file Object và file Listing được tạo ra, các thuật nhớ được biến đổi thành Opcode và đặt trong các file output. Các toán hạng được xác định giá trị và đặt phía sau Opcode lệnh. ở nơi các ký hiệu xuất hiện trong toán hạng, các ký hiệu của chúng sẽ được lấy lại từ bảng ký hiệu (được tạo ra trong suốt Pass1 và dùng trong sự sắp xếp dữ liệu đúng hoặc đúng địa chỉ bởi các lệnh).
Bởi vì Pass2 được thực thi nên chương trình nguồn có thể dùng “sự tham khảo trước “ là dùng ký hiệu trước khi định nghĩa.
File Object nếu tuyệt đối thì chỉ chứa các byte nhị phân (00H - FFH) của chương trình ngôn ngữ máy. File Object Relocatable chứa một bảng ký hiệu và thông tin khác được yêu cầu bởi sự kết hợp và xác định đúng vị trí. File Listing chứa mã nguyên bảng ASCII (20H – 7FH) cho cả hai chương trình nguồn và các byte Hexadecimal trong chương trình ngôn ngữ máy.
2.3.3. Sự sắp đặt chương trình ngôn ngữ Assmebly:
Chương trình ngôn ngữ Asembly bao gồm: Các lệnh máy, lời chỉ chị của trình biên dịch, sự điều khiển biên dịch và các chú thích.
Các lệnh máy là các kỹ xảo của lệnh có thể thực thi (ví dụ như ANL). Các chỉ thị của trình biên dịch là các lệnh để trình biên dịch định cấu trúc chương trình, các dữ liệu, ký hiệu, hằng, (ví dụ Org ). Các sự điều khiển trình biên dịch set các mode của trình biên dịch và điều khiển sự chạy chương trình Assembly (ví dụ STILLE ).
Các chú thích hoạt động của lệnh.
Các lệnh phải ghi theo nguyên tắc rõ ràng để được trình biên dịch hiểu.
Sự sắp xếp của chúng như sau:
(Label:) mnemonic [operand][:operand][...][:comment]
2.3.3.1. Vùng nhãn (label Field ):
Một nhãn tượng trưng cho địa chỉ của lệnh (hoặc dữ liệu ) theo sau nhãn. Khi các rẽ nhánh đến lệnh này, nhãn được dùng trong vùng toán hạng của nhánh (hoặc lệnh nhảy).
Các “nhãn“ là một kiểu ký hiệu, sau nhãn phải có dấu hai chấm (:) còn sau ký hiệu thì không.
Các kiểu ký hiệu được quy cho các giá trị hoặc quy cho việc dùng các chỉ thị như: EQU, SEGMENT, BIT, DATA, Các ký hiệu có thể là địa chỉ, hằng, data, tên các segment hoặc sự xây dựng khác được hiểu bởi người lập trình. Sau đây là một ví dụ để phân biệt nhãn và ký hiệu:
PRA EQU 500 : PRA là ký hiệu tượng trưng giá trị 500
START :MOV A , #0FFH :START là nhãn tương trưng địa chỉ lệnh MOV
Một ký hiệu hoặc một nhãn phải bắt đầu một chữ cái dấu “?”, hoặc dấu “-“; phải được theo sau bằng một chữ cái, các số, dấu “?” hay “-“, và có thể chứa tới 31 ký tự.
2.3.3.2. Vùng thuật nhớ (Mnemonic Field ):
Các thuật nhớ hay các chỉ chị biên dịch đi vào vùng thuật nhớ theo sau vùng nhãn. Ví dụ các thuật nhớ lệnh như: ADD, MOV, DIV, INC, ; các chỉ thị biên dịch như : ORG , EQU.
2.3.3.3. Vùng toán hạng (Operand Field):
Vùng toán hạng theo sau vùng thuật nhớ. Vùng này chứa địa chỉ hay dữ liệu được dùng bởi lệnh. Một nhãn có thể dùng để tượng trưng cho hằng dữ liệu. Các khả năng cho phép vùng toán hạng phụ thuộc lớn vào các hoạt động. Một vài hoạt động không có toán hạng như : RET, NOP trong khi các hoạt động khác cho phép nhiều toán hạng được phân ra bằng dấu phẩy.
2.3.3.4. Vùng chú thích (Comment Field ):
Các chú thích phải dễ hiểu đặt để giải thích lệnh, và có dấu chấm phẩy ở đầu. Khối chú thích trong khung để giải thích tính chất chung của phần chương trình được cắt ra bên dưới.
2.3.3.5. Các ký hiệu biên dịch đặc biệt (Special Assembler Symbol ):
Các ký hiệu biên dịch đặc biệt được dùng trong các mode định vị thanh ghi cụ thể chúng bao gồm các thanh ghi A, Ro – R7, DPTR, PC,C, AB, hay các ký hiệu $ được dùng để quy vào giá trị hiện hành của bộ đếm Location.
Ví dụ : lệnh JNZ T1 , $ tương đương với lệnh sau : HERE : JNZ T1, HERE
2.3.3.6. Địa chỉ gián tiếp (Indirect Address):
Đối với một số lệnh dùng toán hạng có thể xác định thanh ghi mà nó chứa địa chỉ gián tiếp và nó chỉ có thể dùng với R0, R1 , DPTR. Ví dụ lệnh MOV A, @R0 khôi phục lại byte dữ liệu từ RAM nội tại địa chỉ được định rõ trong R0.
Lệnh MOVC, @A + PC khôi phục lại byte dữ liệu từ bộ nhớ dữ liệu ngoài tại địa chỉ được tạo thành bởi việc cộng nội dung thanh ghi tích lũy A và bộ đếm chương trình.
2.3.3.7. Dữ liệu tức thời (Immediate Data ):
Các lệnh dùng sự định vị tức thời cung cấp dữ liệu vào vùng toán hạng, ký hiệu # đặt trước dữ liệu tức thời. Ví dụ:
CONSTANT EQU 100
MOV A, 0FFH
ORL 40H, # CONSTANT
2.3.3.8. Địa chỉ dữ liệu (Data Address):
Nhiều lệnh truy xuất các vùng nhớ dùng sự định vị trực tiếp và đòi hỏi một địa chỉ nhớ dữ liệu trên chip (00 – FFH) hay một địa chỉ SFR (80H – FFH) trên vùng toán hạng. Các ký hiệu đã được định nghĩa có thể được dùng cho các địa chỉ SFR. Ví dụ:
MOV A, 45H hay MOV A, SBUF.
2.3.3.9. Địa chỉ Bit (Bit Address):
Một trong những điểm mạnh của 8951 là khả năng truy xuất các bit riêng lẻ, không cần các hoạt động trang bị trên byte. Các lệnh truy xuất các bit định vị phải cung cấp một địa chỉ trong bộ nhớ dữ liệu nội (00H – 7FH) hoặc địa chỉ bit trong các SFR (80H - FFH).
Có 3 cách để xác định địa chỉ bit trong ô nhớ dữ liệu: Dùng địa chỉ bit trực tiếp, dùng hoạt động điểm giữa địa chỉ byte và địa chỉ bit, dùng ký hiệu biên dịch đã được định nghĩa.
Ví dụ:
SETB 0E7H : Dùng địa chỉ trực tiếp.
SETB ACC, 7 :Dùng hoạt động điểm.
JNZ T1 ,$ : Dùng ký hiệu được định nghĩa “TT”.
2.3.3.10. Địa chỉ mã (Code Address):
Địa chỉ mã được dùng trong toán hạng cho các lệnh nhảy, bao gồm các sự nhảy tương đối (như SJMP và các lệnh nhảy có điều kiện), các sự nhảy và các sự gọi tuyệt đối (ACALL , AJMP). Địa chỉ mã thường được cho ở dạng nhãn sau:
HERE:
_
_
_
SJMP HERE
ASM51 sẽ xác định địa chỉ mã đúng và lồng vào Offset đúng được ký hiệu 8 bit lệnh, địa chỉ trang 11 bit hoặc địa chỉ dài 16 bit cho thích hợp.
2.3.3.11. Các sự nhảy và gọi chung ( generic Jump and Calls):
ASM51 cho phép người lập trình dùng thuật nhớ JMP chung hay CALL chung. Lệnh “JMP “có thể được dùng thay cho “SJMP, AJMP, LJMP“ và “CALL” có thể thay cho ACALL hay LCALL. Sự biên dịch biến đổi thuật nhớ chung đếm một lệnh “thực tế“ sau vài qui luật đơn giản, thuật nhớ chung biến đổi thành dạng tuyệt đối nếu nhảy hay gọi trong trang 2k. Nếu các dạng ngắn và tuyệt đối không dùng thì sẽ được chuyển thành dạng dài.
2.3.4. Sự tính toán biểu thức của Assemble Time (Assemble Time Expression Evaluation):
Khi một biểu thức được dùng, sự biên dịch tính toán giá trị lồng vào lệnh đó.
2.3.4.1 Các cơ sở số (Number Basses):
Cơ sở các hằng số phải được theo sau các số nhị phân “B”, theo sau số Octal “O”, hoặc “Q”, theo sau số thập phân “D” hay không có gì , theo số Hexa “H”. Ví dụ:
MOV A, # 15 : Thập phân
MOV A , 1111B : Nhị phân
MOV A , 30H : Hex
MOV A , 315D : Thập phân
MOV A , 317Q : Octal
2.3.4.2. Các chuỗi ký tự (Character String):
Chuổi dùng một hay 2 ký tự có thể dùng như các toán hạng trong các biểu thức. Các mã ASSCII được biến đổi thành nhị phân tương đương bởi sự biên dịch.
Các hằng được đi kèm theo sau 1 dấu ngoặc kép (‘).
Ví dụ : CJNZ A , # ‘Q’, AGAIN
2.3.4.3. Các ký hiệu số học (Arithmetic Operations):
+ : Cộng
_ : Trừ
. : Nhân
/ : Chia
MOD :Phép lấy dư
Ví dụ lệnh MOV A, # 10 + 10H và lệnh MOV A, # 1AH tương tự 2 lệnh MOV A, # 25 MOD 7 và MOV A, # 4 cũng giống nhau.
2.3.4.4. Các hoạt động logic (Logic Operations):
Các hoạt động logic là OR, AND, XOR, NOT. Hoạt động được áp dụng trên các bit tương ứng trong mỗi toán hạng. Sự hoạt động phải được phân ra từ các toán hạng bởi một khoảng cách ký tự hoặc nhiều khoảng ký tự.
Ví dụ 3 lệnh MOV sau đây giống nhau:
THERE EQU
MINUS – THERE EQU- 3
MOV A, #(NOT THERE) + 1
MOV A, MINUS – THERE
MOV A, #11111101B
2.3.4.5. Các hoạt động đặc biệt (special Operation):
Các hoạt động đặc biệt là: SHR (dịch phải), SHL (dịch trái), HIGH (byte cao), LOW (byte thấp).
Ví dụ: lệnh MOV A, # HIGH 1234H và lệnh MOV A, 12H tương đương.
2.3.4.6. Các hoạt động liên quan:
Khi một hoạt động có liên quan được dùng giữa hai toán hạng thì kết qủa hoặc sai (0000h) hoặc đúng (FFFFH). Các hoạt động là:
EQ = : Equals (bằng)
NE : Not equals (không bằng)
LT < : Less than (nhỏ hơn)
LE <= : Less than or equal (nhỏ hơn hoặc bằng)
GT > : Greater than (lớn hơn)
GE >= : Greater than or equal (lớn hơn hoặc bằng)
Ví dụ:
MOV A, #5
MOV A, 100 GE 50
MOV A, 5 NE 4
Cả ba lệnh trên đều đúng nên cả ba tương đương với lệnh sau: MOV A,# 0FFH
2.3.5. Các chỉ thị biên dịch:
ASM51 cung cấp các chỉ thị sau:
Sự điều khiển trạng thái biên dịch (ORG, AND, USING)
Sự xác định ký hiệu (SEGMENT, EQU, SET, DATA, NDATA, BIT, CODE)
Sự khởi gán lưu trữ hay để dành trước sự lưu trữ (DS, DBIT, DB, DW)
Sự kết nối chương trình (PUBLIC, EXTRN, NAME)
Sự chọn segment (PSEG, CSEG, DSEG, ISEG, BSEG, XSEG)
2.3.5.1. Sự điều khiển trạng thái biên dịch:
Chỉ thị ORG thay đổi bộ đếm vùng nhớ để đặt sự khởi đầu một chương trình mới bởi trạng thái theo sau đó, dạng của chỉ thị ORG là: ORG Expression
Chỉ thị END đặt ở cuối cùng trong file nguồn. Dạng của nó là END.
Chỉ thị USING cung cấp cho ASM51 dãy thanh ghi tích cực hiện hành. Dạng chỉ thị của nó là USING Expression
Việc dùng địa chỉ các thanh ghi ký hiệu được định nghĩa trước AR0-AR7 sẽ biến thành địa chỉ trực tiếp phù hợp của dãy thanh ghi tích cực.
Ví dụ : USING 3 : Dùng Bank 3 trong dãy thanh ghi.
PUSH AR7 : Push R7 (R7=1FH)
PUSH AR7 : Push R7 (R7=0FH)
2.3.5.2. Định nghĩa ký hiệu (Symbol Definition):
Dạng chỉ thị của segment như sau: symbol SEGMENT segmenttype
Trong đó symbol là tên của segment có thể đổi chỗ được. Các kiểu segment có thể CODE (segment mã), XDATA (vùng dữ liệu ngoài), DATA (vùng dữ liệu nội) có thể truy xuất bằng sự định vị trực tiếp từ (00H-7FH), IDATA (toàn bộ vùng dữ liệu nội), BIT (vùng BIT từ 20H-2FH dữ liệu nội).
Ví dụ : EPROM SEGMENT CODE cho biết EPROM của một segment kiểu code.
Dạng chỉ thị EQU : symbol EQU Expression
Dạng chỉ thị BIT : symbol BITExpression
Lưu ý rằng nếu ta dùng chỉ thị BIT như FLAGS BIT 05H thì ta có thể SETB FLAGS mà không được dùng lệnh MOV.
2.3.5.3. Sự khởi gán/dành lưu trữ trước (Storage Initilization/Reservation)
Các chỉ thị của Storage Initilization khởi gán và Storage Reservation để dành một vùng nhớ trong từ, byte hoặc các đơn vị bit. Vùng được dành trước khi bắt đầu tại vùng nhớ được chỉ rõ bởi giá trị hiện hành của bộ đếm vùng nhớ trong segment tích cực đang hiện hành. Các chỉ thị này có thể đứng trước một nhãn.
a) Khai báo lưu trữ DS (Define Storage)
Dạng phát biểu DS là : [label:]DS Expression
Phát biểu DS dành một vùng nhớ trong đơn vị byte. Nó có thể được dùng trong bất kỳ phát biểu segment nào ngoại trừ BIT. Khi phát biểu DS được bắt gặp trong chương trình thì bộ đếm vị trí location của segment hiện hành được tăng lên một khoảng bằng giá trị của biểu thức. Tổng của bộ đếm location và biểu thức đã được định rõ sẽ không vược quá sự hạn chế của vùng hiện hành.
Phát biểu sau tạo ra một vùng đệm 40 byte trong segment dữ liệu nội.
DSEG AT 30 : Đặt vào segment data nội.
LENGTH EQU 40
BEFFER : DS LENGTH : 40 byte được dành trước
Nhãn BUFFER tượng trưng cho địa chỉ của location đầu tiên của vùng nhớ được lưu trữ. Trong ví dụ trên buffer đắt đầu ở địa chỉ 30H bởi từ “AT 30” được định rõ bởi DSEG. Vùng đệm này có thể xoá như sau:
MOV R7,#LENGTH : R7 chứa con số LENGTH là 40
MOV R0,#BUFFER : R0 chứa địa chỉ tại buffer là 30H
LOOP : MOV @R0,#0 : Lần lượt xoá
DJNZ,R7,LOOP
(continue)
Để tạo ra vùng đệm 1000 byte trong RAM ngoại bắt đầu tại địa chỉ 4000H, các chỉ thị sau đây có thể được dùng:
XSTART EQU 4000H
XLENGTH EQU 1000H
XSEG AT XSTART : Phân đoạn data ngoài bắt đầu ở 4000H
XBUFFER: DS XLENGTH : Tạo ra một vùng đệm có độ dài 1000byte
Các lệnh sau đây có thể dùng để xoá vùng đệm trên :
MOV DPTR,#BUFFER: Đưa địa chỉ 4000H và DPTR
LOOP : CLR A
MOVX @DPTR : Xoá nội dụng từ địa chỉ 4000H trở đi
INC DPTR : Tăng thêm 1 ( trường hợp đầu trở thành 4001H)
MOV A,DPL
CJNZ A,#LOW (XBUFFER=LENGTH+1),LOOP
MOV A,DPH
CJNZ A,HIGH (XBUFFER=XLENGTH+1),LOOP
(Continue)
Nếu so sánh hai cách dùng trên dành cho byte thấp và byte cao DPTR, Vì lệnh CJNZ chỉ làm nhiệm vụ đối với thanh ghi A hoặc thanh ghi Rn, do đó byte thấp hoặc byte cao của bộ đếm dữ liệu phải được MOV vào A trước khi đến lệnh CJNZ. Vòng lặp chỉ kết thúc khi bộ đếm dữ liệu đã được đọc địa chỉ XBUFFER+XLENGTH+1
b) Khai báo DBIT (Define Bit)
Sự thành lập : [label:] DBIT expression
Chỉ thị DBIT dành trước vùng nhớ các đơn vị bit, nó có thể được dùng trong 1 segment bit. Khi phát biểu này được bắt gặp trong chương trình thì bộ đếm vị trí của segment hiện hành được cộng thêm giá trị của biểu thức.
c) Khai báo byte DB (Define Byte)
Sự thành lập chỉ thị ĐặC BIệT : [label:] ĐặC BIệT Expression [,Expression][...]
Chỉ thị DB khởi gán bộ mã nên segment CODE phải tích cực. Danh sách biểu thức là một chuỗi của một hay nhiều giá trị byte (mỗi cách có thể là một biểu thức) được phân ra bởi dấu phẩy.
Chỉ thị DB cho phép các chuỗi ký tự (được kèm trong dấu ngoặc kép đơn) dài hơn 2 ký tự. Mỗi ký tự trong chuỗi được biến thành mã ASCII tương ứng. Nếu một nhãn được dùng thì nhãn đó đã được ấn định địa chỉ của byte đầu tiên.
Ví dụ : CSEG AT 0100H
DSQUARES : DB 0,1,4,9,16,25 :Bình phương từ 0-5
Kết quả của sự phân chia bộ nhớ hexa của bộ nhớ mã ngoài như sau :
Address
Content
Note
0100H
00H
Cửa số 0
0101H
01H
Cửa số 1
0102H
04H
Cửa số 4
0103H
9H
Cửa số 9
0104H
10H
Cửa số 16
0105H
19H
Cửa số 25
d) Khai báo từ DW (Define Word)
Sự thành lập : [label:]DW Expression [,Expression][...]
Chỉ thị giống chỉ thị DB ngoại trừ hai vị trí nhớ 16 bit được chia làm mỗi khoảng dữ liệu.
Ví dụ :
CSEG AT 200H
DW 1234H,2
Address
Content
Note
0200H
12H
Byte cao 1234H
0201H
34H
Byte thấp 1234H
0202H
00H
Byte cao của 2
0203H
02H
Byte thấp của 2
Chương 3: thiết kế và thi công bộ điều khiển máy giặt ứng dụng vi xử lý
3.1. Nhiệm vụ thiết kế
Nhiệm vụ cần thực hiện là thiết kế một mạch điều khiển sử dụng cho máy giặt dân dụng dùng vi điều khiển AT89c51 . Vậy nên yêu cầu đặt ra ở đây là:
+ Thiết kế khối nguồn.
+ Thiết kế khối giao tiếp.
+ Thiết kế mạch công suất.
+ Thiết kế mạch vi điều khiển.
+ Viết chương trình phần mềm.
3.2. Thiết kế phần cứng của hệ thống
3.2.1. Sơ đồ khối của hệ thống
Hình 3.1 Sơ đồ khối của mạch điều khiển
Đặc điểm và chức năng của từng khối
- Khối phím bấm gồm: phím chương trình, phím chế độ, phím tắt nguồn, phím bật nguồn, phím khởi động máy (start). Phím chọn chương trình có chức năng cài đặt chương trình cho máy giặt để máy có thể giặt theo toàn chương trình là giặt, giũ, vắt. Hoặc có thể đặt chương trình cho máy chỉ thực hiện một công việc chỉ giặt, chỉ giũ, hoặc chỉ vắt. Phím chế độ có chức năng lựa chọn một trong ba chế độ giặt cho máy đó là: chế độ giặt thường tổng thời gian giặt là 45 phút sử dụng khi đồ giặt không quá bẩn hoặc lượng đồ giặt ở mức trung bình, chế độ giặt ngâm tổng thời gian giặt là 70 phút sử dụng chế độ này khi đồ giặt quá bẩn. Chế độ giặt nhanh tổng thời gian giặt là 30 phút sử dụng chế độ này khi đồ giặt không nhiều hoặc là đồ giặt mỏng. Phím start dùng để khởi động máy giặt
- Khối hiển thị gồm 3 đèn led hiển thị cho các chương trình giặt và 3 đèn led hiển thị cho 3 chế độ giặt được chọn
- Khối đầu vào là cảm biến mức nước theo kiểu rơle áp suất
- Khối nguồn gồm có biến áp nguồn biến đổi điện áp từ 220v xuống 12v sau đó được nắn qua cầu điot và qua mạch ổn áp 5v cấp nguồn cho mạch điều khiển
- Khối điều khiển sử dụng vi điều khiển họ 8051 làm đơn vị thu nhận, xử lý tín hiệu và xuất các tín hiệu điều khiển cho toàn bộ hệ thống
- Khối tín hiệu đầu ra gồm các rơle bán dẫn (triac và transisto) có chức năng đóng cắt, đảo chiều động cơ giặt và đóng cắt van xả, van cấp nước, còi báo.
3.2.2. Sơ đồ mạch nguyên lý
Hình 3.2 Sơ đồ nguyên lý mạch điều khiển
Tính chọn linh kiện trong sơ đồ
Tính điện trở hạn dòng R1:
Để cho mỗi led sáng thì dòng cung cấp cho nó là 10mA. Vậy điện trở cần gắn thêm vào để hạn dòng cho led là:
Chọn R1 trên thực tế là 330 (W). Với việc chọn R1 lớn hơn tính toán nhưng dòng qua led giảm không đáng kể nên vẫn chấp nhận
Vậy dòng thực tế qua led là:
Tính điện trở R2 phân cực cho transistor
Để cho một triac dẫn thì dòng điện qua nó là 10 mA. Đây cũng chính là dòng Ic của transistor. Vậy chọn transistor loại A1266 với hệ số khuyếch đại b là 60
Vậy dòng IB là:
Điện trở phân cực R2 là:
Chọn R2 = 22 kW, nhỏ hơn giá trị tính toán để dòng lớn transistor nhanh bão hòa.
Lựa chọn phần tử công suất (triac)
Động cơ sử dụng trong máy giặt là động cơ không đồng bộ 1 pha có Uđm = 220V, Iđm= 2A. Để điều khiển đóng cắt cũng như đảo chiều quay cho động cơ ta sử dụng hai triac BT139 có các thông số như sau: Uđm=800V, Iđm=16A, IGT=10mA
Cuộn hút trong van cấp nước có Uđm=220V, Iđm= 0,05A. và van xả nước có Uđm=220V, Iđm= 0,1A. Để điều khiển hai van này ta sử dụng 2 triac BCR1AM có các thông số như sau Uđm=800V, Iđm=2A, IGT=5mA
Sơ đồ mạch in và bố trí linh kiện
3.3. Thiết kế phần mềm
3.3.1. Yêu cầu công nghệ của mạch điều khiển máy giặt
Để định hướng cho quá trình viết chương trình điều khiển máy giặt thì mạch điều khiển phải thực hiện được các chức năng sau đây.
- Nhấn phím bật nguồn (on) nguồn sẽ được cấp và duy trì khi nhả phím
- Sau khi bật nguồn nếu nhấn phím start thì máy sẽ chạy theo chương trình mặc định đó là thực hiện theo trình tự cả ba chương trình giặt gồm có 1lần giặt thời gian là 14 phút - vắt 3 phút – giũ 10 phút - vắt 3phút – giũ 10phút – vắt 5 phút. Nếu ban đầu phím chương trình được nhấn chọn chỉ giặt, chỉ giũ, hoặc chỉ vắt thì sau khi nhấn start máy sẽ chạy chương trình đã được chọn. Nếu ban đầu phím chế độ được nhấn thì máy sẽ lưu chế độ được chọn là giặt nhanh, giặt thường hay giặt ngâm. Nếu phím chế độ không được nhấn thì máy sẽ tự thiết lập theo chế độ giặt thường. Sau khi kết thúc chương trình giặt bộ điều khiển sẽ báo còi, và cắt nguồn chính.
3.3.2. Xây dựng lưu đồ thuật toán
Lưu đồ của chương trình chính
Lưu đồ chương trình ( ấn phím)
Lưu đồ chương trình ( xác định chương trình và chế độ giặt được chọn)
3.3.3. Chương trình điều khiển
$include(reg51.inc )
ORG 00H
LJMP MAIN ;NHAY TOI CHUONG TRINH CHINH
ORG 03H ;NGAT NGOAI 0
LJMP POWEROFF ;TAT NGUON
ORG 13H ;NGAT NGOAI 1
LJMP NGATSTART ;TAM DUNG VA KHOI DONG
ORG 100H ;CHUONG TRINH CHINH
MAIN: MOV IE,#10000001B ;CHO PHEP NGAT
CLR P1.6 ;BAT NGUON
CLR P2.0 ;BAT DEN GIAT
CLR P2.1 ;BAT DEN GIU
CLR P2.2 ;BAT DEN VAT
CLR P2.3 ;BAT DEN CHE DO GIAT THUONG
KT: JNB P2.6,PHIMBAM1 ;KIEM TRA PHIM CHUONG TRINH
JNB P2.7,PHIMBAM2 ;KIEM TRA PHIM CHE DO
JNB P3.3,PHIMSTART ;KIEM TRA PHIM START
SJMP KT
PHIMBAM1: CALL COI ;BAO COI KHI BAM PHIM
SETB P2.0 ;TAT DEN GIAT
SETB P2.1 ;TAT DEN GIU
CLR P2.2 ;TAT DEN VAT
JNB P2.6,$ ;CHO NHA PHIM
KT2: JNB P2.6,PHIMBAM11
JNB P2.7,PHIMBAM2
JNB P3.3,PHIMSTART
SJMP KT2
PHIMBAM11: CALL COI
SETB P2.2
SETB P2.1
CLR P2.0
JNB P2.6,$
KT3: JNB P2.6,PHIMBAM12
JNB P2.7,PHIMBAM2
JNB P3.3,PHIMSTART
SJMP KT3
PHIMSTART: JNB P3.3,$ ;KHIEM TRA PHIM START
SETB IE.2 ;CHO PHEP NGAT NGOAI1
LJMP PHSTART ;NHAY DEN NHAN 'PHSTART'
PHIMBAM12: CALL COI
CLR P2.1
SETB P2.0
SETB P2.2
JNB P2.6,$
KT4: JNB P2.6,PHIMBAM13
JNB P2.7,PHIMBAM2
JNB P3.3,PHIMSTART
PHIMBAM13: CALL COI
CLR P2.1
CLR P2.0
CLR P2.2
JNB P2.6,$
KT5: JNB P2.6,PHIMBAM1
JNB P2.7,PHIMBAM2
JNB P3.3,PHIMSTART
SJMP KT5
PHIMBAM2: CALL COI
SETB P2.3
CLR P2.4
SETB P2.5
JNB P2.7,$
KT6: JNB P2.6,PHIMBAM1
JNB P2.7,PHIMBAM3
JNB P3.3,PHIMSTART
SJMP KT6
PHIMBAM3: CALL COI
SETB P2.3
CLR P2.5
SETB P2.4
JNB P2.7,$
KT7: JNB P2.6,PHBAM1
JNB P2.7,PHIMBAM4
JNB P3.3,PHIMSTART
SJMP KT7
PHBAM1: LJMP PHIMBAM1
PHIMBAM4: CALL COI
SETB P2.5
CLR P2.3
SETB P2.4
JNB P2.7,$
KT8: JNB P2.6,NHAY
JNB P2.7,PHIMBAM2
JNB P3.3,PHIMSTART
SJMP KT8
NHAY: LJMP PHIMBAM1
;--------------CAC CHUONG TRINH CON--------------
DELAY05S: MOV R1,#250 ;TRE 0,5S
LAP: MOV R2,#200
LAP1: MOV R3,#10
LAP2: DJNZ R3,LAP2
DJNZ R2,LAP1
DJNZ R1,LAP
RET
;-----------------------------------------------------------------------
DELAY1S: MOV R0,#2 ;TRE 1S
LAP1S: CALL DELAY05S
DJNZ R0,LAP1S
RET
;-----------------------------------------------------------------------
DELAY3S: MOV R4,#3 ;TRE 3S
LAP3S: CALL DELAY1S
DJNZ R4,LAP3S
RET
;-----------------------------------------------------------------------
DELAY7S: MOV R4,#7 ;TRE 7S
LAP7S: CALL DELAY1S
DJNZ R4,LAP7S
RET
;-----------------------------------------------------------------------
DELAY1P: MOV R5,#60 ;TRE 1PHUT
LAP1P: CALL DELAY1S
DJNZ R5,LAP1P
RET
;-----------------------------------------------------------------------
DELAY2P: MOV R5,#120
LAP2P: CALL DELAY1S
DJNZ R5,LAP2P
RET
;-----------------------------------------------------------------------
DELAY4P: MOV R5,#240 ;TRE 4PHUT
LAP4P: CALL DELAY1S
DJNZ R5,LAP4P
RET
;-----------------------------------------------------------------------
GIATCH: MOV R6,#128 ;CHUONG TRINH GIAT CHUAN
CLR P1.3
JB P1.5,$
SETB P1.3
LAPG: CLR P1.1
LCALL DELAY3S
SETB P1.1
LCALL DELAY05S
CLR P1.2
LCALL DELAY3S
SETB P1.2
LCALL DELAY05S
DJNZ R6,LAPG
RET
GIATNH: MOV R6,#60 ;CHUONG TRINH GIAT NHANH
CLR P1.3
JB P1.5,$
SETB P1.3
CALL LAPG
RET
GIATNG: MOV R7,#7 ;CHUONG TRINH GIAT NGAM
CLR P1.3
JB P1.5,$
SETB P1.3
GIATNG1: MOV R6,#18
GIATNG2: CALL LAPG
DJNZ R6,GIATNG2
CALL DELAY4P
DJNZ R7,GIATNG1
RET
;-----------------------------------------------------------------------
GIU: MOV R6,#35 ;CHUONG TRINH GIU
CLR P1.3
JB P1.5,$
SETB P1.3
GIU1: LCALL LAPG
DJNZ R6,GIU1
RET
GIUNH: MOV R6,#20 ;CHUONG TRINH GIU NHANH
GIU2: LCALL LAPG
DJNZ R6,GIU2
RET
;-----------------------------------------------------------------------
VATCH: CLR P1.4 ;CHUONG TRINH VAT CHUAN
JNB P1.5,$
LCALL DELAY1P
CLR P1.1
LCALL DELAY7S
SETB P1.1
LCALL DELAY7S
CLR P1.1
LCALL DELAY7S
SETB P1.1
LCALL DELAY7S
CLR P1.1
LCALL DELAY4P
SETB P1.1
SETB P1.4
RET
VATNH: CLR P1.4 ;CHUONG TRINH VAT NHANH
JNB P1.5,$
LCALL DELAY1P
CLR P1.1
LCALL DELAY7S
SETB P1.1
LCALL DELAY7S
CLR P1.1
LCALL DELAY7S
SETB P1.1
LCALL DELAY7S
CLR P1.1
LCALL DELAY2P
SETB P1.1
SETB P1.4
RET
;-----------------------------------------------------------------------
COI2: CLR P1.1 ;CHUONG TRINH BAO COI 7S
LCALL DELAY7S
SETB P1.0
RET
COI:
CLR P1.0 ;BAO COI 0,5S
LCALL DELAY05S
SETB P1.0
RET
;-----------------------------------------------------------------------
POWEROFF:
LCALL COI
SETB P1.6 ;TAT NGUON
RETI
;-----------------------------------------------------------------------
NGATSTART:
JNB P3.3,$
JBC ACC.0,START2 ;KIEM TRA DUNG HAY KHOI DONG
SETB ACC.0
MOV R1,P1 ;LUU TRANG THAI CONG P1
SETB P1.2
SETB P1.1
SETB P1.3
SETB P1.4
JB P3.3,$
RETI
;----------------------------------------------------------------------
START2: MOV P1,R1 ;LAY LAI TRANG THAI CONG P1
RETI
PHSTART: JNB P2.0,NHAN1 ;KIEM TRA DEN GIAT
JNB P2.1,GIU10
LCALL VATCH ;GOI CHUONG TRINH VAT CHUAN
LCALL COI2
SETB P1.6 ;TAT NGUON
GIU10: LCALL GIU ;GOI CHUONG TRINH GIU
LCALL COI2
SETB P1.6 ;TAT NGUON
NHAN1: JNB P2.1,NHAN2 ;KIEM TRA DEN GIU
LCALL GIATCH ;GOI CHUONG TRINH GIAT CHUAN
LCALL COI2
SETB P1.6 ;TAT NGUON
;-----------------------------------------------------------------------
NHAN2: JNB P2.3,GMD ;KIEM TRA DEN CHE DO GIAT THUONG
JNB P2.5,GNH ;KIEM TRA DEN CHE DO GIAT NHANH
LCALL GIATNG ;GOI CHUONG TRINH GIAT NGAM
LCALL VATNH ;GOI CHUONG TRINH VAT NHANH
LCALL GIU ;GOI CHUONG TRINH GIU
LCALL VATNH ;GOI CHUONG TRINH VAT NHANH
LCALL GIU ;GOI CHUONG TRINH GIU
LCALL VATCH ;GOI CHUONG TRINH VAT CHUAN
LCALL COI2
SETB P1.6 ;TAT NGUON
;----------------------------------------------------------------------
GMD: LCALL GIATCH ;GOI CHUONG TRINH GIAT CHUAN
LCALL VATNH ;GOI CHUONG TRINH VAT NHANH
LCALL GIU ;GOI CHUONG TRINH GIU
LCALL VATNH ;GOI CHUONG TRINH VAT NHANH
LCALL GIU ;GOI CHUONG TRINH GIU
LCALL VATCH ;GOI CHUONG TRINH VAT CHUAN
LCALL COI2
SETB P1.6 ;TAT NGUON
;-----------------------------------------------------------------------
GNH: LCALL GIATNH ;GOI CHUONG TRINH GIAT NHANH
LCALL VATNH ;GOI CHUONG TRINH VAT NHANH
LCALL GIUNH ;GOI CHUONG TRINH GIU NHANH
LCALL VATNH ;GOI CHUONG TRINH VAT NHANH
LCALL GIUNH ;GOI CHUONG TRINH GIU NHANH
LCALL VATCH ;GOI CHUONG TRINH VAT CHUAN
LCALL COI2
SETB P1.6 ;TAT NGUON
END
kết luận
Sau hơn mười tuần thực hiện với nhiều cố gắng và nỗ lực của bản thân cùng với sự tận tình hướng dẫn của thầy Nguyễn Tiến Ban, tập đồ án này đã hoàn thành đúng thời gian qui định theo yêu cầu đặt ra là thiết kế một mạch điều khiển máy giặt dân dụng dùng vi điều khiển AT89C51.
Để thực hiện được yêu cầu trên em đã nghiên cứu, tìm hiểu những vấn đế về cấu tạo, nguyên lý hoạt động của các loại máy giặt,vi điều khiển, vi xử lí, các phương pháp điều khiển máy giặt từ cổ điển đến hiện đại và các vấn đề khác có liên quan đến đề tài.
Nội dung chính của đề tài này bao gồm những phần sau:
*Phần kiến thức.
- Khảo sát và nghiên cứu cấu tạo cũng như nguyên lý tẩy bẩn, nguyên lý hoạt động của các chủng loại máy giặt khác nhau.
- Khảo sát bộ vi điều khiển 8051.
*Phần thiết kế thi công .
- Xây dựng sơ đồ khối toàn mạch .
- Xây dựng lưu đồ thuật toán .
- Viết chương trình.
- Thi công lắp ráp và kiểm tra.
Trên đây là những nội dung mà em đã thực hiện được trong tập đồ án này.
Tuy nhiên do thời gian cũng như trình độ chuyên môn có hạn nên vẫn còn nhiều thiếu sót . Một mặt hạn chế của đề tài này là hệ thống cảm biến mức nước là cảm biến rơ le áp suất nên để lựa chọn mức nước ta không thể lựa chọn ngay trên bảng điều khiển dược mà ta phải lựa chọn trên rơ le áp suất.
Để đề tài này thêm phong phú và tăng hiệu quả sử dụng thì cần đáp ứng được những yêu cầu sau:
-Khống chế và lựa chọn mức nước ngay trên bảng điều khiển bằng cách sử dụng bộ cảm biến áp suất có tín hiệu ra là tín hiệu tương tự sau đó được chuyển đổi qua ADC cung cáp tín hiệu mức nước cho vi điều khiển nên có thể lựa chọn được nhiều mức nước hơn.
- Có thể hẹn được giờ giặt .
- Có khả năng tự nhận biết khối lượng đồ giặt để tự động lựa chọn chế độ giặt và mức nước phù hợp.
- Có thêm nhiều chế độ giặt dành cho các loại vải khác nhau.
- Có thêm chức năng giặt nước nóng.
- Có chức năng đặt thời gian giặt tùy ý v.v..
Đó là những yêu cầu mà em chưa có điều kiện thực hiện,
Mong rằng đề tài này sẽ được các bạn sinh viên khoá sau tiếp tục thực hiện những yêu cầu trên và khắc phục được những hạn chế của đề tài này, để tạo ra một sản phẩm có chất lượng cao phục vụ cho sản xuất và đời sống xã hội.
Sau cùng một lần nữa chúng em xin chân thành cảm ơn thầy Nguyễn Tiến Ban cùng quý thầy cô khoa điện đã tận tình hướng dẫn và dẫn dắt chúng em trong suốt những năm học vừa qua.
Xin chân thành cảm ơn các bạn sinh viên đã đóng góp những ý kiến quí báu để đề tài này hoàn thành tốt đẹp.
Tài liệu tham khảo
[1]. Trần Khánh Hà Máy giặt dân dụng NXB khoa học và kĩ thuật Hà Nội 2005
[2]. Vũ Quang Hồi Trang bị điện điện – tử công nghiệp NXB giáo dục.
[3]. Tống Văn On, Hoàng Đức Hải Họ vi điều khiển 8051 NXB lao động- xã hội Hà Nội 2001, Thiết kế hệ thống với họ 8051 NXB phương đông
[4] Lê Văn Doanh Điện tử công suất NXB Khoa học và kĩ thuật Hà Nội 2007
[5] Nguyễn Ngọc Lâm Thực hành ứng dụng vi điều khiển Hà Nội 2006
[6] Nguyễn Mạnh Giang Cấu trúc lập trình ghép nối và ứng dụng vi điều khiển NXB Lao động - xã hội Hà Nội 2005
Các file đính kèm theo tài liệu này:
- 2.DANG QUY HIEU.doc