Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 21 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
21
Dung lượng
158,77 KB
Nội dung
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 ;