Ở cổng 3 có thêm các đường dẫn điều khiển dùng để trao đổi với một bộ nhớ bên ngoài, hoặc để đầu nối giao diện nối tiếp, cũng như các đường ngắt dẫn bên ngoài.. Port 2: Port 2 là một po
Trang 1BỘ GIÁO DỤC & ĐÀO TẠO TRƯỜNG ĐẠI HỌC DL KỸ THUẬT CÔNG NGHỆ TP.HCM
KHOA ĐIỆN - ĐIỆN TỬ NGÀNH ĐIỆN TỬ VIỄN THÔNG
Trang 2
LỜI NÓI ĐẦU
Trong giai đoạn hiện nay với sự phát triển của công nghệ điện tử, có nhiều loại
vi xử lý, vi điều khiển của nhiều hãng khác nhau ra đời và được ứng dụng trong thiết kế hệ thống
Đối với sinh viên ngành điện tử của chúng em, Vi Điều Khiển đã trở nên khá
gần gũi vì đã có học trong môn Vi Xử Lý Điều này có thể thấy được qua số lượng
lớn các để tài luận án từ trước đến nay đều liên quan ít nhiều đến Vi Điều Khiển
và Vi Xử Lý Trong thực tế ở nước ta hiện nay, việc ứng dụng họ vi điều khiển
AT89C51 của hãng ATMEL là rất phổ biến
Thời gian là một trong những thứ quí giá của con người Để sử dụng thời gian
hợp lý để đạt được tất cả những gì mình muốn trong công việc cũng như gia đình
Từ đó thôi thúc em chọn để tài “Sổ Tay Điện Tử” để làm luận án tốt nghiệp, làm
ra một thiết bị nhắc nhở công việc và giúp quản lý thời gian tốt hơn Trong quá
trình thực hiện để tài, em đã gặp không ít những vấn để trong thiết kế, thi công
mạch nhưng nhờ sự hướng dẫn nhiệt tình của giáo viên hướng dẫn - thạc sĩ Trần
Viết Thắng, đã giúp em hoàn thành tốt luận án tốt nghiệp này
Do trình độ còn hạn chế, kiến thức còn chưa thật vững vàng, cho nên trong quá trình thực hiện để tài em không tránh khỏi được thiếu sót và sai lầm Rất mong
nhận được sự nhận xét đánh giá, góp ý của thầy cô và các bạn Em xin chân thành cảm ơn
Trường Đại Học Dân Lập Kỹ Thuật Công Nghệ
Sinh viên thực hiện luận văn
Nguyễn Quốc Toàn
Trang 3HI ˆ PHƯƠNG ÁN THỰC HIỆN ĐỀ TÀI
PHANB: KIẾN THỨC CƠ SỞ
Chương I: GIỚI THIỆU VI ĐIỀU KHIỂN AT89C51
I Đặc điểm vi điều khiển 89C51 - Ă Ăcseseererreerree 9
Il So dé va chức năng từng chân của 89C51 - 5< <<<2 10
II Tổ chức bộ nhớ 5- << <sErexerkerEE41802114 01.4 1aArrre 13
IV Các thanh ghi chức năng đặc biệt se 17
MWT 5 21
VI Hoạt động của bộ định thời - - Q- À Ă Ăn n4 me, 23
M' G11 ) 29
VHI Hoạt động của port nối tiếp Á Ăn neeeerere 35
Chương II: GIỚI THIỆU MODULE LCD
I Cấu trúc phần cứng của module LCD «5s <<<2 41
TI Mã lệnh điều khiển của LCD - - 55 << ss se <sssssgszseexe 44
Chương III: GIGI THIEU DS1307
T, GiGi thi@u c cc cccccessscecccesessnececcessscsceeeessnecessssccersssseseusaaseees 50
HI Hoạt động của DS1307 G0 ng gge 52
Chương IV: GIỚI THIỆU ADC0804
In 59
IN t1) 7104.155 59
Trang 4PHẲNC: THIẾT KẾ VÀ THI CONG
Chương I: THIẾT KẾ PHẦN CỨNG
I Sơ đổ khối hệ thống + ttttEEEEEEEEEEEEEEEEAEAE.eveeerrrrrrrr 60
H Nguyên lý hoạt động của hệ thống -scceeeeee 61
HI Khối xử lý trung tâm - - 5< Ăn He eeeerren 62
IV Khối giao tiếp máy tính - Ăn rceg 64
VI Khối cảm biến và chuyển đổi ADC -.- c<c<esesee 65
VH Khối thời gian thực - - 5< SH ng rnsrke 67
VI Khối lưu trữ đữ liệu .- ĂSSĂĂSsSeeeeesee 68
* Các nút nhấn - Ă G5 «SH ng ng 07 70
Sodd ) nguyên lý mạch hoàn chỉnh re 71
Chương m THIẾT KẾ PHẦN MEM
I Lưu đồ thuật giải của chương trình chính <2 72
H Lưu đồ thuật giải của chương trình phục vụ ngắt cổng nối tiếp 73
HI Lưu đồ thuật giải của chương trình con kiểm tra giờ hẹn 75
IV Lưu đồ giải thuật ghi dữ liệu vào DS137 - 76
V Lưu đô giải thuật đọc dữ liệu từ DS1307 <- 77
VI Lưu đô giải thuật ghi dữ liệu vào 24C64 - 78
VH.' Lưu đồ giải thuật đọc đữ liệu vào 24C64 - ©-<<- 79
VIII Luu dé gidi thuật đo nhiệt độ và hiển thị lên LCD 80
IX Lưu đồ chương trình con thiết lập trạng thái ban đầu cho LCD 81
X Lưu đỗ giải thuật xử lý các phím nhấn hiệu chỉnh thời gian 82
XI Lưu đồ chương trình cập nhật giờ cài đặt - 83
XII Các chương trình con - HH HH1 18835n 894 84
Trang 5
Phần A: Giới thiệu đề tài
PHẦN A: GIỚI THIỆU ĐỀ TÀI
I DAT VAN DE:
Đất nước ta đang không ngừng đổi mới từng ngày, từ một nước nông nghiệp
chuyển sang phát triển theo hướng công nghiệp hóa, hiện đại hóa nhằm theo kịp
và hòa nhịp với xu hướng phát triển của thế giới Sự phát triển kinh tế kéo theo sự
phát triển mọi mặt của xã hội, đời sống vật chất và tinh thần của nhân dân được
nâng lên một mức đáng kể Nhưng cũng đòi hỏi mọi người phải làm việc nhiễu và
nhiều việc hơn và do đó việc quản lý thời gian là cần thiết hơn bao giờ hết
“Sổ tay điện tử” được thiết kế để thay thế con người quản lý thực hiện báo giờ nhắc việc tự động khi đến thời điểm hẹn trước Ngoài ra hệ thống này cũng có
thể ứng dụng ở nhiều nơi khác như công sở, trường học, hồ bơi,
II MỤC ĐÍCH CỦA ĐỀ TÀI:
Đề tài có nhiệm vụ thiết kế và thi công mạch “Sổ tay điện tử” gồm 2 phần:
phần mạch điện tử với màn hình hiển thị LCD và chương trình giao diện người sử dụng trên máy tính
Mạch điện tử với màn hình hiển thị LCD: bao gồm các chức năng sau
- _ Hiển thị thời gian: giờ, phút, giây, ngày, tháng, năm
- _ Hiển thị nhiệt độ môi trường
- _ Có khả năng giao tiếp với máy tính để nhận đữ liệu
- _ Có khả năng lưu trữ những thong tin cài đặt trước đó kể cả khi mất nguồn
- _ Thời gian vẫn chạy đúng khi được cấp nguồn lại sau khi mất nguồn
Chương trình giao diện người sử dụng: được viết bằng ngôn ngữ lập trình Visual
Basic, chương trình cho phép người sử dụng cài đặt các thời điểm xuất hiện các
thông báo nhắc nhở công việc trong tương lai
II PHƯƠNG ÁN THỰC HIỆN ĐỀ TÀI:
Để làm khối đông hồ đếm thời gian có hai phương án:
Phương án 1:
Dùng chính bộ dao động vi điểu khiển tạo xung đếm thời gian Các thông số cài đặt cho đồng hồ như giờ, phút, giây, giờ báo thực hiện thông qua phím nhấn và được lưu trữ trực tiếp trên RAM của vi điêu khiển 89C51
Ưu điểm của hệ thống này là đơn giản, ít tốn kém, nên giá thành thấp Nhược điểm của hệ thống là nếu mất nguồn thì phải cài đặt lại từ đầu các thông số, không
hiển thị ngày, tháng Mặc dù có thể cải tiến bằng cách dùng nguồn pin dự phòng cho vi điều khiển nhưng độ ổn định của hệ thống không cao và kém linh hoạt Và
mức độ chính xác của thời gian là thấp, phụ thuộc nhiều vào khả năng lập trình của người thiết kế
Trang 6
Phần A: Giới thiệu đề tài
Phương án 2:
Dùng IC thời gian chuyên dụng để đếm thời gian Hệ thống có thể hiển thị giờ,
phút, giây, thứ, ngày, tháng, năm Nhiệm vụ của vi điểu khiển là lấy dữ liệu thời
gian để hiển thị ra bên ngoài, so sánh thời gian hiện tại và thời gian cần nhắc việc, giao tiếp với máy tính để nhận dữ liệu
Nhược điểm của hệ thống này là phức tạp hơn phương án 1 vì phải dùng thêm
IC thời gian chuyên dụng Giá thành của sản phẩm sẽ tăng Tuy nhiên với IC thời
gian này, ta có thể khắc phục được những nhược điểm của hệ thống trước Vì sử
dụng IC thời gian chuyên dụng nên mức độ sai số của thời gian là thấp do đã được nhà sản xuất nghiên cứu và khắc phục Ngoài ra sau khi bị mất nguồn, hệ thống
vẫn hoạt động trở lại bình thường khi có điện vì IC thời gian vẫn hoạt động nhờ vào nguồn pin 3V khi nguồn bên ngoài bị tắt
Từ những nhận định trên, em đã quyết định chọn phương án 2 để thực hiện
để tài luận án tốt nghiệp của em
Trang 7
Phần B: Kiến thức cơ sở Chương I: Giới thiệu vi điều khiển AT89C51
a
PHAN B: KIEN THUC CO SO
CHUONG I: GIGI THIEU TOM TAT VI DIEU KHIEN AT89C51
I ĐẶC ĐIỂM VI DIEU KHIEN 89C51:
89C51 1a mét IC vi diéu khién (Microcontroller) do hang Intel san xudt N6 cé
các đặc điểm sau:
ROM nội: 4K EEPROM
64 KByte không gian bộ nhớ chương trình mở rộng
64 KByte không gian bộ nhớ dữ liệu mở rộng
210 bit được địa chỉ hóa (nằm trong vùng RAM nội)
Bộ nhân/chia 4 ps
INTI INTOV’
PORT nối tiếp
TIMER
YVVVYÝ Rom i T,* 1
Diéu Các thanh 128 byte 4K-8051 Timer! Th*
Trang 8Phần B: Kiến thức cơ sở Chương I: Giới thiệu vi điều khiển A T89C51
—————————>—>—>—>>>>mmmmm>maasnaaaaaanannnnsansnenenaeaearmn
Phần chính của vi điều khiển 89C51 là bộ xử lí trung tâm (CPU: Central Processing Unit) bao gồm:
e Thanh ghi tích lãy A
e Thanh ghi tích lũy B, dùng cho phép nhân và phép chia
e Don vi logic hoc (ALU: Arithmetic Logical Unit)
e Từ trạng thái chương trình (PSW: Program Status Word)
e Bốn băng thanh ghi
thời hoặc cũng có thể là giao diện nối tiếp
Hai bộ định thời 16 bit hoạt động như một bộ đếm
Các cổng (port 0, port 1, port 2, port 3) sử dụng vào mục đích điều khiển
Ở cổng 3 có thêm các đường dẫn điều khiển dùng để trao đổi với một bộ nhớ
bên ngoài, hoặc để đầu nối giao diện nối tiếp, cũng như các đường ngắt dẫn bên
ngoài
Giao diện nối tiếp có chứa một bộ truyễn và một bộ nhận không đồng bộ, làm việc độc lập với nhau Tốc độ truyền qua cổng nối tiếp có thể đặt trong vẩy rộng
và được ấn định bằng một bộ định thời
Trong vi điều khiển 89C51 có hai thành phần quan trọng khác đó là bộ nhớ và
các thanh ghi, trong đó:
e Bộ nhớ gồm có bộ nhớ RAM va ROM ding để lưu trữ dữ liệu và mã lệnh
e_ Các thanh ghi sử dụng để lưu trữ thông tin trong quá trình xử lí Khi CPU làm việc nó làm thay đổi nội dung của các thanh ghi
II SƠ ĐỒ VÀ CHỨC NĂNG TỪNG CHÂN CỦA 89C51:
89C51 là 1 vi mạch có 40 chân mỗi chân có 1 chức năng đặc biệt khác nhau
Trong đó có 24 chân có công dụng kép, mỗi đường có thể hoạt động như đường
xuất nhập hoặc như đường điều khiển hoặc là thành phần của bus dữ liệu và bus
địa chỉ
Trang 9Phần B: Kiến thức cơ sở Chương I: Giới thiệu vi điều khiển A T89C51
VCC U2 S iø-| P37/BD 9 P20/A8 +55 Te] P3.6/WR > P2.1/A9 [55
1 |P3.5T1 ~~ P2.2/A10 |-55 13-| P3.4/T0 _ P2.3/A11 [Øg 75] P3.3/INTL P2.4/A12 [38 777] P3.2/INTO P2.5/A13 [57
10 |P3.1TXD P2.6/A14 Fấg P3.0/RXD P2.7/A15
1 Port 0: Port 0 là một port hai chức năng trên các chân 32 — 39(P0.7, P0.6, )
Trong các thiết kế cỡ nhỏ (không dùng bộ nhớ mở rộng) nó có chức năng như các đường LO Đối với các thiết kế lớn với bộ nhớ mở rộng, nó vừa là byte thấp bus
địa chỉ và là bus dữ liệu 8 bit
2 Port 1: Port 1 là một port V/O trén chin 1 — 8 Cac chân được ký hiệu PI.0,
P1.1 c6 thé dùng cho giao tiếp với các thết bị ngoài nếu cần Port 1 không có chức năng khác, và vậy chúng chỉ dùng cho giao tiếp với các thiết bị ngoài hoặc
trao đổi dữ liệu với các hệ thống khác
3 Port 2: Port 2 là một port công dụng kép trên các chân 21- 28 được dùng như
các đường xuất nhập hoặc là byte cao của bus địa chỉ với các thiết kế dùng bộ nhớ
mở rộng
4 Port 3: Port 3 là một port công dụng kép trên các chân 10 -17 Mỗi chân của port này vừa có chức năng trao đổi dữ liệu vừa có các chức năng đặc biệt như ở bảng sau:
Trang 11
Trang 10
Phần B: Kiến thức cơ sở Chương I: Giới thiệu vỉ điều khiển AT§9C51
P3.0 RXD Dữ liệu nhận cho port nối tiếp
P3.1 TXD Dữ liệu phát cho port nối tiếp
P3.4 T0 Ngõ vào của timer/couter 0
P3.5 Tl Ngõ vao cua timer/couter 1
P3.7 RD Xung đọc bộ nhớ dữ liệu ngoài
5 PSEN (Program Store Enabie): PSEN là tín hiệu ra trên chân 29 Nó là tín
hiệu điểu khiển để cho phép bộ nhớ chương trình mở rộng và thường được nối đến
chân OE (Output Enable) của một EPROM để cho phép đọc các byte mã lệnh
PSEN sẽ ở mức thấp trong thời gian lấy lệnh Các mã nhị phân của chương
trình được đọc từ EPROM qua bus dữ liệu và được chốt vào thành ghi lệnh của
89C51 để giải mã lệnh Khi thi hành chương trình trong ROM nội PSEN sẽ ở mức
thụ động (mức cao)
6 ALE (Address Latch Enable): Tin hiéu ra ALE trên chân 30 tương hợp với các thiết bị làm việc với vi xử lý 8080, 8085, 8088, 8086 89C51 dùng ALE một cách tương tự cho việc giải kênh các bus địa chỉ và dữ liệu, khi port 0 được dùng
trong chế độ chuyển đổi của nó: vừa là bus dữ liệu vừa là byte thấp của bus địa
chỉ, ALE là tín hiệu để chốt địa chỉ vào một thanh ghi bên ngoài trong nửa đầu của
chu kỳ bộ nhớ Sau đó, các đường port 0 dùng để xuất nhập đữ liệu trong nữa sau của chu kỳ bộ nhớ
Các xung tín hiệu ALE có tốc độ bằng 1/6 lần tần số dao động trên chip và có
thể được dùng làm nguồn xung nhịp cho các phần khác của hệ thống Chỉ ngoại trừ
khi thi hành lệnh MOVX, một xung ALE sẽ bị mất Chân này cũng được làm ngõ vào cho xung lập trình cho EPROM trong các loại có ROM nội
T EA (Externai Access):Tín hiệu vào EA trên chân 31 thường được mắc lên
mức cao (+5V) hoặc mức thấp (GND) Nếu ở mức cao, 89C51 thi hành chương trình từ ROM nội trong khoảng địa chỉ thấp (4K) Nếu ở mức thấp, chương trình chỉ được thi hành từ bộ nhớ mở rộng Nếu EA được nối mức thấp bộ nhớ bên trong
chương trình 89C51 sẽ bị cấm và chương trình thi hành từ EEPROM mở rộng
Người ta còn dùng EA làm chân cấp điện áp Vp khi lập trình cho ROM trong
8 RST (Rese£):Ngõ vào RST trên chân 9 là ngõ reset của 89C51 Khi tín hiệu
này được đưa lên mức cao (trong ít nhất 2 chu kì máy), các thanh ghi bên trong
89C51 được tải những giá trị thích hợp để khởi động hệ thống
9 Các ngõ vào bộ dao động trên chip: 89C51 có một bộ dao động trên chip
Nó thường được nối với một thạch anh giữa hai chân 18 và 19 Các tụ giữ cũng cần
thiết như đã vẽ Tần số thạch anh thông thường là 12Mhz
Trang 12
Trang 11
Phần B: Kiến thức cơ sở Chương I: Giới thiệu vi điều khiển AT89C51
rr
10 Các chân nguồn: 89C51 sử dụng nguồn đơn +5V Vcc được nói vào chân
40 và Vss (GND) được nối vào chân 20
II TỔ CHỨC BỘ NHỚ
89C51 có bộ nhớ theo cấu trúc Harvart: có những vùng bộ nhớ riêng biệt cho
chương trình và dữ liệu Như đã nói ở trên, cả chương trình và dữ liệu có thể ở bên
trong: dù vậy chúng có thể được mở rộng bằng các thành phân ngoài lên đến tối đa
64 KByte bộ nhớ chương trình và 64KByte bộ nhớ đữ liệu
Bộ nhớ bên trong bao gồm ROM nội và RAM trên chip, RAM trên chip bao
gồm nhiều phần: phần lưu trữ đa dụng, phần lưu trữ địa chỉ hóa từng bit, các bank
thanh ghi và các thanh ghi chức năng đặc biệt
e Các thanh ghi và các phort xuất nhập đã được xếp trong bộ nhớ và có thể
được truy xuất trực tiếp giống như các địa chỉ bộ nhớ khác
e Ngăn xếp bên trong RAM nội nhỏ hơn so với RAM ngoài như trong các
bộ vi xử lý khác
RAM bên trong MCS51 được phân chia giữa các bank thanh ghi (00H - IFH),
RAM địa chỉ hóa từng bit (20H — 2FH), RAM da dụng (30H — 7FH) và các thanh
ghi chức năng đặc biệt (80H — FFH)
Trang 12
Địa chỉ byte Địa chi bit
7
RAM DA DUNG
30 2F\ 7F | 7E | 7D | 7c | 7B | 7A | 79 | 78 2E| 77 | 76 | 75 |74 | 73 | 72 | 71 | 70 2D/ 6F | 6E | 6D | 6c | 6B | 6A | 69 | 68 2C| 67 | 66 | 65 | 64 | 63 | 62 | 61 | 60 2B
5F |5E |ãD | 5c | 5B | SA | 59 | 58 2Al 57 |56 |55 |54 |53 {52 | 51 | 50 29| 4F |4D |4E 4B | 4A | 49 | 48 28] 47 | 46 | 45 | 44 | 43 | 42 | 41 | 40 27| 3F +| 3E | 3D )3c | 3B | 3A | 39 | 38
Trang 13Phần B: Kiến thức cơ sở Chương I: Giới thiệu vi điều khiển AT89C51
Địa chỉ byte Dia chi bit
FF FO| F7 | F6 | FS | F4 | F3 | F2 | Fl
EQ| E7 [E6 | E5 | E4 | E3 | E2 JE] JEO| ACC
D |D7} D6] D5} D4 }D3 | D2] _ |DO| PSW
Bg} — | — | — | BC] BB|BA|B9 | B8 | yp
BO| B7 | B6 | BS | B4 | B3 | B2 | Bl | BO} p3
A8|AF] _ | — [AC]ABJAAJA9TA8] TR
AO} A7 } A6] AS | A4 | A3 | A2 | AL] A0} po
99 không được địa chỉ hóa bịt SBUF
98] OF | 9E | 9D] 9C | 9B] 9A | 99 | 98 | SCON
90} 97 | 96 | 95 | 94 193 | 92 191) 90] py
8D không được địa chỉ hóa bit THI
§C không được địa chỉ hóa bit TH0 8B không được địa chỉ hóa bit TL1 8A không được địa chỉ hóa bít TLO
89 khéng duge dja chi héa bit TMOD
88 | 8F | 8E | 8D] 8C | 8B] 8A | 89 | 88 | TCON
87 không được địa chỉ hóa bit PCON
83 không được địa chỉ hóa bịt DPH
82 không được địa chỉ hóa bit DPL
81 không được địa chỉ hóa bit SP
Mặc dù trên hình cho thấy 80 byte RAM đa dụng chiếm các địa chỉ từ 30H-
7FH, 32 byte đưới cùng từ 00H đến 1FH cũng có thể được dùng với mục đích tương
tự (mặc dù các địa chỉ này đã có mục đích khác)
Trang 15
Trang 14Phần B: Kiến thức cơ sở Chương I: Giới thiệu vi điều khiển AT89C51
Mọi địa chỉ trong vùng RAM đa dụng đều có thể được truy xuất tự do dùng
cách đánh địa chỉ trực tiếp hay gián tiếp Ví dụ, để đọc nội dung ở địa chỉ 5FH của
RAM nội vào thanh ghi tích lũy lệnh sau sẽ được dùng:
MOV A, 5FH
Lệnh này đi chuyển một bit dữ liệu dùng cách đánh địa chỉ trực tiếp để xác
định “địa chỉ nguôn” (5FH) Đích nhận dữ liệu được ngầm xác định trong mã lệnh
là thanh ghi tích lũy A
RAM bên trong cũng có thể được truy xuất dùng cách đánh địa chỉ gián tiếp
qua R0 hay R1 Ví dụ, sau khi thi hành cùng nhiệm vụ như lệnh đơn ở trên:
MOV RO, #5FH MOV A, @RO Lệnh đâu dùng địa chỉ tức thời để di chuyển giá trị 5FH vào thanh ghi R0 và lệnh thứ hai dùng địa chỉ trực tiếp để di chuyển dữ liệu “được trổ bởi R0” vào thanh ghi tích lũy
2 RAM địa chỉ hóa từng bit:
89C51 chứa 210 bit được địa chỉ hóa, trong đó 128 bit là ở các địa chỉ byte 20H
đến 2FH và phân còn lại là trong các thanh ghi chức năng đặc biệt
Ý tưởng truy xuất từng bit riêng rẽ bằng phần mềm là một đặc tính tiện lợi của
vi điều khiển nói chung Các bit có thể được đặt, xóa, AND, OR, với một lệnh
đơn Đa số các vi xử lý đòi hỏi một chuỗi lệnh đọc — sửa — ghi để đạt được hiệu
ủatương tự Hơn nữa, các port LO cũng được địa chỉ hóa từng bit làm đơn giản
phần mềm xuất nhập từng bit
Có 128 bit được địa chỉ hóa đa dụng ở các byte 20H đến 2FH Các địa chỉ này
được truy xuất như các byte hoặc như các bit phụ thuộc vào lệnh được dùng
3 Các bank thanh ghi:
32 byte thấp nhất của bộ nhớ nội là đành cho các bank thanh hi Bộ lệnh của
8051/8031 hỗ trợ 8 thanh ghi (R0 đến R7) và theo mặc định (sau khi Reset hệ
thống) các thanh ghi này ở các địa chỉ 00H-07H
Bank thanh ghi tích cực có thể chuyển đổi bằng cách thay đổi các bit chon bank
thanh ghi trong từ trạng thái chương trình (PSW)
Ý tưởng dùng “các bank thanh ghi” cho phép “chuyển hướng” chương trình
nhanh và hiệu quả (từng phần riêng rẽ của phần mềm sẽ có một bộ thanh ghi riêng
không phụ thuộc vào các phần khác)
Trang 16
Trang 15
Phần B: Kiến thức cơ sở Chương I: Giới thiệu vi điều khiển AT89C51
TỌỌTỌTTTỌ0000000n00nn00000nnnnợợggnnngnnnggaaợaợyợgợng name
IV CÁC THANH GHI CHỨC NĂNG ĐẶC BIÊT
Các thanh ghi trong MCS51 được định dạng như một phần của RAM trên chip
Vì vậy mỗi thanh ghi sẽ có một địa chỉ (ngoại trừ thanh ghi đếm chương trình và thanh ghi lệnh và các thanh ghi bày hiếm khi bị tác động trực tiếp, nên không có
lợi khi đặc chúng trong RAM trên chip) Cũng như R0 đến R7 có 21 thanh ghi chức
năng đặc biệt (SFR: Special Function Register) ở vùng trên RAM nội, từ địa chỉ
80H đến FFH Chú ý rằng hầu hết 128 địa chỉ tử 80H đến FFH không được định nghĩa Chỉ có 21 địa chỉ SER là được định nghĩa
Ngoại trừ thanh ghi tích lũy (A) có thể được truy xuất ngầm như đã nói, đa số
các SER được truy xuất dùng địa chỉ trực tiếp Chú ý rằng một vài SFR có thể được địa chỉ hóa bit hoặc byte Người thiết kế phải thận trọng trong truy xuất bit và byte
Ví dụ lệnh sau:
SETB 0E0H
sẽ set bit 0 trong thanh ghi tích lũy, các bit khác không thay đổi Ta thấy rằng E0H
đồng thời là địa chỉ byte của thanh ghi tích lũy và là địa chỉ bit có trọng số nhỏ nhất trong thanh ghi tích lũy Vì lệnh SETB chỉ tác động trên bit, nên chỉ có địa chỉ
bit là có hiệu quả
1 Từ trang thái chương trình:
Từ trạng thái chương trình (PSW: Program Status Word) ở địa chi DOH chita
các bit trạng thái như bảng tóm tắt sau:
10 = bank 2: dia chi 10H —- 17H
11 = bank 3: dia chi 18H — 1FH
PSW.0 P D0H Co parity chin
Trang 16Phần B: Kiến thức cơ sở Chương I: Giới thiệu vi điều khiển AT89C51
* Cờ nhớ:
Cờ nhớ (CY) có công dụng kép Thông thường nó được dùng cho các lệnh toán học: nó sẽ được set nếu có một số nhớ sinh ra bởi phép cộng hoặc có một số mượn bởi phép trừ Ví dụ, nếu thanh ghi tích lũy chứa FFH, thì lệnh sau:
ADD A, #1
sẽ tra vé thanh ghi tich lily két qua 00H và set cờ nhớ trong PSW
Cờ nhớ cũng có thể xem như một thanh ghi 1 bit cho các lệnh luận lý thi hành
trên bit Ví dụ, lệnh sau sẽ AND bit 25 với cờ nhớ và đặt kết quả trở vào cờ nhớ:
Cờ 0 (F0) là 1 bit cờ đa dụng đành cho các ứng dụng của người dùng
* Các bit chon bank thanh ghi:
Các bit chọn bank thanh ghi (RS0 và RSI1) xác định bank thanh ghi được tích
cực Chúng được xóa sau khi reset hệ thống và được thay đổi bằng phần mềm nếu
cần Ví dụ, ba lệnh sau cho phép bank thanh ghi 3 và di chuyển nội dung của thanh
ghi R7 (địa chỉ byte 1FH) đến thanh ghi tích lũy:
SETB RSI SETB RSO MOV A, R7
Khi chương trình được hợp dịch, các địa chỉ bit đúng được thay thế cho các ký
hiệu “RS1” và “RS0” Vậy, lệnh SETB RSI sẽ giống như lệnh SETB 0D4H
* Cờ tràn:
Cờ tràn (OV) được set sau một lệnh cộng hoặc trừ nếu có một phép toán bị
tràn Khi các số có dấu được cộng hoặc trừ với nhau, phần mềm có thể kiểm tra bit
này để xác định xem kết quả có nằm trong tâm xác định không Khi các số không
dấu được cộng, bit OV có thể được bỏ qua Các kết quả lớn hơn ( +127 ) hoặc nhỏ
hơn (-128) sé set bit OV
Trang 18
Trang 17Phần B: Kiến thức cơ sở Chương I: Giới thiệu vi điều khiển AT89C51
rra-r-Ỷ- rzrs.-y-.ờơờơờơợơợơnnsnnïỶẳĩẳaa-ơsơẳ‹ơnănaazaasasasaranaanaananananaanaananaannnensennanoeem
2 Thanh ghi B:
Thanh ghi B 6 địa chỉ F0h được dùng cùng với thanh ghi tích lũy A cho các
phép toán nhân và chia Lệnh MUL AB sẽ nhân các giá trị không dấu 8 bit trong A
và B rồi trả về kết quả nguyên trong A va phan du trong B Thanh ghi B cũng có
thể được xem như thanh ghi đệm đa dụng Nó được địa chỉ hóa từng bit bằng các
địa chỉ bit F0H đến F7H
3 Con trồ ngăn xếp:
Con trỏ ngăn xếp (SP) là một thanh ghi 8 bit ở địa chỉ 81h Nó chứa địa chỉ của
byte dữ liệu hiện hành trên đỉnh của ngăn xếp Các lệnh trên ngăn xếp bao gồm
các thao tác cất đữ liệu vào ngăn xếp và lấy dữ liệu ra khỏi ngăn xếp Lệnh cất dữ
liệu vào ngăn xếp sẽ làm tang SP trước khi ghi đữ liệu, và lệnh lấy đữ liệu ra khỏi
ngăn xếp sẽ đọc dữ liệu và giảm SP Ngăn xếp của 8051/8031 được giữ trong
RAM nội và được giới hạn các địa chỉ có thể truy xuất bằng địa chỉ gián tiếp Chúng là 128 byte đầu của 89C51
Để khởi động lại SP với ngăn xếp bắt đầu tại 60h, lệnh sau được dùng:
MOV SP,#5FH
Trén 89C51 ngăn xếp bị giới hạn 32 byte vì địa chỉ cao nhất cla RAM trên
chip là 7FH Sở đĩ dùng giá trị 5FH vì SP sẽ tăng lên 60H trước khi cất dữ liệu đầu tiên
Người thiết kế có thể chọn không phải khởi động lại con trỏ ngăn xếp mà để
nó lấy giá trịnh mặc định khi reset hệ thống Giá trị mặc định đó là 07H và kết quả
là ngăn xếp đầu tiên để cất dữ liệu có địa chỉ là 08H Nếu phần mềm ứng dụng
không khởi động lại SP, bank thanh ghi 1 (có thể là 2 và 3) sẽ không dùng được vì
vùng RAM này đã được dùng làm ngăn xếp
Ngăn xếp được truy xuất trực tiếp bằng các lệnh PUSH và POP để lưu trữ tạm
thời và lấy lại đữ liệu, hoặc được truy xuất ngầm bằng các lệnh gọi chương trình
con (ACALL, LCALL) và các lệnh trở về (RET, RETD để cất và lấy lại bộ đếm
chương trình
4 Con trỏ dữ liệu:
Con trỏ dữ liệu (DPTR) được dùng để truy xuất bộ nhớ ngoài là một thanh ghi
16 bit ở địa chỉ 82H (DPL: byte thấp) và 83H (DPH: byte cao) Ba lệnh sau sẽ ghi 55H vào RAM ngoài ở địa chỉ 1000H:
MOV A, #55H MOV DPTR, #1000H MOV @DPTR, A
Lệnh đầu tiên dùng địa chỉ tức thời để tải dữ liệu 55H vào thanh ghi tích lũy
Lệnh thứ hai cũng dùng địa chỉ tức thời, lần này để tải dữ liệu 16 bit 1000H vào
Trang 19
Trang 18Phần B: Kiến thức cơ sở Chương I: Giới thiệu vỉ điều khiển AT89C51
a
con trỏ dữ liệu Lệnh thứ ba dùng địa chỉ gián tiếp để di chuyển dữ liệu trong A (55H) đến RAM ngoài ở địa chỉ được chứa trong DPTR (1000H)
5 Các thanh ghi port xuất nhập:
Các port của 89C51 bao gồm Port 0 ở địa chỉ 80H, Port 1 ở địa chỉ 90H, Port 2 ở địa chỉ A0H và Port 3 ở địa chỉ B0H Tất cả các port đều được địa chỉ hóa từng bit
Điều đó cung cấp một khả năng giao tiếp thuận lợi Ví dụ nếu một motor được nối
qua một cuộn dây có transistor lái đến bit 7 của Port 1, nó có thể được bật và tắt
bằng một lệnh đơn:
SETB PI.7 ; bật motor
CLR PI.7 ; tắtmotor
Các lệnh trên dùng dấu chấm để xác định một bit trong một byte Trình hợp
dịch sẽ thi hành sự chuyển đổi cần thiết, vì vậy hai lệnh sau đây là như nhau:
CLR PI.7 CLR 97H Trong một ví dụ khác, xem xét giao tiếp đến một thiết bị với một bit trạng thái
gọi là BUSY, được set khi thiết bị đang bận và được xóa khi thiết bi sấn sàng Nếu BUSY được nối tới P1.5, vòng lặp sau sẽ được dùng để chờ thiết bị trở lai sin
sàng:
WAIT: JB P1.5, WAIT Lệnh này có nghĩa là “ nếu bit P1.5 được set thì nhảy tới nhan WAIT ” Nói
cách khác “nhảy trở lại và kiểm tra lần nữa”
6 Cac thanh ghi timer:
89C51 chứa hai bộ định thời / đếm 16 bit được dùng cho việc định thời hoặc
đếm sự kiện Timer 0 ở địa chỉ 8AH (TL0: byte thấp) và 8CH (THO: byte cao)
Timer 1 ở địa chỉ 8BH (TLI: byte thấp) và 8DH (THI: byte cao) Viéc van hành hanh timer được set bởi thanh ghi Timer Mode (TMOD) 6 dia chi 89H va thanh ghi diéu khién timer (TCON) 6 dia chi 88H Chi có TCON được địa chỉ hóa từng bit
7 Các thanh phi port nối tiếp:
MCS5I1 chứa một port nối tiếp trên chip dành cho việc trao đổi thông tin với
các thiết bị nối tiếp như máy tính, modem hoặc cho việc giao tiếp với các IC khác
có giao tiếp nối tiếp (các bộ chuyển đổi A/D, các thanh ghi dịch ) Một thanh ghi gọi là bộ đệm dự liệu nối tiếp (SBUF) ở địa chỉ 99H sẽ giữ cả hai di liệu truyền
và nhận Khi truyén đữ liệu thì ghi lên SBUF, khi nhận dữ liệu thì đọc SBUF Các
mode vận hành khác nhau được lập trình qua thanh ghi điểu khiển port nối tiếp
(SCON) (được địa chỉ hóa từng bit) ở địa chỉ 98H
Trang 19Phần B: Kiến thức cơ sở Chương I: Giới thiệu vi điều khiển A T89C51
FEE
8 Các thanh ghi điều khiển ngắt:
89C51 có cấu trúc 5 nguồn ngắt, 2 mức ưu tiên Các ngắt bị cấm sau khi reset
hệ thống và sẽ được cho phép bằng việc ghi thành ghi cho phép ngắt (IE) ở địa chỉ
A8H Ca hai thanh ghi được địa chỉ hóa từng bịt
9, Thanh ghi điều khiển công suất:
Thanh ghi điều khiển công suất (PCON) ở địa chỉ 87H chứa nhiều bit điều
khiển Chúng được tóm tắt trong bảng sau:
Bit Ky hiéu Ý nghĩa
7 SMOD_ | Bit gấp đôi tốc độ baud, nếu được
set thì tốc độ baud sẽ tăng gấp đôi
trong các mode 1, 2 và 3 của port
1 PD Giảm công suất, được set để kích
hoạt mode giảm công suất, chỉ
thoát khi reset
0 IDL Mode chờ, set để kích hoạt mode
chờ, chỉ thoát khi có ngắt hoặc reset hệ thống
V LENH RESET
89C51 được reset bằng cách giữ chân RST ở mức cao ít nhất trong 2 chu kỳ
máy và trả nó về mức thấp RST có thể được kích bằng tay dùng một nút bấm
hoặc có thể được kích khi cdp dién dang mach RC{TRUGNS HHDL-KTCN
THU VIEN
Is0_201007914- _}
Trang 21
Trang 20
Mach reset hé thong
Trạng thái của tất cả các thanh ghi của 89C51 sau khi reset hệ thống được tóm
tắt trong bảng sau:
Thanh shi Nội dung
Quan trọng nhất trong các thanh ghi trên là thanh ghi đếm chương trình nó được
được đặt tại 0000H Khi RST trở lại mức thấp, việc thi hành chương trình luôn bắt
đầu ở địa chỉ đầu tiên trong bộ nhớ chương trình: địa chỉ 0000h Nội dung của
RAM trên chip không bị thay đổi bởi lệnh reset
Trang 21Phần B: Kiến thức cơ sở Chương I: Giới thiệu vi điều khiển AT89C51
thể xem như số đếm số xung nhịp (hoặc các sự kiện) từ khi khởi động timer Ví dụ timer 16 bit sẽ đếm lên từ 0000H đến FFFFH Cờ báo tràn sẽ lên 1 khi số đếm tràn
từ FFFFH đến 0000H
AT89C51 có hai timer 16 bit, mỗi bít có bốn cách làm việc Người ta sử dụng
các timer để: định khoảng thời gian, đếm sự kiện, tạo tốc độ baud cho port nối tiếp
Trong các ứng dụng định khoảng thời gian, người ta lập trình timer ở một khoảng
đều đặn và đặt cờ tràn timer Cờ được dùng để đồng bộ hoá chương trình để thực
hiện một tác động như kiểm tra trạng thái của các ngõ vào hoặc gửi sự kiện ra các
ngõ ra Các ứng dụng khác có thể sử dụng việc tạo xung nhịp đều đặn của timer để
đo thời gian trôi qua giữa hai sự kiện (ví dụ: đo độ rộng xung)
Đếm sự kiện dùng để xác định số lần xảy ra của một sự kiện Một sự kiện là
bất cứ tác động ngoài nào có thể cung cấp một chuyển trạng thái trên một chân
của 89C51 Các timer cũng có thể cung cấp xung nhịp tốc độ baud cho port nối tiếp
Truy xuất các timer của 89C51 ding sáu thanh ghi chức năng đặc biệt cho trong bảng sau:
SFR Mục đích Địa chỉ | Địa chỉ hoá
TMOD | Chế độ timer 89H Không
TLO | Byte thấp của Timer0 | 8AH Không TUI | Byte thấp của Timerl | 8BH Không
THO | Byte cao cia Timer 0 8C H Không THỊ | Byte cao của Timer 1 8D H
Trang 22Phần B: Kiến thức cơ sở Chương I: Giới thiệu vi điều khiển AT89C51
ei
2 Thanh ghi ché d6 timer (TMOD):
Thanh ghi TMOD chứa hai nhóm 4 bịt dùng để đặt chế độ làm việc cho Timer 0 và
Timer 1
7 | GATE 1 Bit (mở) cổng, khi lên 1, timer chỉ chạy khi INTI ở
mức cao
6 C/T 1 Bit chọn chế độ counter/timer
1 = bộ đếm sự kiện
0 = bộ định khoảng thời gian
5 MI 1 Bit 1 của chế độ (mode)
4 M0 1 Bit 0 của chế độ:
00: chế độ 0: timer 13 bit 01: chế độ 1: timer 16 bit
Tóm tắt thanh ghi TMOD
| 3 Thanh ghi diéu khién timer (TCON):
| Thanh ghi TCON chứa các bit trạng thái và các bit diéu khién Timer 0 va Timer 1
Bit | Ký hiệu | Địa chỉ Mô tả
TCON.7 TF1 8FH | Cờ báo tran timer 1 Đặt bởi phần cứng khi
tràn, được xóa bởi phầm mềm hoặc phần cứng khi bộ xử lý chỉ đến chương trình phục vụ ngắt
TCON6| TRI 8EH | Bit điểu khiển timer 1 chạy Đặt/xóa bằng phần
mềm để cho timer chay/ngung
TCON.5 TFO 8DH_ | Cờ báo tràn Timer 0
TCON.4 TRO §CH_ | Bit điều khiển Timer 0 chạy
TCON3| IEI 8BH | Cờ cạnh ngắt 1 bên ngoài Đặt bởi phần cứng
khi phát hiện một cạnh xuống ở INT1; xóa
bằng phẫn mềm hoặc bằng phần cứng khi CPU
chỉ đến chương trình phục vụ ngắt
TCON.2| TTI 8AH | Cờ kiểu ngắt 1 bên ngoài Đặt/xóa bằng phần
mềm để ngắt ngoài tích cực cạnh xuống/mức thấp
TCON.1 E0 89H | Cờ cạnh ngắt 0 bên ngoài
TCON.0| TT0 88H | Cờ kiểu ngắt 0 bên ngoài
Tóm tắt thanh ghi TCON
Trang 23Phần B: Kiến thức cơ sở Chương I: Giới thiệu vi điều khiển AT89C51
b.Chế đô 1 - chế đô timer ]6 bịt:
- Hoạt động như timer 16 bit đầy đủ
- Cờ báo tràn là bit TFx trong TCON có thể đọc hoặc ghi bằng phần mềm
- MSB của giá trị trong các thanh ghi timer là bit 7 của THx và LSB là bit 0 của
TLx Các thanh ghi timer (TLx/THx) có thể được đọc hoặc ghi bất cứ lúc nào bằng
c Chế đô 2 - chế độ tự đông nạp lại 8 bit:
TLx hoạt động như một timer 8 bit, trong khi đó THx vẫn giữ nguyên giá trị được
nạp Khi số đếm tràn từ FFH đến 00H, không những cờ timer được set mà giá trị
trong THx đồng thời được nạp vào TLx, việc đếm tiếp tục từ giá trị này lên đến
FFh xuống 00H và nạp lại v.v Chế độ này rất thông dụng vì sự tràn timer xảy ra
trong những khoảng thời gian nhất định và tuần hoàn một khi đã khởi động TMOD
và THx
d_Chế đô 3 - chế đô tách timer:
- Timer 0 tách thành hai timer 8 bit (TLO và TH0), TL0 có cờ báo tran 14 TFO va
TH0 có cờ báo tràn là TF1
- Timer 1 ngưng ở chế độ 3, nhưng có thể được khởi động bằng cách chuyển sanh
chế độ khác Giới hạn duy nhất là cờ báo tràn TF1 không còn bị tác động khi
timerl bị tràn vì nó đã được nối tới TH0
- Khi timer 0 ở chế độ 3, có thể cho timer 1 chạy và ngưng bằng cách chuyển nó ra
ngoài và vào chế độ 3 Nó vẫn có thể được sử dụng bởi port nối tiếp như bộ tạo tốc
Trang 25
Trang 24Phần B: Kiến thức cơ sở Chương I: Giới thiệu vi điều khiển A T89C51
—>>5zsäẵỲỶ-naynänỶïnnnnnnợtnnnasasananaannnanaanana ẳnneneem
độ baud hoặc nó có thể được sử dụng bằng bất cứ cách nào không cần ngắt (vì nó
không còn được nối với TFI)
Xung nhịp
5 Nguồn tao xung nhịp:
Có hai nguồn tạo xung nhịp có thể có, được chọn bằng cách ghi vào bít C/T -
(counter/timer) trong TMOD khi khởi động timer Một nguồn tạo xung nhịp dùng
cho định khoảng thời gian, cái khác cho đếm sự kiện
Nguồn tạo xung nhịp
* Định khoảng thời gian (interval timing):
Nếu C/T =0, hoạt động timer liên tục được chọn va timer được dùng cho việc
định khoảng thời gian Lúc đó, timer lấy xung nhịp từ bộ dao động trên chip Bộ
chia 12 được thêm vào để giảm tần số xung nhịp đến giá trị thích hợp cho phần lớn
các ứng dụng Như vậy, thạch anh 12 MHz sẽ cho tốc độ xung nhip timer 1 MHz Báo tràn timer xảy ra sau một số (cố định) xung nhịp, phụ thuộc vào giá trị ban
đầu được nạp vào các thanh ghi timer TLx/THx
* Đếm sư kién (event counting):
Nếu C/T = 1, timer lấy xung nhịp từ nguồn bên ngoài.Trong hầu hết các ứng
dụng, nguồn bên ngoài này cung cấp cho timer một xung khi xảy ra một“sự kiện”
- timer dùng đếm sự kiện Số sự kiện được xác định bằng phần mềm bằng cách
đọc các thanh ghi TLx/THx vì giá trị 16 bit trong các thanh ghi này tăng thêm cho
mỗi sự kiện
Trang 26
Trang 25
Phần B: Kiến thức cơ sở Chương I: Giới thiệu vi điều khiển AT89C51
EEE
Nguồn xung nhịp ngoài có từ thay đổi chức năng của các chân Port 3 Bit 4 của
Port 3 (P3.4) dùng làm ngõ vào tạo xung nhịp bên ngoài cho timer 0 và được gọi là
“ T0” Và P3.5 hay “ T1” là ngõ vào tạo xung nhip cho timer 1
Trong các ứng dụng bộ đếm, các thanh ghi timer được tăng thêm 1 tương ứng
với chuyển từ 1 xuống 0 ở ngõ vào bên ngoài: Tx Ngõ vào bên ngoài được lấy
mẫu trong S5P2 của mọi chu kỳ máy Như vậy, khi ngõ vào cao trong một chu kỳ
và thấp trong một chu kỳ kế thì số đếm được tăng thêm 1 giá trị mới xuất hiện
trong các thanh ghi S3P1 của chu kỳ theo sau chu kỳ trong đó phát hiện sự chuyển
tiếp Do đó, mất 2 chu kỳ máy (2 micro giây) để ghi nhận một sự chuyển 1 sang 0,
tần số ngoài tối đa là 500 KHz (giả sử hoạt động ở 12 MHz)
6 Bắt đầu dừng và điều khiển các timer:
Phương pháp đơn giản nhất để bắt đầu ( cho chạy) và đừng các timer là dùng
các bit điểu khiển chạy: TRx trong TCON TRx bị xóa sau khi reset hệ thống Như
vậy, các timer theo mặc nhiên là bị cấm (bị dừng) TRx được đặt lên 1 bằng phần
mềm để cho các timer chạy
Xung nhp NN _———>y Các thanh ghi timer
| 0 = lên: timer dừng TRx 1 = xuống: timer chav
Cho chạy và dừng các timer
Vì TRx ở trong thanh ghi TCON có địa chỉ bit, nên dễ dàng cho việc điều khiển
các timer trong chương trình Ví dụ, cho timer 0 chạy bằng lệng:
SETB TRO
và dừng bằng lệnh:
SETB TRO
Trình biên dịch sẽ thực hiện việc chuyển đổi ký hiệu cần thiết từ “ TRŨ” sang
địa chỉ bit đúng SETB TRO chính xác giống như SETB §CH
Một phương pháp khác để điểu khiển các timer là dùng bit GATE trong TMOD
và ngõ vào bên ngoài INTx Đặt GATE = 1 cho phép timer sẽ được điều khiển
bằng INTx Việc này hữu dụng cho việc đo độ rộng xung như sau: giả sử INT0 ở
mức thấp nhưng các xung ở mức cao trong khoảng thời gian đo Khởi động timer ở
chế độ 2 (chế độ timer 16 bit), với TL0/TH0 = 0000H, GATE = 1 va TRO = 1 Khi
Trang 26tạ
Phần B: Kiến thức cơ sở Chương I: Giới thiệu vi điều khiển AT89C51
a
7 Khởi đông và truy xuất các thanh ghi timer:
Thông thường các thanh ghi được khởi động một lần ở đâu chương trình để đặt
chế độ làm việc đúng Sau đó, trong thân chương trình, các timer được cho chạy,
dừng, các bit cờ được kiểm tra và xóa, các thanh ghi timer được đọc và cậo
nhật,v.v theo đòi hỏi của các ứng dụng.TMOD là thanh ghi thứ nhất được khởi
động vì nó đặt chế độ hoạt động Ví dụ, các lệnh sau khởi động timer 1 nhv timer
16 bit ( chế độ 1) có xung nhịp từ bộ đao động trên chip cho việc định khoảng thời:
MOV TMOD, #00010000B Lệnh này sẽ đặt M1 = 0 và M0 = 1 cho chế đố 1, C/T = 0 va GATE = 0 cho
xung nhịp nội và xóa các bit chế độ timer 0 Dĩ nhiên, timer thật sự không bắt đầu
định thời cho đến khi bit điều khiển chạy TR1 được đặt lên 1
Nếu cần số đếm ban đầu, các thanh ghi timer TL1/THI cũng phải được khởi
động Nhớ lại là các timer đếm lên và đặt cờ báo tràn khi có sự chuyển tiếp
FFFFH sang 0000H Một khoảng 100 micro giây có thể được định thời bằng cách
khởi động trị cho TL1/THI là FF9CH:
MOV TLI1, #9CH MOV TH1, #0FFH
Rồi timer được cho chạy bằng cách đặt bit điểu khiển chạy như sau:
SETB TR1
Cờ báo tràn được tự động đặt lên 1 sau 100 micro giây
Phần mềm có thể đợi trong 100 micro giây bằng cách dùng lệnh rẽ nhánh có
điều kiện nhảy đến chính nó trong khi cờ báo tràn chưa được đặt lén 1:
Trong một số ứng dụng cần đọc giá trị trong các thanh ghi timer đapg.chạy Vì
phải đọc hai thanh ghi timer, “sai pha” có thể xảy ra nếu byte thấp tràn vào byte
cao giữa hai lần đọc Giá trị có thể đọc được không đúng Giải pháp là đọc byte
cao trước, kế đó đọc byte thấp rồi đọc byte cao lại một lần nữa Nếu byte cao đã
thay đổi thì lặp lại các hoạt động đọc Các lệnh dưới đây đọc nội dung của các
thanh ghi timer TL1/THI vào các thanh ghi R6/R7:
Trang 28
v b L& + i
Trang 27Phần B: Kiến thức cơ sở Chương I: Giới thiệu vi điều khiển AT89C51
——nr-sry- iẳsz-.-.zrzsrsnsasasasaaamammaxsaaraanansasnnnneeaeen
AGAIN: MOV A, THỊ MOV Ró6, TLI1
CJNZ A, TH1, AGAIN
MOV R7,A
8 Các khoảng ngắn va các khoảng dài:
Khoảng thời gian ngắn nhất có thể có bị giới hạn không chỉ bởi tần số xung
nhịp của timer mà còn bởi phần mềm Do ảnh hưởng của khoảng thời gian thực
hiện một lệnh, lệnh ngắn nhất của 89C51 là 1 chu kỳ máy hay l micro giây Sau
đây là bảng tóm tắt các kỹ thuật để tạo những khoảng thời gian có chiều dài khác
nhau (với giả sử xung nhịp cho 89C51 có tần số 12MHz):
Một ngắt là sự xảy ra một điều kiện- một sự kiện- mà nó gây ra treo tạm thời
chương trình trong khi điều kiện đó được phục vụ bởi một chương trình khác
Các ngắt đóng một vai trò quan trọng trong thiết kế và cài đặt trong các ứng
dụng vi điểu khiển Chứng cho phép hệ thống đáp ứng bất đồng bộ với một sự kiện
và giải quyết sự kiện đó trong khi một chương trình khác đang thực thi
Một hệ thống được điều khiển bằng ngắt cho ảo giác là làm nhiều đồng thời
Dĩ nhiên CPU mỗi lần không thể thực thi hơn một lệnh Nhưng nó có thể tạm treo
việc thực thi một chương trình để thực thi chương trình khác, rồi quay về chương
trìnn thứ nhất Theo cách này, nó giống như một chương trình con, nhưng có sự
khác biệt trong hệ thống được điều khiển bằng ngắt là sự ngắt quãng không xảy ra
như kết quả của một lệnh (lệnh CALL subroutine), mà là đáp ứng với một “ sự
kiện” xảy ra bất đồng bộ với chương trình chính Người ta không biết khi nào và ở
đâu chương trình chính sẽ bị ngắt quãng
Chương trình giải quyết ngắt được gọi là chương trình phục vụ ngắt
(ISR:Interrupt Service Routine) hoặc bộ xử lý ngắt ISR thực thi khi đáp ứng ngắt
và thông thường thực hiện tác vụ mhập hay xuất với một thiết bị Khi ngắt xảy ra,
chương trình chính tạm thời bị treo và rẻ nhánh đến ISR: ISR thực thi và kết thúc
bằng lệnh trở về từ ngặt, chương trình chính tiếp tục thực thi ở chỗ mà nó tạm
dừng Thường người ta xẻm chương trình chính như thực thi ở mức nền (cơ sở)
(base-level) và các ISR thực thi ở mức ngắt (interrupt-level) Người ta cũng dùng
các thuật ngữ foreground chỉ mức nền và background chỉ mức ngắt Hình ảnh khái
quát của các ngắt được mô tả trong hình sau:
Trang 29
Trang 28Phần B: Kiến thức cơ sở Chương I: Giới thiệu vi điều khiển A T89C51
a.Thực thi chương trình không có ngắt
Có 5 nguồn ngắt ở 89C51: 2 ngắt ngoài, 2 ngắt từ timer và 1 ngắt port nối tiếp
Tất cả các ngắt theo mặc nhiên đều bị cấm sau khi reset hệ thống và được cho
phép từng cái một bằng phần mềm
Khi có hai hoặc nhiều ngắt đông thời, hoặc một ngắt vẫy ra trong khi một ngắt
khác đang được phục vụ, có cả hai sự tuần tự hỏi vòng và sơ đồ ưu tiên hai mức
dùng để xác định việc thực biện các ngắt Việc hỏi vòng tuần tự thì cố định nhưng
ưu tiên ngắt thì có thể lập trình được
a Cho phép và cấm các ngắt:
Mỗi nguồn ngắt được cho phép hoặc cấm từng ngắt một qua thanh ghi chức -
năng đặc biệt có định địa chỉ bit IE (Interrupt Enable: cho phép ngắt) ở địa chỉ
A8H Cũng như các bit cho phép riêng biệt cho mỗi nguồn ngắt, có một bit cho
phép/cấm toàn bộ được xóa để cấm tất cả các ngắt hoặc được đặt lên 1 để cho
phép tất cả các ngắt
Bit |Kýhiệu |Địachỉbit | Mô tả (1 = cho phép, 0 = cấm)
IE.7 |EA AFH Cho phép/cấm toàn bộ
IE.6 |- AEH Không được định nghĩa
IE.5 | ET2 ADH Cho phép ngắt từ timer 2
IE.4 |ES ACH Cho phép ngắt port nối tiếp
IE.3 |ETI ABH Cho phép ngắt từ timer 1
IE.2 |EXI | |AAH Cho phép ngắt ngoài
IE.1 |ET0 A9H Cho phép ngắt từ timer 0
IE.0 |EXO A8H Cho phép ngắt ngoài 0
Tóm tắt thanh ghi IE
TEP discgee 2
Trang 29MG oo:
Phần B: Kiến thức cơ sở Chương I: Giới thiệu vi điều khiển AT89C51
aaaaaỶnszaaơợazaơơờơờợờợơợơggợgơơơgnnnaasanaannasanợnơgợgaơơơnơơơợớnnnnnnnaananananannnnnannmmm
Hai bit phải được đặt lên 1 dé cho phép bất kỳ ngắt nào: bit cho phép riêng và
bit cho phép toàn bộ Ví dụ, các ngắt từ timer 1 được cho phép như sau:
SETB ETI ; cho phép ngắt từ timer l
SETB EA ; dat bit cho phép toàn bộ
Cũng có thể sử dụng lệnh sau:
MOV IE, #10001000B Mặc dù hai cách này có cùng hiệu quả sau khi reset hệ thống, nhưng hiệu quả
sẽ khác nếu IE được ghi ở giữa chương trình Cách thứ nhất không ảnh hưởng đến
5 bit khác trong thanh ghi IE, trái lại cách thứ hai sẽ xóa các bit khác Nên khởi trị
IE theo cách thứ hai ở đầu chương trình (nghĩa là sau khi mở máy hoặc reset hệ
thống), nhưng cho phép và cấm các ngắt ngay trong chương trình nên dùng cách
thứ nhất để tránh ảnh hưởng đến các bit khác trong thanh ghi IE
b Ưu tiên ngắt:
Mỗi nguồn ngắt được lập trình riêng vào một trong hai mức ưu tiên qua thanh
ghi chức năng đặc biệt được địa chỉ bit Ip (Interrupt Priority: Ưu tiên ngắt) ở địa chỉ
Bit | Ky hiéu | Dia chi bit | Mô tả (1 = mức cao hơn, 0 = mức thấp hơn)
IP.7 |- - Không được định nghĩa IP.6 | - - Không được định nghĩa
IP.5 | PT2 BDH Ưu tiên cho ngắt từ timer 2
IP.4 | PS BCH Ưu tiên cho ngắt port nối tiếp
IP.3 | PT1 BBH Ưu tiên cho ngắt từ timer 1
IP.2 | PX1 BAH Ưu tiên cho ngắt ngoài
IP.1 | PTO B9H Ưu tiên cho ngắt từ timer 0
IP.0 |PXO BSH Ưu tiên cho ngắt ngoài 0
Tóm tắt thanh ghi IP
IP bị xóa sau khi reset hệ thống để (mặc nhiên) đặt tất cả các ngắt ở mức ưu
tiên thấp hơn Ý tưởng “ưu tiên” cho phép một ISR sẽ bị ngắt bởi một ngắt nếu
ngắt có độ ưu tiên cao hơn ngắt đang phục vụ Nếu một ISR có ưu tiên thấp đang
thực thi khi một ngắt có ưu tiên cao xây ra thì ISR bị ngắt ISR có ưu tiên cao
không thể bị ngắt
Chương trình chính thực thi ở mức nên và không liên hệ với bất cứ ngắt nào, có
thể luôn luôn bị ngắt quãng bất chấp ưu tiên củ ngắt Nếu hai ngắt có độ ưu tiên
khác nhau xảy ra đồng thời thì ngắt có độ ưu tiên cao hơn sẽ được phục vụ trước
c Hỏi vòng tuân tự:
Nếu hai ngắt cùng độ ưu tiên xảy ra đồng thời, sự hỏi vòng tuần tự sẽ xác định
cái nào được phục vụ trước tiên Hỏi vòng tuần tự là bwốn ngoài 0, timer 0, bên
ngoài 1, timer 1, port nối tiếp và timer 2
Hình sau minh họa 5 nguồn ngắt, cơ chế riêng biệt và toàn bộ, hỏi vòng tuần tự
và các mức ưu tiên Trạng thái của tất cả các nguồn ngắt khả dung qua các bit cờ
tương ứng trong các SFR Dĩ nhiên, nếu có bất kỳ ngắt nào bị cấm, ngắt không xảy
ra, nhưng phần mềm vẫn có thể kiểm tra cờ ngắt
Trang 31
AR A,
Trang 30
LOW PRIOAITY mat
Ngắt Cờ | Thanh ghi SFR và vị trí bit
Bên ngoài 0 | IE0 TCON.1
Bén ngoail | IE1 TCON.3 Timer 1 TFl TCON.7 Timer 0 TFO TCON.S
Port nối tiếp | TI SCON.1
Port nối tiếp | RI SCON.0
Các bit cờ ngắt
3 Xử lý ngắt:
Khi ngắt xẩy ra và được CPU chấp nhận, chương trình chính bị ngắt quãng
Những hoạt động sau xảy ra: ĐÓ so Lf tag sens mây ¬"
e - Lệnh hiện hành hoàn tất việc thực thi
e© Cất PC vào ngăn xếp
e_ Trạng thái ngắt hiện hành được cất bên trong
Trang 31Phần B: Kiến thức cơ sở Chương I: Giới thiệu vi điều khiển AT89C51
m=rmaaaammmmmmmmmmmmmmaaaanarsaasaaanaaanaanaaanaaanananaaannnanammeemmann.m
Port néitiép | TI hodc RI 0023H
Các vector ngắt
Vector reset hệ thống (RST ở địa chỉ 0000H) được để trong bảng này vì theo
định nghĩa này, nó giống ngắt: nó ngắt chương trình chính và nạp cho PC giá trị
mới
Khi “chỉ đến một ngắt”, cờ gây ngắt tự động bị xóa bởi phần cứng Các ngoại
lệ là RI và TI với các ngắt port nối tiếp Vì có hai nguồn có thể có cho ngắt này, không thực tế để CPU xóa cờ ngắt này Các bit phải được kiểm tra trong ISR để xác định nguồn ngắt và cờ tạo ngắt sẽ được xóa bằng phần mềm Thông thường
một rẽ nhánh xảy ra với một phản ứng thích hợp, phụ thuộc vào nguồn ngắt
Vì các vector ngắt ở phần đầu của bộ nhớ chương trình, lệnh thứ nhất của
chương trình chính thường là lệnh nhảy qua vùng nhớ này, ví dụ như LIMP 0030h
4 Thiết kế chương trình dùng các ngắt:
a Các chương trình phục vụ ngắt có kích thước nhỏ:
Các chương trình phục vụ ngắt phải bắt đầu ở gần phần đầu của bộ nhớ chương
trình ở các địa chỉ trong bảng Các vector ngắt Mặc dù chỉ có § byte ở giữa các
điểm vào ngắt, thường đủ bộ nhớ để thực hiện hoạt động mong muốn và quay về
ORG 000BH ; điểm vao timer 0
TOISR: ; ISR cho timer 0 bắt đầu
RETI ; quay về chương trình chính
MAIN: ; chương trình chính
Nếu'sử dụng nhiễu lngắt, phải cẩn thận, bảo đầm là chúng bắt đẫư &vi ti ding
và không chạy quá sang ISR kế Vì chỉ có một ngắt được sử dụng trong ví dụ trên,
chương trình chính có thể bắt đầu ngay sau lệnh RETI
Trang 33
Trang 32Phần B: Kiến thức cơ sở Chương I: Giới thiệu vi điều khiển AT89C51
b Các chương trình phục vụ ngắt có kích thước lớn:
Néu ISR dai hon 8 byte, có thể cần chuyển nó tới nơi nào đó trong bộ nhớ
chương trình hoặc có thể để nó đi lố qua điểm vào của ngắt kế Tiêu biểu là ISR
bắt đầu với lệnh nhảy đến vùng nhớ khác ở đó có thể mở rộng chiều dài ISR Ví
dụ lúc này chỉ xét timer 0, có thể sử dụng khung sau:
ORG 0000H : điểm vào reset
LIMP MAIN ORG 000BH ; điểm vào timer 0 LJMP TOISR
ORG 0030H ; các vector ngắt tiếp theo
MAIN:
TOISR: : ; ISR cho timer 0
Để đơn giản, chương trình của chúng ta sẽ chỉ làm một việc lúc đầu Chương
trình khởi động tỉimer, port nối tiếp và các thanh ghi ngắt cho thích hợp và rồi
không làm gì cả Công việc hoàn toàn được làm trong ISR Sau các lệnh khởi
động, chương trình chính chứa lệnh sau:
HERE: SJMP HERE hay dạng viết gọn như sau:
SJMP $ Khi ngắt xảy ra, chương trình chính bị ngắt quãng tạm thời trong khi ISR thực
thi Lệnh RETI ở cuối ISR trả điểu khiển về chương trình chính và nó tiếp tục
không làm gì cả Trong nhiều ứng dụng điều khiển, nhiều công việc thật ra được
thực hiện hoàn toàn trong ISR
Vì sử dụng ngắt, nên lệnh SIMP $(HERE: SIMP HERE) có thể được thay
thế bằng các lệnh thực hiện các công việc khác cần trong ứng dụng
5 Các ngắt của 89C51:
a Các ngắt timer:
Các ngắt timer có địa chỉ vector ngắt là 000BH (timer 0) và 001BH (timer ])
Ngắt timer xây ra khi các thanh ghi timer (TLx/THx) tràn và set cờ báo tràn (TFx)
lên 1
Chú ý rằng các cờ timer (TFx) không bị xóa bằng phần mêm Khi cho phép các
ngắt, TFx tự động xóa bằng phần cứng khi CPU chuyển đến ngắt
b Các ngắt cổng nối tiếp:
Ngắt cổng nối tiếp xảy ra khi hoặc cờ ngắt phát (TD hoặc cờ ngắt thu (RD được
đặt lên 1 Ngắt phát xảy ra khi truyễển một ký tự vừa được ghi vào SBUF.:Ngắtthat +y/-
xảy ra khi một ký tự đã được nhận xong và đang đợi trong SBUF để được đọc -
Ngắt cổng nối tiếp hơi khác với nhắt timer Cờ gây ra ngắt cổng nối tiếp không
bị xóa bằng phần cứng khi CPU chuyển tới ngắt Nguyên đo là có hai nguồn ngắt
Trang 34
Trang 33Các ngắt ngoài xảy ra khi có một mức thấp hoặc cạnh xuống trén chin INTO
hoặc INT1 của 89C51 Đây là các chức năng chuyển đổi của các bit Port 3: P3.2
(chân 12) và P3.3 (chan 13)
Các cờ tạo các ngắt này là các bit IE0 và IE1 trong TCON Khi quyển điều
khiển đã chuyển đến ISR, cờ tạo ra ngắt chỉ được xóa nếu ngắt được tích cực bằng
cạnh xuống Nếu ngắt được tích cực theo mức, thì nguồn yêu cầu ngắt bên ngoài
sẽ điều khiển mức của cờ thay cho phần cứng
Sự lựa chọn ngắt tích cực mức thấp hay tích cực cạnh xuống được lập trình qua
cdc bit ITO va IT1 trong TCON Vi du, néu IT1 = 0, ngắt ngoài 1 được kích khởi
bằng mức thấp 6 chan INT1 Néu IT1 = I, ngắt ngoài 1 sẽ được kích khởi bằng
cạnh Trong chế độ này, nếu các mẫu liên tiếp của trên chân INTI chỉ mức cao
trong một chu kỳ và thấp trong chu kỳ kế, cờ yêu cầu ngắt IE1 trong TCON được
đặt lên 1 Rồi bit cờ IE1 yêu cầu ngắt
Vì các chân ngắt ngoài được lấy mẫu một lần ở mỗi chu kỳ máy, ngõ vào nên
được giữ trong tối thiểu 12 chu kỳ dao động để bảo đảm lấy mẫu đúng Nếu ngắt
ngoài được tác động theo cạnh xuống, nguồn bên ngoài phải giữ chân yêu cầu cao
tối thiểu một chu kỳ và giữ nó ở mức thấp thêm một chu kỳ nữa để bảo đảm phát
hiện được cạnh xuống IE0 và IE1 tự động được xóa khi CPU chuyển tới ngắt
Nếu ngắt ngoài được tác động theo mức, nguồn bên ngoài phải giữ yêu cầu tác
động cho đến khi ngắt được yêu cầu thật sự được tạo ra Rồi nó phải không tác
động yêu cầu trước khi ISR được hoàn tất, nếu không một ngắt khác sẽ được lặp
lại Thông thường khi vào ISR người ta làm nguồn yêu câu đưa tín hiệu tạo ngắt về
trạng thái không tác động
VIIIL HOẠT ĐÔNG PORT NỐI TIẾP:
1 Giới thiệu:
89C51 có một port nối tiếp trong chip có thể hoạt động ở nhiều chế độ trên một
dãi tân số rộng Chức năng chủ yếu của port nối tiếp là thực hiện chuyển đổi song
song sang nối tiếp đối với dữ liệu xuất, và chuyển đổi nối tiếp sang song song với -
đữ liệu nhập
Truy xuất phần cứng đến port nối tiếp qua các chân TXD và RXD Các chân
này có chức năng khác với hai bit của port 3: P3.1 ở chân 11 (TXD) và P3.0 ở chân : -
10 (RXD)
Port nối tiếp cho hoạt động song công (full duplex: thu và phát đồng thời), và
đệm lúc thu (receiver buffering) cho phép một kí tự sẽ được thu và được giữ trong
khi kí tự thứ hai được nhận Nếu CPU đọc kí tự thứ nhất trước khi kí tự thứ hai được
thu đấy đủ thì dữ liệu sẽ không bị mất
Hai thanh ghi chức năng đặc biệt cho phép phân mềm truy xuất đến port nối
tiếp là: SBUF và SCON Bộ đệm port nối tiếp (SBUF) ở địa chỉ 99H thật sự là hai
bộ đệm Viết vào SBUF để nạp dữ liệu sẽ được phát, và đọc SBUF để truy xuất đữ
Trang 35
fas et i
Trang 34
Xung nhip Xung nhip J
tốc độ baud tốc độ baud SBUF
(phát) (thu) (chỉ đọc)
|
Thanh ghi điểu khiển port nối tiếp (SCON) ở địa chỉ 98H là thanh ghi có địa chi
bit chứa các bit trạng thái và các bit điểu khiển Các bit điểu khiển đặt chế độ hoạt
động cho port nối tiếp, và các bit trạng thái báo kết thúc việc phát hoặc thu kí tự
Các bit trạng thái có thể được kiểm tra bằng phần mềm hoặc có thể được lập trình
để tạo ngắt
Tần số làm việc của port nối tiếp còn gọi là tốc độ baud có thể cố định (lấy từ
bộ dao động trên chip) Nếu sử dụng tốc độ baud thay đổi, timer 1 sẽ cung cấp xung nhịp tốc độ baud và phải được lập trình
2 Thanh ghi điều khiển port nối tiếp:
Chế độ hoạt động của port nối tiếp được đặt bằng cách ghi vào thanh ghi chế
độ port nối tiếp (SCON) ở địa chỉ 98H Sau đây là bảng tóm tắt thanh ghi SCON và các chế độ của port nối tiếp:
Bít Ký hiệu | Địa chỉ | Mô tả
SCON.7 | SMO 9FH Bit 0 của chế độ port nối tiếp
SCON.6 |SMI 9EH Bit I của chế độ port nối tiếp
SCON.5 | SM2 9DH Bit 2 của chế độ port nối tiếp Cho phép truyền
thông đa xử lí trong các chế độ 2 và 3; RI sẽ không bị tác động nếu bit thứ 9 thu được là 0
SCON.4 | REN 9CH | Cho phép bộ thu phải được đặt lên 1 dé thu
Trang 35Phần B: Kiến thức cơ SỞ Chương I: Giới thiệu \ vi ¡ điều khiển AT89CS1
SCON.2 | RB8 9AH Bit 8 thu, bit thứ 9 thu được
SCON.1 | TI 99H Cờ ngắt phát Đặt lên 1 khi kết thúc phát kí tự,
SMO |SMI |Chế độ | Mô tả Tốc độ baud
0 0 0 Thanh ghi dịch | C6 dinh (F,, /12)
0 1 1 UART 8 bit Thay d6i (dat bing timer)
1 0 2 UART 9 bit C6 dinh (F,,, chia cho 12 hodc 64)
1 1 3 UART 9 bit Thay đổi (đặt bằng timer)
Các chế độ port nối tiếp
Trước khi sử dụng port nối tiếp, phải khởi động SCON cho đúng chế độ Ví dụ,
Bit cho phép bé thu (REN = Receiver Enable) trong SCON phải được đặt lên 1
bằng phần mềm để cho phép thu các kí tự Thông thường thực hiện việc này ở đầu
chương trình khi khởi động cổng nối tiếp, timer, Có thể thực hiện việc này theo
_ Bit dữ liệu thứ 9 cần phát trong các chế độ 2 và 3 phải được nạp vào trong TB8
bằng phần mềm Bit dữ liệu thứ 9 thu được đặt ở RB8 Phần mềm có thể cần hoặc
không cần bit đữ liệu thứ 9, phụ thuộc vào đặc tính kỹ thuật của thiết bị nối tiếp sử
dụng Bên cạnh đó, bit dữ liệu thứ 9 cũng đóng một vai trò quan trọng trong truyền
thông đa xử lí
c Thêm 1 parity:
Thường sử dụng bit đữ liệu thứ 9 để thêm parity vào kí tự Bit P trong từ trạng
thái chương trình (PSW) được đặt lên 1 hoặc bị xóa mỗi chu kì máy để thiết lập
kiểm tra chấn với 8 bit trong thanh ghi tích lũy Ví dụ, nếu truyền thông cần 8 bit
dữ liệu cộng thêm kiểm tra chấn, có thể sử dụng các lệnh sau để phát 8 bit trong
thanh ghi tích lũy với liểm tra chấn thêm vào bit thứ 9:
Trang 37
Trang 36
Phần B: Kiến thức cơ sở
MOV C,P ; Đặt bit parity chin vao TB8
MOV TB8, C ; Nó trở thành bit dữ liệu thứ 9 MOV SBUF, A; Chuyén 8 bit ty ACC vao SBUF
Nếu cần parity lẻ thì sửa các lệnh lại như sau:
MOV C, P ; Dat bit parity chin vao cd C
MOV TB8, C MOV SBUF, A
Dĩ nhiên, việc sử dụng parity khéng bị giới hạn ở các chế độ 2 và 3 Ở chế độ
1, 8 bit đữ liệu được truyền đi có thể bao gồm 7 bit dữ liệu cộng thêm bit parity
Để truyền mã ASCII 7 bit véi parity chấn ở bit 8, có thể sử dụng các lệnh sau:
CLR ACC.7 : bảo đảm MSB được xóa
MOV C, P ; parity chin ở trong P
MOV ACC.7, C; dat parity chin vio MSB
MOV SBUF, A ; gởi kí tự đi: 7 bit đữ liệu cộng parity chấn
d Các cờ ngắt:
Hai cờ ngắt thu và phát (RI và TỊ) trong SCON đóng một vai trò quan trọng
trong truyền thông cả hai bit được đặt lên 1 bằng phần cứng, nhưng phải được xóa
bằng phần mềm
Ví dụ, thường RI được đặt lên 1 khi kết thúc việc thu kí tự và báo “bộ đệm thu
tràn” Điều kiện này có thể được kiểm tra trong phần mềm hoặc có thể được lập
trình gây ra một ngắt Nếu phần mêm muốn nhập một kí tự từ thiết bị được nối vào cổng nối tiếp (có thể là thiết bị đầu cuối hiển thị video), nó phải đợi cho đến khi
RI được đặt lên 1, rồi xóa RI và đọc kí tự từ SBUF Chương trình như sau:
WAIT: JNB RI, WAIT ; kiểm tra RI cho đến khi nó = 1
CLR RI ; xóa RI
MOV A, SBUF ; doc ki ty
TI được đặt lên 1 ở cuối lúc phát kí tự và báo “bộ đệm phát trống” Nếu phần
mềm muốn gửi một kí tự đến một thiết bị được nối vào cổng nối tiếp, trước hết nó
phải kiểm tra xem cổng nối tiếp sẵn sàng chưa Nói cách khác, nếu kí tự trước đã
được gởi đi, đợi cho đến khi việc truyền đữ liệu hoàn tất trước khi gửi kí tự kế Các
lệnh sau sẽ truyền kí tự trong thanh ghi tích lũy:
WAIT: JNB TI WAIT ; kiểm tra TI cho đến khi nó = 1
CLR TI ; xóa TÍĨ MOV SBUF,A ; gởi kítự đi
Các đoạn chương trình trên là một phân của các hàm nhập và xuất kí tự chuẩn
e Tốc đô baud của port nối tiếp:
Tốc độ baud cố định ở các chế độ 0 và 2 Trong chế độ 0, nó luôn luôn là tần
số dao động trên chip được chia cho 12 Thông thường thạch anh ấn định tần số đao động trên chip của 89C51, nhưng cũng có thể sử dụng nguồn xung nhịp khác
Giả sử với tần số dao động là 12Mhz thì tốc độ baud chế độ 0 là 1 Mhz
Trang 38
Trang 37Chế độ: trên chip „2 baud
"| +64 SMOD = Chế độ 2: Dao động Y"—_ „ungnhịp
—>
Cacché Dao động tT „ Xung nhịp
độ 1 và 3: trên chip SMOD = tốc đô
—p, +16
Các nguồn tạo xung nhịp cho port nối tiếp
Mặc nhiên sau khi reset hệ thống, tốc độ baud chế độ 2 là tần số bộ dao động chia cho 64 Tốc độ baud cũng bị ảnh hưởng bởi một bit tring thanh ghi điều khiển
nguồn cung cấp (PCON) Bit 7 của PCON là bit SMOD Đặt bịt SMOD lên 1 làm
gấp đôi tốc độ bauc trong các chế độ 1, 2 và 3 Trong chế độ 2, tốc độ baud có thể
bị gấp đôi từ giá trị mặc nhiên của 1/64 tần số dao động (SMOD = 0) đến 1/32 tần
Các tốc độ baud trong các chế độ 1 và 3 được xác định bằng tốc độ tràn của
timer 1 Vi timer hoat động ở tần số tương đối cao, tràn timer được chia thêm cho
32 (16 nếu SMOD = 1) trước khi cung cấp xung nhịp tốc độ baud cho port nối tiếp
*Sử dụng timer 1 làm xung nhịp tốc độ baud:
Xét 8051, cách thông dụng để tạo tốc độ baud là khởi động TMOD cho chế độ
§ bit tự động nạp lại (chế độ 2) và đặt giá trị nạp lại đúng vào TH để cho tốc độ tràn đúng với tốc độ baud TMOD được khởi động như sau:
MOV TMOD, #0010xxxxB
Các x là các bit 1 hoặc 0 cần cho timer
Cũng có thể đạt được các tốc độ baud thấp bằng cách sử dụng timer chế độ 1
với TMOD = 0001xxxxB Tuy nhiên, tốn thêm phần mềm vì các thanh ghi
THI1/TLI1 phải được khởi động lại sau mỗi lần tràn Việc này sẽ được thực hiện trong chương trình phục vụ ngắt Một chọn lựa khác là cấp xung nhịp cho timer l
Trang 39
Trang 38
từ ngoài dùng T1 (P3.5) Và luôn luôn tốc độ baud là tốc độ tràn của timer 1 được
chia cho 32 (hoặc cho 16, nếu SMOD = 1)
Công thức tổng quát để xác định tốc độ baud trong các chế độ 1 và 3 là:
Tốc độ baud = tốc d6 tran ctia timer Ichia cho 32
Vi du, muốn làm việc với tốc độ baud là 1200 baud, thì tốc độ tràn của timer 1
phải là: 1200 x 32 = 38.4KHz
Nếu dùng thạch anh 12MHz, timer 1 được cấp xung nhịp 1MHz hay 1000KHz
Vì tốc độ tràn của timer 1 là 38.4KHz vz2 timer được cấp xung nhịp 1000KHz, thì
cần tràn sau 26.04 xung nhịp (lấy 1000 chia cho 38.4 thì được 26.04 và làm tròn là 26) Vì timer đếm lên và tràn xảy ra khi có sự thay đổi từ FFH xuống 00H số đếm
Như vậy giá trị đúng cân nạp vào THỊ là (-26) Cách dễ nhất để đặt giá trị nạp lại
vào THỊ là:
MOV THI, #-26
Trình hợp dịch sẽ thực hiện chuyển đổi cần thiết Trong trường hợp này (-26)
được chuyển thành 0E6H Như vậy, lệnh trên hoàn toàn giống với lệnh:
MOV TH1, #0E6H
Do việc làm tròn nên có sai số nhỏ trong tốc độ baud Tổng quát thì cho phép
dung sai 5% trong truyền thông bất đồng bộ (start/stop) Có thể có được tốc độ
baud chính xác nếu dùng thạch anh 11.059MHz¿ Bảng sau đây tóm tắt các giá trị
nạp lại cho các tốc độ baud thông dụng nhất, dùng thạch anh 12MHz hoặc 11.059MHz:
Trang 39
Phần B: Kiến thức cơ sở Chương II: Giới thiệu module LCD
CHƯƠNG II: GIGI THIEU MODULE LCD
LCAU TRUC PHAN CUNG CUA MODULE LCD:
1 Giới thiệu:
LCD ngày nay đã trở nên rất phổ biến trên thế giới Tập đổ án này chỉ để
cập đến loại LCD 16*2 tức LCD có 16 ký tự và hai hàng LCD điển hình là loại
HD44780, tại thị trường Việt Nam, cụ thể ở chợ Nhật Tảo bán rất nhiều LCD của Trung Quốc TC1602A Việc điều khiển LCD thì có nhiều cách, ở đây em dùng vi
điều khiển 89C51 để điều khiển LCD
LCD là viết tắt của chữ: Liquid Crystal Display Có thể dịch là màn hình hiển
thị bằng tên thể lổng Ngày nay LCD thay thế dần các loại mặt chỉ thị LED,
Plasma hay huỳnh quang
Cơ chế hoạt động của LCD:
Tỉnh thể lỏng sử dụng trong các mặt chỉ thị LCD là những hợp chất hữu cơ
Những hợp chất này có đặc tính nematic Điều đó có nghĩa là trục dọc của các
phần tử tỉnh thể lồng nằm song song với nhau Những chất lỏng bình thường không
hể có cấu trúc như thế Những tỉnh thể lỏng được cấu tạo bởi nhiễu mặt phẳng, tất
cả các mặt phẳng đều có tính chất nematic và nằm lệch nhau sao cho ta có một chuỗi xoắn ốc, ta được một cấu trúc gọi là cấu trúc Cholestrinic (hay cấu trúc
nematic - Twised Nematic — tên khoa học gốc Hy Lạp: Nema — atos giống hình sợi chỉ) cấu trúc này được ứng dụng trong mặt chi thi tinh thé long điện trường
Tuỳ theo nhiệt độ mà tỉnh thể lỏng có những trạng thái khác nhau Ở nhiệt độ
thấp nó có trạng thái rắn Từ một nhiệt độ nóng chảy Tnc nó đổi sang trạng thái
lỏng không đẳng hướng (Mesophase) Trong pha này, nó không có tính chất hoàn
toàn theo không gian 3 chiều của tỉnh thể, mà cũng không có tính chất đẳng hướng
của chất lỏng Nếu ta tăng tiếp nhiệt độ đến một giá trị Ttr, gọi là nhiệt độ trong
suốt, tỉnh thể lỏng có trạng thái đẳng hướng Hiệu ứng quang học dùng cho cả mặt
chỉ thi chất lỏng chỉ được hạn chế trong của mặt chỉ thị tinh thể lỏng bị hạn chế và
được định bởi hai điểm nhiệt độ Tnc và Ttr (tên khoa học gốc Hy Lạp: Meso - ở
gián trên mặt ngoài hai tấm kiếng sao cho hình ảnh phản chiếu của mặt chỉ thị
được nhìn rõ từ một góc nhìn định hướng trước
Hướng nhìn của LCD có nhiều hướng hay góc nghiên định trước bởi nhà sản xuất
Trang 40
Chương II: Giới thiệu module LCD
Chức năng của LCD là điểu khiển ma trận điểm Hệ thống giao tiếp: LCD có
hai kiểu giao tiếp với MPU: 4 bit bus và 8 bit bus 4 bit bus và 8 bit bus thì được
chọn bởi bit DL trong cấu trúc thanh ghi
Trong cả quá trình đọc hoặc viết, 2 thanh ghi bên trong LCD được sử dụng Một
là thanh ghi dữ liệu (DR), thanh thứ hai là thanh ghi hướng dẫn (IR)
Thanh ghi dữ liệu (DR) được sử dụng như một kho dữ liệu tạm thời
Sơ đồ khối của LCD
2 Cấu trúc phần cứng của module LCD:
*Chân giao tiếp:
3 VEE Điện áp LCD Phân cực LCD
4 RS Chon thanh ghi | Thanh ghi chon tin hiéu ngõ vào
5 R/W Doc/ghi Chọn chức năng đọc hoặc ghi
6 E Enable R/W Tín hiệu cho phép đọc hoặc ghi đata
7 DBO Data bus 0 Tin hiệu từ DB0 — DB7 lam thanh dudng
8 DB1 Data bus 1 bus 8 bit, giao tiếp với MPU