Ở cổng 3 còn có thêm các đường dẫn điều khiển dùng để trao đổi với bộ nhớ bênngoà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.. port2 : port2 là một port c
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
Trang 2NỘI DUNG
1 Thiết kế bộ đo và khống chế nhiệt độ hiển thị bằng màn hình tinh thể lỏng
(LCD)
Yêu cầu :
- Mạch điện tử được thiết kế trên máy tính bằng phần mềm chuyên dụng
- Sai số cho phép: ±1oC
- Thao tác điều khiển khống chế được mô phỏng bằng 3 LED: LED màu đỏ sáng khi nhiệt độ môi trường nhỏ hơn nhiệt độ khống chế; LED màu xanh sáng khi nhiệt
độ môi trường lớn hơn nhiệt độ khống chế; LED màu vàng sáng khi nhiệt độ môi trường bằng nhiệt độ khống chế
BÀI LÀM
A LÍ THUYẾT
I Giới thiệu về vi điều khiển 8051 ……… 3
II Cảm biến nhiệt độ LM335 ……… 22
III Bộ chuyển đổi ADC0804 ……… 23
IV Khối hiển thị LCD ……… 26
B MẠCH NGUYÊN LÝ ……… 27
C CODE ……… 27
D KẾT LUẬN……… 34
Trang 3A LÍ THUYẾT
I Giới thiệu về vi điều khiển 8051:
IC vi điều khiển 89S52 có các đặc điểm sau :
- 4kbyte ROM (được lập trình bởi nhà sản xuất chỉ có ở 8051)
- 128 byte RAM
- 4 port 8bit
- Hai bộ định thời 16 bit
- Giao tiếp nối tiếp
- 64KB không gian bộ nhớ chương trình mở rộng
- 64 KB không gian bộ nhớ dữ liệu mở rộng
- Một bộ xử lý bít (thao tác trên các bit đơn)
- 210 bit được địa chỉ hóa và mỗi vị trí một bít
- Bộ nhân/chia 4s
1 CẤU TRÚC BÊN TRONG 89S52
Trang 41.1 Cấu tạo chân
Tuỳ theo khả năng của từng người (về kinh tế, kỹ thuật…) mà các nhà sản xuấtcác sản phẩm ứng dụng có thể chọn 1 trong 3 kiểu chân do ATMEL đưa ra
Trang 51.2 Sơ đồ khối :
Trang 6Phần chính của vi điều khiển 89S52 là bộ xử lý trung tâm (CPU: centralprocessing unit ) bao gồm :
- Các thanh ghi chức năng đặc biệt (SFR)
- Đơn vị logic học (ALU : Arithmetic Logical Unit )
- cổng vào ra (I/O)
- Bộ nhớ chương trình và bộ nhớ dữ liệu
Đơn vị xữ lý trung tâm nhận trực tiếp xung từ bộ giao động, ngoài ra còn có khảnăng đưa một tín hiệu giữ nhịp từ bên ngoài
Trang 7Chương trình đang chạy có thể cho dừng lại nhờ một khối điêu khiển ngắt ở bêntrong Các nguồn ngắt có thể là: các biến cố ở bên ngoài, sự tràn bộ đếm định thời, hoặccũ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 (port0, port1, port2, port3 ) Sữ dụng vào mực đích điều khiển
Ở cổng 3 còn có thêm các đường dẫn điều khiển dùng để trao đổi với bộ nhớ bênngoà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ũng chứa một bộ truyền và 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 dải rộng và được ấnđịnh bằng một bộ định thời
Trong vi điều khiển 89S52 có hai thành phần quan trọng khác là bộ nhớ và thanhghi :
Bộ nhớ gồm có bộ nhớ RAM và bộ nhớ ROM dùng để lưu trữ dữ liệu và mã lệnh.Các thanh ghi sữ dụng để lưu trữ thông tin trong quá trình xữ lý Khi CPU làmviệc nó thay đổi nội dung của các thanh ghi
Hình dạng thật của AT89S52:
1 3 Mô tả chức năng các chân:
Trang 8a port0 : là port có hai chức năng ở trên chân từ chân 32 đến 39 trong các
thiết kế cỡ nhỏ ( không dùng bộ nhớ mở rộng) có hai chức năng như các đường I/O Đốivới các thiết kế cỡ lớn với bộ nhớ mở rộng nó được kết hợp kênh giữa các bus
b port1 : port1 là một port I/O trên các chân từ 1-8 Các chân có thể dùng
cho thiết bị ngoại vi nếu cần Port1 không có chức năng khác vì vậy chúng chỉ được dùngtrong giao tiếp các thiết bị ngoài
c port2 : port2 là một port công dụng kép trên các chân 21 đến 28 được
dùng như các đường xuất nhập hoặc là byte cao của bus địa chỉ 16 bit đối với các thiết kếdùng bộ nhớ mở rộng hoặc các thiết kế có nhiều hơn 256 byte bộ nhớ dữ liệu ngoài
d Port3 : port3 là một port công dụng kép trên các chân 10 – 17 Các chân
của port này có nhiều chức năng riêng, các công dụng chuyển đổi có liên hệ với các đặctính đặc biệt của 8051/89S52 như ở bảng sau:
Trang 9e PSEN (Program Store Enable ) : 89S52 có 4 tín hiệu điều khiển
PSEN là tín hiệu trên chân 29 Nó là tín hiệu điều khiển cho phép bộ nhớ chươngtrình mở rộng và thường được nối đến chân OE (Output Enable) của một EPROM để chophé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 và được chôt vào thanh ghi lệnh của 89S52 để giải mã lệnh.Khi thi hành chương trình trong ROM nội (89S52) PSEN sẽ ở mức thụ động( mức cao)
f ALE (Address Latch Enable ) :
Tín 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ớicác xữ lý
8585, 8088, 8086, 8051 dùng ALE một cách tương tự cho việc giải mã các 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à bus thấp của địa chỉ, ALE là tín hiệu để chốt địa chỉ vào một thanh ghi bênngoài trong nữa đầu của chu ký bộ nhớ Sau đó các đường port 0 dùng để xuất hoặc nhập
dữ liệu trong nữa sau chu kỳ của bộ nhớ
Các xung tín hiệu chân ALE có tốc độ bằng 1/6 lần tần số dao động trên chip và
có thể dùng làm nguồn xung nhịp cho các hệ thống Nếu xung trên chân 8051 là 12MHzthì ALE có tần số 2MHz 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 8051
g EA (External Access) :
Trang 10Tí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ứcthấp (GND) Nếu ở mức cao, 8051 thi hành chương trình từ ROM nội trong khoảng địachỉ thấp (4K) Nếu ở mức thấp, chương trình chỉ được thi hành từ bộ nhớ mở rộng Khidùng 8031, EA luôn được nối mức thấp vì không có bộ nhớ chương trình trên chip Nếu
EA được nối mức thấp bộ nhớ bên trong chương trình 89S52 sẽ bị cấm và chương trìnhthi hành từ EPROM mở rộng Người ta còn dùng chân EA làm chân cấp điện áp 21V khilập trình cho EPROM trong 89S52
h SRT (Reset) :
Ngõ vào RST trên chân 9 là ngõ reset của 8051 Khi tín hiệu này được đưa lênmúc cao (trong ít nhất 2 chu kỳ máy ), các thanh ghi trong 89S52 được tải nhưõng giá trịthích hợp để khởi động hệ thống
i Các ngõ vào bộ dao động trên chip :
Như đã thấy trong các hình trên , 89S52 có một bộ dao động trên chip Nó thườngđược nối với thạch anh giữa hai chân 18 và 19 Các tụ giữa cũng cần thiết như đã vẽ Tần
số thạch anh thông thường là 12MHz
j Các chân nguồn :
89S52 vận hành với nguồn đơn +5V Vcc được nối vào chân 40 và Vss (GND)được nối vào chân 20
2 TỔ CHỨC BỘ NHỚ.
Trang 1189S52 có bộ nhớ theo cấu trúc Harvard : có những vùng cho bộ nhớ riêng biệt chochương trình, dữ liệu Như đã nói ở trên, cả chương trình và dữ liệu có thể ở bên trong89S52, 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 64Kbytes bộ nhớ chương trình và 64 Kbytes bộ nhớ dữ liệu.
Bộ nhớ bên trong bao gồm ROM (89S52) và RAM trên chip, RAM trên chip baogồ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 thanhghi và các thanh ghi chức năng đặc biệt
Trang 12Chi tiết về bộ nhớ RAM trên chip :
Như ta đã thấy trên hình sau, RAM bên 89S52 được phân chia giữa các bankthanh ghi (00H - 1FH), RAM địa chỉ hóa từng bit (20H -2FH), RAM đa dụng (30H -7FH) và cac thanh ghi chức năng đặc biệt (80H - FFH)
AT89S52 có 21 thanh ghi chức năng ở vùng trên của RAM nội từ địa chỉ80H đến FFH
Thanh ghi trạng thái chương trình : thanh ghi trạng thái của chương trình ởđịa chỉ DOH chứa các bit như sau :
Các thanh ghi port xuất nhập : Các port của AT89S52 bao gồm port 0 ở địa chỉ90H,port 2 ở địa chỉ A0H,và port 3 ở địa chỉ B0H.Tất cả các port này đều có thể truy xuấttừng bit nên rất thuận tiện cho khả năng giao tiếp
Các thanh ghi Timer : AT89S52 có chứa 2 bộ định thời/đếm 16 bit được dùngcho việc định thời hoặc đếm sự kiện.Timer 0 ở địa chỉ 8AH(TL0 : byte thấp) và8DH(TH1 : byte cao).Việc khởi động timer được set bởi Timer Mode(TMOD) ở địa chỉ89H và thanh ghi điều khiển timer(TCON) ở địa chỉ 88H,chỉ có TCON được địa chỉ hóatừng bit
Các thanh ghi port nối tiếp : AT89S52 chứa một port nối tiếp 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 giao tiếp nối tiếp với các
Trang 13IC khác Một thanh ghi gọi là bộ đệm dữ liệu nối tiếp (SBUF) ở địa chỉ 99H sẽ giữ cả 2
dữ liệu truyền và dữ liệu nhận.Khi truyền dữ liệu thì đọc SBUF.Các mode vận hành khácnhau được lập trình qua thanh ghi điều khiển port nối tiếp SCON ở địa chỉ 98H
Các thanh ghi ngắt : AT89S52 có cấu trúc 6 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 thanh ghi cho phép ngắt(IE) ở địa chỉ A8H,cả 2 thanh ghi được địa chỉ hóa từng bit
Tín hiệu Reset :
AT89S52 có ngõ vào reset RST tác động ở mức cao trong khoảng thời gian 2 chu
kỳ , sau đó xuống mức thấp để nó bắt đầu làm việc RST có thể được kick bằng tay bởimột nút bấm thông thường
V C C
Trang 14AT89S52 có một bộ chia tần số bên trong chip,bộ này sẽ cung cấp xung clockcho các khối trên chip từ nguồn dao động bên ngoài qua 2 chân XTAL1 và XTAL2.
3 HOẠT ĐỘNG ĐỊNH THỜI CỦA AT89S52
Trong các ứng dụng định hoảng thời gian,timer được lập trình sao cho sẽ trànsau một khoảng thời gian và thiết lập cờ tràn bằng 1.Cờ tràn được sử dụng bởi chươngtrình để thực hiện một hành động tương ứng như kiểm tra trạng thái của các ngõ vào hoặcgửi các sự kiện cho các ngõ ra
Đếm sự kiện dùng để xác định số lần xảy ra của một sự kiện.Trong ứng dụngnày người ta tìm cách quy các sự kiện thành sự chuyển mức từ 1 xuống 0 trên cá chân T0hoặc T1 hoặc T2 để dùng các timer tương ứng đếm các sự kiện đó
CÁC THANH GHI CỦA BỘ ĐỊNH THỜI
Các thanh ghi của Timer 0 và Timer 1
Thanh ghi chế độ định thời(TMOD)
Thanh ghi TMOD chứa 2 nhóm 4 bit dùng để đặt chế độ làm việc cho Timer 0 vàTimer 1
Trang 15
Thanh ghi TMOD
7 6 5 4 3 2 10
M1
GATE0
C/
#T0
M1
M0
cổng Khi set lên 1, bộđịnh thời chỉ hoạt độngtrong khi INT1 ở mức cao
năng đếm hoặc định thời
1= đếm sự kiện 0= định thời trongmột khoảng thời gian
-01: chế độ 1 –timer 16 bit
10: chế độ 2 - 8
Trang 1611: chế độ 3 –tách timer
thứ 2 cho bộ định thời 0
Thanh ghi điều khiển Timer (TCON)
Thanh ghi TCON chứa các bit trạng thái và các bit điều khiển cho Timer 0 vàTimer 1
TCON.7 TCON.6 TCON.5 TCON.4 TCON.3 TCON.2 TCON.1TCON.0
T
F1
TR1
TF0
TR0
IE1
IT1
IE0
IT0 B
it
Kíhiệu
TF1 Cờ tràn của bộ định thời 1 Cờ này được set bởi
phần cứng khi có tràn, được xóa bởi phần mềm, hoặc phầncứng khi bộ vi xử lí trỏ đến trình phục vụ ngắt
TCO
N.6
TR1 Bit điều khiển hoạt động của bộ định thời 1 Bit
này được set hay xóa bằng phần mềm để điều khiển bộđinh thời hoạt động hay ngưng
Trang 17IE1 Cờ ngắt bên ngoài 1(kích khởi cạnh) Cờ này được
set bởi phần cứng khi có cạnh âm xuất hiện trên chânINT1, được xóa bởi phần mềm, hoặc phần cứng khi contrỏ đến trình phục vụ ngắt
TCO
N.2
IT1 Cờ ngắt bên ngoài 1(kích khởi cạnh hoặc mức) Cờ
này set hay xóa bởi phần mềm khi xảy ra cạnh âm hoặcmức thấp ở chân ngắt ngoài
IT0 Cờ ngắt bên ngoài 0 (kích khởi cạnh hoặc mức)
4 CÁC CHẾ ĐỘ ĐỊNH THỜI CỦA TIMER 0 VÀ 1
1 Chế độ 0 : là chế độ định thời 13 bit , chế độ này tương thích với các bộ viđiều khiển trước đó , trong các ứng dụng hiện nay chế độ này không còn thích hợp
Trong chế độ này bộ định thời dùng 13 bit(8 bit cua TH và 5 bit cao của TL) đểchứa giá trị đếm ,3 bit thấp của TL không được sử dụng
2 Chế độ 1 : Trong chế độ này , bộ timer dùng cả 2 thanh ghi TH và TL đểchứa giá trị đếm , vì vậy chế độ này còn được gọi là chế độ định thời 16 bit Bit MSB sẽ
là bit D7 của TH còn bit LSB là D0 của TL
3 Chế độn 2 : Trong chế độ 2 , bộ định thời dùng TL để chứa giá trị đếm và
TH để chứa giá trị nạp lại vì vậy chế độ này còn gọi là chế độ tự nạp lại 8 bit.Sau khi đếm
255 sẽ xảy ra tràn,khi đó TF được đặt bằng 1 đồng thời giá trị của timer tự động được nạplại bằng nội dung của TH
4 Chế độ 3 : Trong chế độ 3 , Timer 0 được tách thành 2 bộ Timer hoạt độngđộc lập , chế độ này sẽ cung cấp cho bộ vi điều khiển thêm một Timer nữa
Bộ timer thứ nhất với nguồn xung clock được lấy từ bộ chia tần trên chip hoặc
từ bộ tạo xung bên ngoài qua chân T0 tùy thộc vào giá trị của bit C-/T0.Việc điều khiển
Trang 18hoạt động của bộ thứ nhất do bit GATE , bit TR0 và mức logic trên chân INT0 (giốngchế độ 0 , 1 ,2).Giá trị đếm của Timer được chứa trong TL0 , khi xảy ra tràn cờ TF0 đượcđặt bằng một và gây ngắt do Timer 0 (nếu được đặt).
Bộ Timer thứ hai với nguồn xung clock lấy từ bộ chia tần trên chip Việc hoạtđộng của bộ thứ hai chỉ là việc đặt giá trị của bit TR0.Giá trị đếm của Timer được chứatrong TH0,khi xảy ra tràn cờ TF1 được đặt bằng một và gây ra ngắt do Timer 1 (nếu đượcđặt)
Khi Timer 0 được tách thành 2 Timer 8 bit thì Timer 1 vẫn có thể hoạt độngbình thường ở các chế độ 0 , 1 , 2 ,tuy nhiên khi xảy ra tràn cờ TF1 không được thiết lậpbằng một NHư vậy trong trường hợp này Timer 1 chỉ có thể sử dụng cho những ứngdụng không cần đến ngắt (TF1 = 1),chẳng hạn như tốc độ baud cho port nối tiếp
Tổ chức ngắt ở AT89S52
AT89S52 chỉ có 6 nguồn ngắt:
- Ngắt ngoài đến từ chân #INT0
- Ngắt ngoài đến từ chân #INT1
- Ngắt ngoài do bộ Timer 0
- Ngắt ngoài do bộ Timer 0
- Ngắt ngoài do bộ Timer 0
- Ngắt do Port nối tiếp
Bảng tóm tắt các ngắt trong AT89S52 như sau:
ST
T
Tênngắt
Môtả
Cờngắt
Thanhghi chứa cờ
Vectorngắt
t ngoài 0khi có tínhiệu tíchcực theo
N
0x0003
Trang 19kiểu đãchọn
từ giá trịmax
N
0x000B
t ngoài 1khi có tínhiệu tíchcực theokiểu đãchọn
1 tràn từgiá trị max
N
0x001B
Port
Ngắ
t cổng nốitiếp khi viđiều khiểnnhận hoặctruyềnxong 1 byte
TI,RI
SCON
TX
2 hoặcEXF2
T2Con
002BH
Trang 20Mỗi ngắt được dành cho một vector ngắt kéo dài 8byte Về mặt lý thuyết, nếuchương trình đủ ngắn, mã tạo ra chứa đủ trong 8 byte, người lập trình hoàn toàn cóthể đặt phần chương trình xử lý ngắt ngay tại vector ngắt Tuy nhiên trong hầu hếtcác trường hợp, chương trình xử lý ngắt có dung lượng mã tạo ra lớn hơn 8byte nêntại vector ngắt, ta chỉ đặt lệnh nhảy tới chương trình xử lý ngắt nằm ở vùng nhớ khác.Nếu không làm vậy, mã chương trình xử lý ngắt này sẽ lấn sang, đè vào vector ngắt
Trang 21sẽ tự động đặt lên bằng 1 khi có sự kiện gây ngắt xảy ra, bất kể sự kiện đó có đượccho phép ngắt hay không Do vậy, trước khi cho phép một ngắt, ta nên xóa cờ củangắt đó để đảm bảo sau khi cho phép, các sự kiện gây ngắt trong quá khứ không thểgây ngắt nữa Ví dụ trước khi cho phép ngắt timer0 mà timer 0 đã chạy và tràn (dù làtràn một hay nhiều lần) thì cờ TF0 sẽ bằng 1, nếu sau đó ta cho phép ngắt timer0 thì
sẽ gây ra ngắt ngay do cờ tràn đang bằng 1 (sự kiện tràn gây ngắt trong trường hợpnày là tràn trong quá khứ, không phải sự kiện ta quan tâm đến) Vì vậy hãy xóa cờTF0 trước khi cho phép ngắt tràn timer0 Ngoại trừ cờ của của ngắt nối tiếp và cờcủa ngắt timer2, các cờ ngắt khác đều tự động được xóa khi CPU thực hiện chươngtrình ngắt
Nói đến ngắt không thể không nói đến mức ưu tiên của ngắt Mức ưu tiêncủa ngắt ở đây có thể được hiểu là sự phân bậc, quyết định xử lý ngắt nào khi haihay nhiều ngắt xảy ra
Ngắt ngoài (External Interrupt)
Như đã nói ở trên, AT89S52 có 2 ngắt ngoài là INT0 và INT1 Ngắt ngoàiđược hiểu là ngắt được gây ra bởi sự kiện mức lôgic 0 (mức điện áp thấp, gần 0V)hoặc sườn xuống (sự chuyển mức điện áp từ mức cao về mức thấp) xảy ra ở chânngắt tương ứng (P3.2 với ngắt ngoài 0 và P3.3 với ngắt ngoài 1) Việc lựa chọn kiểungắt được thực hiện bằng các bit IT (Interrupt Type) nằm trong thanh ghi TCON Đây
là thanh ghi điều khiển timer nhưng 4 bit LSB (bit0 3) được dùng cho các ngắt ngoài
Khi bit ITx = 1 thì ngắt ngoài tương ứng được chọn kiểu là ngắt theo sườnxuống, ngược lại nếu bit ITx = 0 thì ngắt ngoài tương ứng được sẽ có kiểu ngắt là ngắttheo mức thấp Các bit IE là các bit cờ ngắt ngoài, chỉ có tác dụng trong trường hợpkiểu ngắt được chọn là ngắt theo sườn xuống
Khi kiểu ngắt theo sườn xuống được chọn thì ngắt sẽ xảy ra duy nhất một lầnkhi có sườn xuống của tín hiệu, sau đó khi tín hiệu ở mức thấp, hoặc có sườn lên,hoặc ở mức cao thì cũng không có ngắt xảy ra nữa cho đến khi có sườn xuống tiếp