bỘ giÁo dỤc vÀ ĐÀo tẠo i h c qu c gia tp.hcm trƯỜng ĐẠ...

76
BGIÁO DC VÀ ĐÀO TO ĐẠI HC QUC GIA TP.HCM TRƯỜNG ĐẠI HC SƯ PHM KTHUT KHOA ĐIN – ĐIN TBMÔN ĐIN TLUẬN N Đề tài : NG DNG KIT 8051 DÙNG ĐỂ CHUYN ĐỔI A/D & D/A Sinh viên thc hin : NGUYN VŨ ANH DUY Lp : 95 KĐĐ Giáo viên hướng dn : LÊ THANH ĐẠO TPHCM, tháng 2-20

Upload: others

Post on 01-Sep-2019

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

BỘ GIÁO DỤC VÀ ĐÀO TẠO ĐẠI HỌC QUỐC GIA TP.HCM

TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT KHOA ĐIỆN – ĐIỆN TỬ

BỘ MÔN ĐIỆN TỬ

LUẬN VĂN ĐĐềề ttààii ::

ỨỨNNGG DDỤỤNNGG KKIITT 88005511 DDÙÙNNGG ĐĐỂỂ CCHHUUYYỂỂNN ĐĐỔỔII AA//DD && DD//AA

Sinh viên thực hiện : NGUYỄN VŨ ANH DUY Lớp : 95 KĐĐ Giáo viên hướng dẫn : LÊ THANH ĐẠO

TPHCM, tháng 2-20

Page 2: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

PHẦN DẪN NHẬP I – ĐẶT VẤN ĐỀ: Vào đầu những năm thập niên 60, kỹ thuật số đã đưa vào ứng dụng trong thực tế nhưng ở phạm vi nhỏ. Cho đến ngày hôm nay kỹ thuật số đã được phát triển một cách mạnh mẽ và được ứng dụng vào mọi lãnh vực của cuộc sống. Từ những chiếc máy vi tính (computer), máy CD, máy VDC, truyền hình số … cho đến các băng diã CD đã dần dần thay thế các máy và băng từ tín hiệu tương tự (analog) bởi bộ phân giải rộng, độ chính xác cao và dễ dàng trong quá trình xử lý tín hiệu. Tuy nhiên trong cuộc sống hằng ngày chúng ta lại thường tiếp xúc với những tín hiệu tương tự nhiều hơn. vd: Điện thoại, sóng đài truyền hình, dòng điện sinh hoạt, âm thanh … vì thế phải cần có một sự chuyển đổi từ tín hiệu tương tự (Analog) – số (Digital) để xử lý dữ liệu, sau đó lại chuyển đổi ngược lại từ số (Digital) – tương tự (Analog) để đưa vào điều khiển, khống chế thiết bị. Đó là những lý do để em thực hiện đề tài này.

II – MỤC ĐÍCH YÊU CẦU CỦA ĐỀ TÀI Có rất nhiều phương pháp để thực thi việc chuyển đổi A/D và D/A

Sử dụng vi mạch số Sử dụng vi xử lý Sử dụng vi điều khiển Với đề tài này em sử dụng vi điều khiển để thực hiện việc chuyển đổi A/D và

D/A Mục đích: Chuyển đổi tín hiệu Analog – Digital để xử lý, sau đó chuyển đổi

ngược lại từ Digital – Analog để điều khiển, khống chế thiết bị Yêu cầu: Hiểu rõ về kỹ thuật số, các quá trình chuyển đổi A/D và D/A bên

trong những vi mạch chuyên dụng (IC ADC 0809 và DAC 0808), nắm vững cách sử dụng kết nối phần cứng và phần mềm của KIT 8051.

III – GIỚI HẠN ĐỀ TÀI Do sự chuyển đổi A/D và D/A để điều khiển và xử lý bằng KIT 8051 rất phong phú và đa dạng mà kiến thức của em thì còn rất nhiều hạn chế đặt biệt đối với vi điều khiển 8051 là phần không có trong chương trình giảng dạy của nhà trường, chủ yếu là em tự tìm tòi học hỏi, nghiên cứu là chính. Bên cạnh đó chỉ với thời gian 6 tuần để tìm hiểu, viết luận văn và thi công thì đề tài này em xin được trình bày và thực hiện một quá trình chuyển đổi A/D và D/A cơ bản nhất.

Ngày 25 Tháng 02 Năm 2000

Sinh viên thực hiện Nguyễn Vũ Anh Duy

Page 3: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

Chương I BIẾN ĐỔI TƯƠNG TỰ – SỐ VÀ SỐ – TƯƠNG TỰ

A – BIẾN ĐỔI TƯƠNG TỰ SỐ (ADC): Biến đổi tương tự – số (analog – digital) là thành phần cần thiết trong việc xử lý thông tin và các cách điều khiển sử dụng phương pháp số. Tín hiệu thực ở Analog. Một hệ thống tiếp nhận dữ liệu phải có các bộ phận giao tiếp Analog – Digital (A/D). Các bộ chuyển đổi tương tự số, viết tắt là ADC thực hiện hai chức năng cơ bản là lượng tử hóa và mã hóa. Lượng tử hóa là gán cho những mã nhị phân cho từng giá trị rời rạc sinh ra trong quá trình lượng tử hóa. I – TỔNG QUÁT

1 – Quan hệ In – Out: Biến đổi AD có tính chất tỉ lệ. Tín hiệu vào Analog được biến đổi thành một phân số X bằng cách so sánh với tín hiệu tham chiếu Vref. Đầu ra của bộ ADC là mã của phân số này. Bất kỳ một sai số tín hiệu Vref nào cũng sẽ dẫn đến sai số mức ra, vì vậy người ta cố gắn giữ cho Vref càng ổn định càng tốt. Vref Vin Digital output

Hình 2.1 Quan hệ vào ra các khối ADC

Nếu bộ ADC xuất mã ra gồm n bit thì số mức ra rời rạc là 2n. Đối quan hệ tuyến tính, tần vào được lượng tử hóa theo đúng mức này. Mỗi mức như vậy là một tín hiệu Analog được phân biệt với hai mã kế tiếp nhau, nó chính là kích thước của LSB (Least Significant Bit). FS Q=LSB= 2N

Trong đó : Q : Lượng tử LSB : bit có trọng số thấp nhất FS : giá trị toàn thang

ADC

Page 4: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

Tất cả các giá trị Analog của lượng tử Q được biểu diễn bởi mã số, mà mã này tương ứng với giá trị trung bình của lượng tử (có thể hiểu là giữa khoảng LSB) gọi là

mức ngưỡng. Các giá trị Analog nằm trong khoảng từ mức ngưỡng sai biệt đi ± ½ LSB vẫn được thể hiện bằng cùng một mã, đó là sai số lượng tử hóa. Sai số này có thể sẽ giảm đi bằng cách tăng số bit trong mã ra bộ ADC.

2 – Độ phân giải: Là giá trị biến đổi nhỏ nhất của tín hiệu vào ra được yêu cầu để thay đổi mã lên một mức. Độ phân giải được đưa ra với giả thiết lý tưởng.

3 – Độ chính xác: Sự sai biệt giữa các giá trị điện áp tín hiệu vào so với giá trị FS tương đương với mã xuất ra. Thường có ghi trong đặc tính của các bộ ADC thương mại.

4 – ADC: Tùy theo công nghệ chế tạo mà bộ ADC có đầu vào đơn cực hay lưỡng cực, đa số nằm trong khoảng 0…5V hoặc 0…10V đối với đơn cực và -5…+5V hoặc –10V…+10V đối với ADC lưỡng cực. Tín hiệu vào cần phù hợp với tầm vào xác định cho từng bộ ADC. Nếu đầu vào không hết thang sẽ tạo mã vô dụng ở đầu ra. Vấn đề này được giải quyết bằng cách chọn tầm đầu vào bộ ADC sau đó chỉnh độ lợi thích hợp cho đầu vào của nguồn Analog. Khi sử dụng bộ ADC đơn cực mà có tín hiệu vào là lưỡng cực trong khoảng ±Vpp thì ta cần phải cộng điện áp vào Vi với một điện áp nền bằng +Vpp, khi đó ta sẽ có Vi nằm trong khoảng 0..+2Vpp; tín hiệu này sẽ được đưa tới đầu vào bộ ADC. Nếu sử dụng ADC lưỡng cực thì không cần cộng tín hiệu và đầu ra ta sẽ nhận được mã lưỡng cực.

Page 5: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

5 – Đầu ra bộ ADC: Đa số các ADC có đầu ra 8 Bits, 16 Bits … dù vậy cũng có loại 3½ Digit, mã BCD, 10 Bits, 14 Bits. Đầu các bộ ADC thường là mã nhị phân tự nhiên hoặc có dấu. ADC dùng cho máy đo chỉ thị số đa dụng thường là mã BCD.

5 – Tín hiệu tham chiếu Vr: Vi+ (EOC) End of Convertion Vi - OE (Output Enable) Vr Start Digital Output Clock

Hình 2.3 Các ngõ vào, ra chính của bộ ADC Hình vẽ cho thấy đầu vào và đầu ra của bộ ADC. Mọi ADC đều yêu cầu có tín

hiệu Vr. Bất kỳ một sai số nào trên Vr đều gây ra lỗi độ lợi ở đặc tính của AD. Vì vậy Vr là tín hiệu đảm bảo độ chính xác và ổn định của bộ AD. Dùng IC ổn áp có thể thỏa mãn điều này.

7 – Tín hiệu điều khiển: Mọi bộ ADC đều có tính xung Clock và tín hiệu điều khiển để hoạt động. Thiết bị ngoài giao tiếp với ADC sẽ khởi động quá trình AD bằng cách phát một xung Start vào đầu vào Start của ADC, ADC sẽ nhận biết cạnh lên của xung Start và ngay sau đó nó sẽ kéo đường EOC (End of Conversion) xuống thấp (không tích cực). Lúc này ADC đang thực hiện quá trình biến đổi, tương ứng với mỗi xung Clock đưa vào ADC sẽ thực hiện được một bước biến đổi, sau một bước nhất định tùy theo bộ ADC, thì quá trình biến đổi hoàn thành. Khi biến đổi xong, AD sẽ nâng đường EOC lên mức cao, tín hiệu này có thể dùng để kích một ngắt cứng của máy tính (nếu dùng giao tiếp với máy tính). Để đọc được dữ liệu đầu ra của bộ ADC thì phải nâng đường OE (Output Enable) của ADC lên mức cao, sau khi đọc xong thì lại trả đường này về mức thấp.

ADC

Page 6: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

II – CÁC KỸ THUẬT AD: 1 – ADC có Vr dạng nấc thang:

Analog Vht Vref input Vi Reference Comparateur Digital output

Hình 2.4 Sơ đồ khối AD có Vr dạng nấc thang

Counter: Bộ đếm tạo đầu ra cho bộ ADC bằng hoặc lớn hơn giá trị vào Vi. Nó được reset tại mọi thời điểm bắt đầu thực hiện AD và đếm dần lên sau mỗi xung Clock. Cứ mỗi lần đếm bộ DAC lại nâng lên mỗi nấc thang (1 LSB). Bộ so sánh sẽ dùng bộ đếm lại khi điện áp DAC (áp hồi tiếp) đạt tới giá trị vào Vi. Nhược điểm của phương pháp này là Tc (thời gian chuyển đổi) theo mức tín hiệu vào và đôi khi rất lâu. Tc=2ⁿ x Tclock đối với bộ DAC n bit khi biến đổi một tín hiệu vào ở mức FS (Full Scale). Một cải tiến của phương này là “tracking” hay “servo” sử dụng bộ đếm thuận nghịch cho phép DAC đưa tín hiệu vào liên tục. Bằng sự khống chế bộ đếm từ bên ngoài tại một điểm nhất định ta dùng bộ DAC kiểu tracking như một bộ S & H (Sample and Hold).

2 – ADC thăng bằng liên tục: Sơ đồ khối giống như phương pháp trước, nhưng bộ đếm là bộ đếm thuận nghịch. Về cơ bản cũng giống như phương pháp trên nhưng bộ đếm hoạt động được ở chế độ thuận nghịch. Khi tín hiệu Vht < Vi thì bộ đếm sẽ đếm lên, ngược lại thì bộ đếm sẽ đếm xuống. Quá trình xác lập ghi nhận được khi giá trị Vht dao động xung quanh giá trị Vi. Tc cũng phụ thuộc vào Vi và nhược điểm sai số cũng giống phương pháp trên: sai số động phụ thuộc vào thời gian biến đổi và sai số tĩnh chủ yếu ở bộ biến đổi DA và bộ so sánh.

Control Clock Counte

DAC

Page 7: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

3 – Phương pháp biến đổi AD hàm dốc tuyến tính: (Phuơng pháp tích phân một độ dốc) Về bản chất thực hiện biến đổi trung gian từ điện áp ra khoảng thời gian sau đó đo khoảng thời gian theo phương pháp số. Quá trình biến đổi sẽ xảy ra như sau: Comparator Vi V1 Vs V2 Start Result

Hình 2.6 Sơ đồ khối phương pháp ADC hàm dốc tuyến tính

Sau thời gian kích khởi, bộ đếm sẽ bắt đầu đếm lên và mạch quét sẽ bắt đầu tạo ra tín hiệu tuyến tính thời gian. Tín hiệu quét và tín hiệu vào Vi được so sánh với nhau, khi hai tín hiệu này bằng nhau thì mạch so sánh sẽ đóng cổng không cho xung tới bộ đếm nữa. Như vậy nội dung của bộ đếm sẽ tỉ lệ với thời gian to, mà to lại tỉ lệ thuận với giá trị Vi nên nội dung bộ đếm tỉ lệ với Vi.

Gate Clock

CouteScan

Page 8: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

Độ chính xác của phương pháp này phụ thuộc vào độ tuyến tính của tín hiệu quét (sai số độ dốc càng nhỏ, độ chính xác càng cao), tín hiệu phụ thuộc vào tần số của từng xung. Phương pháp này có tốc độ hoạt động cao hơn các phương pháp ban đầu, và độ chính xác cũng cao hơn do không cần sử dụng bộ biến đổi DA.

4 – ADC xấp xỉ liên tiếp: Analog Input Vi Comparateur Vref Reference Digital output

Hình 2.8 ADC xấp xỉ liên tiếp Phương pháp này được dùng trong kỹ thuật biến đổi AD tốc độ cao – trung bình. Nó cũng dùng một bộ DAC bên trong để tạo ra một điện áp bằng mức vào và của tín hiệu sau đúng bằng n chu kỳ xung Clock cho trường hợp ADC n bit. Phương pháp này cho phép rút ngắn Tc rất nhiều và không phụ thuộc vào tín hiệu vào Vi. Kỹ thuật này phụ thuộc vào sự xấp xỉ tín hiệu vào với mã nhị phân, sau đó thay đổi các bit trong mã này một cách liên tiếp cho đến khi đạt được mã gần đúng nhất. Tại mỗi bước của quá trình này, giá trị xấp xỉ của mã nhị phân thu được sẽ được lưu vào SAR (Successive Approximate Register). Việc biến đổi luôn được bắt đầu tại MSB (Most Significant Bit) của SAR khi đó được bật lên. Bộ so sánh sẽ so sánh đầu

SAR Clock DAC

Page 9: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

ra của ADC với Vi và ra lệnh cho bộ điều khiển ngắt MSB nếu như giá trị ban đầu này vượt quá đầu vào AD. Trong chu kỳ xung Clock kế tiếp, MSB lại được phát trở lại. Một lần nữa bộ so sánh sẽ quyết định lấy hay bỏ MSB này. Sự biến đổi này sẽ tiến dần đến sự đúng nhất so với tín hiệu vào xuất dữ liệu này ra. DAC output 100 MSB LSB 1 1 0 SAR output

Hình 2.9 Đồ thị dạng sóng của mạch 111 111 110 110 101 101 100 100 010 011 011 010 011 001 000

Hình 2.10 Sơ đồ thay đổi mức logic

5 – ADC tích phân hai độ dốc: Kỹ thuật này thấy rõ trên sơ đồ khối. Ta thấy điện áp vào được tích phân trong khoảng thời gian t1, đúng bằng lúc bộ đếm đếm hết. Tại cuối t1, bộ đếm sẽ reset và bộ tích phân chuyển qua mức tham chiếu âm, đầu ra của bộ tích phân sẽ giảm tuyến tính về zero tại đó bộ đếm ngưng đếm và được reset. Điện tích nạp tụ trong khoảng thời gian t gần bằng điện tích xả trong khoảng thời gian t2: t1 x V1 = t2 x V2 t2 = V1 = x t1 V2

Tỉ số x cũng chính là tỉ số mà mã nhị phân của bộ đếm lớn nhất giá trị đếm được vào cuối t2 cũng là giá trị xuất ra. Kỹ thuật này có một số ưu điểm, nhất là chất lượng khử ồn. Tín hiệu vào được tích phân qua một chu kỳ, do đó bất kỳ mức ồn nào cũng có tần số là bội số của 1/t1 đều bị loại. Analog reference

Page 10: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

+ Vr - - +

Vi Digital Output Hình 2.11 Sơ đồ khối ADC tích phân hai độ dốc

Chú ý rằng, tần số xung Clock không ảnh hưởng gì đến độ phân giải. Độ phân

giải của kỹ thuật này chỉ bị giới hạn bởi chất lượng mạch và không phụ thuộc vào độ phi tuyến của bộ AD: Do đó đầu ra của bộ tích phân có thể nhảy cấp tự do mà không sợ phát sinh mã lỗi ở đầu ra. Vì vậy mà độ phân giải tốt rất dễ đạt được và có thể thay đổi bằng cách chỉnh kích thước của vòng đếm và tần số xung Clock. Tần số thấp là nhược điểm duy nhất của phương pháp. Phương pháp này thường được dùng cho các đồng hồ hiện số, máy đo đa năng chỉ thị số, cảm biến nhiệt độ và những ứng dụng có yêu cầu không cao về tần số lấy mẫu. 6 – ADC dùng biến đổi V – F (điện áp – tần số): VFC Bộ phát Bộ thu

Page 11: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

Định thời Đếm

Digital output

Hình 2.13 Sơ đồ khối bộ biến đổi AD dạng VF Hình trên cho thấy kỹ thuật này trong bộ biến đổi AD. Áp vào Analog được một bộ VF chính xác biến thành một dãy xung có tần số tỉ lệ với áp vào. Một bộ đếm sẽ đếm số xung này trong một khoãng thời gian nhất định rồi xuất số đếm cho bộ AD. Giống kỹ thuật tích phân độ dốc kép, kỹ thuật này có tần số thấp nhưng khử nhiễu tốt. Nếu thời gian Tc thấp ở mức có thể chấp nhận được thì phương pháp VF cho phép đạt được độ phân giải cao với tín hiệu thay đổi chậm với giá thành hạ. Ưu điểm của phương pháp này là có khả năng điều khiển từ xa trong môi trường ồn. Có thể làm một bộ VF như một hàm truyền dữ liệu từ xa dưới dạng số đến trạm kiểm soát, tại đây có bộ xử lý (tiếp nhận + bộ đếm + xuất dữ liệu). Điều này tránh được việc truyền tín hiệu Analog qua môi trường nhiễu có khả năng làm xấu tín hiệu. Việc truyền bằng tín hiệu VF cũng có khả năng triệt nhiễu bằng cách tạo sự cách ly giữa bộ biến đổi với thiết bị cảm biến, một yêu cầu quan trọng trong các trạm kiểm soát và điều khiển các hệ thống điện cao áp. Thực tế, kỹ thuật này phụ thuộc vào các vi mạch VFC thông dụng, rẻ tiền, có chất lượng tốt (tuyến tính và ổn định).

Page 12: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

7 – ADC song song: Vr Vi R

Digital output R R 2 2n-1 Comparator

Hình 2.14 Sơ đồ khối AD song song Được dùng trong kỹ thuật cần biến đổi AD tốc độ cao, như kỹ thuật Video, kỹ

thuật Radar, dao động ký số. Trong kỹ thuật này tín hiệu vào được so sánh ngay lập tức với tất cả các mức ngưỡng bằng cách dùng nhiều bộ so sánh. Việc lượng tử hóa do vậy thực hiện hoàn tất trong cùng một lúc. Bộ giải mã nhanh lập tức đổi các tín hiệu so sánh được tới đầu ra. ADC dùng phương pháp này có tần số lấy nẫu phụ thuộc vào tốc độ (thời gian trễ) của các bộ so sánh. Thông thuờng vi mạch so sánh có thời gian trễ trong khoảng 10-12ns, vì vậy trên lý thuyết, tần số lấy mẫu của ADC có độ phân giải 8 Bits cần tới 2 8 – 1=255 bộ so sánh, do vậy kích thước vi mạch sẽ rất lớn.

Encoder

Page 13: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

III – GIAO TIẾP PHẦN MỀM: Dữ liệu truyền giữa ADC và vi xử lý có thể tổ chức trong phần mềm theo 3 cách: 1 – Memory – Mapped – Transfers (Truyền theo bản đồ nhớ):

Trong bản đồ bộ nhớ, ADC được chỉ định trong một vùng bộ nhớ thực sự chưa sử dụng. Bên cạnh việc sử dụng tối đa bộ nhớ, ta có dùng phần cứng giải mã địa chỉ từ tối thiểu đến tối đa để không lãng phí không gian trong bộ nhớ. 2 – Input / Output Mapped Tranfers (Truyền theo bản đồ I/O):

Một vài hệ thống tạo ra vùng I/O có địa chỉ rất riêng biệt, mà ở đó địa chỉ có thể giống địa chỉ bộ nhớ, có thể phân biệt chúng với nhau bằng cách dùng tín hiệu điều khiển đặc biệt IOR, IOW trên hệ thống Bus của IBM – PC. Sự phân biệt giữa I/O và 2 vùng bộ nhớ làm cho thiết kế hệ thống trở nên tốt hơn. Nó cho phép giải mã địa chỉ sử dụng phần cứng là tối thiểu, giải mã từ vùng IO đơn giản và tốt hơn bộ nhớ có giá trị chưa sử dụng. 3 – DMA (Direct Memory Access : truy mất trực tiếp bộ nhớ):

Khi chỉ có truyền dữ liệu đơn giản giữa bộ nhớ và ngoại vi được dùng tích lũy trong quá trình chuyền làm chậm quá trình một cách không cần thiết. Bằng việc sử dụng kết hợp trong phần cứng trong dạng thiết bị phục vụ gọi là “điều khiển DMA”. Việc truyền trực tiếp có tác động nhanh hơn nhiều, hầu hết các bộ vi xử lý cho phép DMA thực hiện đầy đủ bằng cách cấp điều khiển của Bus hệ thống cho khoảng định trước. Điều khiển DMA lấy địa chỉ yêu cầu và tín hiệu điều khiển. Tại cuối khoảng, điều khiển Bus quay lại vi xử lý. Truyền dữ liệu hoàn toàn có thể lấy nhiều chu kỳ DMA để thi hành. IV – GIAO TIẾP PHẦN CỨNG:

Thiết kế phần cứng theo mô hình dữ liệu song song hay nối tiếp. 1 – Dữ liệu truyền song song:

Phần cứng cho giao tiếp dữ liệu song song hầu hết bao gồm ngõ ra đệm ba trạng thái mà ADC nối với Bus dữ liệu của vi xử lý. Địa chỉ giải mã và tín hiệu điều khiển ghi đọc của cho phép đệm truyền dữ liệu ADC vào P. Giải mã tương ứng và tín hiệu điều khiển của P tạo thành lệnh bắt đầu cho bộ biến đổi. Nó không cần dùng điều khiển R/W riêng biệt, dù sao việc làm này cho phép địa chỉ giống nhau cho việc gởi lệnh đến ADC và để đọc ngõ ra ADC. Các ADC mới hơn có bộ đệm ba trạng thái với mạch điều khiển của chúng. Những ADC này có thể nối trực tiếp với Bus dữ liệu của vi xử lý. Giao tiếp nhiều thiết bị, thì ta phải cung cấp giải mã và đôi khi phải một vài cổng quản lý tín hiệu điều khiển. Giao tiếp với hệ thống P thì đơn giản bởi vì P cung cấp địa chỉ Port trực tiếp và việc giải mã địa chỉ là không cần thiết. 2 – Mô hình dữ liệu nối tiếp :

Dùng trong việc truyền dữ liệu đi xa. Truyền đồng bộ nối tiếp dùng cho tuyến phục vụ hay tuyến điện thoại. Thiết bị gọi là UART (truyền nhận không hoàn toàn đồng bộ). UART nhận và truyền dữ liệu dạng tuần tự nhưng giao tiếp với P dạng song song.

Page 14: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

B – BIẾN ĐỔI TƯƠNG TỰ SỐ (DAC) : Biến đổi DA thường là giai đoạn cuối của một hệ thống xử lý số: Sau khi tín

hiệu tương tự ở đầu vào được mạch ADC biến đổi sang dạng số, nó được xử lý, lưu trữ dưới dạng số bởi hệ xử lý trung tâm rồi kết quả xử lý sẽ được đưa đến mạch DAC để xuất ra dữ liệu dạng tương tự. Mạch DAC nhận ở đầu vào một giá trị số nhị phân tự nhiên và xuất ra ở ngõ ra một điện áp dạng tương tự có giá trị tỉ lệ với giá trị ngõ vào.

I – TỔNG QUÁT: 1 – Quan hệ vào ra: Vref V0 (I0)

DAC Digital input

Hình 2.15 Quan hệ vào ra bộ DAC Biến đổi DA có tính chất tỉ lệ. Tín hiệu vào Digital N được biến đổi thành một điện áp (hoặc dòng điện) có giá trị Q (phụ thuộc vào tín hiệu tham chiếu Vref) bằng cách so sánh giá trị ở đầu vào với giá trị đầy thang của đầu vào. Bất kỳ một sai số tín hiệu Vref nào cũng sẽ dẫn tới sai số mức ra, vì vậy người ta cố gắng cho Vref càng ổn định càng tốt. Thông thường, ở các bộ biến đổi DAC thương mại, ngõ ra sẽ xuất hiện dòng điện, vì vậy ta phải mắc thêm một biến đổi dòng thành áp có thể nhận được điện áp ra. 2 – Đầu vào bộ DAC:

Đa số các bộ DAC có đầu vào 8 Bits, 10 Bits, 12 Bits, 16 Bits … Đầu vào các bộ DAC thường là các mã nhị phân tự nhiên hoặc có dấu. Nếu mã đầu vào đầu vào có dấu thì tín hiệu tham chiếu Vref phải là tín hiệu lưỡng cực. Bộ DAC sẽ liên tục biến đổi số ở ngõ vào thành giá trị tương tự ở ngõ ra, thời gian cho một lần biến đổi như vậy tùy theo bộ DAC. Vì vậy để đảm bảo chính xác, người ta mắc thêm ở ngõ vào bộ DAC một mạch chốt dữ liệu để tránh hiện tượng bộ DAC xuất ra tín hiệu không xác định trong khoảng thời gian tự do giữa hai lần cập nhật dữ liệu ở ngõ vào. 3 – Đầu ra bộ DAC

Tùy theo công nghệ chế tạo mà đầu ra của bộ DAC có thể là dòng hoặc áp. 4 – Tín hiệu điều khiển: Hầu hết các bộ DAC đều không cần tín hiệu điều khiển. II – GIAO TIẾP DAC VỚI VI XỬ LÝ: 1 – Xuất dữ liệu tuần tự: Khi có yêu cầu xuất một chuỗi dữ liệu ra cổng, phần mềm xử lý sẽ tuần tự xuất từng Byte dữ liệu trong bộ đệm ra cổng. Để tạo được tần số xuất theo mong muốn, đầu tiên chương trình phải tính được tốc độ của CPU có thể xuất ra cổng giao tiếp trong một dịch vụ thời gian (1 giây). Từ thông tin đó, phần mềm có thể tính được thời gian trễ (Delay) giưã hai lần xuất dữ liệu để tạo ra tần số xuất theo yêu cầu.

Page 15: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

Phương pháp này tạo ra tần số xuất dữ liệu rất cao (lên tới khoảng 40Khz hoặc cao hơn tùy theo kiểu máy tính), nhưng tần số rất khó để có thể tạo ra một cách chính xác. Mặt khác CPU cũng sẽ bị bận trong suốt quá trình xuất dữ liệu. 2 – Cài đặt một ngắt ngoại vi: Phương pháp này sử dụng xung Start để mạch lấy mẫu ADC để kích hoạt một chương trình phục vụ ngắt, chương trình phục vụ này sẽ làm nhiệm vụ xuất một Byte dữ liệu ra cổng. Xung Start ở được lợi dụng để tạo ra một tần số kích ngắt bằng tần số lấy mẫu. 3 – Sử dụng ngắt đồng hồ: Ta biết rằng trong hệ thống của máy tính có ngắt số 8 là một ngắt có kích hoạt định kỳ theo thời gian, gọi là ngắt đồng hồ, chu kỳ kích ngắt có thể có thể thay đổi được bằng cách lập trình cho bộ định thì 8253. Lợi dụng ngắt có sẵn này, ta có cài thêm một chương trình phục vụ ngắt của máy rồi lập trình cho bộ 8253 để tạo ra một tần số kích ngắt theo mong muốn.

Page 16: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

Chương II GGIIAAOO TTIIẾẾPP NNGGOOẠẠII VVII 88225555AA

PPI 8255A (PROGRAMABLE PARALLEL INTERFACE) I – TỔNG QUÁT: 1 – Bộ đệm truyền dữ liệu: Bộ đệm 8 Bits, 2 chiều, 3 trạng thái dùng để giao tiếp 8255 với CPU. Dữ kiện được phát hay nhận bởi bộ đệm khi thực hiện lệnh IN, OUT bởi CPU. Các từ điều khiển cũng truyền qua dữ kiện.

I/O

PA0-DA7 I/O PC4-PC7 I/O PC0-PO3 I/O PB0-PB7

Hình 3.1 Cấu trúc khối của 8255

2 – Phần kiểm soát đọc ghi: Chức năng của khối này là kiểm soát tất cả các sự truyền đạt bên trong và bên ngoài của từ điều khiển và dữ kiện. Nó nhận ngõ vào từ tuyến địa chỉ và sự điều khiển của CPU, phát ra các lệnh cần thiết cho cả hai nhóm A và B. CS: ngõ vào = 0 cho phép truyền tin giữa 8255 và CPU. RD: = 0 cho phép 8255 gởi dữ kiện đến CPU trên tuyến dữ kiện chủ yếu là cho phép CPU đọc dữ kiện từ 8255. WR=0 – CPU từ điều khiển hay dữ kiện ra 8255.

A0 A1 Chọn cửa 0 0 Cửa A 0 1 Cửa B 1 0 Cửa C

Đệm dữ kiện

Điều khiển Nhóm A

Nhóm A Cửa A

Nhóm A Cửa C Phần cao

Nhóm B Cửa C Phần thấp

Nhóm B Cửa B

Kiểm soát đọc ghi

Điều khiển nhóm B

Page 17: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

1 1 Cửa điều khiển RESET: =1 xóa các thanh ghi bên trong gồm thanh ghi điều khiển và các cửa A, B, C ở mode nhận. 3 – Điều khiển nhóm A và B: Cấu hình hoạt động của mỗi nhóm được lập trình bởi phần mềm, chủ yếu là CPU xuất phát từ điều khiển đến 8255. Từ điều khiển gồm các thông tin như chế độ (mode), bit set, bit reset, v.v … sẽ khởi động cấu hình hoạt động của 8255. Thanh ghi từ điều khiển chỉ có thể viết vào mà không đọc ra. 4 – Các cửa A, B, C: 8255 gồm 3 cửa A, B và C. Mỗi cửa gồm 8 bits. Các cửa này có thể được lập trình bởi phần mềm để có thể hoạt động ở chế độ thích hợp. Cửa A: gồm bộ đệm, cài ngõ ra 8 bits và cài ngõ vào 8 bits. Cửa B: gồm bộ đệm, cài ngõ ra 8 bits và cài ngõ vào 8 bits. Cửa C: đệm và cài ngõ ra 8 bits và đệm 8 bits ngõ vào (không cài). Cửa C có thể chia làm 2 phần, mỗi phần 4 bits cho điều khiển mode. Mỗi phần được dùng kết hợp với cửa A hay B tạo nên các tín hiệu điều khiển.

II – MÔ TẢ CHI TIẾT: 1 – Chọn chế độ (Mode): Có 3 chế độ hoạt động cơ bản thích hợp cho phần mềm: Mode 0 : Vào/ra cơ bản Mode 1 : Vào/ra “bắt tay” (chỉ cho phép 1 trong chiều) Mode 2 : Truyền dữ kiện hai chiều Khi RESET, tất cả các cửa được thiết lập ở chế độ nhập (input), tức là cả 24 đường đều ở 3 trạng thái. Sau khi RESET 8255 có thể duy trì ở chế độ nhập mà không cần khởi động gì thêm. Trong khi thực hiện chương trình hệ thống, có thể chọn bất kỳ mode nào bằng cách xuất đến 8255 từ điều khiển. Điều này cho phép chỉ cần một 8255 mà có thể phục vụ nhiều kiểu thiết bị ngoại vi. Các chế độ cửa A và B có thể định nghĩa riêng biệt. Còn của C được chia làm hai phần cho hai nhóm tùy yêu cầu định nghĩa chế độ cửa A và B. Ta có từ điều khiển cho 8255 như sau: (trang sau). 2 – Đặc tính xóa/thiết lập bit cho cửa C khi nó dùng làm tín hiệu trạng thái/điều khiển cho cửa A/B: Ta dùng lệnh OUT xuất ra từ một điều khiển, trong đó bit D7 = 0.

Page 18: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

D7 D6 D5 D4 D3 D2 D1 D0

Nhóm B 1:in Mode set flag Cửa C(phần thấp) 0: out 1-active Cửa B 1:in

0:out Chọn chế độ 0:mode 0

1: mode 1 NhómA Cửa C 1:in (phần cao) 0:out Cửa A 1: in 0: out 00: mode 0 Chọn mode 01: mode 1 1X: mode 2

Hình 3.2

Khi chọn mode cho port A, các bit D3, D4, D5 không còn ý nghĩa nữa. Lúc đó cửa A là hai chiều, còn phần cao cửa C sẽ làm tín hiệu điều khiển và trạng thái cho cửa A. (Bitset và reset flag), phần còn lại của điều khiển có ý nghĩa như sau:

D7 D6 D5 D4 D3 D2 D1 D0 x x x Bit set / Reset 0: Reset 1:set Bit select Bit set / Reset fleg 0 - active 01010101 00110011 00001111 01234567

Hình 3.3 Mỗi lần xuất ra một từ điều khiển đến 8255 với D7 = 0, chỉ tác động đến 1 bit của cửa C (được chọn bởi Bit select). 3 – Chức năng kiểm soát ngắt quãng: Khi 8255 được lập trình ở mode 1 hay 2, các tín hiệu điều khiển được cung cấp có thể được dùng để yêu cầu ngắt quãng CPU. Tín hiệu yêu cầu ngắt quãng phát ra từ cửa C có thể bị cấm hay cho phép bằng cách set hay reset flip-flop INTE tương ứng, dùng chức năng set/reset bit của cửa C. Chức năng này cho phép CPU cấm hay cho phép các thiết bị I/O đã xác định ngắt quãng CPU mà không làm ảnh hưởng các thiết bị khác trong cấu trúc ngắt quãng.

Page 19: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

III – CHẾ ĐỘ HOẠT ĐỘNG: 1 – Mode 0 (Vào/ra cơ bản)

Không có “bắt tay”, dữ kiện được ghi và đọc một cách dơn giản đến phức tạp hay từ 1 cửa đã chỉ ra. Các đặc tính cơ bản ở mode 0:

2 cửa 8 bits và 2 cửa 4 bits Bất kỳ cửa nào cũng có thể là ra hay vào Ngõ ra được cài Ngõ vào không cài Cho phép 16 dạng vào / ra ở mode

Ví dụ : Từ điều khiển 83h xáx định cửa A ra, B vào. Phần cao của C : ra, phần thấp của C : vào.

2 – Mode 1 (Vào/ra có bắt tay): Ở mode 1, cửa A và B dùng những đường ở cửa C để phát hay nhận các tín hiệu

bắt tay. Định nghĩa các tín hiệu bắt tay cho phần nhập: STB (Strobe Input): mức thấp ở ngõ vào này nạp dữ liệu vào 8255. IBF (Input Buffer Full): ngõ ra =1 để thông báo dữ kiện đã được nạp vào mạch cài

nhập Nói cách khác, mức thấp của STB sẽ thiết lập IBF = 1, và IBF bị xóa bởi cạnh lên RD. * INTR (Interput Request): ngõ ra = 1 để yêu cầu ngắt khoảng CPU, INTR được set bởi STB = 1 và IBF = 1, INTR = 1.

INTR bị reset bởi cạnh xuống RD INTR A kiểm soát bởi bit set / reset PC 4 INTR B kiểm soát bởi bit set / reset PC 2

Page 20: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

Hình 3.4

Page 21: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

Định nghĩa tín hiệu điều khiển phần xuất: OBF (Output Buffer Full FF)

Ngã ra xuống 0 để báo là CPU đã ghi thông tin ra cửa xác định. OBF FF được set bởi cạnh lên của xung WR từ CPU và bị reset bởi ACK = 0 do ngoại vi (tức là ở mức không tích cực). *ACK (Acknowledge Input) Mức thông báo cho 8255 biết thông tin từ cửa A hay B đã nhận bởi ngoại vi. *INTR (Interput Request) Mức 1 ở ngõ ra dùng để yêu cầu ngắt quãng CPU khi ngoại vi đã nhận dữ kiện phát bởi CPU. INTR set bởi ACK = 1, OBF = 1 và INTE = 1 INTR bị xóa bởi cạnh xuống xung WR INTE A kiểm soát bởi bit set / reset PC 6 INTE B kiểm xoát bởi bit set / reset PC

Page 22: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

Hình 3.5

Page 23: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

Các kết hợp của mode 1: Cửa A : vào, B : ra từ điều khiển Cửa A : ra, B : vào từ điều khiển 1: in PC 4,5 0: out

1 0 1 0 1/0 x x x 1 0 1 0 1/0 1 1 x

1: in PC 4,5

0: out

Hình 3.6 3 – Mode 2 : Xuất nhập 2 chiều bắt tay Các đặc tính cơ bản của mode 2: * Chỉ dùng cho nhóm A * 1 cửa 2 chiều 8 bits (A) và một cửa điều khiển 5 bits (C) cho cửa A * Cả ra / vào đều có cài Định nghĩa các tín hiệu điều khiển xuất nhập 2 chiều: * INTR (Interput Request): Mức 1 ở ngõ ra này báo cho CPU biết yêu cầu ngắt khoảng cho phép nhập hay xuất

(chung). * Phép xuất : OBF (Output Buffer Full FF) output OBF xuống 0 để báo cho ngoại vi biết CPU đã ghi dữ kiện ra cửa ACK

(Acknowledge) Input Mức 0 từ ngoại vi cho phép bộ đệm ra 3 trạng thái của cửa A mở để phát ra dữ

kiện, bộ đệm ra ở 3 trạng thái. INTE 1 (INTE FF liên quan với OBF) Kiểm soát bởi bit set / reset PC 6 * Phép nhập: STB: Mức thấp ở ngõ vào này cài data vào mạch cài ngõ nhập. IBF: (Input Buffer Full FF) output Mức 1 thông báo cho CPU biết dữ kiện đã nhập vào mạch cài nhập INTE 2 (liên quan với IBF) Kiểm soát bởi bit set/reset PC 4

Page 24: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

Hình 3.7 Kết hợp mode 2 và các mode khác: Mode 2 và mode 0 (in) : từ điều khiển : 11 XXX 01 1/0 Mode 2 và mode 1 (out) : từ điều khiển : 11 XXX 01 1/0 Mode 2 và mode 1 (in) : từ điều khiển : 11 XXX 00 X Mode 2 và mode 0 (in) : từ điều khiển : 11 XXX 10 X Sự kết hợp các mode đặc biệt: Có một số tổ hợp các mode mà không phải tất cả cửa C đều dùng làm điều khiển

hay trạng thái, các bit còn lại được dùng như sau: Nếu lập trình là ngõ vào: Các bit ở phần cao cửa C (C4-C7) phải được truy xuất riêng rẽ dùng chức năng

bit set / reset. Các bit ở phần thấp cửa C (C0-C3) có thể truy xuất dùng chức năng bit set/reset

thay truy xuất như nhóm 3 bằng cách ghi ra cửa C. 4 – Đọc trạng thái cửa C: Ở mode o, cửa C truyền dữ kiện đến hay từ ngoại vi 8255 được lập trình ở

mode 1 hay 2, cửa C trở nên các tính điều khiển bắt tay cho cửa A và C. Đọc nội dung cửa C cho phép người lập trình kiểm tra trạng thái của mỗi thiết

bị ngoại vi thay chiều chương trình tương ứng. Không có lệnh đặc biệt để đọc thông tin trạng thái từ C. Phép đọc bình thường

của C dùng để thực hiện chức năng này.

Page 25: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

D7 D6 D5 D4 D3 D2 D1 D0 I/O I/O IBFA INTEA INTRA INTEB IBFB INTRB

NHÓM A NHÓM B MODE 1 (Input)

OBFA INTEA I/O I/O INTRA IOB1B OBIB INTRB NHÓM A NHÓM B

MODE 1 (Output)

OBFA INTE IBFA INTE2 INTRA NHÓM A NHÓM B Định nghĩa bởi chọn mode 0 hay 1

MODE 2

Page 26: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

Chương III TỔNG QUAN VỀ HỌ VI ĐIỀU KHIỂN MCS-51

Họ vi điều khiển Mcs – 51 ra đời từ năm 1980 bởi hãng Intel, với sản phẩm đầu

tiên là 8051. Các IC này gọi là vi điều khiển vì chúng bao gồm cả ROM, RAM, timer, các cổng nối tiếp và song song. Đây là đặc điểm chính để ta phân biệt giữa vi điều khiển và vi xử lý. 8051 không được sử dụng trong máy tính nhưng được sử dụng rộng rãi trong công nghiệp và trong sản phẩm máy móc tiêu dùng.

Cùng họ với 8051 có một số vi điều khiển khác. Về cơ bản chúng đều giống nhau, chúng chỉ khác nhau ở vùng nhớ nội bao gồm vùng nhớ mã lệnh, vùng nhớ dữ liệu và số timer. Sự khác nhau đó được mô tả bằng bảng dưới đây.

Vi điều khiển Vùng mã lệnh nội Vùng dữ liệu nội Số timer

8051 8031 8751 8052 8032 8732

4K ROM 0K

4K EPROM 8K ROM

0K 4K EPROM

128 bytes 128 bytes 128 bytes 256 bytes 256 bytes 256 bytes

2 2 2 3 3 3

Bảng 4.1 So sánh các IC của họ Msc-51TM

I – CẤU TRÚC CỦA 8051: Trung tâm của 8051 vẫn là vi xử lý trung tâm (CPU). Để kích thích cho toàn bộ

hệ thống hoạt động, 8051 có bộ tạo dao động nội với thạch anh được ghép bên ngoài với tần số khoảng từ vài Mhz đến 12 Mhz. Liên kết các phần tử với nhau là hệ thống BUS nội, gồm có BUS dữ liệu, BUS địa chỉ và BUS điều khiển. 8051 có 4K ROM, 128 bytes RAM và một số thanh ghi bộ nhớ … Nó giao tiếp với bên ngoài qua 3 cổng song song và một cổng nối tiếp có thể thu, phát dữ liệu nối tiếp với tốc độ lập trình được. Hai bộ định thời 16 bit của 8051 còn có 2 ngắt ngoài cho phép nó đáp ứng và xử lý điều kiện bên ngoài theo cách ngắt quãng, rất hiệu quả trong các ứng dụng điều khiển. Thông qua các chân điều khiển và các cổng song song 8051 có thể mở rộng bộ nhớ ngoài lên đến 64Kbs dữ liệu.

Page 27: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

II – SƠ LƯỢC VỀ CÁC CHÂN CỦA 8051

Mục này giới thiệu cấu trúc phần cứng của 8051 từ những chân được nhìn thấy bên ngoài. Dưới đây chỉ mô tả ngắn gọn chức năng của từng chân. Trong 40 chân có đến 32 chân có chức năng như cổng xuất nhập, 24 trong số chúng được dùng cho hai mục đích khác nhau. Mỗi chân có thể là đường xuất nhập, đường điều khiển hoặc là một phần của địa chỉ hay dữ liệu. Thiết kế thường có bộ nhớ ngoài hay các thiết bị ngoại vi sử dụng những port để xuất nhập dữ liệu. Tám đường trong mỗi port được dùng như một đơn vị giao tiếp song song như máy in, bộ biến đổi tương tự số, v.v… Hoặc mỗi đường cũng có thể hoạt động một cách độc lập trong giao tiếp với các thiết bị đơn bit như: transitor, LED, switch, solenoids …

Page 28: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

Port 0 Port 0 là cổng song song dùng cho hai mục đích, nó là các chân từ 32 đến 39. Trong những thiết kế nhỏ nó được dùng trong cổng xuất nhập bình thường. Ở những thiết kế có sử dụng bộ nhớ ngoài, nó vừa là bus dữ liệu vừa là byte thấp của bus địc chỉ. Nó còn dùng chứa bytes mã khi nạp ROM nội. Port 1

Page 29: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

Port 1 dành cho cổng xuất nhập và chỉ dành cho mục đích này mà thôi. Nó dùng để giao tiếp với các thiết bị ngoại vi theo từng bit hoặc byte. Port 1 chiếm các chân từ 1 đến 8. Port 2 Port 2 (chân 21 28) là port có hai chức năng. Ngoài mục đích dành cho xuất

nhập thông thường nó còn dùng làm byte cao cho bus địa chỉ bộ nhớ ngoài. Port 3 Port 3 (chân 10 17) là port hai chức năng. Bên cạnh chức năng xuất nhập, các bit của port 3 còn có chức năng điều khiển. Chức năng các bit của port 3 và port 1 được mô tả trong bảng 4.2 PSEN (cho phép nạp chương trình) 8051 có 4 chân tín hiệu điều khiển. PSEN là tín hiệu điều khiển được xuất ra ở

chân 29. Tín hiệu điều khiển này cho phép lập trình ở bộ nhớ ngoài và thường được nối với các chân OE của EPROM để đọc mã lệnh từ bộ nhớ ngoài vào thanh ghi lệnh của 8051. Nó xuống mức thấp trong khi đọc lệnh. Mã lệnh đọc từ EPROM, qua bus dữ liệu, được chốt vào thanh ghi của 8051. Khi thi hành chương trình từ ROM nội PSEN được giữ ở mức cao (trạng thái không tác động).

EA (truy xuất vùng nhớ ngoài) EA là một tín hiệu vào có thể ở mức cao hay thấp. Nếu ở mức cao 8051 thi

hành chương trình ở ROM nội, 4K/8K chương trình. Nếu ở mức thấp, chương trình chỉ được thi hành từ bộ nhớ ngoài. Đối với 8031/8231 EA phải được giữ ở mức thấp vì chúng không có ROM nội. EA cũng chính là chân nhận điện áp mức cao để nạp EPROM nội.

ALE (cho phép chốt địa chỉ) ALE là tín hiệu được xuất ra ở chân 20, rất quen thuộc với những ai đã từng làm

việc với vi xử lý 8085, 8086 của Intel. 8051 dùng ALE để phân kênh cho bus địa chỉ và bus dữ liệu. Khi port 0 được dùng làm bus dữ liệu và byte thấp của bus địa chỉ – ALE là tín hiệu dùng để chốt địa chỉ vào thanh ghi chốt bên ngoài trong nữa đầu của một chu kỳ máy. Sau đó Port 0 sẵn sàng để truy xuất dữ liệu trong nữa chu kỳ còn lại.

Xung ALE có tần số bằng 1/6 lần tần số bộ dao động nội và có thể dùng như một xung clock cho mục đích nào đó khi hệ thống không làm việc. Nếu tốc độ 8051 là 12 MHz thì tần số xung ALE là 2 MHz. Một xung ALE bị mất khi có một lệnh MOVX được thi hành.

Page 30: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

Ngõ vào dao động nội

Bit Tên Chức năng P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 P1.0 P1.1

RXD TXD INT0 INT1

T0 T1 WR RD T2

T2EX

Nhận dữ liệu Phát dữ liệu Ngắt ngoài 0 Ngắt ngoài 1

Ngõ vào của Timer / couter 0 Ngõ vào của Timer / couter 1 Đọc dữ liệu từ bộ nhớ ngoài Đọc dữ liệu vào bộ nhớ

ngoài Ngõ vào của Timer / couter 2

Bảng 4.2 Chức năng của các chân điều khiển

Ngõ vào dao động nội được mô tả như hình dưới đây, có một thạch anh được nối với

chân 19 (XTAL1) và 18 (XTAL2). Có thể mắc thêm tụ để ổn định dao động. Thạch anh 12 MHz thường dùng cho họ MCs-51, trừ IC 80C31BH có thể dùng thạch anh lên đến 16 MHz. Tuy nhiên, không nhất thiết phải dùng thạch anh mà ta có thể dùng mạch dao động TTL tạo xung Clock đưa vào chân XTAL1 và lấy đảo của nó đưa vào XTAL2.

RST (Reset) Ngõ vào RST (chân 19) là chân master reset của 8051. Khi nó ở mức cao (trong

khoảng ít nhất 2 chu kỳ máy) các thanh ghi nội được nạp với giá trị tương ứng theo thứ tự khởi động hệ thống.

Nguồn cung cấp 8051 sử dụng nguồn đơn 5V.

III – CẤU TRÚC CỔNG XUẤT NHẬP Mạch bên trong của một chân port mô tả ngắn gọn trong hình 4.3. Khi

ghi lên một chân của cổng, dữ liệu được chốt vào bộ chốt. Chốt lái một transitor thường nối với chân của cổng. Nhờ đó có thể kéo được 4 tải LS ở các cổng Port 1, 2 , 3 và 8 tải LS ở Port. Lưu ý Port 0 có điện trở kéo lên, ngoại trừ khi dùng nó với chức năng vừa là bus địa chỉ, vừa là bus dữ liệu ngoại. Tùy theo đặc tính bên trong của tải mà ta có thể thêm vào điện trở kéo lên bên ngoài.

Page 31: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

D Chốt

Bus nội của 8051

Vcc Đọc Đọc chốt chân Chân Port Ghi Chốt

Hình 4.3 Sơ đồ mạch port Việc đọc chốt được phân biệt làm hai, đó là đọc từ chốt và đọc từ chân.

Sự phân biệt này nhằm chống trường hợp chập mạch do quá tải gây nên. Lệnh đọc một bit cổng (ví dụ MOV C, P1.1) sẽ đọc chân của cổng. Trong trường hợp này, chốt phải được giữ ở mức cao, nếu không FET sẽ dẫn và ngõ ra xuống mức thấp. Tất cả các chốt của port đều được set khi reset hệ thống. Như vậy các chân chốt đều được dùng như ngõ vào mà không cần phải set chốt. Tuy nhiên, nếu đã xóa chốt (ví dụ CLEAR P1.1) không thể đọc dữ liệu đúng từ chân port trừ khi set chốt trở lại.

IV – TỔ CHỨC BỘ NHỚ Hầu hết các bộ nhớ các vi xử lý đều dựa theo cấu trúc Von Neuman về

phân chia vùng nhớ cho chương trình và dữ liệu. Điều này cho phép chương trình được lưu giữ trong đĩa và chỉ load vào bộ nhớ mỗi khi thi hành. Do đó dữ liệu và chương trình đều nằm trong RAM. Đối với vi điều khiển thì khác, CPU được coi là hệ thống máy tính. Nó là trung tâm của thiết bị điều khiển. Nó bị giới hạn về bộ nhớ. Chương trình điều khiển nằm trong ROM.

Vì lý do này mà bộ nhớ của vi điều khiển 8051 dựa theo cấu trúc Harvard để phân chia vùng chương trình (code mã lệnh) và dữ liệu. Như đã mô tả ở bảng 4.2 cả hai vùng mã lệnh và dữ liệu đều nằm ở bộ nhớ nội. Tuy nhiên cả hai cũng có thể mở rộng ra bộ nhớ ngoài, có thể lên đến 64Kb cho vùng địa chỉ.

Bộ nhớ nội gồm có ROM nội (chỉ đối với 8051/8052) và RAM ngoại. RAM chia thành nhiều vùng: vùng dành cho mục đích nào đó, vùng có thể truy xuất bit, các khối (bank) thanh ghi, và các thanh ghi đặc biệt.

Có hai điều đáng lưu ý ở đây: (a) các thanh ghi và các cổng xuất nhập đều được phân chia địa chỉ và có thể truy xuất chúng như những vùng khác. (b) stack thường được phân chia vào RAM nội hơn là vùng nhớ ngoài. Đây là một đặc điểm của vi điều khiển.

Hình 4.4 mô tả bộ nhớ của 8031 (không có ROM nội) Hình 4.5 mô tả chi tiết về vùng nhớ dữ liệu nội. Các vùng nhớ được mô

tả dưới đây. Vùng tổng quát Vùng RAM này chiếm 80 bytes từ địa chỉ 30H đến địa chỉ 7FH. Vùng

nhớ 32 bytes bên dưới cũng có thể được dùng như vùng này mặc dù nó được dùng cho mục đích khác.

Page 32: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

Bất kỳ vị trí nào trong vùng này đều có thể truy xuất tự do bằng địa chỉ trực tiếp hoặc gián tiếp. Ví dụ để đọc nội dung byte nhớ nội của địa chỉ 5FH vào thanh ghi ACC, ta dùng lệnh sau:

MOV A, 5FH ; Lệnh này chuyển một byte dữ liệu sử dụng địa chỉ trực tiếp để xác định

địa chỉ nguồn (5FH). RAM nội cũng có thể được truy xuất bằng địa chỉ gián tiếp thông qua R0

và R1 (chỉ hai thanh ghi này mà thôi). Ví dụ lênh sau sẽ thực hiện công việc giống như ví dụ trên

MOV R0, 5FH ; MOV A, @R0 ; Lệnh đầu tiên nạp giá trị 5FH cho thanh ghi R0. Lệnh thứ hai dùng

chuyển dữ liệu được chỉ ra bởi R0 và thanh ghi tích luỹ (ACC). FFFF FFFF Vùng Vùng mã lệnh dữ liệu FF Truy xuất Truy xuất thông qua RD và WR PSEN 0000 0000 Vùng nhớ nội Vùng nhớ

ngoài

Hình : 4.4 Tóm tắt vùng nhớ 8031 Vùng nhớ có khả năng truy xuất bit: 8051 có tất cả 210 vị trí có thể truy xuất bit. Trong đó có 128 bits (16

bytes) từ địa chỉ 20H đến 2FH và các bit thuộc các thanh ghi chức năng. Khả năng truy xuất bit bằng các phần mềm là một điểm mạnh của vi điều khiển. Bits có thể được set, clear, and, or, v.v… bằng một lệnh đơn.

Vùng nhớ này có thể truy xuất như bytes hoặc bit. Ví dụ để set bit 67H ta dùng lệnh sau:

SETB 67H ; So với bộ nhớ bit là bit có trọng số lớn nhất của bytes 2CH, do đó ta

cũng có thể set nó bằng lệnh sau: MOV A, 2CH ;

Page 33: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

ORL A, #10000000B ; MOV 2CH, A ; Hơn thế nữa các I/O ports của 8051 có thể truy xuất bit, làm đơn giản

việc xuất nhập từng bit. Vùng nhớ này có thể xuất nhập từng byte tùy theo lệnh. Các ngăn thanh ghi (Register banks): 32 butyes nằm ở cuối vùng RAM nội là các ngăn thanh ghi. Tập lệnh của

8051 chỉ truy xuất 8 thanh ghi trong vùng này, từ R0 đến R7. Tại một thời điểm chỉ truy xuất được một ngăn thanh ghi mà thôi. Các

thanh ghi này có địa chỉ mặc định 00H đến 07H khi reset hệ thống (bank 0). Lệnh sau đây đọc nội dung byte nhớ có địa chỉ 05H vào thanh ghi tích luỹ.

MOV A, R5 ; Lệnh trên chỉ chiếm một bute sử dụng địa chỉ thanh ghi. Dĩ nhiên công

việc trên có được thực hiện bằng một lệnh hai bytes sử dụng địa chỉ trực tiếp: MOV A, 05H ; Rõ ràng lệnh sử dụng thanh ghi R0 đến R7 ngắn hơn và nhanh hơn so

với lệnh tương đương sử dụng địa chỉ trực tiếp. Các ngăn thanh ghi có thể thay đổi bằng cách set lại thanh ghi trạng thái

chương trình (PSW.3 PSW.4) trong chương trình. Giả sử sau khi cho phép sử dụng bank 3 thanh ghi R5 lúc này có địa chỉ 20H. Lệnh sau ghi nội dung thanh ghi ACC vào vị trí 18H(R3)

MOV R3, A;

V – CÁC THANH GHI CÓ CHỨC NĂNG ĐẶC BIỆT Hầu hết các thanh ghi nội của các vi điều khiển đều có thể được truy

xuất thông qua tên đã được định nghĩa. Ví dụ INC A. Các thanh ghi nội của 8051 chiếm một phần của vùng nhớ nội, vì vậy

mỗi thanh ghi đều có một địa chỉ. Các thanh ghi chức năng (FSRs) nằm trong vùng nhớ cao từ 80H đến FFH. Lưu ý có một số bytes trong vùng này không được định nghĩa. Chỉ có 21 địa chỉ thanh ghi chức năng được định nghĩa (26 địa chỉ đối với 8052/8032).

Mặc dù có thể truy xuất các thanh ghi chức năng thông qua tên của nó, hầu hết các thanh ghi này được truy xuất bằng địa chỉ trực tiếp. Một số thanh ghi có thể truy xuất bằng byte hoặc bit. Trong lập trình phải cẩn thận khi truy xuất bit thông qua byte. Ví dụ lệnh sau:

SETB 0E0H ; Set bit 0 trong thanh ghi ACC, các bit khác vẫn không thay đổi. Lưu ý

địa chỉ của một bit trong một thanh ghi chức năng luôn được xác định bởi 5 bit cao của địa chỉ thanh ghi đó. Ví dụ một bit trong thanh ghi P1 (90H hay 10010000B) hay có địa chỉ 9xH hay 10010xxxB.

Thanh ghi trạng thái chương trình (PSW) sẽ được mô tả chi tiết trong phần sau, các thanh ghi chức năng còn lại được mô tả ngắn gọn và sẽ được mô tả chi tiết trong những chương sau.

Thanh ghi trạng thái chương trình: Thanh ghi trạng thái chương trình có địa chỉ 0Dh, chứa các bit trạng thái

chương trình.

Page 34: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

Các bit trạng thái được mô tả như sau: * Cờ Carry: Cờ carry có hai chức năng: + Được dùng trong các phép toán số học thông thường. Nó là cờ nhớ của

phép tính cộng và cờ mượn của phép tính trừ. Ví dụ các thanh ghi ACC có nội dugn FFH thì lệnh “ADD A, #1” làm cho ACC bằng 00H và cờ nhớ được set.

+ Cờ carry còn được dùng như “thanh ghi tích luỹ 1 bit” cho các phép toán luận lý trên bit. Ví dụ lệnh sau AND bit 25H với cờ carry và đặc kết quả vào cờ carry: “ANL C,25H ;”.

* Cờ nhớ phụ (auxiliary carry – AC) : Khi cộng các giá trị BCD, cờ AC được set nếu bit thứ ba tràn hay 4 bit

thấp có giá trị từ 0AH đến 0FH. Khi cộng số BCD, sau phép cộng phải dùng lệnh DA A (decimal adjust accumulator) để chỉnh kết quả cộng về dạng BCD.

* Cờ 0: Cờ này dành cho người sử dụng trong các ứng dụng lập trình. * Bit chọn ngăn thanh ghi: Hai bit RS0 và RS1 dùng để cho ngăn thanh ghi, chúng được xóa khi

reset hệ thống và có thể thay đổi bằng phần mềm. Ví dụ các lệnh sau sẽ chọn nhăn thanh ghi thứ ba và ghi nội dung R7 (địa chỉ 1FH) vào ACC.

SETB RS0 ; SETB RS1 ; MOV A, R7 ; * Cờ tràn (Overflow – OV): Cờ tràn được set kết quả bị tràn (số học) sau phép tính cộng hoặc trừ.

Đối với phép toán cộng và trừ số có dấu, phần mềm có thể xét bit này để kiểm tra kết quả có vượt quá giới hạn hay không. Khi cộng số không dấu ta không quan tâm đến bit này. Như vậy kết quả của phép tính cộng hay trừ lớn hơn 127 hoặc nhỏ hơn –128 sẽ set cờ tràn. Ví dụ OV sẽ set sau phép tính cộng sau:

Hex: 0F Decimal : 15 +7F +127 8E 142 8E tương đương với –116. Rõ ràng kết quả 142 không chính xác. Vì vậy

bit OV được set. B

it K

ý hiệu Đ

ịa chỉ Chức năng

PSW .7

PSW .6

PSW .5

PSW .4

P

CY

AC

F0

RS1

R

D7h

D6h

D5h

D4h

D

Cờ nhớ Cờ nhớ phụ Cờ Zero Chọn thanh ghi dự trữ 1 Chọn thanh ghi dự trữ 2 00=bank0, địa chỉ 00h-07h 01=bank1, địa chỉ 08h-0Fh 10=bank2, địa chỉ 10h-17h 11=bank3, địa chỉ 18h-1Fh

Page 35: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

SW .3

PSW .2

PSW .1

PSW .0

S0

OV

P

3h

D2h

D1h

D0h

Cờ tràn Dự trữ Cờ chẵn lẽ

Bảng 4.3 Thanh ghi PSW * Bit parity: Bit Parity được tự động set hoặc xóa trong mỗi chu kỳ máy để tạo nên

parity chẵn đối với thanh ghi tích luỹ. Số bit 1 trong thanh ghi ACC cộng với P luôn luôn là một chẵn. Ví dụ nếu ACC chứa 10101101B, P sẽ là 1. Bit Parity thường được liên kết với chương trình truyền nối tiếp có sử dụng parity. Thanh ghi B

Thanh ghi B có địa chỉ F0h, chủ yếu dùng với thanh ghi ACC trong các phép toán nhân và chia. Lệnh MUL AB nhân các số 8 bit không dấu trong thanh ghi A và B. Kết quả là một số 16 bit chứa trong thanh ghi ACC (byte thấp) và B (byte cao). Lệnh DIV B chia thanh ghi ACC cho B. Kết quả thương số được lưu trong thanh ghi ACC số dư được lưu trong thanh ghi B. Thanh ghi B cũng được dùng như những thanh ghi khác và có thể truy xuất bit (địa chỉ F0h đến F7h) Con trỏ ngăn chồng (stack pointer – SP)

Stack – pointer là một thanh ghi 8 bit có địa chỉ 81H. Nó chứa địa chỉ hiện thời của đỉnh stack. Khi đẩy dữ liệu vào stack, SP tăng lên một giá trị, tiếp theo dữ liệu được ghi vào stack. Khi lấy dữ liệu ra khỏi stack, dữ liệu được đọc ra trước sau đó SP được giảm. Stack của 8051 nằm trong vùng RAM nội và có thể truy xuất bằng địa chỉ trực tiếp. 128 bytes đầu tiên đối với 8051/8031 và 256 bytes đối với 8052/8032 trong vùng RAM nội có thể dùng làm stack. Để tạo ra stack bắt đầu tại 60H, ta khởi động thanh ghi SP:

MOV SP, #5FH ; Như vậy stack được giới hạn trong 32 bytes. Ta dùng giá trị 5FH vì SP sẽ tăng

lên 60H trước khi đẩy dữ liệu đầu tiên vào stack. Khi lập trình ta không cần phải khởi động lại thanh ghi SP vì nó đã được khởi động với giá trị khi reset. Thanh ghi SP chứa giá trị mặc định là 07H. Do đó stack mặc định bắt đầu tại 08H. Nếu trình không khởi động lại stack thì các thanh ghi 1, 2, 3 không thể sử dụng vì nó được dùng làm stack. Stack được truy xuất một cách rõ ràng bằng các lệnh PUSH, POP để lưu trữ tạm thời hay truy xuất dữ liệu. Nó cũng có thể được truy xuất ngầm khi có các lệnh gọi đến chương trình con. Các lệnh ACALL, LCALL hay ngắt sẽ đẩy thanh ghi đếm chương trình (PC) vào stack. Lệnh RET, RETI trả giá trị trong stack lại cho PC.

Page 36: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

Con trỏ dữ liệu (DPTR) Con trỏ dữ liệu dùng để truy xuất mã hay dữ liệu từ bộ nhớ ngoài và thanh ghi

16 bit. Thanh ghi này gồm hai thanh ghi DPL (byte thấp, địa chỉ 82H) và DPH (byte cao, địa chỉ 83H). Ba lệnh sau đây sẽ ghi giá trị 55H vào RAM ngoài tại địa chỉ 1000H.

MOV A, #55H; MOV DPTR, #1000H; MOV @DPTR, A;

Các thanh ghi Port: Các port của 8051 gồm có port 0 địa chỉ 80H, port 1 địa chỉ 90H, port 2 địa chỉ

A0H, port 3 địa chỉ B0H. Các port 0, 2 và 3 không được dùng để xuất nhập nếu đang sử dụng bộ nhớ ngoài. Còn lại port 1 có thể dùng để xuất nhập (I/O).

Tất cả các port đều có thể dùng truy xuất bit. Điều này cung cấp cho vi điều khiển khả năng giao tiếp rất mạnh. Ta có thể dùng chân P1.7 để đóng mở động cơ. Chân P1.7 nối với transitor để lái một relay đóng mở động cơ. Lệnh SETB P1.7 mở động cơ. Lệnh CLR P1.7 tắt động cơ.

Hai lệnh trên dùng toán tử dấu chấm để xác định địa chỉ bit trong một byte. Các thanh ghi bộ định thời:

8051 có hai bộ định thời 16 bit. Timer 0 có địa chỉ 8AH (TL0 byte thấp) và 8DH (TH1 byte cao). Ngoài bộ định thời còn có hai thanh ghi: thanh ghi điều khiển TCON địa chỉ 88H và thanh ghi xác định mode cho timer TMOD địa chỉ 89H. Trong đó chỉ có thanh ghi TCON truy xuất được từng bit. Các thanh ghi cổng nối tiếp:

8051 chứa cổng nối tiếp bên trong MCU để giao tiếp với các thiết bị nối tiếp như thiết bị đầu cuối, modem v.v… Cổng nối tiếp gồm có hai thanh ghi: một thanh ghi đệm SBUF là nạp dữ liệu để truyền đi. Đọc SBUF là nhận dữ liệu đã thu được vào. Các mode truyền có thể được lập trình thông qua thanh ghi điều khiển cổng kế tiếp. Thanh ghi này có thể truy xuất bit và có địa chỉ 98H.

Page 37: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

Các thanh ghi ngắt: 8051 có 5 nguồn ngắt và hai mức ưu tiên. Các ngắt bị cấm khi reset hệ thống.

Các ngắt được cho phép thông qua thanh ghi IE có địa chỉ 0AH. Các mức ưu tiên cũng được set bởi thanh ghi IP tại địa chỉ B8H. Cả hai thanh ghi này đều có thể truy xuất bit.

IE có địa chỉ A8H. Ngắt chỉ được chấp nhận khi thanh ghi này đã được lập trình. Thanh ghi PCON (Power Control Register)

Thanh ghi PCON có địa chỉ 87H, chứa các bits điều khiển linh tinh, được tóm tắt trong bảng 4.4.

Bit SMOD nhân đôi tốc độ truyền nối tiếp ở các mode 1, 2 và 3. Các bit 4, 5, 6 không được định nghĩa. Bit 3 và 2 là hai cờ được tùy ý trong lập trình ứng dụng.

Các bit PD (power down) và IDL (idle) đều có trong các họ IC MCS-51 nhưng chỉ với IC dùng CMOS mà thôi.

Lệnh set bit IDL là lệnh được thi hành cuối cùng trước khi CPU vào chế độ idle. Ở tín hiệu này chế độ xung clock được ngắt ra khỏi CPU, nhưng không ngắt ra khỏi ngắt quãng, timer và cổng nối tiếp. Trạng thái CPU và nội dung các thanh ghi được bảo toàn. Các chân của cổng song song được giữ ở mức trạng thái của chúng. ALE và PSEN ở mức cao.

Các chế độ idle kết thúc khi có bất kỳ một ngắt nào hoặc reset hệ thống, đồng thời bit IDL bị xóa.

+ Power down Mode

it K

ý hiệu Mô tả

SOMD

GF1

GF0

PD

IDL

Tốc độ kép; khi được set, tốc độ truyền nối tiếp được nhân đôi các chế độ 1,2,3.

Không được định nghĩa “nt” “nt” Cờ dùng cho mục đích tổng quát 1 Cờ dùng cho mục đích tổng quát 2 Power down, set mode power down. Chỉ thoát khi

reset Idle mode, set mode idle. Thoát khi có ngắt hoặc

reset

Bảng 4.4 Tóm tắt thanh ghi PCON Lệnh set bit PD là lệnh cuối cùng trước khi CPU chuyển sang mode

power down.

Page 38: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

Ở chế độ này: (1) bộ dao động nội ngưng hoạt động, (2) các chức năng bị dừng, (3) nội dung RAM nội được giữ ở mức logic của chún, (5) ALE và PSEN ở mức thấp. Chỉ có thể thoát khỏi chế độ này khi reset hệ thống. Khi ở chế độ power down, Vcc có thể giảm đến 2V. Lưu ý cần phải trả lại mức áp 5V cho Vcc khi thoát khỏi chế độ power down.

VI – BỘ NHỚ NGOÀI Mở rộng bộ nhớ là một khả năng quan trọng đối với vi điều khiển nhằm tránh gặp bế tắc trong vấn đề thiết kế. Họ MCs-51 có thể mở rộng 64Kbs và bộ nhớ mã lệnh 64Kbs dữ liệu. Các IC giao tiếp ngoại vi cũng có thể thêm vào để tăng năng xuất nhập. Nó trở thành một phần của bộ dữ liệu ngoại và được giải mã I/O như bộ nhớ. Khi bộ nhớ ngoài được sử dụng, port 0 không được dùng làm cổng xuất nhập. Nó trở thành bus dùng để phân kênh địa chỉ và dữ liệu, ALE chốt nó như là bytes thấp của bus địa chỉ khi bắt đầu mỗi chu kỳ truy xuất bộ nhớ ngoài. Port 2 thường dùng làm byte cao của bus địa chỉ. Chu kỳ bộ nhớ A0 A15 Địa chỉ D0 D7 Dữ liệu

(a) Không phân kênh (24 chân) Chu kỳ bộ nhớ AD8 AD15 Địa chỉ AD0 AD7 Địa chỉ Dữ liệu

(b) Phân kênh (16 chân) Hình 4.5 Phân kênh bus địa chỉ và bus dữ liệu

Hình trên mô tả việc phân kênh và không phân kênh bus địa chỉ và bus dữ liệu. Nếu không phân kênh, với 16 chân địa chỉ và 8 chân dữ liệu ta có 24 chân cho bus địa chỉ và bus dữ liệu. Trong khi đó nếu phân kênh, 8 chân dữ liệu được dùng chung với 8 chân thuộc byte thấp của bus địa chỉ nên chỉ có 16 chân cho bus địa chỉ và bus dữ liệu. Điều này có ý nghĩa lớn trong việc chế tạo IC.

Page 39: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

Thứ tự phân kênh như sau : ở nữa chu kỳ đầu, byte thấp của địa chỉ xuất ra port 0 và được chốt bằng ALE. Byte này được chốt ở bộ chốt trong suốt chu kỳ bộ nhớ. Trong nữa chu kỳ tiếp theo port 0 là bus dữ liệu, có thể xuất nhập tùy ý.

Truy xuất bộ nhớ mã lệnh ngoài (External Code memory): Bộ nhớ mã ngoài được đọc bằng tín hiệu PSEN (hình 4.6). Trong một chu kỳ máy ALE tác động 2 lần và 2 bytes được đọc từ bộ nhớ chương trình. Giản đồ thời gian của hoạt động này được gọi là chu kỳ lấy lệnh (hình 4.7). Truy xuất bộ nhớ dữ liệu ngoài (External Code memory): Đây là bộ nhớ chứa dữ liệu, thường là RAM và được truy xuất bởi tín hiệu RD và WR. Dữ liệu này chỉ được truy xuất bằng lệnh MOVX thông qua thanh ghi con trỏ dữ liệu DPTR, hoặc R0, R1. RAM giao tiếp với 8051 giống như EPROM. Ngoại trừ chân RD được nối với chân OE và chân WR được nối với chân W. Còn lại các bus dữ liệu và địa chỉ nối như EPROM. Với 16 đường địa chỉ ta có thể có đến 64Kbs cho vùng nhớ dữ liệu. Giản đồ thời gian của viêc đọc vùng nhó dữ liệu ngoài khi thi hành lệnh “MOV A,@DPRT” được cho ở hình 4.8. Lưu ý chỉ có chân RD được dùng cho phép RAM. Giản đồ thời gian của việc ghi cũng tương tự từ đường WR xuống mức thấp và dữ liệu xuất ra port 0. Port 2 có thể không dùng làm byte cao của bus địa chỉ trong hệ thống không sử dụng vùng nhớ mã ngoài mà sử dụng vùng nhớ dữ liệu ngoài nhỏ. Tám bit địa chỉ có thể truy xuất được một vùng nhớ 256 bytes, được gọi là một trang bộ nhớ. Nếu vùng nhớ này lớn hơn 256 bytes ta có thể dùng thêm một vài chân của port 2 để chọn trang.

Page 40: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

Khi truy xuất một trang (256 bytes) của vùng dữ liệu ngoài ta có thể dùng R0 hoặc R1 để làm con trỏ địa chỉ trỏ đến byte dữ liệu cần truy xuất. Ví dụ những lệnh đọc nội dung của RAM ngoài có địa chỉ 0050H vào thanh tích lũy. MOV R0, #50H ; MOV A, @R0 ; Giải mã địa chỉ: Nếu 8051 sử dụng cả EPROM và RAM ngoài đòi hỏi phải giải mã địa chỉ. Việc giải mã địa chỉ rất quen thuộc đối với hầu hết vi xử lý. Ví dụ nếu dùng EPROM 8K và RAM 8K, bus địa chỉ giải mã để chọn IC giới hạn trong 8Kbytes: 0000H đến 1FFFH, và 2000H đến 3FFFH, v.v… Thông thường ta dùng IC giải mã 74138 với ngõ vào là 3 bits cao nhất của bus địa chỉ. Do đó mỗi ngõ tương ứng với 8Kbs. Các ngõ ra này đưa vào các chân CS của các IC nhớ. Lưu ý sự phân chia tín hiệu cho phép xuất của EPROM và RAM khác nhau (RD cho RAM và PSEN cho EPROM). 8051 có thể có đến 64Kbytes cho mỗi vùng ROM và RAM.

Page 41: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

Hình 4.8: Giản đồ thời gian khi đọc dữ liệu từ bộ nhớ ngoài

Page 42: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

RAM W OE

Sự chồng lắp của vùng mã lệnh và dữ liệu ngoài: Vì bộ nhớ mã lệnh chỉ được đọc nên sẽ bất tiện trong việc phát triển phần mềm. Làm thế nào để sửa lỗi của chương trình nằm trong kit khi bộ nhớ mã lệnh chỉ có thể đọc. Biện pháp thường được sử dụng ở đây là chồng lắp hai vùng mã lệnh và dữ liệu lên nhau. Tín hiệu PSEN dùng để đọc mã lệnh và tín hiệu RD dùng để đọc dữ liệu trong cùng một bộ nhớ. RAM chứa cả chương trình và dữ liệu. Hai tín hiệu RD và PSEN được đưa vào cổng AND. Ngõ ra của cổng AND nối với chân OE của RAM. Mạch ở hình 4.9 cho phép ghi dữ liệu vào RAM. Vì vậy chương trình có thể được load vào RAM (bằng cách ghi dữ liệu vào RAM) và thi hành (bằng cách truy xuất như bộ nhớ mã lệnh). WR RD PSEN

Hình 4.9 Mạch tạo nên sự chồng lắp hai vùng nhớ VII – HOẠT ĐỘNG RESET 8051 được reset khi giữ chân RST ở mức cao ít nhất trong hai chu kỳ máy và sau đó trả về mức thấp. RST có thể được nối với switch hoặc mạng tụ, trở để tạo tính reset. Trạng thái của tất cả thanh ghi sau khi reset hệ thống tóm tắt trong bảng 4.5. Thanh ghi đếm chương trình được nạp giá trị 0000H sau khi reset. Khi RST xuống mức thấp chương trình luôn bắt đầu tại điểm 0000H. Nội dung các thanh ghi trong RAM nội không bị ảnh hưởng bởi hoạt động reset.

Page 43: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

Thanh ghi Nội dung

PC ACC

B PSW SP

DPTR PORT 0..3

IP IE

Timer registers SCON SBUF

PCON (HMOS) PCON (CMOS)

0000H 00H 00H 00H 07H

0000H FFH

XXX00000B 0XX00000B

00H 00H 00H

0XXXXXXXB 0XXX0000B

Bảng 4.5 Giá trị các thanh sau khi reset hệ thống

Page 44: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

Chương IV TÓM TẮT TẬP LỆNH

I – GIỚI THIỆU: Chương trình được xây dựng nên từ tập lệnh, tuân theo cú pháp và cấu trúc logic. Một họ vi xử lý luôn đi kèm theo tập lệnh của nó. Chương này gới thiệu tập lệnh của họ MCs-51, việc định vị và một vài ví dụ về các tình huống gặp phải khi lập trình. Chương này không bàn về kỹ thuật lập trình cũng như về trình biên dịch. Tập lệnh họ vi điều khiển MCx-51 tối ưu cho các điều khiển ứng dụng 8 bit. Nó cung cấp các cách định vị nhanh, gọn thuận tiện cho việc truy xuất dữ liệu 8 bit trong vùng RAM nội. Tập lệnh cũng đưa ra một số lệnh thao tác trên bit thuận tiện cho việc điều khiển và các hệ thống logic có yêu cầu xử lý luận lý. Là một xử lý 8 bit, các lệnh của 8051 là mã 8 bit. Do đó tập lệnh có tối đa 256 lệnh. Trong đó 255 lệnh được định nghĩa. Trong một lệnh, ngoài mã lệnh (1 byte) ra còn có thể có dữ liệu và địa chỉ. Trong tập lệnh 8051 có 139 lệnh 1 byte, 92 lệnh 2 byte và 24 lệnh 3 byte. Phần phụ lục sẽ mô tả đầy đủ về mỗi mã, về mã gợi nhớ, số byte lệnh, số chu kỳ hành lệnh.

II – CÁC MODE ĐỊNH VỊ (ADDRESSING MODE) Khi lệnh thao tác trên dữ liệu, một câu hỏi được đặt ra là “dữ liệu ở đâu?”. Để trả lời câu hỏi này ta xem xét qua các mode định vị của 8051. Định vị dữ liệu là một phần quan trọng trong tập lệnh. Chúng xác định dữ liệu nguồn và đích theo những cách khác nhau tùy theo cách lập trình. Trong phần này ta sẽ lhảo sát kỹ từng mode định vị và cho mỗi loại một ví dụ. Có 8 mode định vị:

Thanh ghi Trực tiếp Gián tiếp Tức thời (Immediate) Tương đối Xa Chỉ số

Định vị bằng thanh ghi: Người lâp trình truy xuất dữ liệu chứa trong các thanh ghi từ R0 đến R7 thông qua tên gọi của chúng. Địa chỉ của 8 thanh ghi này được giải mã thông qua bit thấp nhất của chúng. Do đó mã lệnh và toán hạng địa chỉ được gom chung vào 1 byte.

Opcode 5-bit n n n Ví dụ lệnh sau cộng nội dung R7 vào thanh ghi tích luỹ: ADD A, R7; Mã lệnh là 001011111B. Trong đó 5 bit cao 00101 chỉ mã lệnh 3 bit thấp 111 chỉ thanh ghi R7. Một vài lệnh xác định trực tiếp trên thanh ghi như thanh ghi tích luỹ, con trỏ dữ liệu …do đó không cần đến các bit địa chỉ. Bản thân mã lệnh đã mô tả thanh ghi.

Page 45: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

Định vị trực tiếp : Định vị trực tiếp có thể truy xuất bất kỳ byte nào trong vùng nhớ nội hoặc các thanh ghi chức năng. Một byte được thêm vào mã lệnh để xác định vị trí thanh ghi được dùng.

Opcode 8-bit Direct Adress 8-bit Tùy thuộc vào bit cao nhất của byte địa chỉ trực tiếp, một trong hai vùng nhớ sẽ được chọn. Khi bit 7 của địa chỉ trực tiếp bằng 0: địa chỉ trực tiếp có giá trị từ 0 đến 127 (00H – 0FH) và 128 bytes thấp của on chip RAM được tham khảo đến, Tất cả các I/O port, thanh ghi chức năng. Thanh ghi điều khiển, thanh ghi trạng thái có địa chỉ từ 128 đến 255 (80H-FFh). Khi bit 7=1 byte địa chỉ trực tiếp nằm trong giới hạn này, tương ứng với thanh ghi chức năng sẽ được truy xuất. Ví dụ port 0 và port 1 có địa chỉ tương ứng là 80H và 90H. Ta không cần phải biết địa chỉ của những thanh ghi này, trình biên dịch luôn hiểu các mã gợi nhớ ngắn gọn của nó như P0, P1, TMOD… Định vị gián tiếp: Làm thế nào để nhận dạng một biến, nếu địa chỉ của nó được xác định, tính toán, thay đổi khi chương trình đang chạy. Vấn đề này được đặt ra khi thao tác các vị trí nhớ liên tục, chuỗi số, hay xâu ký tự. Thanh ghi và địa chỉ trực tiếp không thể dùng vì toán hạng địa chỉ phải được nhân biết trong thời gian biên dịch. Để giải quyết vấn đề trên 8051 sử dụng địa chỉ gián tiếp. R1 và R0 được coi như những con trỏ. Nội dung của chúng chỉ đến một địa chỉ nào đó trong RAM khi đọc hoặc ghi dữ liệu. Bit thấp nhất trong byte mã lệnh xác định thanh ghi nào (R0 hay R1) được dùng làm con trỏ. Ngôn ngữ assembly của 8051 dùng ký hiệu @ đặt trước R0 hay R1 để mô tả định vị gián tiếp. Ví dụ, nếu R1 chứa 40H và tại vị trí 40H trong bộ nhớ nội chứa giá trị 55H, lệnh: MOV A, @R1; Chuyển giá trị 55H vào thanh ghi tích luỹ.

Opcode 7-bit i Định vị gián tiếp trở nên quan trọng khi phải thao tác từng byte bộ nhớ nội một cách liên tục. Ví dụ những lệnh sau sẽ xóa vùng RAM từ địa chỉ 60H đến 70H: MOV R0, #60H; MOV @R0, #0; LOOP: INC R0; CJNE R0, #80H, LOOP; Lệnh đầu tiên khởi động thanh ghi với địa chỉ đầu tiên của khối bộ nhớ. Lệnh thứ hai dùng lệnh gián tiếp để chuyển giá trị 00H vào vị trí được trỏ bởi R0. Lệnh thứ 3 tăng giá trị con trỏ đến địa chỉ tiếp theo. Và lệnh cuối kiểm tra xem con trỏ đến cuối khối chưa. Lệnh kiểm tra dùng giá trị 80H chứ không phải giá trị 7FH vì việc xảy ra sau việc dịch chuyển gián tiếp. Như vậy chắc chắn cuối cùng sẽ được ghi trước khi kết thúc.

Page 46: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

Định vị tức thời : Khi một toán hạng nguồn là một hằng số không phải là một biến. Hằng số có thể được gom vào trong lệnh như một dữ liệu tức thời. Byte được thêm vào sẽ chứa giá trị.

Trong ngôn ngữ assembly toán hạng tức thời được đặt trước bằng ký hiệu số (#). Toán hạng có thể là một hằng số, ký hiệu hoặc toán tử. Trình biên dịch sẽ tính toán giá trị và gán dữ liệu tức thời vào lệnh. Tất cả các lệnh dùng định vị tức thời đều sử dụng hằng dữ liệu 8 bit. Ngoại trừ khi khởi động thanh ghi con trỏ dữ liệu (DPTR) MOV DPTR, #40000H; Là một lệnh 3 bytes nạp số 16 bit vào thanh ghi con trỏ. Định vị tương đối: Định vị tương đối chỉ dùng trong các lệnh jump. Địa chỉ tương đối (offset) là một số 8 bit có dấu được cộng vào thanh ghi đếm chương trình để chỉ ra địa chỉ của lệnh tiếp theo phải thi hành. Vì offset là một số 8 bit có dấu nên tầm nhảy chỉ giới hạn trong khoảng cách +127 và –128 vị trí. Trước khi cộng, thanh ghi đếm chương trình tăng lên đến địa chỉ sau lệnh jump. Vì vậy, địa chỉ mới là tương đối so với địa chỉ lệnh kế tiếp chứ không phải địa chỉ lệnh jump. Thông thường chi tiết này không liên quan đến người lập trình, khi mà đích nhảy đến được mô tả bằng một nhãn. Trình biên dịch sẽ định giá trị offset tương đối tương ứng. Ví dụ nếu nhãn THERE được đặt tại lệnh có địa chỉ 1040H và lệnh SJMP THERE Ở tại vị trí 1000H và 1001H. Trình biên dịch sẽ gán giá trị offset tương đối là 3EH tại byte thứ hai của lệnh. Định vị tuyệt đối: Định vị tuyệt đối chỉ dùng đối với các lệnh ACALL, AJMP. Lệnh 2 byte này cho phép rẽ nhánh trong phạm vi 2Kbytes bộ nhớ. 5bit cao của địa chỉ đích là 5 bit cao hiện thời trong thanh ghi đếm chương trìng. Vì vậy lệnh theo sau lệnh rẽ nhánh và lệnh kết thúc rẽ nhánh kết thuác nằm trong phạm vi 2Kbytes.

Addr 10 – Addr8 Opcode 5-bit Định vị xa: Định vị xa chỉ sử dụng cho các lệnh LCALL và LMP. Các lệnh 3-byte này có địa chỉ đích là số 16-bit đặt trong byte 2 và byte 3. Điều thuận tiện là toàn bộ vùng mã

Opcode Immediate data

Relative offset Opcode

Addr7 - Addr0

Page 47: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

lệnh đều có thể được sử dụng. Nhưng một điều bất tiện là lệnh 3-byte quá dài và phụ thuộc vị trí (position-dependent). Phụ thuộc vị trí là một điệu bất tiện bởi vì chương trình không thể thi hành tại một địa chỉ khác. Opcode Addr15 – Addr8 Addr7 – Addr0 Định vị chỉ số : Định vị chỉ số dùng một thanh ghi cơ sở (PC hoặc DPTR) và một thanh ghi làm offset (ACC) tạo ra một địa chỉ sẽ bị tác động bởi các lệnh JMP hoặc MOVC. Thanh ghi nền offset địa chỉ tác động PC or DPTR + ACC = Các ví dụ được cung cấp trong phụ lục cho các lệnh: MOVC A, @A+ <thanh ghi nền> JMP @A+DPTR

III – PHÂN LOẠI LỆNH: Các lệnh 8051 được chia thành 5 nhóm như sau:

Số học Logic Trao đổi dữ liệu Luận lý Rẽ nhánh chương trình

Các lệnh số học Các lệnh số học thường sử dụng 4 mode định vị. Lệnh ADD A có thể được viết bằng nhiều cách khác nhau: ADD A, 7FH (Định vị trực tiếp) ADD A, @R0 (---------gián tiếp) ADD A, R7 (---------thanh ghi) ADD A, #35H (--------- tức thời) Tất cả các lệnh số học thi hành trong một chu kỳ máy, ngoại trừ lệnh INC DPTR (2 chu kỳ máy), MUL AB và DIV AB (4 chu kỳ máy). 8051 cung cấp cách định vị rất mạnh cho vùng RAM nội của nó. Bất kỳ byte nhớ nào cũng đều có tể tăng, giảm bằng định vị trực tiếp mà không cần thông qua thanh ghi tích luỹ. Lệnh INC có thể thao tác trên con trỏ dữ liệu (16 bit). Nhưng lệnh DEC không được định nghĩa trên con trỏ. Do đó để thực hiện được điều này ta có các lệnh sau: DEC DPL ; giảm byte thấp DPTR MOV R7, DPL ; chuyển vào DPL CJNE R7, #0FFH, SKIP ; nếu vượt quá FF DEC DPH ; giảm luôn byte cao SKIP : (tiếp tục)

Page 48: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

Các lênh MUL AB và DIV AB chỉ thao tác trên các thanh ghi A và B. Lệnh Logic : Các lệnh logic biểu diễn các toán tử luận lý như AND, OR, EA-OR và NOT … Các lệnh này trên từng bit của byte dữ liệu. Ví dụ thanh ghi ACC chứa số 10101101B thì lệnh: ANL A, #10110010B Chứa kết quả 10100000 vào thanh ghi ACC. Các mode định vị trong lệnh logic cũng giống như trong lệnh số học. Tất cả các lệnh logic dùng đến thanh ghi ACC như một toán hạng đều là những lệnh một chu kỳ. Các lệnh khác đều chiếm 2 chu kỳ máy. Lệnh logic có thể thao tác trực tiếp bất cứ byte nào trong vùng nhớ nội. Lệnh XRL <thanh ghi>, #data đảo nhanh và dễ dàng các bit của port. XRL P1, #0FFH; Lệnh này mô tả hoạt động read-modify-write. 8 bit của port 1 được đọc, sau đó mỗi bit của XOR với bit tương ứng trong byte dữ liệu tức thời đều là 1, XOR sẽ đảo mỗi bit được đọc. Kết quả được viết trở lại port 1. Các lệnh chuyển dịch dữ liệu: RAM nội Các lệnh chuyển dịch dữ liệu trong vùng RAM nội chỉ chiếm 1 hoặc 2 chu kỳ máy. Lệnh có dạng: MOV <đích>, <nguồn> Một nét đặc trưng của họ MSC-51 là stack nằm trong vùng RAM nội và lớn dần lên phía tên của bộ nhớ. Lệnh PUSH trước tiên tăng con trỏ stack, sau đó mới sao chép byte vào stack. PUSH và POP chỉ dùng định vị trực tiếp. Thế nhưng bản thân stack lại dùng định vị trực tiếp thông qua con trỏ stack (SP). 8031/8051 không dùng 128 byte cao trong vùng nhớ nội làm stack. Nếu SP vượt quá 127 bytes được push bị mất và byte được pop không xác định. Lệnh dịch chuyển dữ liệu 16-bit (MOV dùng để khởi động con trỏ dữ liệu. Lệnh XCV A, <source> Chuyển đổi dữ liệu giữa A và byte được định vị. Lệnh XCHD A, @R1 chuyển đổi 4 bit thấp của thanh ghi ACC với byte được R1 chỉ đến. RAM ngoài Dịch chuyển dữ liệu giữa bộ nhớ trong và ngoài sử dụng mode định vị gián tiếp. Địa chỉ gián tiếp có thể là một byte hay 2 byte (DPTR). Các lệnh dịch chuyển dữ liệu thao tác trên bộ nhớ ngoài đều chiếm hai chu kỳ máy và dùng thanh ghi tích luỹ làm toán hạng nguồn hoặc đích. Look-Up Tables Hai lệnh được cho sẵn để đọc một bảng dữ liệu trong bộ nhớ chương trình. Khi truy xuất đến vùng nhớ chương trình thì nội dung của bảng chỉ được đọc mà không được ghi. Từ gợi nhớ MOVC tức là “move constant”. MOVC dùng thanh ghi đếm chương trình cũng như con trỏ dữ liệu kàm thanh ghi nền và thanh ghi tích luỹ làm offset.

Page 49: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

MOVC A,@A+DPTR ; Có thể đọc được một số trong bảng 256 phần tử vào thanh ghi tích luỹ. Trong đó thanh ghi tích luỹ chỉ đến một vị trí trong còn con trỏ DPTR chỉ đến vị trí đầu bảng. MOVC A,@A+PC ; Cũng tương tự như trên, chỉ khác là thanh ghi PC được dùng làm thanh ghi nền và bảng được truy xuất thông qua chương trình con. Trước tiên chỉ số yêu cầu được nạp cho thanh ghi tích luỹ sau đó chương trình con được gọi. Việc khởi động và gọi cụ thể như sau: MOV A,ENTRY_NUMBER CALL LOOK_UP . . . LOOK_UP : INC A MOVC A, @A+PC Ret TAB: DB data, data, data … Bảng được đặt ngay sau lệnh RET của chương trình con. Lệnh INC cần thiết vì PC sẽ chỉ đến lệnh RET sau khi thi hành MOVC. Việc tăng thanh ghi A cho phép nhảy qua khỏi lệnh RET. Các lệnh luận lý Các lệnh luận lý của 8051 thao tác trên bit đơn. RAM nội cung cấp 128 bit và các thanh ghi chức năng cung cấp 128 bit khác. Lệnh truy xuất đến các bit thông thường như set, xóa, đảo, AND, OR … Tất cả các bit đều truy xuất bằng định vị trực tiếp với các bit có địa chỉ từ 00H – 7Fh trong 128 địa chỉ thấp và 80H-FFH trong SFRs. Các bit trong vùng địa chỉ thấp đạt tại 20F đến 2FH, được đánh số lần lượt từ bit 0 của địa chỉ 200H (bit 00H) đến bit 7 của địa chỉ 2FH (bit 7Fh). Ví dụ SETB P.1.7 set bit 7 port 1 Bit carry trong PSW được sử dụng như single-bit accumulator. Ví dụ CLR C CLR CY ; xóa carry Test bit Các lệnh test bit thường là các lệnh rẽ nhánh chương trình. Chúng kiểm tra trạng thái các bit để nhảy đến chương trình tương ứng nếu thỏa điều kiện. Lệnh rẽ nhánh chương trình Có một số lệnh điều khiển dòng chương trình, chúng gồm các lệnh gọi chương trình con và trả về từ một chương trình con hoặc rẽ nhánh có điều kiện và không có điều kiện. Những khả năng này có thể được cải tiến hơn nữa khi sử dụng 3 mode định vị trong các lệnh rẽ nhánh chương trình. Có 3 kệnh JMP khác nhau:SJMP, LJMP và AJMP (tương ứng là định vị tương đối, định vị xa và định vị tuyệt đối). Trình biên dịch Intel chấp nhận lệnh chung chung

Page 50: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

JMP nếu người lập trình không quan tâm đến sự thay đổi biên dịch. Trong khi trình biên dịch của những hãng khác không có đặc tính này. JMP được biên dịch thành AJMP nếu đích nằm ở trước và khoảng nhảy nằm trong phạm vi 2Kbytes. Trong các trường hợp khác có thể dịch thành LJMP. Lệnh CALL cũng tương tự như vậy. Lệnh SJMP định địa chỉ đích như một offset tương đối. Vì vậy lệnh này dài 2 bytes. Khoảng cách nhảy bị giới hạn từ –128 đến +127 bytes tương đối so lệnh sau lệnh SJMP. Lệnh LJMP xác định một địa chỉ đích là một số 16 bit. Vì vậy lệnh này dài 3 bytes. Địa chỉ đích có thể ở bất kỳ trong vùng nhớ chương trình 63KB. Lệnh AJMP xác định địa chỉ đích là một số 11 bit. Giống như SJMP, lệnh này dài 2 bytes, nhưng được biên dịch khác. Mã lệnh chứa 3 bit trong vòng 11 bit địa chủ và byte thứ hai chứa 8 bit còn lại của địa chỉ đích. Khi lệnh được thi hành 11 bit này được đặt vào 11 bit thấp trong thanh ghi PC và 5 bit cao trong thanh ghi PC không đổi. Vì vậy đích phải nằm trong phạm vi 2 Kbytes. Trong tất cả các trường hợp, người lập trình xác định địa chỉ bit bằng một nhãn hoặc như một số 16 bit. Trình biên dịch sẽ đặt địa chỉ đích vào vị trí đúng trong lệnh được biên dịch. Jump Tables Lệnh “JMP @ A+DPTR” cung cấp lệnh nhảy phụ thuộc điều kiện theo một bảng nhảy (jump tables). Địa chỉ đích sẽ được tính trong khi thi hành chương trình như tổng của DPTR và thanh ghi tích luỹ. Đầu tiên DPTR được nạp địa chỉ của bảng và thanh ghi tích luỹ được dùng làm chỉ số. Ví dụ nếu có 5 trường hợp nhảy, giá trị từ 0 đến 4 được nạp cho thanh ghi tích luỹ và lệnh nhảy tương ứng với từng trường hợp được mô tả như sau: MOV DPTR, #JUMP_TABLE ; MOV A, INDEX_NUMBER ; RL A JMP @A+DPTR Lệnh RL ở trên đổi chỉ số (từ 0 đến 4) thành các số chẵn từ 0 đến 8, vì mỗi điểm xâm nhập trong bảng là một địa chỉ 2-byte. JNP_TABLE : AJMP CASE0 AJMP CASE1 AJMP CASE2 AJMP CASE3 Chương trình và con ngắt Có hai lệnh CALL khác nhau: ACALL và LCALL dùng định vị tuyệt đối và xa. Giống như lệnh JMP, lệnh CALL đưôc trình biên dịch của Intel dùng khi người lập trình không quan tâm đến địa chỉ được biên dịch. Lệnh này đẩy thanh ghi PC vào stack và nạp PC với giá trị được chỉ ra trong lệnh. Lưu ý PC sẽ được trả lại giá trị địa chỉ sau lệnh CALL khi nó chấm dứt chương trình con. Các lệnh LJMP và ACALL đều có những hạn chế giống như LJMP và AJMP được mô tả ở trên.

Page 51: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

Chương trình con kết thúc bằng lệnh RET, nó sẽ trả điều khiển lại cho chương trình chính. Không có gì bí ẩn khi RET trả điều khiển lại cho chương trình chính, nó chỉ đơn giản lấy 2 bytes cuối cùng của stack và đặt chúng vào thanh ghi PC. Lệnh RETI dùng để quay trở về chương trình chính từ trong chương trình phục vụ ngắt. Sự khác nhau giữa RET và RETI chỉ là RETI ký hiệu cho ngắt điều khiển hệ thống. Lệnh nhảy có điều kiện 8051 cung cấp một số lệnh nhảy có điều kiện. Tất cả những lệnh này đều xác định địa chỉ đích bằng định vị tương đối. Giới hạn khoảng cách nhảy từ –128 đến +127 bytes kể từ sau lệnh nhảy có điều kiện. Tuy nhiên người lập trình cũng có thể định một địa chỉ bằng nhhãn hoặc một số 16 bit. Không có bit zero trong thanh ghi PSW. JZ và JNZ test nội dung thanh ghi ACC cho điều khiển nhảy. Lệnh DJNZ (nhảy nếu khác 0) được dùng để điều khiển vòng lặp. Để vòng lập thi hành N lần, nạp biến đếm với N và đặt DJNZ ở cuối vòng lặp để bắt đầu vòng lặp. Ví dụ vòng lặp sau thi hành 10 lần: MOV R0,#10 ; LOOPP: (bắt đầu vòng lặp) . . . (kết thúc vòng lặp) DJNZ R7, LOOP ; (tiếp tục) Lệnh CJNZ (so sánh và nhảy nếu không bằng) cũng dùng để điều khiển vòng lặp. Hai bytes được xác định trong vùng toán hạng của lệnh và lệnh nhảy sẽ thi hành nếu hai bytes này khác nhau. Ví dụ, nếu một ký tự được đọc vào thanh ghi ACC từ cổng nối tiếp và nhảy đến nhãn TERMINAL nếu ký tự đọc vào là CONTROL-C (03H) . CJNE A, #03, SKIP ; SJMP TERMINAL ; SKIP: (tiếp tục) Lệnh jump chỉ xảy ra khi A=03H. Một ứng dụng khác của lệnh này là so sánh lớn hơn và bé hơn. Hai byte trong miền toán hạng là những số không dấu. Nếu toán hạng đầu nhỏ hơn toán hạng thứ hai thì cờ carry được set. Nếu toán hạng đầu lớn hơn hoặc bằng toán hạng thứ hai thì cờ carry được xóa. Ví dụ nếu muốn nhảy đến BIG nếu ACC lớn hơn hoặc bằng 20H, ta có các lệnh sau: CJNE A,#20H,$+3 JNC BIG Ký hiệu dollars “$” là một ký hiệu đặt biệt của trình biên dịch thay thế cho địa chỉ của lệnh hiện thời. Vì CJNE là một lệnh 3-bytes, “$+3” là địa chỉ của lệnh tiếp theo.

Page 52: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

Chương V GIỚI THIỆU VỀ KIT VI ĐIỀU KHIỂN 8051

I –CHỨC NĂNG CÁC PHÍM: 1 – Bàn phím:

Kít vi điều khiển có tất cả là 26 phím nhấn như hình 1 được chia thành các nhóm như sau: 16 phím nhập dữ liệu của chương trình dạng số thập lục phân từ 0 đến F. Các phím chức năng

Hình 1 Q G T P K I C D E F R 8 9 A B S 4 5 6 7 0 1 2 3

2 – Chức năng của phím:

Khi mới cấp điện cho máy 4 Led bên trái sẽ hiển thị 4 số 0000, bốn led bên phải tắt

Nếu không hiển thị đúng hãy nhấn phím “Q”. Phím “Q” có chức năng Reset mạch khi khởi động hoặc khi muốn thoát khỏi chương trình vi điều khiển đang thực hiện (chức năng như phím RESET của máy vi tính)

3 – Chức năng của phím:

Muốn nhập dữ liệu mới vào ô nhớ có địa chỉ ví dụ 4000, hãy dùng các phím nhập dữ liệu đánh số 4000, địa chỉ này sẽ xuất hiện ở 4 led bên phải.

Nhấn phím “S” thì địa chỉ 4000 sẽ thay thế cho địa chỉ trước đó ở 4 led bên trái.

4 led còn lại chỉ có 2 led sáng đó chính là nội dung của ô nhớ tương ứng với địa chỉ 4 led bên trái

4 – Chức năng của phím:

Dùng để lưu trữ dữ liệu vào ô nhớ có địa chỉ ở 4 led bên trái, ví dụ muốn lưu trữ dữ liệu là “3F” vào ô nhớ có địa chỉ là 4000, hãy đánh “3F” từ các phím dữ liệu, dữ liệu mới “3F” sẽ thay thế dữ liệu cũ trước đó.

Sau đó nhấn phím “” để lưu trữ dữ liệu này vào ô nhớ 4000. Địa chỉ sẽ tăng lên 1 là 4001 để sẵn sàng nhận dữ liệu tiếp theo và 2 led bên trái hiển thị nội dung của ô nhớ 4001.

Chức năng của phím này lưu trữ dữ liệu đồng thời tăng địa chỉ của ô nhớ.

S

Q

Page 53: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

5 – Chức năng của phím: Có chức năng giảm địa chỉ của ô nhớ xuống 1 đơn vị tương ứng với mỗi lần

nhấn. Ví dụ muốn kiểm tra lại ô nhớ vừa nhập là 4000 xem có đúng là dữ liệu “3F” không, hãy nhấn phím “”. Nếu sai thì nhập lại, nếu đúng thì nhấn phím tăng địa chỉ để nạp các dữ liệu tiếp theo.

6 – Chức năng của phím:

Sau khi nhập dữ liệu của một chương trình tại địa chỉ 4000, để vi điều khiển thực hiện chương trình này hãy nhấn ohím “P”. Khi đó trên màn hình 8 Led sẽ xuất hiện “PC 4000”. Nếu muốn thực hiện chương trình tại địa chỉ 4000 hãy nhấn phím tăng địa chỉ, khi đó trên màn hình sẽ xuất hiện thêm dấu “=” như sau: “PC =4000”. Sau đó nhấn phím “G”. Chương trình sẽ được thi hành.

Nếu chương trình lưu tại địa chỉ khác với địa chỉ 4000 thì trước khi nhấn phím tăng địa chỉ hãy đánh địa chỉ của chương trình đó vào bằng các phím nhập dữ liệu. Sau đó nhấn phím tăng địa chỉ, ví dụ muốn thực hiện chương trình tại địa chỉ 5000 thì trên màn hình 8 led sẽ hiển thị “PC =5000”. Nhấn tiếp phím “G” chương trình sẽ được thi hàn htại địa chỉ 5000.

7 - Chức năng của phím:

Dùng để xem nội dung các thanh ghi, trước tiên nhấn phím “R” và sau đó nhấn phím thập phân tương ứng từ “6” cho đến “F”

Nhấn phím thập phân “A”: xem nội dung thanh ghi A Nhấn phím thập phân “B”: xem nội dung thanh ghi B Nhấn phím thập phân “C”: xem nội dung thanh ghi C Nhấn phím thập phân “D”: xem nội dung thanh ghi D Nhấn phím thập phân “E”: xem nội dung thanh ghi E Nhấn phím thập phân “F”: xem nội dung thanh ghi F Nhấn phím thập phân “8”: xem nội dung thanh ghi H Nhấn phím thập phân “9”: xem nội dung thanh ghi L Nhấn phím thập phân “7”: xem nội dung cặp thanh ghi SP Nhấn phím thập phân “6”: xem nội dung cặp thanh ghi PC

P

R

I

Page 54: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

8 – Chức năng của phím: Phím này tác động đến ngắt cứng của hệ thống vi xử lý. Chương trình sẽ bị

ngừng sau khi nhấn phím “I”, nếu nhấn “I” thêm lần nữa hệ thống sẽ được đặt lại trạng thái mặc định ban đầu tương đương với reset máy bằng phím “Q”

9 – Chức năng của phím:

Chức năng của phím này là thực hiện chương trình từng bước. Trình tự nhấn phím giống như phím “G”. Nếu nhấn phím “G” để thực hiện cả chương trình tại địa chỉ chứa trong cặp thanh ghi PC, ta nhấn phím “T” chương trình sẽ được thực hiện từng lệnh tại địa chỉ chứa trong PC.

* Chú ý: nếu nhấn phím “G” không thông qua phím “P” và các phím khác thì chương trình mặc nhiên sẽ thực hiện tại địa chỉ 4000.

Có 1 số chương trình chức năng chưa nạp vào EPROM

II – GIỚI THIỆU CẤU TRÚC PHẦN CỨNG KIT VI XỬ LÝ: 1 – Tần số làm việc:

Kit vi điều khiển sử dụng vi điều khiển 8051 hoặc 8951 của Intel với tần số hoạt động 12MHz.

Các chương trình về thời gian được viết tương ứng với địa chỉ này. 2 – Tổ chức bộ nhớ:

a . Bộ nhớ EPROM: Có dung lượng 16KB sử dụng 2 EPROM 2764, chương trình hệ thống chứa ở EPROM thứ nhất, EPROM thứ 2 chưa sử dụng được thiết kế ở dạng socket.

EPROM 1 có địa chỉ từ 0000H – 1FFFH EPROM 2 có địa chỉ từ 2000H – 3FFFH

b . Bộ nhớ RAM: Bộ nhớ RAM có dung lượng 16KB sử dụng 2 IC 6264: RAM 1 có địa chỉ từ 4000H – 5FFFH RAM 2 có địa chỉ từ 6000H – 7FFFH Chương trình có thể sử dụng toàn bộ các vùng nhớ RAM

3 – Các IC ngoại vi: trong hệ thống có sử dụng 2 IC 8255A dùng để giao tiếp với thiết bị ngoại vi.

T

Page 55: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

Địa chỉ của các port 8255-1 8255-2

Port A 8000H A000H Port B 8001H A001H Port C 8002H A002H

Thanh ghi điều khiển 8003H A003H

Bảng đồ nhớ của 2 IC 8255

Các ngõ ra của IC 8255A –1, 8255 – 2, đưa ra bên ngoài bằng connector 64 chân có sơ đồ chân ở bảng tra. Mỗi IC 8255A có 3 port, mỗi port có 8 chân điều khiển nên số chân đưa ra bên ngoài để điều khiển là 48.

4 – Khối giải mã hiển thị – quét phím sử dụng IC 8279: Vùng địa chỉ sử dụng của IC 8279 là C000H – C001H , trong đó: Địa chỉ C000H là địa chỉ dùng để gởi dữ liệu cần hiển thị và đọc mã

phím. Địa chỉ C001H là địa chỉ dùng để gởi từ điều khiển ra 8279 – đọc

thanh ghi trạng thái. a . Phần giải mã hiển thị:

Gồm có 8 led với thứ tự Led1 đến Led8 theo hướng từ phải sang trái như hình 2. Cấu trúc byte dữ liệu của led

p g f e d c b A

Hệ thống sử dụng Led loại Anode chung nên muốn đoạn nào sáng thì bit dữ liệu tương ứng với đoạn đó bằng 1. Đoạn nào tắt thì bit tương ứng với đoạn đó bằng 0.

Ví dụ muốn sáng số “9” thì byte dữ liệu sẽ gởi ra led là:

0 1 1 0 1 1 1 1 Tương ứng với số hex là 6FH. Sau đây là mã 7 đoạn của 1 chữ số và chữ cái:

a

b

c

d

e

f g

p

LED8

LED 7

LED6

LED5

LED4

LED 3

LED 2

LED 1

Page 56: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

p G f e d c b a Hex Số 0 0 0 1 1 1 1 1 1 3F Số 1 0 0 0 0 0 1 1 0 06 Số 2 0 1 0 1 1 0 1 1 5B Số 3 0 1 0 0 1 1 1 1 4F Số 4 0 1 1 0 0 1 1 0 66 Số 5 0 1 1 0 1 1 0 1 6D Số 6 0 1 1 1 1 1 0 1 7D Số 7 0 0 0 0 0 1 1 1 07 Số 8 0 1 1 1 1 1 1 1 7F Số 9 0 1 1 0 1 1 1 1 6F Chữ A 0 1 1 1 0 1 1 1 77 Chữ b 0 1 1 1 1 1 0 0 7C Chữ C 0 0 1 1 1 0 0 1 39 Chữ d 0 1 0 1 1 1 1 0 5E Chữ E 0 1 1 1 1 0 0 1 79 Chữ F 0 1 1 1 0 0 0 1 71 Chữ P 0 1 1 1 0 0 1 1 73 Chữ H 0 1 1 1 0 1 1 0 76 Chữ U 0 0 1 1 1 1 1 0 3E

Có thể tìm các mã tương ứng còn lại Có 2 cách hiển thị dữ liệu trên các Led:

Cách 1: khi gởi các dữ liệu mới ra địa chỉ C000H thì dữ liệu này sẽ hiển thị ở Led 1, dữ liệu trước đó của các led sẽ dịch sang trái theo chiều mũi tên trong hình 3. Riêng byte dữ liệu trước đó của led 8 sẽ dịch và mất đi.

Page 57: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

LED8 LED7 LED6 LED5 LED4 LED3 LED2 LED1

Mũi tên nằm ngang chỉ chiều nhận dữ liệu từ vi điều khiển đưa đến led 1. Các mũi tên vòng cung chỉ chiều dịch chuyển dữ liệu.

* Chú ý: nếu muốn xóa hết màn hình 8 led thì gởi 8 byte 00h liên tiếp ra A000h.

Cách 2: kiểu gởi dữ liệu ở cách 1 còn được gọi là kiểu dịch chuyển dữ liệu tuần tự.

Bên cạnh đó 8279 còn cho phép gởi dữ liệu trực tiếp đến bất kỳ led nào trong 8 led – tổ chức của led không có gì thay đổi địa chỉ gởi dữ liệu vẫn là C000H nhưng mỗi led còn có thêm 1 địa chỉ điều khiển như trong hình 4. Địa chỉ điều khiển của led phải gởi ra địa chỉ C001H trước khi gởi dữ liệu ra địa chỉ C000H.

80H 81H 82H 83H 84H 85H 86H 87H b. Phần giải mã bàn phím: Chương trình con giải mã bàn phím được viết tại địa chỉ 0223H sử dụng các thanh ghi R2, A, DPTR, R6, R7, ô nhớ 41h. Khi gọi chương trình con 0223H: Nếu không ấn phím thì sau khi thực hiện xong chương trình sẽ trở về

chương trình chính với nội dung thanh ghi A =FFH Nếu có ấn phím thì mã của phím ấn chứa trong A. Chương trình này nếu có ấn phím hoặc không ấn phím đều trở về chương trình

sau khi thực hiện xong và phải chú ý cất dữ liệu trong các thanh ghi khi gọi chương trình con này

Bảng mã các phím số:

Phím Mã Phím Mã Phím Mã Phím Mã

LED8

LED 7

LED6

LED5

LED4

LED 3

LED 2

LED 1

Page 58: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

0 00 4 04 8 08 C 0C 1 01 5 05 9 09 D 0D 2 02 6 06 A 0A E 0E 3 03 7 07 B 0B F 0F

Bảng mã các phím chức năng: Phím Mã Phím Mã

T 10 S 14 G 11 15 R 12 P 16 13 K 17

Page 59: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

PHẦN II

THIẾT KẾ

Page 60: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

Chương I THIẾT KẾ PHẦN CỨNG

I – MẠCH CHUYỂN ĐỔI AD: 1 – Giới thiệu ADC 0809 ADC 0809 là thiết bị biến đổi tương tự số dùng kỹ thuật CMOS. Tổng cộng người sử dụng có 8 kênh làm việc hoàn toàn độc lập với nhau để lựa chọn. Ở đây còn chú ý là các điện áp được đo so với điện thế 0V. Còn một đặc điểm đáng quan tâm hơn là sự tiêu thụ dòng điện của vi mạch hầu như không đáng kể (chỉ cỡ 300uA). Thời gian biến đổi khoảng 100 us. Các thông số kỹ thuật của bộ biến đổi ADC 0809 được kể ra như sau:

Không cần đòi hỏi điều chỉnh điểm 0. Quét động 8 kênh bằng các logic địa chỉ. Giải tín hiệu lối vào Analog khi điện áp nguồn là +5V. Tất cả các tín hiệu tương thích TTL. Độ phân giải 8 bit. Thời gian biến đổi 100us. Dòng tiêu thụ (bình thường): 0.3 mA. Tần số cung cấp cho chân clock: 10KHz ÷ 1280KHz. Thông thường vào

khoảng 640KHz.

Tín hiệu giữ nhịp dùng cho bộ biến đổi AD cần phải tạo được ở bên ngoài và được dẫn đến chân clock. Điện áp so sánh được đưa qua tầng lặp lại điện áp để làm chân REF+.

Chân này có điệntrở lối vào cỡ 2.5K. Mẫu bit ở các lối vào địa chỉ A, B, C sẽ xác định xem kênh nào phải được lựa chọn. 2 – Nguyên tắc hoạt động Nguyên tắc làm việc của bộ biến đổi ADC 0809 cũng không có gì phức tạp. Một xung dương ở chân start kích hoạt sự biến đổi. Qua đó mẫu bit ở lối vào địa chỉ A, B, C cũng đồng thời được chốt và xác định kênh cấn biến đổi. Trong quá trình biến đổi, chân ra EOC (End of Conversion) đứng ở mức Low. Sau cả 100us mức này sẽ

Page 61: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

chuyển sang high và báo hiệu kết thúc quá trình chuyển đổi. Sau đó kết quả của quá trình chuyển đổi sẽ xếp hàng ở đường dẫn dữ liệu D0 ÷ D7. Khi OE (Output Enable) = 1, các đường dẫn có thể đọc tiếp. 3 – Mạch tạo dao động cho ADC 0809: 0,7 V0 (f= ) RC Do tần số làm việc tương đối cao, ta sử dụng bộ đa hài tạo sóng xuống dùng Trigger Schmitt theo công nghệ TTL. Với mạch điện như trên ta có tần số dao động: F 0,7 700 KHz RC 4 – Mạch so sánh lặp lại điện áp:

Ta sử dụng OP-AMP LM 358 để lập lại điện áp nhằm phối hợp tổng trở với ngõ vào REF+ của ADC 0809: đồng thời cung cấp mức áp chuẩn để đưa vào REF+ để tạo các mức logic ở ngõ ra tương ứng.

Các điện trở 1K, 2K. 10K và VR 10K nhằm tạo cầu phân áp và chọn mức áp chuẩn đưa vào REF+

VZ = 5,6V ổn áp, giữ điện áp cố định Ngõ ra bộ so sánh là 5V. Với giá trị này ta có sự thay đổi AV ở ngõ vào để

thay đổi 1 mức logic ở ngõ ra là: AV = 5/256 20mV

5 – Mạch tạo giao tiếp với KIT 8051: 8 bit ra của 0809 được nối với PortA của 8255 –1

1K

C2C

10K

2.2K

10KVR1

3

25.6V +

-

LM358

3

21

84

Page 62: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

3 chân chọn kênh A0, A1, A2 của 0809 được nối PB0 PB2. Vì vậy khi ghi một dữ liệu vào vùng nhớ của 0809 tức chọn kênh của nó.

Chân Start nối PC4, ALE nối PC5 Chân OE được nối lên Vcc. Luôn ở trạng thái cho phép đọc dữ liệu. Chân EOC được nối với PCC. Trong quá trình thực hiện chuyển đổi vi điều

khiển sẽ đọc giá trị EOC tại PCO. Nếu EOC = 1: hoàn thành quá trình chuyển đổi, vi điều khiển sẽ đọc dữ liệu lưu trữ vào RAM để xử lý.

PC1 được nối qua R1K đưa lên +5V (PC1 = 1). Khi có ấn phím PC1 = 0, được đưa vào vi điều khiển để báo chọn kênh.

II – MẠCH CHUYỂN ĐỔI DA 0808

DAC 0808 có nhiệm vụ biến đổi mã nhị phân thành dòng (tín hiệu analog). Dòng này có chiều chạy vào Iout của DAC 0808 và có cường độ thay đổi theo tỉ lệ với data ở ngã vào. Khi data thay đổi từ 0 255 Iref, ở mạch dòng mã nhị phân được đưa từ KIT 8051 qua Port A của 8255-2 để đưa vào DAC 0808.

Tín hiệu DAC 0808 tạo ra dòng nên còn phải có mạch chuyển dòng thành áp dùng LM324. Ta cần điện áp thay đổi từ 0-5V mà dòng thay đổi từ 0 2mA nên ta cần điều chỉnh VR 5K cho phù hợp.

Page 63: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

Sơ đồ nguyên lý card chuyển đổi A/D – D/A

Page 64: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

SƠ ĐỒ BỐ TRÍ LINH KIỆN

Page 65: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

SƠ ĐỒ MẠCH IN MẶT TRÊN

Page 66: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

Chương II THIẾT KẾ PHẦN MỀM

I – LƯU ĐỒ GIẢI THUẬT 1 – Lưu đồ chương trình chính:

START

Khởi động 8255-1 MODE0

Nạp địa chỉ cho kênh

đầu tiên vào r7

Chương trình xóa 8LED

Chương trình hiển thị thứ tự kênh chọn tại LED 8

Chương trình chuyển đổi data

Chương trình xuất data ra D/A

Chương trình đổi HEX-BCD

Chương trình giải mã LED 7 đoạn

Chương trình hiển thị

Chương trình delay

Khởi động Port C

Kiểm tra nhấn phím N PC4 = 0

Y

Tăng R7 để dò kênh kế

N R7= 08

Y

Page 67: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

Khởi động Port B 8255 -1

Ghi A vào 0809 Chọn kênh

Khởi động 0809 ALE = 1, ST =

Lưu kết quả

2 – Lưu đồ chương trình con chuyển đổi:

START

Nhập kênh cần quét r7 a

Chuyển đổi N kết thúc

Y

END

Page 68: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

II- CHƯƠNG TRÌNH: Chương trình chính chuyển đổi A/D – D/A:

ORG 4000H

MOV A, #91H ; Khởi tạo 8255-1 port A MOV DPTR, #8003H MOV @DPTR, A X1 : MOV R7, #00H ; Nạp địa chỉ để chọn kênh quét X2: LCALL CLEAR ; Gọi chương trình xóa LCALL DISPLAY – 1 ; Hiển thị số kênh chọn ở LED LCALL CHUYENDOI ; Gọi chương trình chuyển đổi LCALL OUT ; Gọi chương trình xuất ra D/A LCALL HEX – BCD ; Gọi chương trình chuyển số hex sang

BCD LCALL DECODE ; Gọi chương trình giải mã 7 đoạn LCALL DISPLAY – 2 ; Gọi chương trình hiển thị dữ liệu vừa

chuyển đổi LCALL DELAY ; Gọi chương trình delay MOV DPTR, #8002 ; Kiểm tra nhấn phím MOV A, @DPTR ANL A, 02H JNZ X2 INC R7 ; Tăng lên để dò kênh kế CJMP 08, X2 ; Kiểm tra đã dò hết kênh chưa LJMP X1 ; quay trở lại

***********************************************************

Các chương trình con phục vụ cho chương trình chính ***********************************************************

Chương trình con xóa vùng data hiển thị cho 8 kênh từ 5000h – 507Fh

ORG 4880H MOV DPTR, #5000H ; Dùng ram ngoài để lưu trữ MOV A, #00H MOV R0, #80H ; Xóa từ 5000h đến 507Fh CLE1: MOVX @DPTR, A INC DPTR DJNZ R0, CLE1 RET

*********************************************************** Chương trình con thực hiện quá trình chuyển đổi kênh thứ n trong R7

Page 69: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

*********************************************************** ORG 4500H

MOV A, R7 ;Chọn kênh thứ n, ALE =0 MOV DPTR, A ; Điều khiển quá trình chuyển đổi cho kênh

thứ n ORL A, #10H ; Cho ALE =1 MOVX @DPTR, A ORL A, #20H ; Cho ALE =1, ST =1 MOVX @DPTR, A NOP NOP NOP CLR A ; Cho ALE =0, ST =0 MOVX @DPTR, A ; Kiểm tra quá trình chuyển đổi kết thúc hay chưa CTC1: MOV DPTR, #PORTC MOVX A, @DPTR ANL A, #01H JZ CTC1 ; Nếu chưa xong thì quay lại ; Xong quá trình biến đổi bắt đầu nhận dữ liệu MOV DPTR, #PORTA MOVX A,@DPTR RET

*********************************************************** Chương trình hiển thị thứ tự số kênh chọn

*********************************************************** ORG 4100H

MOV A, #80H ; Chọn vị trí led để hiển thị MOV DPTR, C001 MOVX @DPTR, A MOV A, R7 MOV 83, 43 ; Nạp byte cao địa chỉ chứa mã hiển thị MOV 82, A ; Nạp byte thấp địa chỉ chứa mã hiển thị MOV A, @DPTR ; Hiển thị ra Led MOV DPTR, C000 MOVX @DPTR, A LCALL DELAY RET

*********************************************************** Chương trình xuất ra D/A

*********************************************************** ORG 4200H

Page 70: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

MOV R0, A ; Cất dữ liệu vào thanh ghi R0 MOV A, #80 ; Khởi tạo 8255 – 2 Mode 0 MOV DPTR, A003 MOV @DPTR, A MOV A, R0 ; Nạp trở lại dữ liệu vào thanh ghi A MOV DPTR, A000 ; Xuất dữ liệu ra Port A MOV @DPTR, A RET

*********************************************************** Chương trình chuyển số HEX sang số BCD

*********************************************************** ORG 4600H

MOV DPTR, #5008H MOV B, #10 ; Nạp 10 vào thanh ghi B DIV AB MOV R0, A ; Cất tạm A sang R0 MOV A, B MOVX @DPTR, A ; Cất data đơn vị vào 5008H INC DPTR ; Tăng lên để lưu hàng chục MOV A, R0 ; Lấy lại data hàng chục, hàng trăm MOV B, #10 ; Nạp 10 vào thanh ghi B DIV AB MOV R0, A ; Cất tạm A sang R0 MOV A, B MOVX @DPTR, A ;Cất data hàng chục vào 5009H INC DPTR ;Tăng lên để lưu hàng trăm MOV A, R0 ;Lấy lại data hàng trăm MOVX @DPTR, A ;Cất data hàng trăm vào 500AH RET

*********************************************************** Chương trình giải mã 7 đoạn

*********************************************************** ORG 4700H

MOV R0, #08H ;Quản lý byte địa chỉ thấp MOV DPTR, #5000H DECO1:PUSH 82 ; Cất DPTR PUSH 83 ;Cất DPTR MOV DPTR, #5000H MOV A, R0 MOVC A, @A+DPTR MOV DPTR, #0200H MOVC A, @A+DPTR

Page 71: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

POP 83H POP 82H MOVX @DPTR, A INC DPTR INC R0 CJNE R0, #0BH, DECO1 RET

******************************************************** Chương trình hiển thị

******************************************************** ORG 4800H

MOV R0, #87H ; Từ điều khiển 8279 MOV R1, #00 ; Địa chỉ tương đối vùng data DISP: MOV DPTR, #CW79 ; Địa chỉ điều khiển 8279 MOV A, R0 MOV @DPTR, A MOV DPTR, #5000H MOV A, R1 ;Chuyển địa chỉ tương đối từ R1 sang A MOVC A, @A+DPTR ;Lấy byte dữ liệu MOV DPTR, #DT79 ;Địa chỉ hiển thị 8279 MOVX @DPTR, A DEC R0 INC R1 CJNE R1, #08, DISP RET

*********************************************************** Vùng chứa mã hiển thị kênh chọn tại LED 8

*********************************************************** ORG 4300H

4300 3F 4301 06 4302 5B 4303 4F 4304 66 4305 6D 4306 7D 4307 07

*********************************************************** Chương trình con delay

*********************************************************** ORG 488CH

Page 72: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

MOV 7DH, #05H DEL3: MOV 7FH, #0A0H DEL2: MOV 7EH, #0FFH DEL1: DJNZ 7EH, DEL1 DJNZ 7FH, DEL2 DJNZ 7DH, DEL3 RET

Page 73: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

KẾT LUẬN

Sau 6 tuần thực hiện đề tài dưới sự hướng dẫn của thầy Lê Thanh Đạo em nhận thấy kiến thức của mình đã được củng cố và mở rộng hơn. Tuy vậy đề tài vẫn còn rất nhiều thiếu sót, vì thế em rất mong được sự đóng góp chân thành của quý thầy cô để đề tài ngày càng trở nên phong phú và hoàn thiện.

Ngày 25 Tháng 02 Năm 2000 Sinh viên thực hiện

Nguyễn Vũ Anh Duy

Page 74: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

PHẦN III

PHỤ LỤC

Page 75: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động

TÀI LIỆU THAM KHẢO

1 –Vi điều khiển trong đo lường và điều khiển

- Ngô Diên Tập 2 – Đo lường và điều khiển bằng máy tính - Ngô Diên Tập 3 – Digital system principles and applications - Ronald J.Tocci 4 – Electronic divices and circuits - Theodore F.Bogart 5 – The 8051 Microcontroller - I.Scott Mackenzie

Page 76: BỘ GIÁO DỤC VÀ ĐÀO TẠO I H C QU C GIA TP.HCM TRƯỜNG ĐẠ …dulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/... · pháp trên: sai số động