Tải bản đầy đủ (.pdf) (32 trang)

Tài liệu Lập trình hợp ngữ_chương 13 docx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (171.21 KB, 32 trang )

1
1. Giới thiệu
2. Sơ đồ khối và chân
3. Tổ chức bộ nhớ
4. Các thanh ghi chức năng đặc biệt (SFR)
5. Dao động và hoạt động reset
6. Tập lệnh
7. Các mode định địa chỉ (addressing modes)
8. Lập trình IO
9. Tạo trễ
10.Lập trình Timer/Counter
11.Giao tiếp nối tiếp
12.Lập trình ngắt
13.
13.
L
L


p tr
p tr
ì
ì
nh h
nh h


p ng
p ng



2
EDITOR
PROGRAM
ASSEMBLER
PROGRAM
LINKER
PROGRAM
OH
PROGRAM
Myfile.asm
Myfile.obj
Other obj file
Myfile.hex
Myfile.lst
Myfile.abs
Trình dịch ASM51
Trình liên kết RL51
Trình soạn thảo
Trình dịch sang HEX
HEXTOBIN
PROGRAM
Myfile.bin
Trình dịch sang BIN
3
13-1. Cấu trúc chương trình Assembly
#INCLUDE "8051EQU.INC" ;include predefined constants
ORG 0H ;reset routine ;locate routine at 00H
LJMP MAIN ;jump to MAIN
;place interrupt routines at appropriate memory locations
ORG 03H ;external interrupt 0

RETI ;or LJMP EX0ISR if enabled
ORG 0BH ;timer 0 interrupt
RETI ;or LJMP T0ISR if enabled
ORG 13H ;external interrupt 1
RETI ;or LJMP EX1ISR if enabled
ORG 1BH ;timer 1 interrupt
RETI ;or LJMP T1ISR if enabled
4
ORG 23H ;serial port interrupt
RETI ;or LJMP SPISR if enabled
ORG 30H ;locate beginning of rest of program
INITIALIZE: ;set up control registers
MOV TCON,#xxH
MOV TMOD,#xxH
MOV PSW,#xxH
MOV IE,#xxH
RET
DELAY:
RET
ISR:
RETI
5
Other Subroutines:
RET
Other ISR Subroutines:
RET
MAIN:
ACALL INITIALIZE

SJMP $

END
6
13-2. Khuôn dạng chương trình hợp ngữ
Các chương trình hợp ngữ chứa:
•Lệnh (instruction)
•Chỉ dẫn (directive)
• Điều khiển (control)
• Chú thích (comment)
[Label:] mnemonic [operand][,operand][…] [;comment]
7
13-2-1. Trường nhãn
• Nhãn biểu thị địa chỉ của lệnh (hoặc dữ liệu) theo sau
• Phân biệt với ký hiệu, nhãn là 1 loại ký hiệu & được nhận
dạng bằng dấu :
• Các ký hiệu: EQU, SEGMENT, BIT, DATA
• VD:
PARAMETER EQU 500
PORTA EQU 0101H
START: MOV A,#0FFH
8
13-2-2. Trường mã gợi nhớ
•Mã gợi nhớ của lệnh: ADD, MOV, DIV, INC,…
•Mã gợi nhớ của chỉ dẫn: ORG, EQU, DB,…
9
13-2-3. Trường toán hạng
• Theo sau trường mã gợi nhớ
•Chứa địa chỉ hoặc dữ liệu mà lệnh sử dụng
[Label:] mnemonic [operand][,operand][…] [;comment]
10
13-2-4. Trường chú thích

• Các ghi chú để làm rõ chương trình
•Bắt đầu bằng dấu ;
[Label:] mnemonic [operand][,operand][…] [;comment]
11
13-2-5. Các ký hiệu đặc biệt
•A, R0ÆR7, DPTR, PC, C, AB, $
VD:
•JNBTI,$ ≡ HERE: JNB TI, HERE
tránh dùng 1 nhãn
12
13-2-6. Địa chỉ gián tiếp
•Trường toán hạng có thể xác định 1 thanh ghi mà nội dung
thanh ghi là địa chỉ của dữ liệu
•@ chỉ ra một địa chỉ gián tiếp và thanh ghi theo sau có thể là
R0 hoặc R1, DPTR hay PC tùy lệnh cụ thể
ADD A,@R0 (1)
MOVC A,@A+PC (2)
13
13-2-7. Dữ liệu tức thời
•Các lệnh sử dụng kiểu định địa chỉ tức thời cung cấp dữ liệu
trong trường toán hạng
•Dữ liệu tức thời được đứng trước bởi dấu #
CONST EQU 100
MOV A,#0DAH
ORL 50H, #CONST
14
13-2-8. Địa chỉ dữ liệu
•Các lệnh sử dụng kiểu định địa chỉ trực tiếp và yêu cầu 1 địa
chỉ của bộ nhớ dữ liệu trên chip (00H-7FH) hoặc địa chỉ của 1
thanh ghi chức năng đặc biệt SFR (80H-0FFH) trong trường

toán hạng
• MOV A, SBUF ;≡ MOV A, 99H
• MOV A, 5CH
15
13-2-9. Địa chỉ bit
• Đặc trưng mạnh của 8051 là khả năng truy xuất bit riêng rẽ
mà không cần lập mặt nạ trên các byte
• 3 cách xác định địa chỉ bit trong một lệnh:
1. Địa chỉ bit đã biết
2. Dùng toán tử dot (.) giữa địa chỉ byte và vị trí bit
3. Dùng ký hiệu tiền định nghĩa
VD:
SETB 0E7H
SETB ACC.7
JNB TI,$ JNB 99H,$
16
13-2-10. Địa chỉ của lệnh
•Một địa chỉ của lệnh được dùng trong trường toán hạng cho
các lệnh nhảy
• Địa chỉ của lệnh thường được cho dưới dạng các nhãn
VD:
HERE:

SJMP HERE
•Bao gồm các lệnh nhảy tương đối (SJMP và các lệnh nhảy có
đk), các lệnh nhảy và gọi tuyệt đối (AJMP, ACALL), các lệnh
nhảy và gọi dài (LJMP, LCALL)
17
13-2-11. Các lệnh nhảy và gọi tổng quát
LOC OBJ LINE SOURCE

1234 1 ORG 1234H
1234 04 2 START: INC A
1235 80FD 3 JMP START
12FC 4 ORG START+200
12FC 4134 5 JMP START
12FE 021301 6 JMP FINISH
1301 04 7 FINISH: INC A
8END
18
13-3. Đánh giá biểu thức trong thời gian dịch
1. Cơ số: binary - B, octal - O or Q, decimal - D or nothing,
hexa - H
2. Chuỗi ký tự: ‘ ‘
3. Các toán tử số học: +, -, *, /, MOD
4. Các toán tử logic: OR, AND, XOR, NOT
5. Các toán tử đặc biệt: SHR, SHL, HIGH, LOW, ( )
6. Các toán tử quan hệ: EQ, NE, LT, LE, GT, GE
7. Ưu tiên của các toán tử
19
13-4. Các chỉ dẫn
• Điều khiển trạng thái của trình dịch hợp ngữ
(ORG, END, USING)
• Định nghĩa ký hiệu
(SEGMENT, EQU, SET, DATA, IDATA, XDATA, BIT,
CODE)
•Khởi động/Dành trước vùng nhớ
(DS, DBIT, DB, DW)
• Liên kết chương trình
(PUBLIC, EXTRN, NAME)
•Lựa chọn segment

(RSEG, CSEG, DSEG, ISEG, BSEG, XSEG)
20
13-4-1. Chỉ dẫn điều khiển trạng thái
ORG (Set origin) ORG expression
•Chỉ dẫn thay đổi nội dung bộ đếm vị trí để thiết lập 1 gốc mới
của chương trình cho các phát biểu theo sau
• ORG 100H ;Bộ đếm vị trí = 100H
• ORG ($+1000H)
END Phát biểu cuối cùng của chương trình nguồn
USING expression thông báo cho ASM51 về dãy thanh ghi
tích cực hiện hành, AR0-7 thay cho R0-7
•USING 3
•PUSH AR7 ;dịch thành PUSH 1FH
•USING 1
•PUSH AR7 ;dịch thành PUSH 0FH
21
13-4-2. Chỉ dẫn định nghĩa ký hiệu
Symbol SEGMENT segment_type
Các loại segment (các không gian bộ nhớ) cho 8051:
•CODE (segment chương trình hay mã)
• XDATA
• DATA
•IDATA
•BIT
VD: EPROM SEGMENT CODE
Note: khai báo này chỉ đơn giản khai báo EPROM là gì. Còn để
sử dụng, ta phải dùng RSEG
22
symbol EQU expression
Gán giá trị số cho tên của ký hiệu

VD:
N27 EQU 27
HERE EQU $
CR EQU 0DH ; xuống dòng
MESSAGE DB ‘this is a message’
LENGTH EQU $ - MESSAGE
23
Chú ý:
FLAG1 EQU 05H
FLAG2 BIT 05H
SETB FLAG1
SETB FLAG2
MOV FLAG1,#0
MOV FLAG2,#0
Æerror ”data segment address expected”
24
13-4-3. Khởi động/dành trước vùng nhớ
DS (define storage): khuôn dạng:
[Label:] DS expression
• Dành trước vùng nhớ tính bằng byte, chỉ dẫn này dùng cho bất
kỳ loại segment nào, trừ BIT
DSEG AT 30H ;đặt trong segment dữ liệu
LENGTH EQU 40 ;
BUFFER DS LENGTH ;dành trước 40 bytes
Xóa vùng đệm trên:
MOV R7, #LENGTH
MOV R0, #BUFFER
LOOP: MOV @R0, #0
DJNZ R7, LOOP
25

• $Tạo vùng đệm 1000 bytes trong bộ nhớ ngoài ở địa chỉ bắt
đầu là 4000H; xóa vùng đệm vừa tạo.

×