Mục Lục
Lời cảm ơn.7
MỞ ĐẦU .8
Phần I: Tổng quan về VđK 8051 và Các thiết bị ngoại vi.9
CHƯƠNG I: VI ĐIỀU KHIỂN 8051.9
I. KHÁI NIỆM CHUNG VỀ VI ĐIỀU KHIỂN.9
I.1 Sù ra đời.9
I.2 Điểm khác biệt giữa VĐK và VXL dùng chung.9
I.3 Tiêu chuẩn lùa chọn 1 bé vi điều khiển.10
II. VI ĐIỀU KHIỂN 8051.10
II.1 Sơ đồ khối của 8051.10
II.2 Sơ đồ và chức năng các chân của 8051.11
II.2.1 Sơ đồ các chân.11
II.2.2 Chức năng của các chân.11
II.2.3 Cấu trúc của các cổng xuất/nhập.14
II.3 Tổ chức bộ nhớ 8051.14
II.3.1 Vùng RAM đa mục đích.15
II.3.2 Vùng RAM định địa chỉ bit.15
II.3.3 Các dãy thanh ghi.15
II.3.4 Các thanh ghi chức năng đặc biệt.15
II.3.4.1 Từ trạng thái chương trình PSW.15
II.3.4.2 Thanh ghi B.16
II.3.4.3 Con trá stack.16
II.3.4.4 Con trỏ dữ liệu.17
II.3.4.5 Các thanh ghi port.17
II.3.4.6 Các thanh ghi định thời TMOD và TCON.17
II.3.4.7 Thanh ghi của cổng nối tiếp.19
II.3.4.8 Các thanh ghi ngắt.20
II.3.4.9 Thanh ghi điều khiển nguồn.20
II.4 Bộ nhớ ngoài.21
II.4.1 Truy xuất bộ nhớ chương trình ngoài.21
II.4.2 Truy xuất bé nhớ dữ liệu ngoài.22
II.4.3 Hoạt động Reset.23
III. TẬP LỆNH CỦA 8051.24
III.1 Các kiểu định địa chỉ.24
III.1.1 Định địa chỉ thanh ghi.24
III.1.2 Định địa chỉ trực tiếp.24
III.1.3 Định địa chỉ gián tiếp.25
III.1.4 Định địa chỉ tức thời.26
III.1.5 Định địa chỉ tương đối.26
III.1.6 Định địa chỉ tuyệt đối.26
III.1.7 Định địa chỉ dài.27
III.1.8 Định địa chỉ chỉ số.27
III.2 Các loại lệnh.27
III.2.1 Lệnh số học.27
III.2.2 Các lệnh Logic.28
III.2.3 Nhóm lệnh di chuyển dữ liệu.30
III.2.4 Các lệnh xử lý bit.31
III.2.5 Các lệnh rẽ nhánh.31
III.2.6 Nhóm lệnh dịch, quay.33
III.2.7 Các lệnh làm việc với Stack.33
IV. HOẠT ĐỘNG ĐỊNH THỜI.33
IV.1 Các bộ định thời của 8051.33
IV.2 Thanh ghi chế độ bộ định thời.34
IV.2.1 Các chế độ định thời và cờ tràn.34
IV.2.1.1 Chế độ định thời 13-bit.34
IV.2.1.2 Chế độ định thời 16-bit.34
IV.2.1.3 Chế độ tự nạp lại 8-bit.34
IV.2.1.4 Chế độ định thời chia xẻ.35
IV.3 Nguồn xung clock định thời .35
V. HOẠT ĐỘNG NGẮT.35
V.1 Tổ chức ngắt của 8051.35
V.1.1 Cho phép và không cho phép ngắt. .35
V.1.2 Ưu tiên ngắt.35
V.1.3 Chuỗi vòng.36
V.2 Xử lý ngắt.36
V.3 Các vector ngắt.36
V.4 Các ngắt do port nối tiếp .36
V.5 Các ngắt ngoài.37
VI. LẬP TRÌNH HỢP NGỮ.37
VI.1 Trình dịch hợp ngữ.37
VI.2 Khuôn dạng của chương trình hợp ngữ.37
VI.3 Cấu trúc chương trình.38
VI.4. Tổ chức chương trình.38
CHƯƠNG II: CÁC THIẾT BỊ NGOẠI VI.39
I. ĐỒNG HỒ THỜI GIAN THỰC DS12887.39
I.1 Hoạt động.40
I.2 Chức năng các chân .41
I.3 Bản đồ địa chỉ. .43
I.4 Các thanh ghi điều khiển.46
I.5 Minh họa ghép nối giữa DS12887 với 8051.49
II. THIẾT BỊ HIỂN THỊ LCD.49
II.1 LCD.49
II.2 Minh họa ghép nối giữa LCD với 8051.52
III. ADC0809.52
III.1 Sơ đồ các chân của ADC0809.53
III.2 Các bước lập trình cho ADC0809.54
III.3 Minh họa ghép nối ADC0809 với 8051.55
IV.BÀN PHÍM HEX.55
IV.1 Minh họa ghép nối bàn phím với 8051.56
V. GIẢI MÃ ĐỊA CHỈ 74LS138.57
VI. CHỐT ĐỊA CHỈ 74HC373.57
V.1.Sơ đồ chân của 74HC373.57
V.2 Hoạt động của 74LS373.57
PHẦN II. THIẾT KẾ.59
CHƯƠNG I: THIẾT KẾ PHẦN CỨNG.59
I. Mạch nguyên lý.59
II.Sơ đồ mạch.61
CHƯƠNG II: THIẾT KẾ PHẦN MỀM.62
I. Chuơng trình quét bàn phím HEX.62
II. Đọc thời gian từ đồng hồ thời gian thực RTC DS12887.67
III. ĐiÒu khiển ADC0809 để thực hiện chuyển đổi.74
KẾT LUẬN.78
TÀI LIỆU THAM KHẢO.79
82 trang |
Chia sẻ: maiphuongdc | Lượt xem: 1919 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Đồ án Thiết kế mạch thí nghiệm dùng Vi điều khiển 80C51 phối ghép với các thiết bị ngoại vi : LCD, ADC0809, RTC DS12887 và bàn phím số HEX, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
hoặc các thanh ghi trên chip. Mét byte thêm vào tiếp theo opcode dùng để xác định địa chỉ. Trong 8051 có 128 byte bộ nhớ RAM. Bộ nhớ RAM được gán địa chỉ từ 00H đến FFH và được phân chia nh sau:
- Các ngăn nhớ từ 00H đến 1FH được gán cho các dãy thanh ghi và ngăn xếp.
- Các ngăn nhớ từ 20H đến 2FH được dành cho không gian định địa chỉ bit để lưu dữ liệu theo từng bit.
- Các ngăn nhớ từ 30H đến 7FH là không gian để lưu dữ liệu có kích thước 1 byte.
Chế độ định địa chỉ trực tiếp có thể truy cập toàn bộ không gian của bộ nhớ RAM. Tuy nhiên, chế độ này thường được dùng để truy cập các ngăn nhớ RAM từ 30H đến 7FH, vì thực tế đối với không gian nhớ dành cho dãy thanh ghi thì đã được truy cập bằng tên thanh ghi nh R0- R7. Ở chế độ định địa chỉ trực tiếp , địa chỉ ngăn nhớ RAM chứa dữ liệu là toán hạng của lệnh .
Ví dô :
MOV R0, 40 ; sao nội dung ngăn nhớ 40H của RAM vào R0
MOV R4, 7FH ; chuyển nội dung ngăn nhớ 7FH vào R4 .
Một ứng dụng quan trọng của chế độ định địa chỉ trực tiếp là ngăn xếp. Trong họ 8051, chỉ có chế độ định địa chỉ trực tiếp là được phép cất và lấy dữ liệu từ ngăn xếp.
III.1.3 Định địa chỉ gián tiếp (Indirect addressing)
Ở chế độ này, thanh ghi được dùng để trỏ đến dữ liệu có trong bộ nhớ. Nếu dữ liệu có trên chip CPU thì chỉ các thanh ghi R0 và R1 mới được sử dụng, và như vậy cũng có nghĩa là không thể dùng các thanh ghi R2-R7 để trỏ đến địa chỉ của toán hạng ở chế độ định địa chỉ này. Nếu R0 và R1 được dùng làm con trỏ, nghĩa là chúng lưu địa chỉ của ngăn nhớ RAM thì trước các thanh ghi cần đặt dấu "@" như các ví dụ sau:
MOV A, @R0 ; chuyển ngăn nhớ RAM có địa chỉ ở R0 vào A
MOV @R1, B ; chuyển B vào ngăn nhớ RAM có địa chỉ ở R1
Chó ý: ở đây R0 còng nh R1 đều có dấu "@" đứng trước. Nếu không có dấu "@" đứng trước thì đó là lệnh chuyển nội dung thanh ghi R0 và R1 chứ không phải dữ liệu ngăn nhớ có địa chỉ trong R0 và R1. Mét trong những ưu điểm của chế độ định địa chỉ gián tiếp là cho phép truy cập dữ liệu linh hoạt hơn so với chế độ định địa chỉ trực tiếp. Tuy nhiên R0 và R1 là các thanh ghi 8 bit, nên chúng chỉ được phép truy cập đến các ngăn nhớ RAM trong, từ địa chỉ 30H đến 7FH và các thanh ghi SFR. Trong thực tế, có nhiều trường hợp cần truy cập dữ liệu được cất ở RAM ngoài hoặc không gian ROM trên chip. Trong những trường hợp đó chúng ta cần sử dụng thanh ghi 16 bit DPTR.
III.1.4 Định địa chỉ tức thời (Immediate addressing)
Khi toán hạng là một hằng số thay vì là một biến, hằng số này có thể đưa vào lệnh và đây là byte dữ liệu tức thời.
Trong hợp ngữ, các toàn hạng tức thời được nhận biết nhờ vào ký tù '# ' đặt trước chúng. Toán hạng này có thể là một hằng số học, một biến hoặc một biểu thức số học sử dụng các hằng số, các ký hiệu và các toán tử. Trình dịch hợp ngữ tính giá trị và thay thế dữ liệu tức thời vào trong lệnh.
Ví dụ lệnh : MOV A, #12 ; ;Nạp giá trị 12(OCH) vào thanh chứa A
Tất cả các lệnh sử dụng kiểu định địa chỉ tức thời đều sử dụng hằng dữ liệu 8 bit làm dữ liệu tức thời. Có một ngoại lệ khi ta khởi động con trỏ dữ liệu 16-bit DPTR, hằng địa chỉ 16 bit được cần đến.
III.1.5 Định địa chỉ tương đối (Relative addressing)
Kiểu định địa chỉ tương đối chỉ được sử dụng cho các lệnh nhảy. Một địa chỉ tương đối là một giá trị 8 bit có dấu. Giá trị này được cộng với một bộ đếm chương trình để tạo ra địa chỉ của lệnh tiếp theo cần thực thi. Định địa chỉ tương đối có điểm lợi là cung cấp cho ta mã không phụ thuộc vào vị trí, nhưng lại có điểm bất lợi là các đích nhảy bị giới hạn trong tầm.
III.1.6 Định địa chỉ tuyệt đối (Absolute addressing)
Kiểu định địa chỉ này được sử dụng với các lệnh ACALL và AJMP. Đây là các lệnh 2 byte cho phép rẽ nhánh chương trình trong trang 2k hiện hành của bộ nhớ chương trình bằng cách cung cấp 11 bit thấp của địa chỉ đích. Trong đó có 3 bit cao (A8-A10) và 8 bit thấp (A0-A7) thành lập byte thứ 2 của lệnh.
III.1.7 Định địa chỉ dài (Long addressing)
Kiểu định địa chỉ dài chỉ được dùng cho các lệnh LCALL và LJMP. Các lệnh 3 byte này chứa địa chỉ đích 16 bit. Lợi Ých của kiểu định địa chỉ này là sử dụng hết toàn bộ không gian nhớ chương trình 64K, nhưng lại có điểm bất lợi là lệnh dài đến 3-byte và phụ thuộc vào vị trí.
III.1.8 Định địa chỉ chỉ sè (Indexed addressing)
Chế độ định địa chỉ chỉ số được sử dụng rộng rãi khi truy cập các phần tử dữ liệu của bảng trong không gian ROM chương trình của 8051. Lệnh được dùng cho mục đích này là "MOVC A, @A+DPTR". Thanh ghi 16 bit DPTR và thanh ghi A được dùng để tạo ra địa chỉ của phần tử dữ liệu được lưu trong ROM trên chip. Ở lệnh này, nội dung của A được cộng với nội dung thanh ghi 16- bit DPTR để tạo ra địa chỉ 16 bit.
III.2 CÁC LOẠI LỆNH
III.2.1 Lệnh số học
ADD
A, source
Cộng toán hạng A với nguồn.
A, Rn
(A)¬ (A) + (Rn)
A, Direct
(A)¬ (A) + (Direct)
A, @Ri
(A)¬ (A) + ((Ri))
A, #data
(A)¬ (A) + #data
ADDC
A, source
Cộng có cờ nhí (add with carry)
A, Rn
(A)¬ (A) + (C)+ (Rn)
A, Direct
(A)¬ (A) + (C)+ (Direct)
A, @Ri
(A)¬ (A) + (C)+ ((Ri))
A, #data
(A)¬ (A) + (C)+ #data
SUBB
A, source
Trừ số có mượn
A, Rn
(A)¬ (A) - (C) - (Rn)
A, Direct
(A)¬ (A) - (C) - (Direct)
A, @Ri
(A)¬ (A) - (C) - ((Ri))
A, #data
(A)¬ (A) - (C) - #data
INC
Byte
Tăng bởi 1
A
(A) ¬ (A) + 1
Rn
(Rn) ¬ (Rn) + 1
Direct
(Direct) ¬ (Direct) + 1
@Ri
((Ri)) ¬ ((Ri)) + 1
DEC
Byte
Giảm bởi 1
A
(A) ¬ (A) - 1
Rn
(Rn) ¬ (Rn) - 1
Direct
(Direct) ¬ (Direct) - 1
@Ri
((Ri)) ¬ ((Ri)) – 1
MUL
A B
Nhân
(B) ¬ High byte of (A) x (B) : byte cao của kết quả phép nhân được chứa trong thanh ghi B
(A) ¬ Low byte of (A) x (B) : byte thấp của kết quả nhân được chứa trong thanh ghi A.
DIV
A B
Chia
(A) ¬ Quotient of (A) / (B) : thương số của phép chia được chứa trong thanh ghi A.
(B) ¬ Remainder of (A) / (B) : phần dư được chứa trong thanh ghi B.
III.2.2 Các lệnh Logic
ANL
ANL
A, #data
A, Direct
(A)¬ (A) AND + (source)
A, @Ri
A, Rn
Direct , A
(Direct) ¬ (Direct) AND (A)
Direct, #data
(Direct) ¬ (Direct) AND #data
ANL
C, bit
(C) ¬ (C) AND (bit)
C, /bit
(C) ¬ (C) AND NOT(bit)
ORL
ORL
A, #data
A, Direct
(A)¬ (A) OR + (source)
A, @Ri
A, Rn
Direct , A
(Direct) ¬ (Direct) OR (A)
Direct, #data
(Direct) ¬ (Direct) OR #data
ORL
C, bit
(C) ¬ (C) OR (bit)
C, /bit
(C) ¬ (C) OR NOT(bit)
XRL
XRL
A, #data
A, Direct
(A)¬ (A) XOR + (source)
A, @Ri
A, Rn
Direct , A
(Direct) ¬ (Direct) XOR (A)
Direct, #data
(Direct) ¬ (Direct) XOR #data
CLR
CLR
A
(A) ¬ 0
C
(C) ¬ 0
CPL
CPL
A
(A) ¬ NOT (A)
C
(C) ¬ NOT (C)
SWAP
A
(A3 - A0) ¨ (A7 - A4)
III.2.3 Nhóm lệnh di chuyển dữ liệu
MOV
MOV
A, #data
(A) ¬ #data
A, Direct
(A) ¬ (Direct)
A, @Ri
(A) ¬ ((Ri))
A, Rn
(A) ¬ (Rn)
MOV
Rn, #data
(Rn) ¬ #data
Rn, Direct
(Rn) ¬ (Direct)
Rn, A
(Rn) ¬ (Rn)
MOV
Direct, #data
(Direct) ¬ #data
Direct, Direct
(Direct) ¬ (Direct)
Direct, @Ri
(Direct) ¬ ((Ri))
Direct, Rn
(Direct) ¬ (Rn)
MOV
@Ri, A
((Ri)) ¬ (A)
@Ri, Direct
((Ri)) ¬ (Direct)
@Ri, #data
((Ri)) ¬ #data
MOV
C, bit
(C) ¬ (bit)
Bit, C
(bit) ¬ (C)
MOV
DPTR, #data16
(DPTR) ¬ #data 16
MOVC
MOVC
A, @A + DPTR
(A) ¬ ((A) + (DPTR))
A, @A + PC
(A) ¬ ((A) + (PC))
MOVX
MOVX
A, @Ri
(A) ¬ ((Ri))
A, @DPTR
(A) ¬ ((DPTR))
@Ri, A
((Ri)) ¬ (A)
@DPTR, A
((DPTR)) ¬ (A)
XCH
XCH
A, Rn
(A) ¬ ® (Rn)
A, Direct
(A) ¬ ® (Direct)
A, @Ri
(A) ¬ ® ((Ri))
XCHD
A, @Ri
(A3 - A0) ¬ ® (R3 - R0)
III.2.4 Các lệnh xử lý bit
CLR
Xóa bit
CLR
C
(C) ¬0
Bit
bit ¬ 0
SETB
Lệnh set bit
SETB
C
(C) ¬ 1
Bit
Bit ¬ 1
CPL
Lệnh đảo bit
CPL
C
(C) ¬ NOT(C)
Bit
bit ¬ NOT(bit)
JC
Label
Nhảy nếu cờ nhớ được set bằng 1
JNC
Label
Nhảy nếu cờ nhớ không được set bằng 1
JB
Bit, label
Nhảy nếu bit được set bằng 1
JBC
Bit, label
Nhảy nếu bit được set bằng 1 và xóa bit
JNB
Bit, label
Nhảy nếu bit không được set bằng 1
III.2.5 Các lệnh rẽ nhánh
· Lệnh nhảy
AJMP
Addr11
Nhảy đến địa chỉ tuyệt đối (Absolute jump - 14 bit(2k))
(PC) ¬ (PC) +2
(PC10 - PC 0) ¬ địa chỉ trong
JMP
@A + DPTR
Nhảy gián tiếp
(PC) ¬ (PC) + (A) + (DPTR)
JNZ
Label
Nhảy nếu nội dung thanh chứa khác 0.
(PC) ¬ (PC) + 2
IF (A) 0 THEN (PC) ¬ (PC) +byte_2
JZ
Label
Nhảy nếu nội dung thanh chứa bằng 0.
(PC) ¬ (PC) + 2
IF (A) = 0 THEN (PC) ¬ (PC) +byte_2
SJMP
Label
Nhảy ngắn (short jump)
(PC) ¬ (PC) +2
(PC) ¬ (PC) + byte_2
LJMP
Addr16
Nhảy dài (Long jump - 16 bits (64K))
(PC) ¬ addr15 ¸ addr0
· So sánh và nhảy ( Compare and Jump)
CJNE
A, Direct, label
A, #data, label
Compare 1st op to 2st and jump to label if not equal
Rn, #data, label
@Ri, #data, label
So sánh giá trị của 2 toán hạng và rẽ nhánh nếu các giá trị của 2 toán hạng không bằng nhau.
· Giảm và nhảy (Decrement and Jump)
DJNZ
Direct, label
Giảm và nhảy nếu khác 0.
(PC) ¬ (PC) +2
Rn, label
(Rn) ¬ (Rn) -1
(Direct) ¬ (Direct) -1
Jump if not zero
· Lệnh điều khiển chương trình con
ACALL
Addr11
Gọi đến địa chỉ tuyệt đối (absolute call - 11bit).
LCALL
Addr16
Gọi chương trình con (Long call - 16bits)
RET
Trở về từ chương trình con (Return from subroutine ).
RETI
Trở về từ trình phục vụ ngắt (Return from ISR).
III.2.6 Nhóm lệnh dịch, quay.
RL A ; Quay trái A
RLC A ;Quay trái A cộng với cờ nhớ
RR A ; Quay phải A
RRC A; Quay phải A cộng với cờ nhớ
III.2.7 Các lệnh làm việc với Stack.
PUSH
Direct
Cất dữ liệu vào stack
(SP) ¬ (SP) -1
((SP)) ¬ (Direct)
POP
Direct
Lấy dữ liệu ra từ stack.
(Direct) ¬ ((SP))
(SP) ¬ (SP) -1
IV.HOẠT ĐỘNG ĐỊNH THỜI
8051 có hai bộ định thời/đếm. Chúng có thể được dùng làm bộ định thời để tạo trễ thời gian hoặc làm các bộ đếm để đếm các sự kiện xảy ra bên ngoài bộ vi điều khiển.
IV.1. Các bộ định thời của 8051
8051 có hai bộ định thời là 8051 cã hai bé ®Þnh thêi lµ Timer 0 và Timer 1. Cả hai bộ định thời Timer0 và Timer1 đều có độ dài 16 bit. Do 8051 có cấu trúc 8 bit, nên mỗi bộ định thời được truy cập dưới dạng hai thanh ghi độc lập là byte thấp và byte cao.
Thanh ghi của bộ Timer 0: Thanh ghi 16 bit của bé Timer 0 được truy cập theo hai byte là byte cao và byte thấp. Thanh ghi byte thấp được gọi là TL0 và thanh ghi byte cao là TH0. Các thanh ghi này có thể được truy cập nh là mọi thanh ghi khác. Ví dụ, lệnh "MOV TL0, #4FH" là chuyển giá trị 4FH vào TL0 - byte thấp của bộ định thời 0.
Thanh ghi của bộ Timer 1: Bộ định thời Timer 1 cũng dài 16 bit và thanh ghi 16 bit còng được chia ra thành hai byte là TL1 và TH1. Các thanh ghi này được truy cập và được đọc giống nh các thanh ghi của bé Timer 0 ở trên.
IV.2. Thanh ghi chế độ bộ định thời TMOD
Cả hai bộ định thời Timer 0 và Timer 1 đều dùng chung 1 thanh ghi được gọi là TMOD để thiết lập các chế độ làm việc khác nhau của bộ định thời. Thanh ghi TMOD là thanh ghi 8 bit gồm có 4 bit thấp dành cho bé Timer 0 và 4 bit cao dành cho bé Timer 1. Trong đó 2 bit thấp của chúng dùng để thiết lập chế độ của bộ định thời, còn 2 bit cao dùng để xác định phép toán.
IV.2.1. Các chế độ định thời và cờ tràn
Do ta có hai bộ định thời trên chip 8051, ta dùng ký hiệu “x” để chỉ bộ định thời 0 hoặc bộ định thời 1. Ví dô : THx có nghĩa là TH0 hoặc TH1 tuỳ theo bộ định thời 0 hay 1.
IV.2.1.1. Chế độ định thời 13-bit (chế độ 0)
Chế độ 0 là chế độ định thời 13- ChÕ ®é 0 lµ chÕ ®é ®Þnh thêi 13-bit cung cấp khả năng tương thích với bộ vi điều khiển tiền nhiệm 8048. Byte cao của bộ định thời THx được ghép cascade với 5-bit thấp của byte thấp của bộ định thời TLx để tạo thành một bộ định thời 13-bit. Ba bit cao của TLx không sử dụng.
IV.2.1.2.Chế độ định thời 16-bit (chế độ 1)
Chế độ 1 là chế độ định thời 16- ChÕ ®é 1 lµ chÕ ®é ®Þnh thêi 16-bit và có cấu hình giống chế độ định thời 13-bit. Xung clock đặt vào các thanh ghi định thời cao và thấp kết hợp (TLx/THx). Khi có xung clock đến, bộ định thời đếm lên: 0000H, 0001H một tràn sẽ xuất hiện khi có sự chuyển số đếm từ FFFFH xuống 0000H, sự kiện này sẽ set cờ tràn bằng 1 và bộ định thời tiếp tục đếm.
IV.2.1.3. Chế độ tự nạp lại 8-bit (chế độ 2)
Chế độ 2 là chế độ tự nạp lại 8-bit. Byte thấp của bộ định thời (TLx) hoạt động định thời 8-bit trong khi byte cao của bộ định thời lưu giữ giá trị nạp lại. Khi số đếm tràn từ FFH xuống 00H, không chỉ cờ tràn của bộ định thời được set lên 1 mà giá trị trong THx còn được nạp vào TLx. Việc đếm sẽ tiếp tục từ giá trị này cho đến khi xảy ra một tràn (FFH xuống 00H).
IV.2.1.4. Chế độ định thời chia xẻ (chế độ 3)
Chế độ 3 là chế độ định thời chia xẻ và có hoạt động khác nhau cho từng bộ định thời. Bộ định thời 0 ở chế độ 3 được chia thành 2 bộ định thời 8-bit hoạt động riêng rẽ TL0 và TH0, mỗi bộ định thời sẽ set các cờ tràn tương ứng TF0 và TF1 khi xảy ra một tràn.
IV.3 NGUỒN XUNG CLOCK ĐỊNH THỜI
Bộ định thời luôn cần có xung đồng hồ để giữ nhịp. Nếu C/T = 0 thì tần số thạch anh trên chip 8051 được làm nguồn cho đồng hồ của bộ định thời. Điều đó có nghĩa là giá trị của tần số thạch anh của 8051 quyết định tốc độ đồng hồ của các bộ định thời 8051. Tần số của bộ định thời luôn bằng 1/12 tần số của thạch anh trên chip 8051. Nếu C/T=1 bộ định thời bây giê đếm sự kiện, số các sự kiện được xác định trong phần mềm bằng cách đọc các thanh ghi định thời (TLx/THx), giá trị 16-bit trong các thanh ghi này tăng theo mỗi sự kiện. Hai chân của port 3 ( P3.4 và P3.5) bây giê trở thành ngõ vào xung clock cho các bộ định thời. Chân P3.4 là ngõ vào xung clock cho bộ định thời, chân P3.5 là ngõ vào xung clock cho bộ định thời 1. Nếu C/T =0 bộ định thời dùng để định thời một khoảng thời gian.
V. HOẠT ĐỘNG NGẮT
V.1 Tổ chức ngắt của 8051
Có 5 nguyên nhân tạo ra ngắt đối với 8051: hai ngắt do bên ngoài, hai ngắt do bộ định thời và một ngắt do port nối tiếp. Khi ta thiết lập trạng thái ban đầu cho hệ thống (gọi là reset hệ thống), tất cả các ngắt đều bị vô hiệu hoá và sau đó chúng được cho phép riêng rẽ bằng phần mềm.
V.1.1 Cho phép và không cho phép ngắt
Mỗi một nguyên nhân ngắt được cho phép hoặc không cho phép riêng rẽ thông qua thanh ghi chức năng đặc biệt định địa chỉ bit. Thanh ghi cho phép ngắt IE có địa chỉ byte là 0A8H. Mỗi mét bit của thanh ghi này cho phép hoặc không cho phép từng nguyên nhân ngắt riêng rẽ, thanh ghi IE đồng thời còn có mét bit toàn cục cho phép hoặc không cho phép ngắt.
V.1.2 Ưu tiên ngắt
Mỗi một nguyên nhân ngắt được lập trình riêng rẽ để có một trong hai mức ưu tiên thông qua thanh ghi chức năng đặc biệt được định địa chỉ bit, thanh ghi ưu tiên ngắt IP, thanh ghi này có địa chỉ là 0B8H.
Khi hệ thống được thiết lập lại trạng thái ban đầu, thanh ghi IP sẽ mặc định đặt tất cả các ngắt ở mức ưu tiên thấp. ý tưởng “ các mức ưu tiên” cho phép một trình phục vụ ngắt được tạm dừng bởi một ngắt khác nếu ngắt mới này có mức ưu tiên cao hơn mức ưu tiên của ngắt hiện đang được phục vụ. Nếu có ngắt với mức ưu tiên cao xuất hiện, trình phục vụ ngắt cho ngắt có mức ưu tiên thấp phải tạm dừng. Ta không thể tạm dừng một chương trình phục vụ ngắt có mức ưu tiên cao.
V.1.3 Chuỗi vòng
Nếu có hai ngắt có cùng mức ưu tiên xuất hiện đồng thời, chuỗi vòng cố định sẽ xác định ngắt nào được phục vụ trước. Chuỗi vòng này sẽ là: ngắt ngoài 0, ngắt do bộ định thời 0, ngắt ngoài 1, ngắt do bộ định thời 1, ngắt do port nối tiếp. Ngắt do port nối tiếp là kết quả OR của cờ ngắt khi thu RI (cờ ngắt thu) với cờ ngắt khi phát (cờ ngắt phát).
V.2 Xử lý ngắt
Khi có một ngắt xuất hiện và được CPU chấp nhận, chương trình chính bị ngắt. Các thao tác sau đây xảy ra:
- Hoàn tất việc thực thi lệnh hiện hành.
- Bé đếm chương trình PC được cất vào stack.
- Trạng thái của ngắt hiện hành được lưu giữ.
- Các ngắt được chặn lại ở mức ngắt.
- Bé đếm chương trình PC được nạp địa chỉ vector của trình phục vụ ngắt ISR (Interrupt Service Routine).
- ISR được thực thi.
ISR được thực thi để đáp ứng công việc của ngắt. Việc thực thi ISR kết thúc khi gặp lệnh RETI. Lệnh này lấy giá trị cũ của bộ đếm chương trình PC từ stack và phục hồi trạng thái của ngắt cũ. Việc thực thi chương trình chính được tiếp tục ở nơi bị tạm ngừng.
V.3 Các vector ngắt
Khi một ngắt được chấp nhận, giá trị được nạp cho bộ đếm chương trình PC được gọi là vector ngắt. Vector ngắt là địa chỉ bắt đầu của trình phục vụ ngắt của nguyên nhân ngắt tương ứng. Khi một trình phục vụ ngắt được trỏ tới, cờ gây ra ngắt sẽ tự động được xoá về 0 bởi phần cứng. Các ngoại lệ bao gồm các cờ RI và TI đối với các ngắt trong port nối tiếp.
V.4 Các ngắt do port nối tiếp
Các ngắt do port nối tiếp xuất hiện khi cờ ngắt được phát TI hoặc cờ ngắt được thu RI được set bằng 1. Một ngắt phát xuất hiện khi việc phát một ký tự đã ghi vào SBUF hoàn tất. Một ngắt thu xuất hiện nh mét ký tự được thu nhận đầy đủ và đang ở trong SBUF để chờ được đọc. Nh vậy ngắt phát xảy ra khi bộ đệm phát SBUF rỗng, còn ngắt thu xảy ra khi bộ đệm thu SBUF đầy.
V.5 Các ngắt ngoài
Ngắt ngoài xảy ra khi có mức thấp hoặc có cạnh âm trên chân INT0 hoặc INT1 của 8051. Thực tế các cờ tạo ra các ngắt này là các bit IE0 và IE1 của thanh ghi TCON. Khi một ngắt ngoài được tạo ra, cờ tạo ra ngắt được xoá bởi phần cứng khi CPU trỏ đến trình phục vụ ngắt chỉ nếu ngắt thuộc loại tác động cạnh. Nếu ngắt thuộc loại tác động mức, nguyên nhân ngắt ngoài sẽ điều khiển mức của thay vì là phần cứng trên chip.
VI. LẬP TRÌNH HỢP NGỮ (ASSEMBLY LANGUAGE PROGRAMMING)
CPU chỉ có thể tính toán trên các số nhị phân và với tốc độ rất cao. Tuy nhiên đối với con người, nếu phải lập trình với các số nhị phân thì thật nhàm chán và chậm chạp. Chương trình chỉ gồm các số 0 và 1 là trình ngôn ngữ máy. Hợp ngữ thay thế các mã nhị phân của ngôn ngữ máy bằng các mã gợi nhớ giúp chúng ta dễ nhớ và dễ lập trình hơn.
Một chương trình viết bằng hợp ngữ không thể được thực thi trực tiếp bởi máy tính. Sau khi được viết xong, chương trình này phải được trải qua quá trình dịch thành ngôn ngữ máy. Trình dịch hợp ngữ là chương trình dùng để dịch một chương trình hợp ngữ thành chương trình ngôn ngữ máy.
VI.1 Trình dịch hợp ngữ
Có nhiều trình dịch hợp ngữ và nhiều chương trình hỗ trợ khác cho phép ta dễ dàng phát triển các ứng dụng trên chip vi điều khiển 8051 ví dụ như ASM51 (của Intel) hay Keil C51…
Trình dịch hợp ngữ họ MCS-51 của Intel (ASM51) được dùng làm chuẩn để so sánh với các trình dịch hợp ngữ khác. ASM51 là trình dịch hợp ngữ mạnh, hoạt động tốt trên các hệ thống của Intel và trên các họ máy tính của IBM-PC .
Keil C51 là một công cụ phát triển có nhiều ưu điểm cho việc xây dựng các phần mềm ứng dụng cho vi điều khiển. Keil C51 cho phép viết chương trình bằng hợp ngữ hoặc ngôn ngữ C, nó có nhiều thư viện tài nguyên có sẵn giúp việc lập trình được đơn giản hơn.
VI.2 Khuôn dạng của chương trình hợp ngữ
Các chương trình hợp ngữ bao gồm một chuỗi các dòng lệnh hợp ngữ.
Các lệnh (instruction) của bộ vi điều khiển, vi xử lý.
Các chỉ dẫn (directive) của trình dịch hợp ngữ.
Các điều khiển (control) của trình dịch hợp ngữ.
Các chú thích (comment)
Khuôn dạng tổng quát của mỗi dòng lệnh nh sau:
[label:] mnemonic [operand][,operand][…][;comment]
· Label: Trường nhãn cho phép chương trình tham chiếu đến một dòng lệnh bằng tên, label không được quá một số ký tự nhất định (tùy thuộc vào chương trình hợp ngữ).
· Mnemonic & Operand: Mã gợi nhớ và toán hạng là các trường kết hợp với nhau thực thi công việc thực tế của chương trình và hoàn thiện các nhiệm vụ mà chương trình được viết cho chóng.
· Comment: Trường chú thích, trình dịch hợp ngữ sẽ không dịch (bá qua) các chú thÝch nhưng chúng lại rất cần thiết để giúp mô tả chương trình cho người đọc dễ hiểu.
VI.3 Cấu trúc chương trình.
Việc lập trình có thể thực hiện theo 3 cấu trúc
Các phát biểu (Statements)
Các vòng lặp (Loop)
Sự lùa chọn (choice)
VI.4. Tổ chức chương trình.
Các chương trình thường được viết từng phần, và được sắp xếp theo thứ tự sau:
Các phép gán.
Các lệnh khởi động.
Phần chính của chương trình.
Các chương trình con.
Các định nghĩa hằng dữ liệu.
Các vị trí dữ liệu trong RAM.
CHƯƠNG II: CÁC THIẾT BỊ NGOẠI VI
I. ĐỒNG HỒ THỜI GIAN THỰC DS12887
Đồng hồ thời gian thực (real time clock - RTC) DS12887 được sản xuất bởi hãng Dallas Semiconductor. Với nguồn năng lượng lithium, tinh thể thạch anh, khả năng bảo vệ ghi tất cả được đóng gói trong 1 chip 24 chân xếp thành 2 hàng (nh hình 6 dưới đây). DS12887 có các chức năng nh hoạt động không cần nguồn nuôi từ bên ngoài, có thể đặt chế độ báo thức, lịch trong 100 năm, có khả năng lập trình ngắt, phát xung vuông, cùng với 114 bytes RAM.
Đóng vá 24 chân.
Bên trong có chứa pin lithium, thạch anh nên có thể hoạt động 10 năm không cần nguồn nuôi.
Đếm giây, phót, giê, ngày, ngày trong tuần, ngày trong tháng, tháng, năm.
Hiển thị bằng số nhị phân hoặc BCD thời gian, lịch, hẹn giê.
Có hai chế độ 12 giê (dùng AM và PM) hoặc 24 giê.
Giao tiếp với phần mềm bằng 128 Bytes RAM (bên trong)
+ 14 bytes đồng hồ và các thanh ghi điều khiển.
+ 114 bytes RAM dùng cho mục đích căn bản.
Có khả năng lập trình phát ra xung vuông.
Có thể đặt hẹn giê v.v.
Hình 6 : Sơ đồ chân DS12887
AD0 – AD7 : Các bus địa chỉ / dữ liệu
N.C : Không sử dụng : Kh«ng sö dông
MOT : Chân lùa chọn loại bus : Ch©n lùa chän lo¹i bus
: Chọn chip : Chän chip
AS : Address Strobe : Address Strobe
: Đầu vào Đọc/Ghi
DS : Data Strobe : Data Strobe
: Đầu vào reset : §Çu vµo reset
: Đầu ra ngắt : §Çu ra ng¾t
SQW : Đầu phát ra xung vuông : §Çu ph¸t ra xung vu«ng
Vcc : Chân cấp nguồn (+5V) : Ch©n cÊp nguån (+5V)
GND : Chân nối đất : Ch©n nèi ®Êt
I.1 Hoạt động
Đồng hồ thời gian thực (RTC) hoạt động liên tục, tất cả RAM, thời gian, lịch, hẹn giê và các vị trí nhớ còn lại không thay đổi cho dù nguồn cung cấp vào (Vcc) thay đổi. Khi nguồn (Vcc) được đưa vào DS12887 và đạt tới mức lớn hơn
Hình 7: Sơ đồ khối của DS12887
4,25V, thì thiết bị sẽ được tiếp cận sau 200ms, cung cấp cho máy phát xung hoạt động. Cùng lúc đó cho phép hệ thống trở nên ổn định sau khi nguồn được đưa vào. Khi nguồn (Vcc) giảm xuống dưới 4,25V, ở đầu vào chọn chip có 1 lực bên trong làm cho trở về mức không hoạt động bất kể giá trị ở chân CS. Vì thế DS12887 chuyển sang chế độ chống ghi. Khi DS12887 ở chế độ chống ghi thì tất cả các tín hiệu vào đều bị ngăn và các đầu ra đang ở mức trở kháng cao. Khi Vcc giảm tới mức xấp xỉ 3V, nguồn cung cấp từ ngoài bị đóng lại, nguồn năng lượng bên trong (pin lithium) sẽ được cấp cho RTC và bộ nhớ RAM.
I.2 Chức năng các chân.
· GND, Vcc
Nguồn 1 chiều + 5Vđược cung cấp cho thiết bị thông qua chân 24. Khi nguồn 5V được cung cấp thì ta có thể đọc hoặc ghi dữ liệu trên thiết bị. Khi nguồn vào thấp hơn 4,25V thì việc đọc ghi dữ liệu bị ngăn cấm. Tuy nhiên thiết bị vẫn hoạt động không phụ thuộc vào nguồn vào. Khi mà nguồn vào thấp hơn 3V thì lúc đó thiết bị sẽ sử dụng nguồn pin lithium bên trong để duy trì hoạt động. Độ chính xác của DS12887 là ± 1 phót/1 tháng tại 250C.
· MOT (Mode Select)
Chân MOT được sử dụng để lùa chọn giữa hai loại bus. Khi được nối với Vcc, chế độ thời gian bus Motorola được chọn. Khi nối với GND hoặc không được nối thì chế độ thời gian bus Intel được chọn. Chân này có điện trở kéo bên trong cỡ 20KW.
· SQW (Square-Wave Output)
Chân SQW tạo ra tín hiệu xung vuông. Tần số của tín hiệu phát ra từ chân SQW có thể thay đổi bằng cách lập trình trên thanh ghi A (ở bảng 1). Tín hiệu SQW có thể được bật hoặc tắt bằng cách sử dông bit SQWE trong thanh ghi B. Tín hiệu SQW sẽ không có khi Vcc nhỏ hơn 4,25V.
· AD0-AD7
Bus địa chỉ và dữ liệu. Thông tin của địa chỉ và thông tin của dữ liệu thời gian chia xẻ trong cùng 1 đường tín hiệu. Địa chỉ được chỉ ra trong suốt phần đầu của chu kỳ bus, cũng những chân này và đường tín hiệu được sử dụng cho dữ liệu trong phần 2 của chu kỳ bus.
· AS (Address Strobe Input)
Khi ở mức cao AS kéo bus giải đa hợp. Khi ở sườn xuống của AS/ALE đó là nguyên nhân địa chỉ được chốt bên trong DS12887. Ở sườn lên kế tiếp của bus, AS sẽ xóa địa chỉ.
· DS (Data Strobe or Read Input)
Chân có hai chế độ hoạt động dùa vào chế độ ở chân MOT. Khi chân MOT được nối với Vcc (chế độ thời gian bus Motorola được chọn) trong chế độ này DS được kéo ở mức cao trong suốt phần cuối của chu kỳ bus và được gọi là Data Strobe. Trong suốt chu kỳ đọc DS biểu thị thời gian mà DS12887 điều khiển 2 đường bus trực tiếp. Trong chu kỳ ghi DS12887 chốt dữ liệu ghi. Khi chân MOT nối với GND (chế độ thời gian bus Intel được chọn). Trong chế độ này chân DS được gọi là chân Đọc (). xác định phần thời gian khi DS12887 điều khiển bus cùng với dữ liệu đọc.
Bảng 1: Tần số của xung SQW phát ra
· (Read/Write Input)
Chân có hai chế độ hoạt động. Khi chân MOT được nối với Vcc, ở mức chỉ thị mà không cần biết chu kỳ hiện tại là đọc hay ghi. Chu kỳ đọc được chỉ thị cùng với ở khi DS ở mức cao. Chu kỳ ghi được chỉ thị khi thấp qua DS.
Khi chân MOT được nối với GND, tín hiệu là tín hiệu kích hoạt thấp được gọi là . Trong chế độ này chân có ý nghĩa nh chân cho phép ghi (write enable-).
· (Chip Select Input)
Tín hiệu chọn chip phải ở mức thấp để cho chu kỳ bus của DS12887 được truy nhập. phải được giữ cho hoạt động khi DS và AS ở chế độ thời gian Motorola và khi và ở chế độ thời gian Intel. Khi Vcc < 4,25V thì DS12887 cấm
Các file đính kèm theo tài liệu này:
- 8051.doc