Tài liệu Ứng dụng KIT 8051 dùng để chuyển đổi A/D-D/A, chương 10 pptx

9 253 0
Tài liệu Ứng dụng KIT 8051 dùng để chuyển đổi A/D-D/A, chương 10 pptx

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

Thông tin tài liệu

Chương 10: PHÂN LOẠI LỆNH Các lệnh 8051 được chia thành 5 nhóm như sau:  Số học  Logic  Trao đổi dữ liệu  Luận lý  Rẽ nhánh chương trình Các lệnh số học Các lệnh số học thường sử dụng 4 mode đònh vò. Lệnh ADD A có thể được viết bằng nhiều cách khác nhau: ADDA, 7FH (Đònh vò trực tiếp) ADDA, @R0 (---------gián tiếp) ADDA, R7 (---------thanh ghi) ADDA, #35H (--------- tức thời) Tất cả các lệnh số học thi hành trong một chu kỳ máy, ngoại trừ lệnh INC DPTR (2 chu kỳ máy), MUL AB và DIV AB (4 chu kỳ máy). 8051 cung cấp cách đònh vò rất mạnh cho vùng RAM nội của nó. Bất kỳ byte nhớ nào cũng đều có tể tăng, giảm bằng đònh vò trực tiếp mà không cần thông qua thanh ghi tích luỹ. Lệnh INC có thể thao tác trên con trỏ dữ liệu (16 bit). Nhưng lệnh DEC không được đònh nghóa trên con trỏ. Do đó để thực hiện được điều này ta có các lệnh sau: DEC DPL ; giảm byte thấp DPTR MOV R7, DPL ; chuyển vào DPL CJNE R7, #0FFH, SKIP ; nếu vượt quá FF DEC DPH ; giảm luôn byte cao SKIP : (tiếp tục) Các lênh MUL AB và DIV AB chỉ thao tác trên các thanh ghi A và B. Lệnh Logic : Các lệnh logic biểu diễn các toán tử luận lý như AND, OR, EA-OR và NOT … Các lệnh này trên từng bit của byte dữ liệu. Ví dụ thanh ghi ACC chứa số 10101101B thì lệnh: ANL A, #10110010B Chứa kết quả 10100000 vào thanh ghi ACC. Các mode đònh vò trong lệnh logic cũng giống như trong lệnh số học. Tất cả các lệnh logic dùng đến thanh ghi ACC như một toán hạng đều là những lệnh một chu kỳ. Các lệnh khác đều chiếm 2 chu kỳ máy. Lệnh logic có thể thao tác trực tiếp bất cứ byte nào trong vùng nhớ nội. Lệnh XRL <thanh ghi>, #data đảo nhanh và dễ dàng các bit của port. XRL P1, #0FFH; Lệnh này mô tả hoạt động read-modify-write. 8 bit của port 1 được đọc, sau đó mỗi bit của XOR với bit tương ứng trong byte dữ liệu tức thời đều là 1, XOR sẽ đảo mỗi bit được đọc. Kết quả được viết trở lại port 1. Các lệnh chuyển dòch dữ liệu: RAM nội Các lệnh chuyển dòch dữ liệu trong vùng RAM nội chỉ chiếm 1 hoặc 2 chu kỳ máy. Lệnh có dạng: MOV <đích>, <nguồn> Một nét đặc trưng của họ MSC-51 là stack nằm trong vùng RAM nội và lớn dần lên phía tên của bộ nhớ. Lệnh PUSH trước tiên tăng con trỏ stack, sau đó mới sao chép byte vào stack. PUSH và POP chỉ dùng đònh vò trực tiếp. Thế nhưng bản thân stack lại dùng đònh vò trực tiếp thông qua con trỏ stack (SP). 8031/8051 không dùng 128 byte cao trong vùng nhớ nội làm stack. Nếu SP vượt quá 127 bytes được push bò mất và byte được pop không xác đònh. Lệnh dòch chuyển dữ liệu 16-bit (MOV dùng để khởi động con trỏ dữ liệu. Lệnh XCVA, <source> Chuyển đổi dữ liệu giữa A và byte được đònh vò. Lệnh XCHD A, @R1 chuyển đổi 4 bit thấp của thanh ghi ACC với byte được R1 chỉ đến. RAM ngoài Dòch chuyển dữ liệu giữa bộ nhớ trong và ngoài sử dụng mode đònh vò gián tiếp. Đòa chỉ gián tiếp có thể là một byte hay 2 byte (DPTR). Các lệnh dòch chuyển dữ liệu thao tác trên bộ nhớ ngoài đều chiếm hai chu kỳ máy và dùng thanh ghi tích luỹ làm toán hạng nguồn hoặc đích. Look-Up Tables Hai lệnh được cho sẵn để đọc một bảng dữ liệu trong bộ nhớ chương trình. Khi truy xuất đến vùng nhớ chương trình thì nội dung của bảng chỉ được đọc mà không được ghi. Từ gợi nhớ MOVC tức là “move constant”. MOVC dùng thanh ghi đếm chương trình cũng như con trỏ dữ liệu kàm thanh ghi nền và thanh ghi tích luỹ làm offset. MOVC A,@A+DPTR ; Có thể đọc được một số trong bảng 256 phần tử vào thanh ghi tích luỹ. Trong đó thanh ghi tích luỹ chỉ đến một vò trí trong còn con trỏ DPTR chỉ đến vò trí đầu bảng. MOVC A,@A+PC; Cũng tương tự như trên, chỉ khác là thanh ghi PC được dùng làm thanh ghi nền và bảng được truy xuất thông qua chương trình con. Trước tiên chỉ số yêu cầu được nạp cho thanh ghi tích luỹ sau đó chương trình con được gọi. Việc khởi động và gọi cụ thể như sau: MOV A,ENTRY_NUMBER CALL LOOK_UP . . . LOOK_UP : INC A MOVC A, @A+PC Ret TAB: DB data, data, data … Bảng được đặt ngay sau lệnh RET của chương trình con. Lệnh INC cần thiết vì PC sẽ chỉ đến lệnh RET sau khi thi hành MOVC. Việc tăng thanh ghi A cho phép nhảy qua khỏi lệnh RET. Các lệnh luận lý Các lệnh luận lý của 8051 thao tác trên bit đơn. RAM nội cung cấp 128 bit và các thanh ghi chức năng cung cấp 128 bit khác. Lệnh truy xuất đến các bit thông thường như set, xóa, đảo, AND, OR … Tất cả các bit đều truy xuất bằng đònh vò trực tiếp với các bit có đòa chỉ từ 00H – 7Fh trong 128 đòa chỉ thấp và 80H-FFH trong SFRs. Các bit trong vùng đòa chỉ thấp đạt tại 20F đến 2FH, được đánh số lần lượt từ bit 0 của đòa chỉ 200H (bit 00H) đến bit 7 của đòa chỉ 2FH (bit 7Fh). Ví dụ SETB P.1.7 set bit 7 port 1 Bit carry trong PSW được sử dụng như single-bit accumulator. Ví dụ CLR C CLR CY ; xóa carry Test bit Các lệnh test bit thường là các lệnh rẽ nhánh chương trình. Chúng kiểm tra trạng thái các bit để nhảy đến chương trình tương ứng nếu thỏa điều kiện. Lệnh rẽ nhánh chương trình Có một số lệnh điều khiển dòng chương trình, chúng gồm các lệnh gọi chương trình con và trả về từ một chương trình con hoặc rẽ nhánh có điều kiện và không có điều kiện. Những khả năng này có thể được cải tiến hơn nữa khi sử dụng 3 mode đònh vò trong các lệnh rẽ nhánh chương trình. Có 3 kệnh JMP khác nhau:SJMP, LJMP và AJMP (tương ứng là đònh vò tương đối, đònh vò xa và đònh vò tuyệt đối). Trình biên dòch Intel chấp nhận lệnh chung chung JMP nếu người lập trình không quan tâm đến sự thay đổi biên dòch. Trong khi trình biên dòch của những hãng khác không có đặc tính này. JMP được biên dòch thành AJMP nếu đích nằm ở trước và khoảng nhảy nằm trong phạm vi 2Kbytes. Trong các trường hợp khác có thể dòch thành LJMP. Lệnh CALL cũng tương tự như vậy. Lệnh SJMP đònh đòa chỉ đích như một offset tương đối. Vì vậy lệnh này dài 2 bytes. Khoảng cách nhảy bò giới hạn từ –128 đến +127 bytes tương đối so lệnh sau lệnh SJMP. Lệnh LJMP xác đònh một đòa chỉ đích là một số 16 bit. Vì vậy lệnh này dài 3 bytes. Đòa chỉ đích có thể ở bất kỳ trong vùng nhớ chương trình 63KB. Lệnh AJMP xác đònh đòa chỉ đích là một số 11 bit. Giống như SJMP, lệnh này dài 2 bytes, nhưng được biên dòch khác. Mã lệnh chứa 3 bit trong vòng 11 bit đòa chủ và byte thứ hai chứa 8 bit còn lại của đòa chỉ đích. Khi lệnh được thi hành 11 bit này được đặt vào 11 bit thấp trong thanh ghi PC và 5 bit cao trong thanh ghi PC không đổi. Vì vậy đích phải nằm trong phạm vi 2 Kbytes. Trong tất cả các trường hợp, người lập trình xác đònh đòa chỉ bit bằng một nhãn hoặc như một số 16 bit. Trình biên dòch sẽ đặt đòa chỉ đích vào vò trí đúng trong lệnh được biên dòch. Jump Tables Lệnh “JMP @ A+DPTR” cung cấp lệnh nhảy phụ thuộc điều kiện theo một bảng nhảy (jump tables). Đòa chỉ đích sẽ được tính trong khi thi hành chương trình như tổng của DPTR và thanh ghi tích luỹ. Đầu tiên DPTR được nạp đòa chỉ của bảng và thanh ghi tích luỹ được dùng làm chỉ số. Ví dụ nếu có 5 trường hợp nhảy, giá trò từ 0 đến 4 được nạp cho thanh ghi tích luỹ và lệnh nhảy tương ứng với từng trường hợp được mô tả như sau: MOV DPTR, #JUMP_TABLE ; MOV A, INDEX_NUMBER ; RL A JMP @A+DPTR Lệnh RL ở trên đổi chỉ số (từ 0 đến 4) thành các số chẵn từ 0 đến 8, vì mỗi điểm xâm nhập trong bảng là một đòa chỉ 2-byte. JNP_TABLE : AJMP CASE0 AJMP CASE1 AJMP CASE2 AJMP CASE3 Chương trình và con ngắt Có hai lệnh CALL khác nhau: ACALL và LCALL dùng đònh vò tuyệt đối và xa. Giống như lệnh JMP, lệnh CALL đưôc trình biên dòch của Intel dùng khi người lập trình không quan tâm đến đòa chỉ được biên dòch. Lệnh này đẩy thanh ghi PC vào stack và nạp PC với giá trò được chỉ ra trong lệnh. Lưu ý PC sẽ được trả lại giá trò đòa chỉ sau lệnh CALL khi nó chấm dứt chương trình con. Các lệnh LJMP và ACALL đều có những hạn chế giống như LJMP và AJMP được mô tả ở trên. Chương trình con kết thúc bằng lệnh RET, nó sẽ trả điều khiển lại cho chương trình chính. Không có gì bí ẩn khi RET trả điều khiển lại cho chương trình chính, nó chỉ đơn giản lấy 2 bytes cuối cùng của stack và đặt chúng vào thanh ghi PC. Lệnh RETI dùng để quay trở về chương trình chính từ trong chương trình phục vụ ngắt. Sự khác nhau giữa RET và RETI chỉ là RETI ký hiệu cho ngắt điều khiển hệ thống. Lệnh nhảy có điều kiện 8051 cung cấp một số lệnh nhảy có điều kiện. Tất cả những lệnh này đều xác đònh đòa chỉ đích bằng đònh vò tương đối. Giới hạn khoảng cách nhảy từ –128 đến +127 bytes kể từ sau lệnh nhảy có điều kiện. Tuy nhiên người lập trình cũng có thể đònh một đòa chỉ bằng nhhãn hoặc một số 16 bit. Không có bit zero trong thanh ghi PSW. JZ và JNZ test nội dung thanh ghi ACC cho điều khiển nhảy. Lệnh DJNZ (nhảy nếu khác 0) được dùng để điều khiển vòng lặp. Để vòng lập thi hành N lần, nạp biến đếm với N và đặt DJNZ ở cuối vòng lặp để bắt đầu vòng lặp. Ví dụ vòng lặp sau thi hành 10 lần: MOV R0,#10 ; LOOPP: (bắt đầu vòng lặp) . . . (kết thúc vòng lặp) DJNZ R7, LOOP ; (tiếp tục) Lệnh CJNZ (so sánh và nhảy nếu không bằng) cũng dùng để điều khiển vòng lặp. Hai bytes được xác đònh trong vùng toán hạng của lệnh và lệnh nhảy sẽ thi hành nếu hai bytes này khác nhau. Ví dụ, nếu một ký tự được đọc vào thanh ghi ACC từ cổng nối tiếp và nhảy đến nhãn TERMINAL nếu ký tự đọc vào là CONTROL-C (03H) . CJNE A, #03, SKIP ; SJMP TERMINAL ; SKIP: (tiếp tục) Lệnh jump chỉ xảy ra khi A=03H. Một ứng dụng khác của lệnh này là so sánh lớn hơn và bé hơn. Hai byte trong miền toán hạng là những số không dấu. Nếu toán hạng đầu nhỏ hơn toán hạng thứ hai thì cờ carry được set. Nếu toán hạng đầu lớn hơn hoặc bằng toán hạng thứ hai thì cờ carry được xóa. Ví dụ nếu muốn nhảy đến BIG nếu ACC lớn hơn hoặc bằng 20H, ta có các lệnh sau: CJNE A,#20H,$+3 JNC BIG Ký hiệu dollars “$” là một ký hiệu đặt biệt của trình biên dòch thay thế cho đòa chỉ của lệnh hiện thời. Vì CJNE là một lệnh 3-bytes, “$+3” là đòa chỉ của lệnh tiếp theo. . lệnh này trên từng bit của byte dữ liệu. Ví dụ thanh ghi ACC chứa số 101 0 1101 B thì lệnh: ANL A, #101 10010B Chứa kết quả 101 00000 vào thanh ghi ACC. Các mode. Chương 10: PHÂN LOẠI LỆNH Các lệnh 8051 được chia thành 5 nhóm như sau:  Số học  Logic  Trao đổi dữ liệu  Luận lý  Rẽ nhánh chương trình

Ngày đăng: 24/12/2013, 14:15

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan