Với những kỹ thuật tiên tiến như vi xử lí, vimạch số… được ứng dụng vào lĩnh vực điều khiển,thì các hệ thống điều khiển cơkhí thô sơ, với tốc độ xử lí chậm chạp ít chính xác được thay th
Trang 1MỤC LỤC
LỜI CẢM ƠN 1 LỜI CAM ĐOAN _2 MỤC LỤC 3 GIỚI THIỆU ĐỀ TÀI _6
I Đặt vấn đề _6
II Giới thiệu đê tài 6 CHƯƠNG I : KHẢO SÁT VI ĐIỀU KHIỂN VÀ IC 0851 _8 I.1 Nguồn gốc ra đời của vi điều khiển 8 I.2 Tìm hiểu về chip 8051 9 I.2.1 Đặc điểm chung 9 I.2.2 Cấu trúc _11 I.2.2.1 Cấu trúc bên trong của 8051 _11 I.2.2 2Chức năng các chân vi điều khiển 12 I.2.2.3 Tổ chức bộ nhớ : _15 I.2.2.4 các thanh ghi chức năng đặc biệt: 20 I.2.3 Tập lệnh của 8051 _25 I.2.3.1 Nhóm lệnh di chuyển dữ liệu 25 I.2.3.2 Nhóm lện số học 28 I.2.3.3 Nhóm lệnh nhảy 29 I.2.3.4 Nhóm lệnh logic _31 I.2.3.5 Nhóm lệnh thao tác bit _33 I.2.3.6 Nhóm lệnh liên quan đến chương trình con : _33 CHƯƠNG II: TỔNG QUAN VỀ SỰ CHUYỂN ĐỔI TÍN HIỆU _34 TƯƠNG TỰ SANG TÍN HIỆU SỐ 34 II.1 Khái niệm chung : _34 II.2 Nguyên tắc thực hiện chuyển đổi ADC : 34 II.3 Các phương pháp chuyển đổi AD _35 II.3.1Phương pháp phân tích (Intergration method) 35 II.3.2 Phương pháp ADC xấp xỉ liên tiếp( Successive–Approximation ADC) 35 II.3.3 Phương pháp song song( Paralled method) 36 CHƯƠNG III : THIẾT KẾ VÀ THI CÔNG 39 III.1 Các linh kiện sử dụng trong mạch. _39
Trang 2III.2 Nguyên lý một số linh kiện phục vụ cho công việc đo lường. _39 III.2.1 Chip ADC 0804. _39 III.2.2 Dải nhiệt độ và sự thay đổi trở kháng theo nhiệt độ của LM35 _42 III.2.2.1Các bộ cảm biến nhiệt họ LM35. _43 III.2.2.2 Phối hợp tín hiệu và sơ đồ khối phối ghép LM35 với 8051 43 III.2.2.3Cảm biến nhiệt LM35DZ: 45 III.3 Nguyên lý đo và chuyển đổi tương tự/số của ADC _46 III.4 Các linh kiện khác: 48 III 5 Thiết kế mạch: _48 III.5.1.Sơ đồ nguyên lý. _48 III.5.2 Sơ đồ mạch in _50
- Sử dụng phần mềm protues : _50 III.5.3 Sơ đồ khối. _51 III.5.4 Giải thuật chương trình 52 Kết Luận _61
TÀI LIỆU THAM KHẢO _62
Trang 3MỞ ĐẦU
Ngày nay, việc áp dụng khoa học kỹ thuật vào trong quá trình sản xuấtđang là vấn đề được rất nhiều sự quan tâm,nghiên cứu của các nhà khoa học trênthế giới cũng như trong nước Nhiệt độ là một trong những thông số quan trọngảnh đến đặc tính của vật chất nên trong các quá trình kỹ thuật cũng như trong đờisống hằng ngày rất hay gặp yêu cầu đo nhiệt độ
Vì vậy,trong nhiều lĩnh vực sản xuất công nghiệp hiện nay,nhất là nghànhcông nghiệp luyện kim, chế biến thực phẩm… vấn đề đo và khống chế nhiệt độđặc biệt được chú trọng đến vì nó là một yếu tố quyết định đến chất lượng sảnphẩm Nắm được tầm quan trọng đó ,em tiến hành nghiên cứu và thiết kế một hệthống đo và khống chế nhiệt độ tự động, với mong muốn là giải quyết những yêucầu trên, và lấy đó làm đồ án tốt nghiệp cho mình
Những kiến thức năng lực đạt được trong quá trình học tập ở trường sẽđược đánh giá qua đợt bảo vệ đồ án tốt nghiệp lần này Vì vậy chúng em cố gắngtận dụng tất cả những kiến thức đã học ở trường cùng với sự tìm tòi nghiên cứu,để
có thể hoàn thành tốt nhất đồ án này Những sản phẩm hay kết quả đạt được ngàyhôm nay tuy không lớn lao Nhưng đó là những thành quả của những năm học tập
Là thành công đầu tiên của em trước khi ra trường Tuy nhiên không thể khôngtránh được những thiếu sót , em mong thầy cô và các bạn đóng góp ý kiến và giúp
đỡ để có thể rút ra bài học cho mình
Trang 4GIỚI THIỆU ĐỀ TÀI
I Đặt vấn đề
Ngày nay với sự phát triển của công nghiệp vi điện tử,kỹ thuật số các hệ thốngđiều khiển dần dần được tự động hóa Với những kỹ thuật tiên tiến như vi xử lí, vimạch số… được ứng dụng vào lĩnh vực điều khiển,thì các hệ thống điều khiển cơkhí thô sơ, với tốc độ xử lí chậm chạp ít chính xác được thay thế bằng các hệthống điều khiển tự động với các lệnh chương trình đã được thiết lập trước
Trong quá trình sản xuất ở các nhà máy,xí nghiệp hiện nay,việc đo và khốngchế nhiệt độ là một yêu cầu hết sức cần thiết và quan trọng Vì nếu nắm bắt đượcnhiệt độ làm việc của hệ thống, dây chuyền sản xuất … giúp ta những hư hỏng và
sự cố có thể xảy ra
Để đáp ứng được yêu cầu đo và khống chế nhiệt độ tự động, thì có nhiềuphương pháp để thực hiện, nghiên cứu khảo vi điều khiển 8051 nhóm thực hiệnnhận rằng : ứng dụng vi điều khiển 8051 vào việc đo và khống chế nhiệt độ tựđộng là phương pháp tối ưu nhất Được sự đồng ý của bộ môn Kỹ Thuật MáyTính, em tiến hành thực hiện đề tài :
“ Khảo sát và ứng dụng vi điều khiển thiết kế mạch khống chế nhiệt độ trongphòng”
II Giới thiệu đê tài
Với thời gian 3 tháng thực hiện đồ án, cũng như trình độ chuyên môn có hạn,chúng em đã cố gắng để hoàn thành đồ án này một cách tốt nhất, nhưng chỉ giảichỉ quyết được những vấn đề sau :
- Thiết kế mạch đo nhiệt độ trong dải từ 0oC – 99oC hiển thị số
- Điều khiển nhiệt độ theo mong muốn
- Viết chương trình để đáp ứng yêu cầu trên
- Thiết kế phần cứng demo
Trang 5 Cấu trúc tổng quan :
- Sơ đồ khối mạch đo nhiệt độ
- Ứng dụng vi điều khiển vào thực tế
- Tìm hiểu nguyên tắc hoạt động của thiết bị cảm biến (cảm biến nhiệt)và ứngdụng của nó trong thực tiễn
Nhiệt độ
Khối điều khiển
Trang 6CHƯƠNG I : KHẢO SÁT VI ĐIỀU KHIỂN VÀ IC 0851
I.1 Nguồn gốc ra đời của vi điều khiển
Trong những thập niên cuối thế kỉ XX, từ sự ra đời của công nghệ bán dẫn,
kĩ thuật điện tử đã có sự phát triển vượt bậc Các thiết bị điện tử sau đó đã đượctích hợp với mật độ cao và rất cao trong các diện tích nhỏ, nhờ vậy các thiết bịđiện tử nhỏ hơn và nhiều chức năng hơn Các thiết bị điện tử ngày càng nhiềuchức năng trong khi giá thành ngày càng rẻ hơn, chính vì vậy điện tử có mặt khắpmọi nơi
Bước đột phá mới trong công nghệ điện tử, công ty trẻ tuổi Intel cho ra đời bộ
vi xử lý đầu tiên Đột phá ở chỗ: "Đó là một kết cấu logic mà có thể thay đổi chức năng của nó bằng chương trình ngoài chứ không phát triển theo hướng tạo một cấu trúc phần cứng chỉ thực hiện theo một số chức năng nhất định như trước đây"(trích từ dòng 17 đến 19, trang 3, 'Kĩ thuật VI XỬ LÝ và lập trình
ASSEMBLY cho hệ vi xử lý', tác giả Đỗ Xuân Tiến, nhà xuất bản Khoa học và kĩthuật). Tức là phần cứng chỉ đóng vai trò thứ yếu, phần mềm (chương trình) đóngvai trò chủ đạo đối với các chức năng cần thực hiện Nhờ vậy vi xử lý có sự mềmdẻo hóa trong các chức năng của mình Ngày nay vi xử lý có tốc độ tính toán rấtcao và khả năng xử lý rất lớn
Vi xử lý có các khối chức năng cần thiết để lấy dữ liệu, xử lý dữ liệu và xuất
dữ liệu ra ngoài sau khi đã xử lý Và chức năng chính của Vi xử lý chính là xử lý
dữ liệu, chẳng hạn như cộng, trừ, nhân, chia, so sánh.v.v Vi xử lý không có khảnăng giao tiếp trực tiếp với các thiết bị ngoại vi, nó chỉ có khả năng nhận và xử lý
dữ liệu mà thôi
Để vi xử lý hoạt động cần có chương trình kèm theo, các chương trình nàyđiều khiển các mạch logic và từ đó vi xử lý xử lý các dữ liệu cần thiết theo yêucầu Chương trình là tập hợp các lệnh để xử lý dữ liệu thực hiện từng lệnh đượclưu trữ trong bộ nhớ, công việc thực hành lệnh bao gồm: nhận lệnh từ bộ nhớ, giải
mã lệnh và thực hiện lệnh sau khi đã giải mã.
Trang 7Để thực hiện các công việc với các thiết bị cuối cùng, chẳng hạn điều khiểnđộng cơ, hiển thị kí tự trên màn hình đòi hỏi phải kết hợp vi xử lý với các mạchđiện giao tiếp với bên ngoài được gọi là các thiết bị I/O (nhập/xuất) hay còn gọi làcác thiết bị ngoại vi Bản thân các vi xử lý khi đứng một mình không có nhiều hiệuquả sử dụng, nhưng khi là một phần của một máy tính, thì hiệu quả ứng dụng của
Vi xử lý là rất lớn Vi xử lý kết hợp với các thiết bị khác được sử trong các hệthống lớn, phức tạp đòi hỏi phải xử lý một lượng lớn các phép tính phức tạp, cótốc độ nhanh Chẳng hạn như các hệ thống sản xuất tự động trong công nghiệp,các tổng đài điện thoại, hoặc ở các robot có khả năng hoạt động phức tạp v.v
Bộ Vi xử lý có khả năng vượt bậc so với các hệ thống khác về khả năng tínhtoán, xử lý, và thay đổi chương trình linh hoạt theo mục đích người dùng, đặc biệthiệu quả đối với các bài toán và hệ thống lớn.Tuy nhiên đối với các ứng dụng nhỏ,tầm tính toán không đòi hỏi khả năng tính toán lớn thì việc ứng dụng vi xử lý cầncân nhắc Bởi vì hệ thống dù lớn hay nhỏ, nếu dùng vi xử lý thì cũng đòi hỏi cáckhối mạch điện giao tiếp phức tạp như nhau Các khối này bao gồm bộ nhớ đểchứa dữ liệu và chương trình thực hiện, các mạch điện giao tiếp ngoại vi để xuấtnhập và điều khiển trở lại, các khối này cùng liên kết với vi xử lý thì mới thực hiệnđược công việc Để kết nối các khối này đòi hỏi người thiết kế phải hiểu biết tinhtường về các thành phần vi xử lý, bộ nhớ, các thiết bị ngoại vi Hệ thống được tạo
ra khá phức tạp, chiếm nhiều không gian, mạch in phức tạp và vấn đề chính làtrình độ người thiết kế
Từ thực tế đó, Con người chúng ta đã sang tạo ra vi điều khiển để giảm bớt
sự lãng phí đó Bộ vi điều khiển có trên chip bộ vi xử lý(CPU), bộ nhớ Ram,Rom,cổng vào ra và bộ định thời Nói cách khác, bộ xử lý,ram,rom,cổng vào ra và bộđịnh thời tất cả được nhúng trên chip vi điều khiển Do vậy, người thiết kế ko cầnphải bổ xung them bộ nhớ ngoài , cổng vào ra và bộ định thời để cho hệ thốnghoạt động
I.2 Tìm hiểu về chip 8051
I.2.1 Đặc điểm chung
Trang 8- Thuộc họ MOS-51
- Có dung lượng nhớ 4Kb flash ROM để lưu trữ mã lệnh (chương trình), thời gianghi xóa lên đến 1000 lần
- Tần số làm việc: 0Hz – 20Mhz
- Bộ nhớ RAM nội 128 byte, 8 bit
- Cung cấp 32 tín hiệu điều khiển I/O
Trang 9I.2.2.1 Cấu trúc bên trong của 8051
Phần chính của vi điều khiển 8051 là bộ xử lí trung tâm(CPU: centralprocessing unit) bao gồm :
- Thanh ghi tích lũy A
- Thanh ghi tích lũy phụ B,dung cho phép nhân và chia
- Đơn vị logic học(ALU : Arithmetic Logical Unit)
- Từ trạng thái chương trình( PSW : Program Status Word)
- Bốn băng thanh ghi
Hai bộ định thời 16 bit hoạt động như 1 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 khiern dùng để trao đổi với 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ẫnbê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 viuws nhau.Tốc độ truyền qua cổng nối tiếp có thể đặt trongvảy rộng và được ấn định bằng một bộ định thời
Trong vi điều khiển 8051 có hai thành phần quan trọng khác đó là bộ dữliệu và các thanh ghi :
Bộ nhớ gồm có bộ nhớ RAM và bộ nhớ ROM.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ộidung của các thanh ghi
Trang 10I.2.2 2Chức năng các chân vi điều khiển
Hình 2.2 Sơ đồ các chân vi điều khiển
- Port 0 : là port có 2 chức năng ở trên chân từ 32 đến 39 trong các thiết kế cỡnhỏ(không dùng bộ nhớ mở rộng) có 2 chức năng như các đường IO Đối vớicá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
- Port 1 : port 1 là một port I/O trên các chân từ 1 đến 8 Các chân được ký hiệuP1.0,P1.1,P1.2… có thể dùng cho các thiết bị ngoài nếu cần Port 1 không cóchức năng khác, vì vậy chúng ta chỉ được dùng trong giao tiếp với các thiết bịngoài
- Port 2 : port 2 là một port công dụng kép trên các chân từ 21 đến 28 đượcdùng như các đường xuất nhập hoặc là byte cao của bus địa chỉ đối cới cácthiết kế dùng bộ đếm mở rộng
- Port 3 : port 3 là một port công dụng kép trên các chân 10 đến 17 Các châncủa port này có nhiều chức năng,các công dụng chuyển đổi có liên hệ với cácđặc tính đặc biệt của 8051 như ở bảng sau :
Trang 11Bit Tên Chức năng
P3.0 RxD Ngõ vào nhận dữ liệu nối tiếp
P3.1 TxD Ngõ xuất dữ liệu nối tiếp
P3.2 INT0 Ngõ vào ngắt cứng thứ 0
P3.3 INT1 Ngõ vào ngắt cứng thứ 1
P3.4 T0 Ngõ vào của Timer/Counter thứ 0
P3.5 T1 Ngõ vào của Timer/Counter thứ 1
P3.6 WR Ngõ điều khiển ghi dữ liệu lên bộ nhớ ngoài
P3.7 RD Ngõ điều khiển đọc dữ liệu từ bộ nhớ bên ngoài
- PSEN ( Program Store Enable) : 8051 có 4 tín hiệu điều khiển PSEN lè tínhiệu ra 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ộtEPROM để cho phép đọc các byte mã lệnh PSEN sẽ ở mức thấp trong thờigian lấy lệnh Các mã nhị phân của chương trình đọc từ EPROM qua bus vàđược chốt vào thanh ghi lệnh của 8051 để giải mã lệnh Khi thi hành chươngtrình trong ROM nội (8051) PSEN sẽ ở mức thụ động( mức cao)
- ALE (Address Latch Enable) : tín hiệu ra ALE trên chân 30 tương hợp với cácthiết bị làm việc với các xử lí 8585,8086,8088 8051dùng ALE một cáchtương tự cho làm việc giải các kênh các bus địa chỉ và dữ liệu khi port0 đượcdùng cho chế độ chuyển đổi của nó: Vừa là bus dữ liệu vừa là bit thấp của địachỉ ALE là tín hiệu để chốt địa chỉ vào một thanh ghi bên ngoài trong nửa đầucủa chu kỳ bộ nhớ Sau đó, các đường port0 dùng để xuất hoặc nhập dữ liệutrong nửa sau chu kỳ của 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à nguồn xung nhịp cho các hệ thống Nếu xung trên 8051
là 12 MHz thì ALE có tần số 2MHz.Chỉ ngoại trừ khi thi hành lệnh
Trang 12MOVX, một xung ALE sẽ bị mất Chân này cũng được làm ngõ vào choxung lập trình EPROM trong 8051.
- EA (External Access) : tín hiệu vào AE trên chân 31 thường được mắc lênmức cao (+5V) hoặc ở mức thấp (GND) Nếu ở mức cao, 8051 thi hànhchươ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 AE được nối mứcthấp bộ nhớ bên trong chương trình 8051 bị cấm và chương trình thi hành từEPROM mở rộng.Người ta còn dùng chân AE làm chân cấp điên áp 21v khilập trình cho EPROM trong 8051
- RST(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ên mức cao (trong ít nhất 2 chu kỳ máy), các thanh ghi trong 8051được tải những giá trị thích hợp để khởi động hệ thống Việc kết nối chânRESET đảm bảo hệ thống bắt đầu làm việc khi Vi
điều khiển được cấp điện, hoặc đang hoạt động mà
hệ thống bị lỗi cần tác động cho Vi điều khiển hoạt
động trở lại, hoặc do người sử dụng muốn quay về
trạng thái hoạt động ban đầu
- Vì vậy chân RESET được kết nối như hình vẽ :
- Với Vi điều khiển sử dụng thạch anh có tần số f zat =
12MHz sử dụng C=10µF và R=10KΩ.
- Các ngõ vào bộ dao động trên chip :
Như đã thấy trong hình trên, 8051 có một bộ dao động
trên chip.Nó thường được nối với thạch anh giữa 2 chân
18 và 19 Tần số thạch anh thông thường là 12MHz
Trang 13Mạch dao động được đưa vào hai chân này thông thường được kết nối với daođộng thạch anh như sau:
Ghi chú: C1,C2= 30pF±10pF (thường được sử dụng với C1,C2 là tụ 33pF) dùng
ổn định dao động cho thạch anh
- Các chân nguồn: 8051 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
qua WR và RD
Trang 14- Ngăn xếp bên trong RAM nội nhỏ hơn so với RAM ngoài như các bộ xử líkhác.
Chi tiết về bộ nhớ RAM trên chip:
Như ta đã thấy trên hình sau, RAM bên trong 8051 được phân chia giữa cácbank thanh ghi ( 00H- 1FH),RAM địa chỉ hóa từng bit(20-2FH)
RAM đa dụng (30H-7FH) và các thanh ghi chức năng đặc biệt (80H-FFH)
F7 F6 F5 F4 F3 F2 F1 F0
E7 E6 E5 E4 E3 E2 E1 E0
D7 D6D5D4 D3 D2 D1D0
- - - BC BB BA B9 B8
B7 B6 B5 B4 B3 B2 B1 B0
AF ACABAAA9A8
A7 A6A5A4 A3 A2 A1A0
B ACC PSW IP P3 IE P2 SBUFSCON
Trang 15
97 96 95 94 93 92 91 90
8F 8E 8D8C 8B 8A 89 88
87 86 85 84 83 82 81 80
P1 TH1TH0TL1TL0TMODTCONPCON DPHDPLSPP0
mọi địa chỉ trong vùng RAM đa dụng đều có thể được truy xuất tự do dùngcách đánh địa chỉ trực tiếp hoặc 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ẽ dùng :
MOV A,5FHLệnh này di chuyển 1 byte 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
Trang 16RAM bên trong cũng có thể được truy xuất dùng cách đánh địa chỉ giántiếp qua R0 hay R1 Ví dụ, sau khi thi hành cùng nhiệm vụ như lệnh đơn ởtrên :
MOV R0,#5FHMOV A,@R0Lệ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ứ 2 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
- RAM địa chỉ hóa từng bit : 8051 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 trong các thanhghi 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ợicủa điều khiển nói chung Các bit có thể đặ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 đượchiệu quả tương tự.Hơn nữa,các port I/O cũng được địa chỉ từng bit làm đơngiả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 các bit phụ thuộc vào lện được dùng
Ví dụ, để đặt bit 67H,ta dùng lệnh sau :
SETB 67H
Chú ý rằng “ địa chỉ bit 67” là bit có trọng số lớn nhất (MSB) ở “địa chỉbyte 2CH” lệnh trên sẽ không tác động đến các bit khác của địa chỉ này
- Các bank thanh ghi :
32 byte thấp của bộ nhớ nội là dành cho các bank thanh ghi Bộ lệnh của
8051 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 ở địa chỉ 00H - 07H Lệnh sau đây sẽ đọc nội dung ở địachỉ 05H vào thanh ghi tích lũy
MOV A,R5
Trang 17Đây là lệnh một byte dùng địa chỉ thanh ghi.Tất nhiên,thao tác tương tự cóthể được ghi bằng lệnh 2 byte dùng địa chỉ trực tiếp nằm bên trong byte thứ 2:
MOV A,05HCác lệnh dùng các thanh ghi R0 đến R7 thì sẽ ngắn hơn và nhanh hơn cáclệnh tương ứng nhưng dùng địa chỉ trực tiếp Các giá trị dữ liệu được dùngthường xuyên nên dùng một trong các thanh ghi này
Bank thanh ghi tích cực có thể chuyển đổi bằng cách thay đổi các bit chọnbank thanh ghi trong từ trạng thái chương trình(PSW).Gỉa sử rằng bank thanhghi 3 được tích cực, lệnh sau sẽ ghi nội dung của thanh ghi tích lũy vào địa chỉ18H:
MOV R0,A
Ý tưởng dùng”các bank thanh ghi”cho phép”chuyển hướng” chương trìnhnhanh và hiệu quả(từng phần riêng rẽ của phần mềm sẽ có một bộ thanh ghiriêng không phụ thuộc vào các phần khác)
I.2.2.4 các thanh ghi chức năng đặc biệt:
Các thanh ghi nội của 8051 được truy xuất ngầm định bởi bộ lệnh.Ví dụ lệnh
“INC A” sẽ tăng nội dung thanh ghi tích lũy A lên 1 Tác động này được ngầmđịnh trong mã lệnh
Các thanh ghi trong 8051 đượ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 trực tiếp, sẽ không
có lợi khi đặt chúng vào trong RAM trên chip).Đó là lý do để 8051 có nhiềuthanh ghi Cũng như R0 đến R7, có 21 thanh ghi chức năng đặc biệt(SFR :special Funtion Rgister) ở 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 địachỉ SFR là được định nghĩa
Ngoại trừ tích lũy (A) có thể được truy xuất ngầm như đã nói,đa số các SFRđược truy xuất dùng địa chỉ trực tiếp Chú ý rằng một vài SFR có thể có được địachỉ hóa bit hoặc byte.Người thiết kế phải thận trọng khi truy xuất bit và byte Ví
Trang 18dụ lệnh sau : SETB 0E0H sẽ thiết lập bit 0 trong thanh ghi tích lũy,các bitkhác không thay đổi Ta thấy rằng E0H đồng thời là địa chỉ byte của thanh ghitích lũy và là địa chỉ bit có trọng số nhỏ nhất trong thanh ghi tích lũy Vì lệnhSETB chỉ tác động trên bit, nên chỉ có địa chỉ bit là có hiệu quả.
PSW.4 D4H RS1 Bit lựa chọn dãy thanh ghi
PSW.3 D3H RS0 Bit lựa chọn dãy thanh ghi
PSW.2 D2H 0V Cờ tràn với phép tính liên quan đến số nhị phân
có dấuPSW.1 D1H - Chưa được thiết kế để sử dụng
- Cờ nhớ (CY) có công dụng kép.Thông thường nó được dùng cho cáclệnh toán học : nó sẽ được SET nếu có một số nhớ sinh ra bởi phép cộnghoặc có một số mượn phép trừ Ví dụ , nếu thanh ghi tích lũy chứa FFH,thì lệnh sau : ADD A,#1 sẽ trả về thanh ghi tích lũy kết quả 00H vàSET cờ nhớ trong PSW Cờ nhớ cũng có thể xem như một thanh ghi 1
Trang 19bit cho các lệnh luận lý thi hành trên bit Ví dụ, lệnh sẽ AND bit 25Hvới cờ nhớ và đặt kết quả trở vào cờ nhớ : ANL C,25H
- Cờ nhớ phụ : khi cộng các số BCD, cờ nhớ phụ (AC) được set nếu kếtquả của 4 bit thấp trong khoảng 0AH đến 0FH Nếu các giá trị cộngđược là số BCD, thì sau lệnh cộng cần có DAA ( hiệu chỉnh thập phânthanh ghi tích lũy) để mang kết quả lớn hơn 9 trở về tâm từ 0 đến 9
- Cờ 0(F0) : là một bit cờ đa dụng dành các ứng dụng của người dùng
- Các bit chọn bank thanh ghi : Các bit chọn bank thanh ghi (RS0 vàRS1 ) xác định bank thanh ghi được tích cực Chúng được xóa sau khireset hệ thống và được thay đổi bằng phần mềm nếu cần Ví dụ, ba lệnhsau cho phép bank thanh ghi 3 và di chuyển nội dung của thanh ghiR7( địa chỉ byte IFH) đến thanh ghi tích lũy :
SETB RS1SETB RS0MOV 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 RS1 sẽ giống nhưlệnh SETB 0D4H
- Cờ tràn :
Cờ tràn (OV) được set 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ủa nó 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
Thanh ghi B :
Thanh ghi B ở địa chỉ F0H được dùng cùng với thanh ghi tích lũy A chocác phép toán nhân và chia Lệnh MUL AB sẽ nhân các giá trị không dấu 8bit trong A và B rồi trả về kết quả nguyên trong A và phần dư trong B
Trang 20Thanh 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.
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 địachỉ 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ănxếp bao gồm các thao tác cất dữ liệu vào ngăn xếp và lấy dữ liệu ra khỏingăn xếp Lệnh cất dữ liệu vào ngăn xếp sẽ làm tăng SP trước khi ghi dữliệu, và lệnh lấy dữ liệu ra khỏi ngăn xếp sẽ đọc dữ liệu và giảm SP Ngănxếp của 8051đượ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 8051
Để khởi động lại SP với ngăn xếp bắt đầu tại 60H, các lệnh sau đây đượcdùng :
MOV SP,#%FH
Trên 8051 ngăn xếp bị giới hạn 32 byte vì địa chỉ cao nhất của RAM trênchip là 7FH Sở dĩ cùng giá trị 5FH vì SP sẽ tăng lên 60H trước khi cất byte
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à để lấy giá trị mặc định khi reset hệ thống Gía trị mặc định đó là 07H vàkết quả là ngăn đầu tiên để cất dữ liệu địa chỉ 08H Nếu phần mềm ứngdụng không khởi động lại SP, bank thanh ghi 1 ( có thể cả 2 và 3) sẽ khôngdù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ưugiữ tạm thời và lấy lại dữ liệu hoặc được truy xuất ngầm bằng các lệnh gọichương trình con (ACALL,LACALL) và các lệnh trở về(RET ,RETI) đểcất và lấy lại bộ đếm chương trình
Trang 21MOV A,#55HMOV DPTR,#1000HMOV @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íchlũy,lệnh thứ hai dung địa chỉ tức thời, lần này để tải dữ liệu 16 bit 1000Hvào con trỏ dữ liệu Lệnh thứ ba dùng địa chỉ gián tiếp để di chuyển dữ liệutrong A(55H) đến RAM ngoài ở địa chỉ chứa DPTR(1000H)
Các thanh ghi port xuất nhập :
Các port của 8051bao 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 địachỉ hóa từn bit Điều đó cung cấp một khả năng giao tiếp thuận lợi
Các thanh ghi timer :
8051 chứa 2 bộ định thời đếm 16 bit được dùng trong việc định thời hoặcđếm sự kiện Timer 0 ở địa chỉ 8AH(TL0 : byte thấp) và 8CH (TH0: bytecao).Timer 1 ở địa chỉ 8BH(TL1 : byte thấp) và 8DH(TH1 : byte cao).Việcvận hành timer được set bởi thanh ghi 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óa từng bit
Các thanh ghi port nối tiếp:
8051 chứa một port nối tiếp trên chip dành cho việc trao đổi thông tin vớicá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 ICkhác có giao tiếp nối tiếp ( 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 dữ liệu truyền và nhận Khi truyền dữ liệu thì ghi lên SBUF, khinhận dữ liệu thì đọc SBUF Các mode vận hành khác nhau được lập trìnhqua thanh ghi điều khiển port nối tiếp (SCON)(được địa chỉ hóa từng bit) ởđịa chỉ 98H
Các thanh ghi ngắt :
Trang 228051 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 thanh ghi cho phép ngắt(IE) ởđịa chỉ 8AH Cả hai thanh ghi được địa chỉ hóa từng bit
Các 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ềukhiển Chúng được tóm tắt trong bảng sau :
I.2.3 Tập lệnh của 8051
I.2.3.1 Nhóm lệnh di chuyển dữ liệu
Lệnh di chuyển dữ liệu trực tiếp :
Trang 23 Lệnh di chuyển dữ liệu gián tiếp :
- Liên quan đến vùng nhớ RAM nội :
+ Lệnh đọc bộ nhớ:
- Cú pháp: MOV <ĐÍCH>, @RpTrong đó:
<ĐÍCH>: thanh ghi, ô nhớ Rp: là thanh ghi R0 hoặc R1
- Thực hiện: lấy nội dung ô nhớ trong vùng RAM nội có địa chỉ là nội dung thanh ghi Rp đặt vào <ĐÍCH>
- Ví dụ:
MOV 120,#47MOV R1,#120MOV A,@R1sau khi thực hiện xong đoạn lệnh nội dung thanh ghi A chứa giá trị 47
+ Lệnh ghi bộ nhớ:
- Cú pháp: MOV @Rp, <NGUỒN>
Trong đó:
<NGUỒN>: thanh ghi, ô nhớ hoặc #<giá trị>
Rp: là thanh ghi R0 hoặc R1
- Thực hiện: đặt nội dung <NGUỒN> vào ô nhớ trong vùng RAM nội có địa chỉ là nội dung thanh ghi Rp
- Ví dụ 1:
MOV R0,#100
Trang 24MOV @R0, #0E3H sau khi thực hiện xong đoạn lệnh nội dung ô nhớ 100 chứa giá trị E3H
- Ví dụ 2:
MOV A, #49MOV R1,#127
- Lệnh liên quan đến vùng nhớ RAM ngoài :
+ Lệnh đọc bộ nhớ:
- Cú pháp: MOVX A, @DPTR
- Thực hiện: lấy nội dung ô nhớ trong vùng dữ liệu ngoài có địa chỉ
là nội dung thanh ghi DPTR đặt vào thanh ghi A
- Ví dụ:
MOV DPTR,#1000MOVX A, @DPTR ; A ß (1000)+ Lệnh đọc bộ nhớ:
- Cú pháp: MOVX @DPTR, A
- Thực hiện: lấy nội dung A đặt vào ô nhớ trong vùng dữ liệu ngoài
có địa chỉ là nội dung thanh ghi DPTR
Trang 25- Ví dụ 1:
MOV A,#2MOV DPTR,#500MOVC A,@A+DPTR ; A ß (502)
- Ví dụ 2:
MOV A, #4MOV DPTR,#TABLEMOVC A, @A+DPTRTABLE: DB 12H, 4EH, 0C7H, 084H, 055H,……
Nhóm lệnh liên quan đến ngăn xếp
+ Ghi vào ngăn xếp:
- Cú pháp: PUSH Thanh ghi/ địa chỉ
- Thực hiện: cất nội dung thanh ghi hoặc ô nhớ vào đỉnh ngăn xếp+ Đọc ngăn xếp:
- Cú pháp: POP Thanh ghi/ địa chỉ
- Thực hiện: lấy nội dung ở đỉnh ngăn xếp gán vào thanh ghi, ô nhớ
MOV 100,#3EHPUSH ACCPUSH 100MOV A, #21HMOV 100, #40POP 100POP ACC
Lệnh trao đổi dữ liệu :
- Cú pháp: XCH A, <NGUỒN>
Trong đó: <NGUỒN> có thể là thanh ghi, ô nhớ hoặc @Rp
- Thực hiện: trao đổi nội dung thanh ghi A và NGUỒN>
Trang 26I.2.3.2 Nhóm lện số học
Lệnh cộng :
- Cộng không nhớ :+ Cú pháp: ADD A, <NGUỒN>
Trong đó: <NGUỒN> có thể là thanh ghi, ô nhớ, #<giá trị>hoặc @Rp
+ Thực hiện: A ß A + <NGUỒN>
- Cộng có nhớ :+ Cú pháp: ADDC A, <NGUỒN>
Trong đó: <NGUỒN> có thể là thanh ghi, ô nhớ,#<giá trị>hoặc @Rp
Trang 27Trong đó: <NHÃN> là một từ, hay nhóm từ viết liền nhau,theo sau bằng dấu ”:” dùng để đánh dấu vị trí chương trình.+ Thực hiện: nhày không điều kiện đến vị trí chương trìnhđược chỉ định bởi <NHÃN>, khoảng cách từ lệnh đến
<NHÃN> không vượt quá 128 byte mã lệnh
- Nhảy xa :+ Cú pháp: LJMP <NHÃN>
+ Thực hiện: nhảy đến vị trí được chỉ định bởi <NHÃN>,
<NHÃN> có thể nằm ở bất kì vị trí nào trong chương trình
Lệnh nhảy có điều kiện :
- Nhảy so sánh và nhảy nếu không bằng :+ Cú pháp:CJNE A, <TOÁN HẠNG >, <NHÃN>
Trong đó <TOÁN HẠNG> có thể là thanh ghi, ô nhớ hoặc
#<giá trị>
+ Thực hiện: So sánh A và <TOÁN HẠNG>, nếu:
* A ≠ <TOÁN HẠNG>: nhảy đến <NHÃN> và nếu:
A > <TOÁN HẠNG>: bit C = 0 A < <TOÁN HẠNG>: bit C = 1
Trang 28* A = <TOÁN HẠNG>: thực hiện lệnh kế tiếp+ Một dạng khác của lệnh:
CJNE Ri/@Rp, #<GIÁ TRỊ>, <NHÃN>
- Lệnh giảm Ri một đơn vị và nhảy nếu bằng 0 :+ Cú pháp: DJNZ Ri, <NHÃN>
+ Thực hiện: nhảy đến vị trí chương trình được chỉ định bởi
<NHÃN> nếu BIT bằng 1 hoặc bằng 0
- Lệnh nhảy thông qua việc kiểm tra cờ CARRY :
- Cú pháp: JC/ JNC <NHÃN>
- Thực hiện: nhảy đến vị trí chương trình được chỉ định bởi
<NHÃN> nếu C bằng 1 hoặc bằng 0
- Lệnh nhảy thông qua việc kiểm tra cờ ZERO :+ Cú pháp: JZ/ JNZ <NHÃN>
+ Thực hiện: nhảy đến vị trí chương trình được chỉ định bởi
<NHÃN> nếu Z bằng 1 hoặc bằng 0
Trang 295 CPL A ; đảo các BIT trong thanh ghi A
6 NOP ; lệnh không thực hiện, bỏ qua khi gặp lệnh này
7 SWAP A ; đảo vị trí 4 bit cao và 4 bit thấp trong thanh ghi A
8 Nhóm lệnh quay vòng :
- Quay phải thanh ghi A :+ Cú pháp: RR A+ Thực hiện :
- Quay trái thanh ghi A :+ Cú pháp: RL A+ Thực hiện:
- Lệnh quay trái thanh ghi A với cờ C :+ Cú pháp: RLC A
Trang 30- Lệnh quay phải thanh ghi A với cờ C :+ Cú pháp: RRC A
+ Thực hiện:
I.2.3.5 Nhóm lệnh thao tác bit
2 SETB BIT ; đặt BIT = 1
3 CPL BIT ; đảo nội dung hiện tại của BIT
4 lệnh di chuyển bit :
- MOV C, BIT ; C ß BIT
- MOV BIT, C ; BIT ß C
I.2.3.6 Nhóm lệnh liên quan đến chương trình con :
1 CALL <TÊN CHƯƠNG TRÌNH CON>; gọi chương trình con
2 RET ; kết thúc chương trình con
3 RETI ; kết thúc chương trình ngắt
C Bit 7 > - bit 0