Thông tin tài liệu
Lập trình hợp ngữ cho VĐK 8051 Bài Bộ mơn TĐ Khoa KTĐK Các chủ đề • Mã máy • Cá chế độ đị h đị Các hế định địa hỉ ủ 8051 • Các lệnh Jump, Loop, Call • Chương trình g • Các vòng lặp tạo thời gian giữ chậm đơn giản Mã đối tượng 8051 • Trình hợp dịch chuyển mã hợp ngữ sang mã máy/mã đối tượng • Mã đối tượng dãy dài lệnh máy • Mỗi lệnh máy nhiều byte y g • Mỗi lệnh máy giá trị nhị phân viết dạng ký hiệu số Hex Mã đối tượng 8051 • Trình hợp dịch cung cấp tệp lst p hợp dịch • Lệnh dịch g y sang mã máy theo dòng viết Mã đối tượng 8051 Các chế độ định địa 8051 • CPU truy cập liệu theo số cách sau – Dữ liệu xác định trực tiếp câu lệnh ế – Sử dụng chế độ định địa khác để lưu giữ liệu vào nhớ mã lệnh nhớ liệu • Có chế độ định địa ế – – – – – Tức thời Thanh ghi Trực tiếp Gián tiếp qua ghi số hỉ ố Chế độ định địa tức thời • Toán hạng (dữ liệu) xác định trực tiếp câu lệnh (mã lệnh) ( ) • Tốn hạng số, nhận hợp dịch • Trước liệu tức thời phải có dấu “#” ấ • Ví dụ: 2.Chế độ định địa qua ghi • Bao gồm ghi sử dụng để lưu liệu • Đưa tốn hạng ghi chuyển vào ghi câu lệnh • Thanh ghi nguồn đích phải phù hợp kích thước • Do khơng thể có lệnh chuyển từ ghi tới ghi ới ộ h h hi – Mov R4, R7 ; không hợp lệ – Kiểm tra danh sách lệnh trước sử dụng – Hợp dịch gây lỗi trường hợp (…) 3.Chế độ định địa trực tiếp • Th hiệ với liệu lưu giữ RAM Thực ới liệ đ l iữ ghi – Mọi vị trí nhớ truy cập thông qua địa – T Tương t với thiết bị ngoại vi (SFR) th h ghi, cổng tự ới i i (SFR), hi ổ 8051 • Sử dụng trực tiếp địa toán hạng lệnh – Mov a, 40H a ; A ← mem[40H] (khơng có dấu # trước 40H) • Địa ghi địa trực tiếp – Mov A, 4H – Mov A R4 A, ; 4H địa R4 ; giống lệnh trước có khác ; mã lệnh • Mọi ghi SFR có địa • Ngăn xếp 8051 sử dụng chế độ định địa trực tiếp 4.Chế độ gián tiếp qua ghi ế ế • Thanh ghi sử dụng trỏ – Thanh ghi lưu địa liệu • Chỉ có R0, R1 DPTR sử dụng cho mục đích • R0 R1 sử dụng cho nhớ (256 byte bao gồm SFR) từ 00H tới FFH nhớ – Mov A, @R0 – Mov @R1, A – Movx A @R0 A, ; A←internal_mem[R0] ; A←internal_mem[R1] ; A←external_mem[R0] A←external mem[R0] • DPTR sử dụng cho nhớ ngoài, cho nhớ – Movx A, @DPTR ; A←external_mem[DPTR] A A←external mem[DPTR] – Movx @DPTR, A ; ngược lại 5.Chế độ định địa chỉ số • Sử dụng ghi để lưu trỏ sở ghi lưu giá trị offset • Địa thực sum=base+offset – Chuyển byte mã lệnh có liên quan tới DPTR vào A Địa thực DPTR +A • Movc A, @A+DPTR ;A← ext_code_mem[(A+PC)] • Được sử dụng phổ biến để truy cập liệu bảng, mảng liệu, tạo tham số … nhớ chương trình (ROM) ố Ví dụ chế độ định địa chỉ số • Lập trình để đọc giá trị x từ P1 gửi x2 tới P2 ORG ; assembler directive mov DPTR #LUT ; 300H i th LUT address DPTR, is the dd mov A, #0FFH mov P1, A ; program the p P1 to input data p g port p Again: mov A, P1 ; read x movc A, @A+DPTR ; get x2 from LUT mov P2 A ; output x2 to P2 P2, sjmp again ; for (1) loop ORG 300H ;Look-up Table starts at 0x0300 LUT: LUT DB 1, 4, 9, 16, 25, 36, 49, 64, 81 0, 16 25 36 49 64 Lệnh điều khiển chương trình • • • Rẽ nhánh không điều kiện – Ajmp addr11 ; nhảy tuyệt đối – Ljmp addr16 j p ; nhảy dài ( byte = 1byte code + 2byte địa đích) y (3 y y y ) – Sjmp rel ; nhảy ngắn tới địa thực – Jmp @A+DPTR ; nhảy gián tiếp Rẽ nhánh có điều kiện – Jz jnz rel Jz, ; nhảy ngắn có điều kiện tới địa thực – Djnz rel ; giảm nhảy khác – Cjne rel ; so sánh nhảy khơng Gọi chương trình – Acall addr11 ; gọi chương trình tuyệt đối ố – Lcall addr16 ; gọi chương trình dài – Ret ; trở từ lệnh gọi chương trình – Reti ; trở từ ISV Rẽ nhánh chương trình - Địa đích • Địa đích là: – Tuyệt đối: địa vật lý đầy đủ • Addr16: địa 16 bit, địa 64K ấ • Addr11: địa 11 bit, địa 2K – Thực: địa thực (tăng giảm) -128 byte tới 127 byte b t từ vị t í mã lệnh hiệ t i ị trí ã lệ h • Tính địa đích để nhảy – PC lệnh + địa thực ệ p ị ự – Đối với nhảy lùi, bỏ qua cờ nhớ • PC=15H, SJMP 0FEH ị • Địa 15+FE = 13H • Về nhảy tới lệnh trừ (so với lệnh thời) Các lệnh nhảy có điều kiện • jz, jnz: điều kiện A==0 – Kiểm tra để biết A có – Jz nhảy A=0 jnz nhẩy A≠0 • djnz: giảm nhảy không – dinz Rn, rel – djnz direct, rel direct • jnc: điều kiện cờ nhớ CY – jc rel – Jnc rel • Cjne: so sánh nhảy không – Cjne A, direct, rel – Cjne Rn #data, rel Rn, #data – cjne @Rn, #data, rel Vòng lặp sử dụng lệnh djnz • Cộng vào A 10 lần AGAIN: mov A, #0 ; xoá A mov R2 #10 ; R2 ← 10 R2, add A, #03 ; cộng vào ghi A djnz R2, AGAIN ; lặp lại R2==0 mov R5 A ; l R5, lưu kết vào R5 ả • Lặp với vòng lặp sử dụng djnz loop1: loop2: mov R3, #100 mov R2, #10 ; lặp lại 1000 lần nop ; không thực djnz R2, loop2 ; lặp lại loop2 R2==0 j , p ặp p djnz R3, loop1 ; lặp lại loop1 R3==0 Các lệnh nhảy khơng điều kiện • LJMP addr16 – Lệnh nhảy dài Nhảy tới địa đich byte dài – Lệnh byte • SJMP rel l – Nhảy tới địa thực từ PC+127 tới PC-128 – Nhảy tới PC+127 (00H – 7FH) – Nhảy tới PC-128 (80H - FFH) Các lệnh gọi • Chương trình g – Có thể sử dụng lại đoạn lệnh • LCALL addr16 – Lệnh gọ dài Đây lệnh byte ệ gọi y ệ y – Gọi chương trình nằm khơng gian mã lệnh 64K – PC lưu ngăn xếp • ACALL addr11 – – – – Lệnh byte Gọi chương trình khơng gian mã lệnh 2K Giống ội dung LCALL Giố nội d ủ Tiết kiệm nhớ ROM cho thiết bị có nhớ ROM nhỏ 64K • RET – Trở từ vị trí gọi chương trình con, Nạp lại PC từ ngăn xếp Chu Ch kỳ má máy • Số chu kỳ clock cần sử dụng để thực lệnh • Với 8051, chu kỳ lệnh cần 12 chu kỳ clock • Thời gian chu kỳ máy – Tmc=số clock chu kỳ máy/ tần số clock ỳ y – Với 8051 sử dụng tần số clock 11.0592MHz • Tmc=12/11.0592 = 1,085às ã Thi gian thc hin mt lệnh – Tinstr=chu kỳ máy cần thực lệnh * Tmc – Với lệnh trống, chu kỳ máy =1 Do ú ã Tinstr = 1*1.085 =1,085às Cỏc vũng lp giữ chậm đơn giản • Tìm thời gian giữ chậm chương trình DELAY: HERE: mov R3, #200 ; chu kỳ máy djnz R3, HERE ; chu kỳ máy RET ; chu kỳ máy • Tính – Tổng số chu kỳ máy =200*2+1+1=402 – Thời gian =402*1 085às (clk=11 0592) =402 1,085às (clk=11.0592) = 436,17às ã Tương tự vậy, thời gian giữ chậm nhận với cách tổ chức vòng lặp ấ ổ tương ứng • Để có thời gian giữ chậm lâu sử dụng hơn, định thời Ví dụ tạo thời gian trễ $NOMOD51 #include ; ; -ORG 0h mov A,#55h Start: mov P2,A acall DELAY CPL A sjmp Start DELAY: ; giu cham 1s mov R5, #4 L1: mov R6, #240 ; C0 L2: mov R7, #250; C1 L3: NOP NOP DJNZ R7 L3 R7, DJNZ R6, L2 ; C2 DJNZ R5, L1 ; C3 RET END • • • • • Thời gian thực vòng lặp L3: T1 = 4*250*1,085 = 1085 us L2 thực lại L3 240 lần: T2 = 240*1085 = 260400 us Thời gian thực lệnh C1 C2 dầu cuối L2: T3 = 3*240*1,085 Tổng thời gian L2, L3 thực T4 = T2 + T3 L1 thực lại L2, L3 lần: ệ ầ T5 = 4* T4 ... tượng 8051 • Trình hợp dịch cung cấp tệp lst p hợp dịch • Lệnh dịch g y sang mã máy theo dòng viết Mã đối tượng 8051 Các chế độ định địa 8051 • CPU truy cập liệu theo số cách sau – Dữ liệu xác... đị Các hế định địa hỉ ủ 8051 • Các lệnh Jump, Loop, Call • Chương trình g • Các vịng lặp tạo thời gian giữ chậm đơn giản Mã đối tượng 8051 • Trình hợp dịch chuyển mã hợp ngữ sang mã máy/mã đối... ext_code_mem[(A+PC)] • Được sử dụng phổ biến để truy cập liệu bảng, mảng liệu, tạo tham số … nhớ chương trình (ROM) ố Ví dụ chế độ định địa chỉ số • Lập trình để đọc giá trị x từ P1 gửi x2 tới P2 ORG ;
Ngày đăng: 23/12/2013, 20:15
Xem thêm: Tài liệu Lập trình hợp ngữ cho bộ VĐK 8051 pptx, Tài liệu Lập trình hợp ngữ cho bộ VĐK 8051 pptx