intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Ứng dụng KIT 8051 dùng để chuyển đổi A/D-D/A, chương 10

Chia sẻ: Nguyen Van Dau | Ngày: | Loại File: PDF | Số trang:9

103
lượt xem
13
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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 AĐ A có thể được viết bằng nhiều cách khác nhau: AĐA, 7FH (Định vị trực tiếp) AĐA, @R0 (---------gián tiếp) AĐA, R7 (---------thanh ghi) AĐA, #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...

Chủ đề:
Lưu

Nội dung Text: Ứng dụng KIT 8051 dùng để chuyển đổi A/D-D/A, chương 10

  1. Chương 10: PHAÂN LOAÏI LEÄNH Caùc leänh 8051 ñöôïc chia thaønh 5 nhoùm nhö sau:  Soá hoïc  Logic  Trao ñoåi döõ lieäu  Luaän lyù  Reõ nhaùnh chöông trình Caùc leänh soá hoïc Caùc leänh soá hoïc thöôøng söû duïng 4 mode ñònh vò. Leänh ADD A coù theå ñöôïc vieát baèng nhieàu caùch khaùc nhau: ADDA, 7FH (Ñònh vò tröïc tieáp) ADDA, @R0 (---------giaùn tieáp) ADDA, R7 (---------thanh ghi) ADDA, #35H (--------- töùc thôøi) Taát caû caùc leänh soá hoïc thi haønh trong moät chu kyø maùy, ngoaïi tröø leänh INC DPTR (2 chu kyø maùy), MUL AB vaø DIV AB (4 chu kyø maùy). 8051 cung caáp caùch ñònh vò raát maïnh cho vuøng RAM noäi cuûa noù. Baát kyø byte nhôù naøo cuõng ñeàu coù teå taêng, giaûm baèng ñònh vò tröïc tieáp maø khoâng caàn thoâng qua thanh ghi tích luyõ. Leänh INC coù theå thao taùc treân con troû döõ lieäu (16 bit). Nhöng leänh DEC khoâng ñöôïc ñònh nghóa treân con troû. Do ñoù ñeå thöïc hieän ñöôïc ñieàu naøy ta coù caùc leänh sau: DEC DPL ; giaûm byte thaáp DPTR MOV R7, DPL ; chuyeån vaøo DPL CJNE R7, #0FFH, SKIP ; neáu vöôït quaù FF DEC DPH ; giaûm luoân byte cao SKIP : (tieáp tuïc)
  2. Caùc leânh MUL AB vaø DIV AB chæ thao taùc treân caùc thanh ghi A vaø B. Leänh Logic : Caùc leänh logic bieåu dieãn caùc toaùn töû luaän lyù nhö AND, OR, EA-OR vaø NOT … Caùc leänh naøy treân töøng bit cuûa byte döõ lieäu. Ví duï thanh ghi ACC chöùa soá 10101101B thì leänh: ANL A, #10110010B Chöùa keát quaû 10100000 vaøo thanh ghi ACC. Caùc mode ñònh vò trong leänh logic cuõng gioáng nhö trong leänh soá hoïc. Taát caû caùc leänh logic duøng ñeán thanh ghi ACC nhö moät toaùn haïng ñeàu laø nhöõng leänh moät chu kyø. Caùc leänh khaùc ñeàu chieám 2 chu kyø maùy. Leänh logic coù theå thao taùc tröïc tieáp baát cöù byte naøo trong vuøng nhôù noäi. Leänh XRL , #data ñaûo nhanh vaø deã daøng caùc bit cuûa port. XRL P1, #0FFH; Leänh naøy moâ taû hoaït ñoäng read-modify-write. 8 bit cuûa port 1 ñöôïc ñoïc, sau ñoù moãi bit cuûa XOR vôùi bit töông öùng trong byte döõ lieäu töùc thôøi ñeàu laø 1, XOR seõ ñaûo moãi bit ñöôïc ñoïc. Keát quaû ñöôïc vieát trôû laïi port 1. Caùc leänh chuyeån dòch döõ lieäu: RAM noäi Caùc leänh chuyeån dòch döõ lieäu trong vuøng RAM noäi chæ chieám 1 hoaëc 2 chu kyø maùy. Leänh coù daïng: MOV , Moät neùt ñaëc tröng cuûa hoï MSC-51 laø stack naèm trong vuøng RAM noäi vaø lôùn daàn leân phía teân cuûa boä nhôù. Leänh PUSH tröôùc tieân taêng con troû stack, sau ñoù môùi sao cheùp byte vaøo stack. PUSH vaø POP chæ duøng ñònh vò tröïc tieáp. Theá nhöng baûn thaân stack laïi duøng ñònh vò tröïc tieáp thoâng qua con troû stack (SP).
  3. 8031/8051 khoâng duøng 128 byte cao trong vuøng nhôù noäi laøm stack. Neáu SP vöôït quaù 127 bytes ñöôïc push bò maát vaø byte ñöôïc pop khoâng xaùc ñònh. Leänh dòch chuyeån döõ lieäu 16-bit (MOV duøng ñeå khôûi ñoäng con troû döõ lieäu. Leänh XCV A, Chuyeån ñoåi döõ lieäu giöõa A vaø byte ñöôïc ñònh vò. Leänh XCHD A, @R1 chuyeån ñoåi 4 bit thaáp cuûa thanh ghi ACC vôùi byte ñöôïc R1 chæ ñeán. RAM ngoaøi Dòch chuyeån döõ lieäu giöõa boä nhôù trong vaø ngoaøi söû duïng mode ñònh vò giaùn tieáp. Ñòa chæ giaùn tieáp coù theå laø moät byte hay 2 byte (DPTR). Caùc leänh dòch chuyeån döõ lieäu thao taùc treân boä nhôù ngoaøi ñeàu chieám hai chu kyø maùy vaø duøng thanh ghi tích luyõ laøm toaùn haïng nguoàn hoaëc ñích. Look-Up Tables Hai leänh ñöôïc cho saün ñeå ñoïc moät baûng döõ lieäu trong boä nhôù chöông trình. Khi truy xuaát ñeán vuøng nhôù chöông trình thì noäi dung cuûa baûng chæ ñöôïc ñoïc maø khoâng ñöôïc ghi. Töø gôïi nhôù MOVC töùc laø “move constant”. MOVC duøng thanh ghi ñeám chöông trình cuõng nhö con troû döõ lieäu kaøm thanh ghi neàn vaø thanh ghi tích luyõ laøm offset. MOVC A,@A+DPTR ; Coù theå ñoïc ñöôïc moät soá trong baûng 256 phaàn töû vaøo thanh ghi tích luyõ. Trong ñoù thanh ghi tích luyõ chæ ñeán moät vò trí trong coøn con troû DPTR chæ ñeán vò trí ñaàu baûng. MOVC A,@A+PC;
  4. Cuõng töông töï nhö treân, chæ khaùc laø thanh ghi PC ñöôïc duøng laøm thanh ghi neàn vaø baûng ñöôïc truy xuaát thoâng qua chöông trình con. Tröôùc tieân chæ soá yeâu caàu ñöôïc naïp cho thanh ghi tích luyõ sau ñoù chöông trình con ñöôïc goïi. Vieäc khôûi ñoäng vaø goïi cuï theå nhö sau: MOV A,ENTRY_NUMBER CALL LOOK_UP . . . LOOK_UP : INC A MOVC A, @A+PC Ret TAB: DB data, data, data … Baûng ñöôïc ñaët ngay sau leänh RET cuûa chöông trình con. Leänh INC caàn thieát vì PC seõ chæ ñeán leänh RET sau khi thi haønh MOVC. Vieäc taêng thanh ghi A cho pheùp nhaûy qua khoûi leänh RET. Caùc leänh luaän lyù Caùc leänh luaän lyù cuûa 8051 thao taùc treân bit ñôn. RAM noäi cung caáp 128 bit vaø caùc thanh ghi chöùc naêng cung caáp 128 bit khaùc. Leänh truy xuaát ñeán caùc bit thoâng thöôøng nhö set, xoùa, ñaûo, AND, OR … Taát caû caùc bit ñeàu truy xuaát baèng ñònh vò tröïc tieáp vôùi caùc bit coù ñòa chæ töø 00H – 7Fh trong 128 ñòa chæ thaáp vaø 80H-FFH trong SFRs. Caùc bit trong vuøng ñòa chæ thaáp ñaït taïi 20F ñeán 2FH, ñöôïc ñaùnh soá laàn löôït töø bit 0 cuûa ñòa chæ 200H (bit 00H) ñeán bit 7 cuûa ñòa chæ 2FH (bit 7Fh). Ví duï SETB P.1.7 set bit 7 port 1
  5. Bit carry trong PSW ñöôïc söû duïng nhö single-bit accumulator. Ví duï CLR C CLR CY ; xoùa carry Test bit Caùc leänh test bit thöôøng laø caùc leänh reõ nhaùnh chöông trình. Chuùng kieåm tra traïng thaùi caùc bit ñeå nhaûy ñeán chöông trình töông öùng neáu thoûa ñieàu kieän. Leänh reõ nhaùnh chöông trình Coù moät soá leänh ñieàu khieån doøng chöông trình, chuùng goàm caùc leänh goïi chöông trình con vaø traû veà töø moät chöông trình con hoaëc reõ nhaùnh coù ñieàu kieän vaø khoâng coù ñieàu kieän. Nhöõng khaû naêng naøy coù theå ñöôïc caûi tieán hôn nöõa khi söû duïng 3 mode ñònh vò trong caùc leänh reõ nhaùnh chöông trình. Coù 3 keänh JMP khaùc nhau:SJMP, LJMP vaø AJMP (töông öùng laø ñònh vò töông ñoái, ñònh vò xa vaø ñònh vò tuyeät ñoái). Trình bieân dòch Intel chaáp nhaän leänh chung chung JMP neáu ngöôøi laäp trình khoâng quan taâm ñeán söï thay ñoåi bieân dòch. Trong khi trình bieân dòch cuûa nhöõng haõng khaùc khoâng coù ñaëc tính naøy. JMP ñöôïc bieân dòch thaønh AJMP neáu ñích naèm ôû tröôùc vaø khoaûng nhaûy naèm trong phaïm vi 2Kbytes. Trong caùc tröôøng hôïp khaùc coù theå dòch thaønh LJMP. Leänh CALL cuõng töông töï nhö vaäy. Leänh SJMP ñònh ñòa chæ ñích nhö moät offset töông ñoái. Vì vaäy leänh naøy daøi 2 bytes. Khoaûng caùch nhaûy bò giôùi haïn töø –128 ñeán +127 bytes töông ñoái so leänh sau leänh SJMP. Leänh LJMP xaùc ñònh moät ñòa chæ ñích laø moät soá 16 bit. Vì vaäy leänh naøy daøi 3 bytes. Ñòa chæ ñích coù theå ôû baát kyø trong vuøng nhôù chöông trình 63KB.
  6. Leänh AJMP xaùc ñònh ñòa chæ ñích laø moät soá 11 bit. Gioáng nhö SJMP, leänh naøy daøi 2 bytes, nhöng ñöôïc bieân dòch khaùc. Maõ leänh chöùa 3 bit trong voøng 11 bit ñòa chuû vaø byte thöù hai chöùa 8 bit coøn laïi cuûa ñòa chæ ñích. Khi leänh ñöôïc thi haønh 11 bit naøy ñöôïc ñaët vaøo 11 bit thaáp trong thanh ghi PC vaø 5 bit cao trong thanh ghi PC khoâng ñoåi. Vì vaäy ñích phaûi naèm trong phaïm vi 2 Kbytes. Trong taát caû caùc tröôøng hôïp, ngöôøi laäp trình xaùc ñònh ñòa chæ bit baèng moät nhaõn hoaëc nhö moät soá 16 bit. Trình bieân dòch seõ ñaët ñòa chæ ñích vaøo vò trí ñuùng trong leänh ñöôïc bieân dòch. Jump Tables Leänh “JMP @ A+DPTR” cung caáp leänh nhaûy phuï thuoäc ñieàu kieän theo moät baûng nhaûy (jump tables). Ñòa chæ ñích seõ ñöôïc tính trong khi thi haønh chöông trình nhö toång cuûa DPTR vaø thanh ghi tích luyõ. Ñaàu tieân DPTR ñöôïc naïp ñòa chæ cuûa baûng vaø thanh ghi tích luyõ ñöôïc duøng laøm chæ soá. Ví duï neáu coù 5 tröôøng hôïp nhaûy, giaù trò töø 0 ñeán 4 ñöôïc naïp cho thanh ghi tích luyõ vaø leänh nhaûy töông öùng vôùi töøng tröôøng hôïp ñöôïc moâ taû nhö sau: MOV DPTR, #JUMP_TABLE ; MOV A, INDEX_NUMBER ; RL A JMP @A+DPTR Leänh RL ôû treân ñoåi chæ soá (töø 0 ñeán 4) thaønh caùc soá chaün töø 0 ñeán 8, vì moãi ñieåm xaâm nhaäp trong baûng laø moät ñòa chæ 2-byte. JNP_TABLE : AJMP CASE0 AJMP CASE1 AJMP CASE2 AJMP CASE3 Chöông trình vaø con ngaét
  7. Coù hai leänh CALL khaùc nhau: ACALL vaø LCALL duøng ñònh vò tuyeät ñoái vaø xa. Gioáng nhö leänh JMP, leänh CALL ñöoâc trình bieân dòch cuûa Intel duøng khi ngöôøi laäp trình khoâng quan taâm ñeán ñòa chæ ñöôïc bieân dòch. Leänh naøy ñaåy thanh ghi PC vaøo stack vaø naïp PC vôùi giaù trò ñöôïc chæ ra trong leänh. Löu yù PC seõ ñöôïc traû laïi giaù trò ñòa chæ sau leänh CALL khi noù chaám döùt chöông trình con. Caùc leänh LJMP vaø ACALL ñeàu coù nhöõng haïn cheá gioáng nhö LJMP vaø AJMP ñöôïc moâ taû ôû treân. Chöông trình con keát thuùc baèng leänh RET, noù seõ traû ñieàu khieån laïi cho chöông trình chính. Khoâng coù gì bí aån khi RET traû ñieàu khieån laïi cho chöông trình chính, noù chæ ñôn giaûn laáy 2 bytes cuoái cuøng cuûa stack vaø ñaët chuùng vaøo thanh ghi PC. Leänh RETI duøng ñeå quay trôû veà chöông trình chính töø trong chöông trình phuïc vuï ngaét. Söï khaùc nhau giöõa RET vaø RETI chæ laø RETI kyù hieäu cho ngaét ñieàu khieån heä thoáng. Leänh nhaûy coù ñieàu kieän 8051 cung caáp moät soá leänh nhaûy coù ñieàu kieän. Taát caû nhöõng leänh naøy ñeàu xaùc ñònh ñòa chæ ñích baèng ñònh vò töông ñoái. Giôùi haïn khoaûng caùch nhaûy töø –128 ñeán +127 bytes keå töø sau leänh nhaûy coù ñieàu kieän. Tuy nhieân ngöôøi laäp trình cuõng coù theå ñònh moät ñòa chæ baèng nhhaõn hoaëc moät soá 16 bit. Khoâng coù bit zero trong thanh ghi PSW. JZ vaø JNZ test noäi dung thanh ghi ACC cho ñieàu khieån nhaûy. Leänh DJNZ (nhaûy neáu khaùc 0) ñöôïc duøng ñeå ñieàu khieån voøng laëp. Ñeå voøng laäp thi haønh N laàn, naïp bieán ñeám vôùi N vaø ñaët DJNZ ôû cuoái voøng laëp ñeå baét ñaàu voøng laëp. Ví duï voøng laëp sau thi haønh 10 laàn: MOV R0,#10 ; LOOPP: (baét ñaàu voøng laëp)
  8. . . . (keát thuùc voøng laëp) DJNZ R7, LOOP ; (tieáp tuïc) Leänh CJNZ (so saùnh vaø nhaûy neáu khoâng baèng) cuõng duøng ñeå ñieàu khieån voøng laëp. Hai bytes ñöôïc xaùc ñònh trong vuøng toaùn haïng cuûa leänh vaø leänh nhaûy seõ thi haønh neáu hai bytes naøy khaùc nhau. Ví duï, neáu moät kyù töï ñöôïc ñoïc vaøo thanh ghi ACC töø coång noái tieáp vaø nhaûy ñeán nhaõn TERMINAL neáu kyù töï ñoïc vaøo laø CONTROL-C (03H) . CJNE A, #03, SKIP ; SJMP TERMINAL ; SKIP: (tieáp tuïc) Leänh jump chæ xaûy ra khi A=03H. Moät öùng duïng khaùc cuûa leänh naøy laø so saùnh lôùn hôn vaø beù hôn. Hai byte trong mieàn toaùn haïng laø nhöõng soá khoâng daáu. Neáu toaùn haïng ñaàu nhoû hôn toaùn haïng thöù hai thì côø carry ñöôïc set. Neáu toaùn haïng ñaàu lôùn hôn hoaëc baèng toaùn haïng thöù hai thì côø carry ñöôïc xoùa. Ví duï neáu muoán nhaûy ñeán BIG neáu ACC lôùn hôn hoaëc baèng 20H, ta coù caùc leänh sau: CJNE A,#20H,$+3 JNC BIG Kyù hieäu dollars “$” laø moät kyù hieäu ñaët bieät cuûa trình bieân dòch thay theá cho ñòa chæ cuûa leänh hieän thôøi. Vì CJNE laø moät leänh 3-bytes, “$+3” laø ñòa chæ cuûa leänh tieáp theo.
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
3=>0