Giáo trình Vi xử lý - Vi điều khiển
Trước khi xuất hiện các bộ vi xử lý, các CPU được xây dựng từ các mạch tích
hợp cỡ nhỏ riêng biệt, mỗi mạch tích hợp chỉ chứa khoảng vào chục tranzito. Do đó,
một CPU có thể là một bảng mạch gồm hàng ngàn hay hàng triệu vi mạch tích hợp.
ngày nay, công nghệ tích hợp đã phát triển, một CPU có thể tích hợp lên một hoặc vài
vi mạch tích hợp cỡ lớn, mỗi vi mạch tích hợp cỡ lớn chứa hàng ngàn hoặc hàng triệu
tranzito. Nhờ đó công suất tiêu thụ và giá thành của bộ vi xử lý đã giảm đáng kể.
Vi điều khiển là một máy tính được tích hợp trên một chíp, nó thường được sử
dụng để điều khiển các thiết bị điện tử. Vi điều khiển, thực chất, là một hệ thống bao
gồm một vi xử lý có hiệu suất đủ dùng và giá thành thấp (khác với các bộ vi xử lý đa
năng dùng trong máy tính) kết hợp với các khối ngoại vi như bộ nhớ, các mô đun
vào/ra, các mô đun biến đổi số sang tương tự và tương tự sang số,... Ở máy tính thì các
mô đun thường được xây dựng bởi các chíp và mạch ngoài.
hợp cỡ nhỏ riêng biệt, mỗi mạch tích hợp chỉ chứa khoảng vào chục tranzito. Do đó,
một CPU có thể là một bảng mạch gồm hàng ngàn hay hàng triệu vi mạch tích hợp.
ngày nay, công nghệ tích hợp đã phát triển, một CPU có thể tích hợp lên một hoặc vài
vi mạch tích hợp cỡ lớn, mỗi vi mạch tích hợp cỡ lớn chứa hàng ngàn hoặc hàng triệu
tranzito. Nhờ đó công suất tiêu thụ và giá thành của bộ vi xử lý đã giảm đáng kể.
Vi điều khiển là một máy tính được tích hợp trên một chíp, nó thường được sử
dụng để điều khiển các thiết bị điện tử. Vi điều khiển, thực chất, là một hệ thống bao
gồm một vi xử lý có hiệu suất đủ dùng và giá thành thấp (khác với các bộ vi xử lý đa
năng dùng trong máy tính) kết hợp với các khối ngoại vi như bộ nhớ, các mô đun
vào/ra, các mô đun biến đổi số sang tương tự và tương tự sang số,... Ở máy tính thì các
mô đun thường được xây dựng bởi các chíp và mạch ngoài.
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Vi xử lý - Vi điều khiển", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.
File đính kèm:
- giao_trinh_vi_xu_ly_vi_dieu_khien.pdf
Nội dung text: Giáo trình Vi xử lý - Vi điều khiển
- Giáo trình Vi xử lý – Vi điều khiển - Trường Đại học Sao Đỏ - Bộ Công thương 6.3.2. Mode 1 Truyền thông bất đồng bộ với frame truyền 10 bit, gồm 1 start, 8 bit dữ liệu và 1 stop. TxD thực hiện truyền, RxD nhận dữ liệu, tốc độ truyền cài đặt qua Timer 1 Hình 6-8. Truyền nhận nối tiếp – Mode 1 - Quá trình truyền: Hình 6-9. Giản đồ thời gian truyền nối tiếp – Mode 1 - Quá trình nhận Hình 6-10. Giản đồ thời gian nhận nối tiếp – Mode 1 6.3.3. Mode 2 Truyền thông bất đồng bộ với frame truyền 11 bit, gồm 1 start, 8 bit dữ liệu, 1 bit lập trình được(nêu truyền là TB8, nhận là RB8) và 1 bit stop. TxD thực hiện ©khactoan.kshq@gmail.com 78
- Giáo trình Vi xử lý – Vi điều khiển - Trường Đại học Sao Đỏ - Bộ Công thương Bảng 6-3. Một số giá trị thường dùng trong truyền thông nối tiếp 6.4. MỘT SỐ VÍ DỤ VÀ BÀI TẬP Ví dụ 1: Giả sử tần số XTAL = 11.0592MHz cho chương trình dưới đây, hãy phát biểu a) chương trình này làm gì? b) hãy tính toán tần số được Timer1 sử dụng để đặt tốc độ baud? và c) hãy tìm tốc độ baud truyền dữ liệu. ©khactoan.kshq@gmail.com 80
- Giáo trình Vi xử lý – Vi điều khiển - Trường Đại học Sao Đỏ - Bộ Công thương CHƯƠNG 7 XỬ LÝ NGẮT Một ngắt là một sự kiện bên trong hoặc bên ngoài làm ngắt bộ vi điều khiển để báo cho nó biết rằng thiết bị cần dịch vụ của nó. Trong chương này ta tìm hiểu khái niệm ngắt và lập trình ngắt. Một bộ vi điều khiển có thể phục vụ một vài thiết bị, có hai cách để thực hiện điều này đó là sử dụng các ngắt và thăm dò (polling). Trong phương pháp sử dụng các ngắt thì mỗi khi có một thiết bị bất kỳ cần đến dịch vụ của nó thì nó bao cho bộ vi điều khiển bằng cách gửi một tín hiệu ngắt. Khi nhận được tín hiệu ngắt thì bộ vi điều khiển ngắt tất cả những gì nó đang thực hiện để chuyển sang phục vụ thiết bị. Chương trình đi cùng với ngắt được gọi là trình dịch vụ ngắt ISR (Interrupt Service Routine) hay còn gọi là trình quản lý ngắt (Interrupt handler). Còn trong phương pháp thăm dò thì bộ vi điều khiển hiển thị liên tục tình trạng của một thiết bị đã cho và điều kiện thoả mãn thì nó phục vụ thiết bị. Sau đó nó chuyển sang hiển thị tình trạng của thiết bị kế tiếp cho đến khi tất cả đều được phục vụ. Mặc dù phương pháp thăm dò có thể hiển thị tình trạng của một vài thiết bị và phục vụ mỗi thiết bị khi các điều kiện nhất định được thoả mãn nhưng nó không tận dụng hết cộng dụng của bộ vi điều khiển. Điểm mạnh của phương pháp ngắt là bộ vi điều khiển có thể phục vụ được rất nhiều thiết bị (tất nhiên là không tại cùng một thời điểm). Mỗi thiết bị có thể nhận được sự chú ý của bộ vi điều khiển dựa trên mức ưu tiên được gán cho nó. Đối với phương pháp thăm dò thì không thể gán mức ưu tiên cho các thiết bị vì nó kiểm tra tất cả mọi thiết bị theo kiểu hơi vòng. Quan trọng hơn là trong phương pháp ngắt thì bộ vi điều khiển cũng còn có thể che hoặc làm lơ một yêu cầu dịch vụ của thiết bị. Điều này lại một lần nữa không thể thực hiện được trong phương pháp thăm dò. Lý do quan trọng nhất là phương pháp ngắt được ưu chuộng nhất là vì phương pháp thăm dò làm lãng phí thời gian của bộ vi điều khiển bằng cách hỏi dò từng thiết bị kể cả khi chúng không cần đến dịch vụ. Ví dụ trong các bộ định thời, ta đã dùng lệnh “JNB TF, đích” và đợi cho đến khi bộ định thời quay trở về 0. Trong ví dụ đó, trong khi chờ đợi thì ta có thể làm việc được gì khác có ích hơn, chẳng hạn như khi sử dụng phương pháp ngắt thì bộ vi điều khiển có thể đi làm các việc khác và khi cờ TF bật lên nó sẽ ngắt bộ vi điều khiển cho dù nó đang làm bất kỳ điều gì. 7.1. TRÌNH PHỤC VỤ NGẮT Đối với mỗi ngắt thì phải có một trình phục vụ ngắt ISR hay trình quản lý ngắt. Khi một ngắt được gọi thì bộ vi điều khiển phục vụ ngắt. Khi một ngắt được gọi thì bộ ©khactoan.kshq@gmail.com 82
- Giáo trình Vi xử lý – Vi điều khiển - Trường Đại học Sao Đỏ - Bộ Công thương Trong đó: Bảng 7-1. Các bít của thanh ghi diều khiển ngắt 7.2. CÁC BƯỚC KHI THỰC HIỆN MỘT NGẮT Khi kích hoạt một ngắt bộ vi điều khiển đi qua các bước sau: 1. Nó kết thúc lệnh đang thực hiện và lưu địa chỉ của lệnh kế tiếp (PC) vào ngăn xếp. 2. Nó cũng lưu tình trạng hiện tại của tất cả các ngắt vào bên trong (nghĩa là không lưu vào ngăn xếp). 3. Nó nhảy đến một vị trí cố định trong bộ nhớ được gọi là bảng véc tơ ngắt nới lưu giữ địa chỉ của một trình phục vụ ngắt. 4. Bộ vi điều khiển nhận địa chỉ ISR từ bảng véc tơ ngắt và nhảy tới đó. Nó bắt đầu thực hiện trình phục vụ ngắt cho đến lệnh cuối cùng của ISR là RETI (trở về từ ngắt). 5. Khi thực hiện lệnh RETI bộ vi điều khiển quay trở về nơi nó đã bị ngắt. Trước hết nó nhận địa chỉ của bộ đếm chương trình PC từ ngăn xếp bằng cách kéo hai byte trên đỉnh của ngăn xếp vào PC. Sau đó bắt đầu thực hiện các lệnh từ địa chỉ đó. Lưu ý ở bước 5 đến vai trò nhạy cảm của ngăn xếp, vì lý do này mà chúng ta phải cẩn thận khi thao tác các nội dung của ngăn xếp trong ISR. Đặc biệt trong ISR cũng như bất kỳ chương trình con CALL nào số lần đẩy vào ngăn xếp (Push) và số lần lấy ra từ nó (Pop) phải bằng nhau. ©khactoan.kshq@gmail.com 84
- Giáo trình Vi xử lý – Vi điều khiển - Trường Đại học Sao Đỏ - Bộ Công thương dụng bộ Timer0 để tạo ra sóng vuông, tần số của 8051 là XTAL = 11.0592MHz. Lời giải: Ta sử dụng bộ Timer0 ở chế độ 2 (tự động nạp lại) giá trị nạp cho TH0 là 100/1.085us = 92. Trong ví dụ 2 trình phục vụ ngắt ISR ngắn nên nó có thể đặt vừa vào không gian địa chỉ dành cho ngắt Timer0 trong bảng véc tơ ngắt. Tất nhiên không phải lúc nào cũng làm được như vậy. Xét ví dụ 3 dưới đây. Ví dụ 3: Hãy viết lại chương trình ở ví dụ 2 để tạo sóng vuông với mức cao kéo dài 1085us và mức thấp dài 15us với giả thiết tần số XTAL = 11.0592MHz. Hãy sử dụng bộ định thời Timer1. Lời giải: Vì 1085us là 1000x1085us nên ta cần sử dụng chế độ 1 của bộ định thời Timer1. ©khactoan.kshq@gmail.com 86
- Giáo trình Vi xử lý – Vi điều khiển - Trường Đại học Sao Đỏ - Bộ Công thương 7.4. THỨ TỰ ƯU TIÊN NGẮT Khi có hai hay nhiều ngắt cùng lúc xảy ra, hoặc một ngắt đang thực hiện thì mô ngắt khác yêu cầu thì ngắt nào có độ ưu tiên hơn sẽ được ưu tiên xử lý. Có 3 cấp độ ưu tiên ngắt trong 8051 - Ngắt reset là ngắt có mức ưu tiên cao nhất, khi reset xảy ra tất cả các ngắt khác và chương trình đều bị dừng và vi điều khiển trở về chế độ khởi dộng ban đầu. - Ngắt mức 1, chỉ có reset mới có thể cấm ngắt này - Ngắt mức 0, các ngắt mức 1 và reset có thể cấm ngắt này. Việc đăt chọn mức ưu tiên ngắt là 1 hoặc 0 thông qua thanh ghi IP. Việc xử lý ưu tiên ngắt của 8051 như sau: + Nếu 1 có độ ưu tiên cao hơn một ngắt đang được xử lý xuất hiện thì, ngắt có ưu tiên thấp ngay lập tức bị dừng để ngắt kia được thực hiện + Nếu 2 ngắt cùng yêu cầu vào 1 hời điểm thì ngắt có mức ưu tiên hơn sẽ được xử lý trước + Nếu 2 ngắt có cùng mức ưu tiên cùng yêu cầu vào 1 thời điểm thì thứ tự được chọn như sau: o INTR 0 o Timer 0 o INTR 1 o Timer 1 o UART Thanh ghi IP Hình 7-3. Thanh ghi IP Trong đó: Các bit từ 0 đến 5 đặt mức ngắt là 0 hoặc 1 cho các ngắt tương ứng như sau: PS: UART PT1: Timer 1 PX1: INTR 1 PT0: Timer 0 PX0: INTR 0 ©khactoan.kshq@gmail.com 88
- Giáo trình Vi xử lý – Vi điều khiển - Trường Đại học Sao Đỏ - Bộ Công thương Đầu vào đọc/ ghi cho phép người dùng ghi thông tin lên LCD khi R/W = 0 hoặc đọc thông tin từ nó khi R/W = 1. 4. Chân cho phép E (Enable). Chân cho phép E được sử dụng bởi LCD để chốt thông tin hiện hữu trên chân dữ liệu của nó. Khi dữ liệu được cấp đến chân dữ liệu thì một xung mức cao xuống thấp phải được áp đến chân này để LCD chốt dữ liệu trên các chân dữ liêu. Xung này phải rộng tối thiểu là 450ns. 5. Chân D0 - D7. Đây là 8 chân dữ liệu 8 bít, được dùng để gửi thông tin lên LCD hoặc đọc nội dung của các thanh ghi trong LCD. Để hiển thị các chữ cái và các con số, chúng ta gửi các mã ASCII của các chữ cái từ A đến Z, a đến f và các con số từ 0 - 9 đến các chân này khi bật RS = 1. Cũng có các mã lệnh mà có thể được gửi đến LCD để xoá màn hình hoặc đưa con trỏ về đầu dòng hoặc nhấp nháy con trỏ. Bảng 6.2 liệt kê các mã lênh. Chúng ta cũng sử dụng RS = 0 để kiểm tra bít cờ bận để xem LCD có sẵn sàng nhân thông tin. Cờ bận là D7 và có thể đượcđọc khi R/W = 1 và RS = 0 như sau: Nếu R/W = 1, RS = 0 khi D7 = 1 (cờ bận 1) thì LCD bận bởi các công việc bên trong và sẽ không nhận bất kỳ thông tin mới nào. Khi D7 = 0 thì LCD sẵn sàng nhận thông tin mới. Lưu ý chúng ta nên kiểm tra cờ bận trước khi ghi bất kỳ dữ liệu nào lên LCD. Chân Ký hiệu I/O Mô tả 1 VSS - Đất 2 VCC - Dương nguồn 5v 3 VEE - Cấp nguồn điều khiển phản 4 RS I RS = 0 chọn thanh ghi lệnh. RS = 1 chọn thanh dữ liệu 5 R/W I R/W = 1 đọc dữ liệu. R/W = 0 ghi 6 E I/O Cho phép 7 DB0 I/O Các bít dữ liệu 8 DB1 I/O Các bít dữ liệu 9 DB2 I/O Các bít dữ liệu ©khactoan.kshq@gmail.com 90
- Giáo trình Vi xử lý – Vi điều khiển - Trường Đại học Sao Đỏ - Bộ Công thương 8.1.3 Gửi các lệnh và dữ liệu đến LCD với một độ trễ. Để gửi một lệnh bất kỳ từ bảng 6.2 đến LCD ta phải đưa chân RS về 0. Đối với dữ liệu thì bật RS = 1 sau đó gửi một sườn xung cao xuống thấp đến chân E để cho phép chốt dữ liệu trong LCD. Điều này được chỉ ra trong đoạn mã chương trình dưới đây. ; gọi độ thời gian trễ trước khi gửi dữ liệu/ lệnh kế tiếp. ; chân P1.0 đến P1.7 được nối tới chân dữ dữ liệu D0 - D7 của LCD. ; Chân P2.0 được nối tới chân RS của LCD. ; Chân P2.1 được nối tới chân R/W của LCD. ; Chân P2.2 được nối đến chân E của LCD. ORG MOV A, # 38H ; Khởi tạo LCD hai dòng với ma trận 5 7 ACALL COMNWRT ; Gọi chương trình con lệnh ACALL DELAY ; Cho LCD một độ trễ MOV A, # 0EH ; Hiển thị màn hình và con trỏ ACALL COMNWRT ; Gọi chương trình con lênh ACALL DELAY ; Cấp một độ trễ cho LCD MOV AM # 01 ; Xoá LCD ACALL COMNWRT ; Gọi chương trình con lệnh ACALL DELAY ; Tạo độ trễ cho LCD MOV A, # 06H ; Dịch con trỏ sang phải ACALL COMNWRT ; Gọi chương trình con lệnh ACALL DELAY ; Tạo độ trễ cho LCD MOV AM # 48H ; Đưa con trỏ về dòng 1 cột 4 ACALL COMNWRT ; Gọi chương trình con lệnh ACALL DELAY ; Tạo độ trễ cho LCD MOV A, # “N” ; Hiển thị chữ N ACALL DATAWRT ; Gọi chương trình con hiển thị DISPLAY ACALL DELAY ; Tạo độ trễ cho LCD MOV AM # “0” ; Hiển thị chữ 0 ACALL DATAWRT ; Gọi DISPLAY AGAIN: SJMP AGAIN ; Chờ ở đây COMNWRT: ; Gửi lệnh đến LCD MOV P1, A ; Sao chép thanh ghi A đến cổng P1 CLR P2.0 ; Đặt RS = 0 để gửi lệnh ©khactoan.kshq@gmail.com 92
- Giáo trình Vi xử lý – Vi điều khiển - Trường Đại học Sao Đỏ - Bộ Công thương ; Kiểm tra cờ bận trước khi gửi dữ liệu, lệnh ra LCD ; Đặt P1 là cổng dữ liệu ; Đặt P2.0 nối tới cổng RS ; Đặt P2.1 nối tới chân R/W ; Đặt P2.2 nối tới chân E ORG MOV A, # 38H ; Khởi tạo LCD hai dòng với ma trận 5 7 ACALL COMMAND ; Xuất lệnh MOV A, # 0EH ; Dịch con trỏ sang phải ACALL COMMAND ; Xuất lệnh MOV A, # 01H ; Xoá lệnh LCD ACALL COMMAND ; Xuất lệnh MOV A, # 86H ; Dịch con trỏ sang phải ACALL COMMAND ; Đưa con trỏ về dòng 1 lệnh 6 MOV A, # “N” ; Hiển thị chữ N ACALL DATA DISPLAY MOV A, # “0” ; Hiển thị chữ 0 ACALL DATA DISPLAY HERE: SJMP HERE ; Chờ ở đây COMMAND:ACALL READY ; LCD đã sẵn sàng chưa? MOV P1, A ; Xuất mã lệnh CLR P2.0 ; Đặt RS = 0 cho xuất lệnh CLR P2.1 ; Đặt R/W = 0 để ghi dữ liệu tới LCD SETB P2.2 ; Đặt E = 1 đối với xung cao xuống thấp CLR P2.2 ; Đặt E = 0 chốt dữ liệu RET DATA-DISPLAY: ACALL READY ; LCD đã sẵn sàng chưa? MOV P1, A ; Xuất dữ liệu SETB P2.0 ; Đặt RS = 1 cho xuất dữ liệu CLR P2.1 ; Đặt R/W = 0 để ghi dữ liệu ra LCD SETB P2.2 ; Đặt E = 1 đối với xung cao xuống thấp CLR P2.2 ; Đặt E = 0 chốt dữ liệu RET DELAY: ©khactoan.kshq@gmail.com 94
- Giáo trình Vi xử lý – Vi điều khiển - Trường Đại học Sao Đỏ - Bộ Công thương nghĩa như là thời gian mà bộ ADC cần để chuyển một đầu vào tương tự thành một số nhị phân. Trong ADC 804 thời gian chuyển đổi thay đổi phụ thuộc vào tần số đồng hồ được cấp tới chân CLK và CLK IN nhưng không thể nhanh hơn 110s. Các chân của ADC 804 được mô tả như sau: 1. Chân CS - chọn chíp: Là một đầu vào tích cực mức thấp được sử dụng để kích hoạt chíp ADC 804. Để truy cập ADC 804 thì chân này phải ở mức thấp. 2. Chân RD (đọc): Đây là một tín hiệu đầu vào được tích cực mức thấp. Các bộ ADC chuyển đổi đầu vào tương tự thành số nhị phân tương đương với nó và giữ nó trong một thanh ghi trong. RD được sử dụng để nhận dữ liệu được chuyển đổi ở đầu ra của ADC 804. Khi CS = 0 nếu một xung cao - xuống - thấp được áp đến chân RD thì đầu ra số 8 bít được hiển diện ở các chân dữ liệu D0 - D7. Chân RD cũng được coi như cho phép đầu ra. 3. Chân ghi WR (thực ra tên chính xác là “Bắt đầu chuyển đổi”). Đây là chân đầu vào tích cực mức thấp được dùng để báo cho ADC 804 bắt đầu quá trình chuyển đổi. Nếu CS = 0 khi WR tạo ra xung cao - xuống - thấp thì bộ ADC 804 bắt đầu chuyển đổi giá trị đầu vào tương tự Vin về số nhị phân 8 bít. Lượng thời gian cần thiết để chuyển đổi thay đổi phụ thuộc vào tần số đưa đến chân CLK IN và CLK R. Khi việc chuyển đổi dữ liệu được hoàn tất thì chân INTR được ép xuống thấp bởi ADC 804. 4. Chân CLK IN và CLK R. Chân CLK IN là một chân đầu vào được nối tới một nguồn đồng hồ ngoài khi đồng hồ ngoài được sử dụng để tạo ra thời gian. Tuy nhiên 804 cũng có một máy tạo xung đồng hồ. Để sử dụng máy tạo xung đồng hồ trong (cũng còn được gọi là máy tạo đồng hồ riêng) của 804 thì các chân CLK IN và CLK R được nối tới một tụ điện và một điện trở như chỉ ra trên hình 6.4. Trong trường hợp này tần số đồng hồ được xác 1 định bằng biểu thức: f 1,1RC Giá trị tiêu biểu của các đại lượng trên là R = 10k và C= 150pF và tần số nhận được là f = 606kHz và thời gian chuyển đổi sẽ mất là 110s. ©khactoan.kshq@gmail.com 96
- Giáo trình Vi xử lý – Vi điều khiển - Trường Đại học Sao Đỏ - Bộ Công thương đến Vin cần phải khác ngoài dải 0 đến 5v. Chân Vref/2 đượcdùng để thực thi các điện áp đầu vào khác ngoài dải 0 - 5v. Ví dụ, nếu dải đầu vào tương tự cần phải là 0 đến 4v thì Vref/2 được nối với +2v. Vref/ 2(V) Vin(V) Step Size (mV) Hở * 0 đến 5 5/256 = 19.53 2.0 0 đến 4 4/255 = 15.62 1.5 0 đến 3 3/256 = 11.71 1.28 0 đến 2.56 2.56/256 = 10 1.0 0 đến 2 2/256 = 7.81 0.5 0 đến 1 1/256 = 3.90 Bảng 8-3. Điện áp Vref/2 liên hệ với dải Vin. Ghi chú: - VCC = 5V - Khi Vref/2 hở thì đo được ở đó khoảng 2,5V - Kích thước bước (độ phân dải) là sự thay đổi nhỏ nhất mà ADC có thể phân biệt được. 9. Các chân dữ liệu D0 - D7. Các chân dữ liệu D0 - D7 (D7 là bít cao nhất MSB và D0 là bít thấp nhất LSB) là các chân đầu ra dữ liệu số. Đây là những chân được đệm ba trạng thái và dữ liệu được chuyển đổi chỉ được truy cập khi chân CS = 0 và chân RD bị đưa xuống thấp. Để tính điện áp đầu ra ta có thể sử dụng công thức sau: V in D Với Dout là đầu ra dữ liệu số (dạng thập out kich thuoc buoc phân). Vin là điện áp đầu vào tương tự và độ phân dải là sự thay đổi nhỏ nhất được tính như là (2 Vref/2) chia cho 256 đối với ADC 8 bít. 10. Chân đất tương tự và chân đất số. Đây là những chân đầu vào cấp đất chung cho cả tín hiệu số và tương tự. Đất tương tự được nối tới đất của chân Vin tương tự, còn đất số được nối tới đất của chân Vcc. Lý do mà ta phải có hai đất là để cách ly tín hiệu tương tự Vin từ các điện áp ký sinh tạo ra việc chuyển mạch số được chính xác. Trong phần trình bày của chúng ta thì các chân này được nối chung với một đất. Tuy nhiên, trong thực tế thu đo dữ liệu các chân đất này được nối tách biệt. ©khactoan.kshq@gmail.com 98
- Giáo trình Vi xử lý – Vi điều khiển - Trường Đại học Sao Đỏ - Bộ Công thương 8051 ADC0804 5V V P2.5 RD CC CLK R P2.6 WR CLK IN 10k 150pF P1.0 D0 Vin(+) 10k Vin(-) PO A GND V /2 ref GND P1.7 D7 P2.7 INTR CS Hình 8-4. Nối ghép ADC 0804 Ví dụ: Hãy thử nối ghép ADC 804 với 8051 theo sơ đồ 6.7. Viết một chương trình để hiển thị chân INTR và lấy đầu vào tương tự vào thanh ghi A. Sau đó gọi một chương trình chuyển đổi mã Hex ra ASCII và một chương trình hiển thị dữ liệu. Thực hiện điều này liên tục. Lời giải: ; Đặt P2.6 = WR (bắt đầu chuyển đổi cần 1 xung thấp lên cao) ; Đặt chân P2.7 = 0 khi kết thúc chuyển đổi ; Đặt P2.5 = RD (xung cao - xuống - thấp sẽ đọc dữ liệu từ ADC) ; P1.0 – P1.7 của ADC 804 MOV P1, # 0FFH ; Chọn P1 là cổng đầu vào BACK: CLR P2.6 ; Đặt WR = 0 SETB P2.6 ; Đặt WR = 1 để bắt đầu chuyển đổi HERE: JB P2.7, HERE ; Chờ cho P2.7 to để kết thúc chuyển đổi CLR P2.5 ; Kết thúc chuyển đổi, cho phép đọc RD MOV A, P1 ; Đọc dữ liệu vào thanh ghi A ACALL CONVERSION ; Chuyển đổi số Hex ra mã ASCII ACALL DATA-DISPLAY ; Hiển thị dữ liệu SETB P2.5 ; Đưa RD = 1 để cho lần đọc sau. SJMP BACK ©khactoan.kshq@gmail.com 100
- Giáo trình Vi xử lý – Vi điều khiển - Trường Đại học Sao Đỏ - Bộ Công thương PHỤ LỤC Phụ lục A: Các ký hiệu sử dụng mô tả lệnh Ký hiệu Mô A: Thanh ghi chứa (Accumulator). B: Thanh ghi B. Thanh ghi R0 hoặc R1 của bất kỳ băng thanh ghi nào trong 4 băng Ri: thanh ghi trong RAM. Rn: bất kỳ thanh ghi nào của bất kỳ băng thanh ghi nào trong 4 Rn: Ký hiệu băng thanh ghi trong RAM. Mổ tả thanh ghi con trỏ dữ liệu (có độ rộng 16bit được kết hợp từ 2 thanh Dptr: ghi 8 bit là DPH và DPL). Direct: là một biến 8 bit(hay chính là ô nhớ) bất kỳ trong RAM (trừ Direct: 32 thanh ghi Rn ở đầu RAM). #data: một hằng số 8 bit bất kỳ. #data16: một hằng số 16 bit bất kỳ : địa chỉ bất kỳ nằm trong khoảng [PC-128 ; PC+127] địa chỉ bất kỳ nằm trong khoảng 0 – 2Kbyte tính từ địa chỉ của lệnh : tiếp theo. : địa chỉ bất kỳ trong không gian 64K (áp dụng cho cả không gian nhớ chương trình và không gian nhớ dữ liệu). bit bất kỳ có thể đánh địa chỉ được (không dùng cho các bit không : đánh được địa chỉ). ©khactoan.kshq@gmail.com 102
- Giáo trình Vi xử lý – Vi điều khiển - Trường Đại học Sao Đỏ - Bộ Công thương Lệnh logic ©khactoan.kshq@gmail.com 104
- Giáo trình Vi xử lý – Vi điều khiển - Trường Đại học Sao Đỏ - Bộ Công thương Lệnh dich chuyển dữ liệu Cú pháp Số Số STT Mô tả chu Mã lệnh Toán hạng byte kỳ 1 MOV A,Rn 1 1 2 MOV A,direct 2 1 3 MOV A,@Ri 1 1 4 MOV A,#data 2 1 5 MOV Rn,A 1 1 6 MOV Rn,direct Copy giá trị của toán hạng bên 2 2 7 MOV Rn,#data 2 1 8 MOV Direct,A phải cho vào toán hạng bên trái 2 1 9 MOV Direct,Rn (các toán hạng đều là 8bit) 2 2 10 MOV Direct,direct 3 2 11 MOV Direct,@Ri 2 2 12 MOV Direct,#data 3 2 13 MOV @Ri,A 1 1 14 MOV @Ri,direct 2 1 15 MOV @Ri,#data 2 1 Đưa giá trị 16bit vào thanh 16 MOV Dptr,#data16 3 2 ghi DPTR Đọc giá trị bộ nhớ chương trình 17 MOVC A,@A+dptr tại địa chỉ = 1 2 A + DPTR, cất kết quả Đọc giá trị bộ nhớ chương trình 18 MOVC A,@A+PC 1 2 tại địa chỉ = A + PC, cất kết quả vào A Đọc vào A giá trị của bộ nhớ 19 MOVX A,@Ri 1 2 ngoài tại địa chỉ = Ri Đọc vào A giá trị của bộ nhớ 20 MOVX A,@dptr 1 2 Cú pháp ngoài tại địa chỉ = DPTR Số Số STT Ghi giá trị củaMô A v tàoả bộ nhớ chu 21 MOVXMã lệnh @dptr,AToán hạng 1byte 2 ngoài tại địa chỉ = DPTR kỳ Ghi giá trị của A vào bộ nhớ 22 MOVX @dptr,A ngoài tại địa chỉ = 2 2 DPTR Cất nội dung của biến trong 23 PUSH Direct RAM vào đỉnh ngăn 2 2 xếp Lấy byte ở đỉnh ngăn xếp 24 POP Direct 2 2 ©khactoan.kshq@gmail.com cho106 vào biến trong RAM 25 XCH A,Rn 1 1 Hoán đổi giá trị của A và giá trị 26 XCH A,direct 2 1 còn lại
- Giáo trình Vi xử lý – Vi điều khiển - Trường Đại học Sao Đỏ - Bộ Công thương Phụ lục B: Chi tiết các thanh ghi chức năng trong 8051 1. Thanh ghi IE: IE: Interrupt Enable, cho phép ngắt: thanh ghi này cho phép/cấm các ngắt hoạt động 2. Thanh ghi TCON: TCON Register - TCON (S:88h) TCON: Timer/Counter Control Register: thanh ghi điều khiển bộ đếm/bộ định thời 3. Thanh ghi TMOD: TMOD Register - TMOD (S: 89h) TMOD: Timer/Counter 0 and 1 Modes: thanh ghi đặt chế độ cho Timer/Counter 0 và 1 4. Thanh ghi T2CON: T2CON Register - T2CON (S:C8h) Thanh ghi điều khiển Timer/Counter 2 5. Thanh ghi T2MOD: T2MOD Register - T2MOD (S:C9h) Thanh ghi điều khiển Timer/Counter 2 6. Thanh ghi SCON SCON: Serial Controller: thanh ghi cấu hình truyền thông nối tiếp. 7. Thanh ghi PCON: PCON Register PCON - Power Control Register (87h): Thanh ghi điều khiển nguồn ©khactoan.kshq@gmail.com 108