1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng vi xử lý phần 2 đại học công nghiệp TP HCM

99 418 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 99
Dung lượng 1,26 MB

Nội dung

... trình Vi xử lí trường Đại học công nghiệp Tp HCM D.W Smith, PIC in practice: a project-based approach, Elsevier, 2nd edition, 20 06 Trương Trác, Chip đơn 16C84 ứng dụng chúng Hồ Trung Mỹ, Vi xử lí,... trường Đại học công nghiệp Tp HCM D.W Smith, PIC in practice: a project-based approach, Elsevier, 2nd edition, 20 06 Trương Trác, Chip đơn 16C84 ứng dụng chúng Hồ Trung Mỹ, Vi xử lí, NXB ĐHQG Tp HCM, ... trường Đại học công nghiệp Tp HCM D.W Smith, PIC in practice: a project-based approach, Elsevier, 2nd edition, 20 06 Trương Trác, Chip đơn 16C84 ứng dụng chúng Hồ Trung Mỹ, Vi xử lí, NXB ĐHQG Tp HCM,

Trang 1

Bài giảng số 5: Truyền dữ liệu đồng bộ và không đồng bộ (USART)( Số tiết: 3)

III.1 Mục tiêu:

- Truyền nhận dữ liệu đồng bộ, không đồng bộ: Giới thiệu USART, Thanh ghi TXSTA, RCSTA, bộ tạo tốc độ baud USART, chế độ bất đồng bộ, chế độ chủ đồng bộ, chế độ tớ đồng bộ

- Bộ thu và phát radio

-truyền thong nối tiếp PIC tới PIC, mạch giao tiếp RS232C PIC tới PC

III.2 Đồ dung và phương tiện dạy học:

-Phấn trắng, bảng, khăn, bút long, micro có dây(hay không dây), máy tính, và đèn chiếu (hay máy chiếu)

III.3 Giáo trình và tài liệu tham khảo:

Giáo trình Vi xử lí của trường Đại học công nghiệp Tp HCM

D.W Smith, PIC in practice: a project-based approach, Elsevier, 2nd edition, 2006 Trương Trác, Chip đơn 16C84 và ứng dụng của chúng

Hồ Trung Mỹ, Vi xử lí, NXB ĐHQG Tp HCM, 2003

Tài liệu về vi điều khiển PIC của bọ môn Điện tử công nghiệp

Datasheet c ủa PIC 16F84 v à 16F877A

III.4.Nội dung bài giảng:

Nội dung chi tiết : xem bài giảng chi tiết

Phương pháp giảng dạy: thuyết trình, nêu vấn đề và đàm thoại trao đổi với sinh

viên

Chương 5: Truyền dữ liệu đồng bộ và không đồng bộ

1 Giới thiệu USART:

USART viết tắt cho Universal Aynchronous Asynchronous Receiver Transmitter (Bộ thu phát bất đồng bộ đồng bộ đa năng) và cho phép vi điều khiển PIC giao tiếp với một tầm rộng các thiết bị khác từ chip nhớ riêng biệt và LCD hiển thị tinh thể lỏng, tới máy tính! Điều này bao gồm gửi hay nhận gói dữ liệu 8 bit hay 9 bit (nghĩa là 1 byte hay 1 byte cộng them bit chẵn lẻ) Bit chẵn lẻ là bit phụ gửi kèm với dữ liệu mà giúp kiểm tra lỗi Nếu có 1 số lẻ số 1 trong byte dữ liệu (thí dụ b’00110100’), bit parity sẽ là

1 và nếu có một số chẵn số 1 (thí dụ b’00110011’) thì bit parity sẽ là 0 Trong bài giảng này, nếu có lỗi (ví dụ lật bit) diễn ra đâu đó trong giữa lúc gửi 1 byte và nhận

nó bit parity sẽ không còn khớp loại dữ liệu Bên nhận sẽ biết rằng có gì đó sai sót

và nó yêu cầu gửi lại byte Nếu có 2 bit lỗi xảy ra trong một việc truyền, bit parity sẽ

Trang 2

xuất hiện đúng, tuy nhiên có thể hai lỗi diễn ra là nhỏ hơn, và vì vậy điều này thường

bị bỏ qua

Chế độ USART có 2 chế độ (mode) chính: hoạt động đồng bộ và bất đồng bộ Trong hoạt động bất đồng bộ, chân phát (TX-transmitter) từ 1 thiết bị được nối với chân thu (RX-Receiver) của thiết bị kia và dữ liệu được hoán đổi (được gọi là song công-full duplex) Trong chế độ đồng bộ, xung clock (CK) và đường dữ liệu (DT) là chia xẻ giữa một số thiết bị (một là chủ (master) và một hay nhiều tớ (Slaves)) Chủ chịu trác nhiệm tạo ra xung clock Trong cả hai trường hợp, tốc độ tại đó dữ liệu được gửi bởi bộ phát (và tại đó nó được mong đợi bởi bộ thu) được biết đến như là tốc độ baud

Có hai thanh ghi để kiểm soát việc nhận và phát dữ liệu: RCSTA và TXSTA

Dữ liệu mà được đọc thành công được lưu vào thanh ghi RCREG, và dữ liệu mà được gửi đi nên được đặt trong thanh ghi TXREG Tốc độ baud được đặt sử dụng thanh ghi SPBRG (có bảng them vào trong datasheet minh họa làm thế nào chọn tốc độ baud cho trước tần số dao động)

Trong chế độ bất đồng bộ, USART lấy kí tự 8 bit hay 9 bit để gửi, và them 1 bit bắt đầu (start bit) (1 zero,0) ở đầu, và bit dừng (1 bit) vào cuối để tạo nên chuỗi 10 hay 11 bit Điều này được chuyển vào thanh ghi dịch mà quay bit vào chân phát (TX) như hình 5.1

Môđun nhận sẽ lien tục kiểm tra trạng thái của chân thu RX, mà sẽ bình thường là mức cao Nếu nó dò thấy chân RX xuống mức thấp (bit start), nó sẽ làm them 3 mẫu trong giữa bit (cho phép lên và xuống chậm các lần) và lấy giá trị chính của ba Nếu giá trị chính là 0, nó khẳng định đây thực sự là bit bắt đầu và tiến hành lấy mẫu các bit tuần tự với 3 mẫu ở giữa mỗi bit Thời gian của mẫu này được chỉ ra bởi tốc độ baud Khi nó đạt đến cái là bit dừng, nó phải đọc một (1), ngược lại nó sẽ khẳng định kí tự thu được đóng khung tồi và đăng kí một lỗi

Nhớ rằng với thiết lập phù hợp trong TXSTA và RCSTA, tất cả điều này được thực hiện cho bạn bởi môđun USART

1 0 0 1 0 1 1 0 1 0

Trang 3

Hình 5.1

Bạn có thể dung chế độ bất đồng bộ để giao tiếp với port nối tiếp RS232 trên máy tính PC Cách đơn giản để gửi byte thong qua port nối tiếp của PC là thong qua một chương trình đi kèm Microsoft Windows được gọi là Hyper Terminal (Start MenuÆProgramsÆAccessoriesÆCommunications) Bạn có thể tạo ra một kết nối với cổng nối tiếp (ví dụ COM 1), chọn tốc độ baud, số bit, thiết lập parity Khi Hyper Terminal kết nối với port nối tiếp, bất kì kí tự mà bạn gõ sẽ được gửi (như là mã ASCII) thong qua port nối tiếp Kí tự mà được nhận được hiển thị lên màn hình

Cả hai chế độ đồng bộ và bất đồng bộ hỗ trợ đặc tính được biết như là dò tìm địa chỉ

mà cho phép một số thiết bị được kết nối Khi gửi dữ liệu, một byte địa chỉ phải được gửi đi đầu tiên để nhận diện nơi nhận dự định

2.Thanh ghi TXSTA: thanh ghi điều khiển và trạng thái phát, địa chỉ 98H

R/W-0 R/W-0 R/W-0 R/W-0 U-0 R/W-0 R-1 R/W-0

Bit 7 bit 0

Bit 7 CSRC: bit chọn nguồn xung clock

chế độ bất đồng bộ: không quan tâm

chế độ đồng bộ:

1= chế độ chủ (xung clock được tạo ra bên trong từ BRG)

0=chế độ tớ (xung clock từ nguồn bên ngoài)

Bit 6 TX9: bit cho phép truyền 9 bit

Chú ý: SREN/CREN đè lên TXEN trong chế độ đồng bộ

Bit 4 SYNC : bit chọn chế độ USART

1= chế độ đồng bộ

0= chế độ bất đồng bộ

Bit 3 : không dung, đọc là 0

Bit 2 BRGH: bit chọn tốc độ baud cao

chế độ bất đồng bộ:

1=tốc độ cao

0=tốc độ thấp

chế độ đồng bộ:

không được dung trong chế độ này

Bit 1 TRMT: bit trạng thái thanh ghi dịch phát

1=TSR (thanh ghi dịch phát) trống

0=TSR đầy

Bit 0 TX9D: bit thứ 9 của dữ liệu phát, có thể là bit chẵn lẻ (parity bit)

Chú thích:

R=bit có thể đọc W=bit có thể ghi U=bit không dung , đọc là 0

-n=giá trị tại POR ‘1’ =bit được bật ‘0’=bit bị xóa x= bit chưa biết

CSRC TX9 TXEN SYNC - BRGH TRMT TX9D

Trang 4

3.Thanh ghi RCSTA: thanh ghi điều khiển và trạng thái nhận , địa chỉ 18H

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R-0 R-0 R-x

Bit 7 bit 0

Bit 7 SPEN: bit cho phép port nối tiếp

1= cho [phép port nối tiếp (cấu hình RC7/RX/DT và RC6/TX/CK như là các chân cổng nối tiếp)

0=port nối tiếp bị cấm

Bit 6 RX9: bit cho phép nhận 9 bit

không quan tâm

Bit 4 CREN: bit cho phép nhận lien tục

Bit 2 FERR: bit lỗi khung

1= lỗi khung (có thể được cập nhật bằng cách đọc thanh ghi RCREG và nhận byte hợp lệ kế tiếp)

0= không có lỗi khung

Bit 1 OERR: bit lỗi overrun (chạy quá)

1= lỗi overrun (có thể được xóa bằng cách xóa bit CREN)

0=không có lỗi overrun

Bit 0 RX9D: bit thứ 9 của nhận dữ liệu (có thể là bit parity nhưng phải được tính bởi phần dẻo(firmware) của người sử dụng)

4.Bộ tạo tốc độ baud USART:

Bộ tạo tốc độ baud hỗ trợ cả chế độ bất đồng bộ và đồng bộ của USART Nó là bộ tạo tốc độ baud 8 bit Thanh ghi SPBRG (địa chỉ 99H) điều khiển chu kì của bộ định thì 8 SPEN RX9 SREN CREN ADDEN FERR OERR RX9D

Trang 5

bit chạy tự do Trong chế độ bất đồng bộ bit BRGH (TXSTA<2>) cũng kiểm soát tốc

độ baud Trong chế độ đồng bộ, bit BRGH bị bỏ qua

Sơ đồ khối bộ phát bất đồng bộ được minh họa ở hình:

Hình 5.2: Sơ đồ khối phát bất đồng bộ USART

Trong mode này, USART sử dung dạng NRZ (Non-Return –to-Zero)chuẩn (một bit bắt đầu(start), 8 hay 9 bit dữ liệu, và một bit dừng(stop)) Dạng dữ liệu thong dụng nhất là 8 bit Một bộ tạo tốc độ baud 8 bit có sẵn trên chip có thể được dung để tạo tần

số tốc độ baud chuẩn từ tần số thạch anh của hệ thống USART phát và nhận bit LSB trước tiên Bộ phát và thu là độc lập chức năng nhưng sử dụng chung dạng dữ liệu và tốc độ baud Bộ tạo tốc độ baud tạo ra xung clock , hoặc là x16 hay x64 của tốc độ dịch bit phụ thuộc vào bit BRGH (TXSTA<2>) Chẵn lẻ (parity) không được hỗ trợ bởi phần cứng nhưng có thể hiện thực bằng phần mềm (và được lưu như là bit dữ liệu thứ 9) Mode bất đồng bộ bị dừng trong khi Sleep

Mode bất đồng bộ được chọn bằng cách xóa bit SYNC (TXSTA<4>)

Môđun bất đồng bộ USART gồm có các phần tử quan trọng sau đây:

.Bộ tạo tốc độ baud

.Mạch lấy mẫu

.Bộ phát bất đồng bộ

Bộ thu bất đồng bộ

Khi thiết lập sự phát bất đồng bộ, bạn theo các bước sau:

Khởi động thanh ghi SPBRG cho tốc độ baud phù hợp Nếu tốc độ baud tốc độ cao là mong muốn thì ta bật (lên 1) bit BRGH

Cho phép port nối tiếp bất đồng bộ bằng cách xóa bit SYNC và bật bit SPEN

Nếu ngắt là mong muốn, thì ta bật bit cho phép TXIE

Nếu sự truyền 9 bit là mong muốn , thì ta bật bit truyền TX9

Cho phép truyền bằng cách bật bit TXEN mà sẽ bật bit TXIF

Nếu sự truyền 9 bit được chọn, bit thứ 9 sẽ được nạp bào bit TX9D

Nạp dữ liệu vào thanh ghi TXREG (bắt đầu truyền)

Trang 6

.Nếu dùng ngắt, đảm bảo rằng GIE và PEIE (bit 7 và 6) của thanh ghi INTCON được bật

Các thanh ghi được dung trong phát bất đồng bộ USART:

Hình: Thanh ghi 16F87x được dung trong phát bất đồng bộ

b Bộ thu bất đồng bộ USART:

Sơ đồ khối bộ thu được minh họa ở hình:

Hình 5.3: Sơ đồ khối thu USART

Dữ liệu được nhận trên chân RC7/RX/DT và lái khối phục hồi dữ liệu Khối khôi phục

dữ liệu thực chất là bộ dịch tốc độ cao, hoạt động ở 16x tốc độ baud, trong khi bộ dịch nối tiếp thu chính hoạt động ở tốc độ bit hay Fosc

Khi thiết lập sự thu bất đồng bộ , bạn theo các bước sau:

Khởi động thanh ghi SPBRG cho tốc độ baud phù hợp Nếu tốc độ baud tốc độ cao được chọn, thì ta bật bit BRGH

Cho phép port nối tiếp bất đồng bộ bằng cách xóa bit SYNC và bật bit SPEN

.Nếu ngắt là mong muốn, thì ta bật bit cho phép RCIE

Nếu sự nhận 9 bit là mong muốn, thì ta bật bit RX9

Trang 7

Cho phép nhận bằng cách bật bit CREN

.Bit cờ RCIF được bật (=1) khi sự nhận hoàn thành và ngắt sẽ tạo ra nếu bit cho phép RCIE được bật

Đọc thanh ghi RCSTA để nhận bit thứ 9 (nếu cho phép) và xác định xem có lỗi nào xảy ra trong quá trình nhận (thu)

Đọc dữ liệu nhận 8 bit bằng cách đọc thanh ghi CRREG

.Nếu có lỗi xảy ra, xoá lỗi bằng cách xóa bit cho phép CREN

Nếu dung ngắt, đảm bảo rằng GIE và PEIE (bit 7 và 6) của thanh ghi INTCON được bật

c Thiết lập mode 9 bit với dò tìm địa chỉ

Khi thiết lập một sự thu bất đồng bộ với dò tìm địa chỉ cho phép:

Khởi động thanh ghi SPBRG cho tốc độ baud phù hợp Nếu tốc độ baud tốc độ cao được chọn, thì ta bật bit BRGH

Cho phép port nối tiếp bất đồng bộ bằng cách xóa bit SYNC và bật bit SPEN

.Nếu ngắt là mong muốn, thì ta bật bit cho phép RCIE

Bật bit RX9 để cho phép sự nhận 9 bit

.Bật ADDEN để cho phép dò tìm địa chỉ

Cho phép nhận bằng cách bật bit CREN

.Bit cờ RCIF được bật (=1) khi sự nhận hoàn thành và ngắt sẽ tạo ra nếu bit cho phép RCIE được bật

Đọc thanh ghi RCSTA để nhận bit thứ 9 (nếu cho phép) và xác định xem có lỗi nào xảy ra trong quá trình nhận (thu)

Đọc dữ liệu nhận 8 bit bằng cách đọc thanh ghi CRREG để xác định xem nếu thiết

bị đang được định địa chỉ

.Nếu có lỗi xảy ra, xoá lỗi bằng cách xóa bit cho phép CREN

Nếu thiết bị được định địa chì, xóa bit ADDEN để cho phép byte dữ liệu và byte địa chỉ được đọcvào bộ đệm thu và ngắt CPU

Các thanh ghi được dung trong thu bất đồng bộ USART:

Hình: Thanh ghi được dung trong thu bất đồng bộ

6 Chế độ chủ đồng bộ

Trong mode chủ đồng bộ, dữ liệu được truyền theo cách bán song công duplex)(nghĩa là phát và thu không diễn ra cùng một thời điểm).Khi phát dữ liệu, sự nhận (thu) bị cấm và ngược lại Mode đồng bộ đưa vào bằng cách bật bit, SYNC(TXSTA<4>) Hơn nữa, bit cho phép SPEN (RCSTA<7>) được bật (=1) để cấu

Trang 8

(half-hình chân RC6/TX/CK và RC7/RX/DT tới đường CK (clock) và DT (dữ liệu-data) tương ứng Mode chủ chỉ ra rằng bộ xử lí phát clock chủ trên đường CK Mode chủ được đưa vào bằng cách bật bit CSRC (TXSTA<7>)

a.Phát chủ đồng bộ USART

Sơ đồ khối bộ phát USART được minh họa ở hình:

Hình 5.4: Sơ đồ khối thu USART

Trang 9

Hình 5.4: Hệ thống truyền dữ liệu radio

Phần này mô tả chi tiết việ sử dụng mođun thu và phát radio 418 Mhz (RT1-418 và RR3-418) Chúng không cần bản quyền để hoạt động và có nhiều thay đổi cho phép

Bộ phát chỉ có 3 kết nối, 2 nguồn cung cấp và 1 ngõ vào dữ liệu, anten phát được tích hợp vào đơn vị Bộ thu có 4 kết nối, 2 nguồn cung cấp, 1 anten vào và 1 ngõ ra Anten thu chỉ cần là mẫu dây dài 25 cm

Sơ đồ mạch cơ bản của hệ thống radio được minh họa ở hình 5.4

Vi điều khiển tạo ra dữ liệu và sau đó chuyển xung dữ liệu tới bộ phát Bộ thu nhận xung dữ liệu và vi điều khiển giải mã thong tin và xử lí nó

Hệ thống radio-vi điều khiển có thể đo nhiệt độ bên ngoài và gửi nhiệt độ này để hiển thị trên đơn vị bên trong

Phần sau được trích dẫn từ sách Microcontroller programming the microchip PIC của tác giả Julio Sanchez, Maria P Canton

Mạch truyền thong nối tiếp PIC tới PIC:

Thực tế, hệ thống được yêu cầu cho một PIC đọc dữ liệu và gửi nối tiếp kết quả tới một PIC khác mà xuất dữ liệu có thể xem như hai mạch độc lập Một mạch được dung để đọc trạng thái 8 công tắc DIP và gửi dữ liệu nối tiếp tới một mạch PIC khác mà hiển thị kết quả Hình sau minh họa 2 mạch dựa trên PIC

Trang 10

Hình 5.5: Mạch truyền thong nối tiếp PIC tới PIC

Thanh ghi dịch : 74HC165 là thanh ghi dịch song song ra nối tiếp và 74HC164 là thanh ghi dịch nối tiếp ra song song

IC thu phát RS-232C: dung IC Max 232 và phiên bản nâng cấp Max202 IC Max 233

và Max 203 không yêu cầu tụ ngoài

Mạch giao tiếp RS-232C PIC tới PC:

Để minh họa truyền nối tiếp với giao thức RS232C, chúng ta phát triển mạch gồm bàn phím 4x4 và LCD hiển thị 20 ký tự trên 2 dòng Ký tự được ấn trên bàn phím

và được chuyển thành mã ASCII cho tập hợp số hexa, nghĩa là các số 0-9 và chữ A đến

F Khi một phím được nhấn, mã ASCII tương ứng được hiển thị trên LCD và truyền thong qua port nối tiếp tới ứng dụng PC Ký tự được nhận thong qua đường truyền nối tiếp là được hiển thị trên LCD

Hình 5.6: Mạch truyền thong USART với PIC 16F877

Chương trình khởi tạo PIC 16F877:

Trang 11

Đoạn chương trình sau minh họa sự khởi tạo môđun UART trong PIC 16F877 cho tốc

độ truyền 2400 baud, 8 bit dữ liệu, không có bit chẵn lẻ và 1 bit dừng Không có ngắt được dung trong thí dụ này

Tốc độ baud được tính như sau:

ABR=Fosc/(S*(x+1))

Trong đó x là giá trị trong thanh ghi SPBRG, S là 64 nếu bit BRGH trong thanh ghi điều khiển TXSTA bị xóa, và S=16 nếu bit BRGH=1 Để thiết lập tốc độ 9600 baud sử dụng thạch anh 4 Mhz ở tốc độ baud tốc độ cao (BRGH=1), công thức là:

9615416

Movlw b’11000000’; bit cho Tx và RX

Iorwf TRISC,f; OR vào thanh ghi TRISC

Movlw spbrgVal; giá trị trong spbrgVal=25

Movwf SPBRG ; đặt vào bộ tạo tốc độ baud

Movlw 0x20; giá trị thiết lập b’00100000’ cho TXSTA

Movwf TXSTA;cho phép truyền và tốc độ baud cao

BCF STATUS, RP0; bank 0

Movlw 0x90; giá trị thiết lập b’10010000’ cho RXSTA

Movwf RCSTA; cho phép port nối tiếp và nhận lien tục

Clrf errorflags; xóa thanh ghi cờ lỗi cục bộ

Return

;Thủ tục phát và nhận USART

Chương trình phát khá đơn giản Chương trình kiểm tra bit TXIF trong thanh ghi PIR1 Nếu bit này là 1, dữ liệu được phát bằng cách lưu byte dữ liệu trong thanh ghi TXREG Thủ tục sau thực hiện tác vụ được yêu cầu

;Phát dữ liệu

;Kiểm tra thanh ghi phát trống và phát dữ liệu trong W

SerialSend BCF STATUS, RP1

BCF STATUS,RP0; bank 0

Wait BTFSS PIR1,TXIF; kiểm tra xem bộ phát có bận không

Goto Wait ; đợi cho tới khi bộ phát không bận

Movwf TXREG; và phát dữ liệu

Return

Thu dữ liệu thì phức tạp hơn phát dữ liệu Một lí do là mã phải được kiểm tra và quản lí nhiều lỗi mà có thể xảy ra trong quá trình nhận (thu) Đoạn chương trình sau minh họa biến cục bộ và xử lí được yêu cầu cho nhận dữ liệu đơn giản

;biến cục bộ trong bộ nhớ RAM (dữ liệu) của PIC

cblock 0x20; bắt đầu khối

;biến truyền thong

Trang 12

newData ; không là 0 nếu dữ liệu mới được nhận

ascVal

errorFlags

endc

;thủ tục nhận dữ liệu USART

;thủ tục kiểm tra đường truyền cho nhận dữ liệu và trả giá trị trong W Lỗi khung và

;Overrun được dò tìm và nhớ trong biến errorFlags

SerialRcv CLRF newData;xóa thanh ghi nhận dữ liệu mới

BCF STATUS,RP1

BCF STATUS,RP0; bank 0

BTFSS PIR1,RCIF;kiểm tra cho dữ liệu nhận Bit RCIF=0 nếu bộ đệm thu

; trống Nếu vậy, dữ liệu không được nhận

Return; và thoát nếu không có dữ liệu

;tại thời điểm này, dữ liệu đã được nhận, đầu tiên phải loại bỏ lỗi: lỗi khung và Overun

BTFSC RCSTA,OERR;kiểm tra lỗi Overrun

Goro OverErr; bộ kiểm soát lỗi

BTFSC RCSTA,FERR; kiểm tra lỗi khung

Goto FrameErr; bộ kiểm soát lỗi

;tại thời điểm này không còn lỗi, nhận dữ liệu trong thanh ghi RCREG

movf RCREG,W; nhận dữ liệu

BSF newData,7; bật bit 7 để chỉ ra dữ liệu mới

Clrf erroeFlags; xóa cờ lỗi

Return

;bộ kiểm soát lỗi

;lỗi Overrun được tìm thấy

OverErr BSF errorFlags,0; bit 0 là lỗi Overrun

errExit BCF RCSTA,CREN; xóa bit nhận lien tục

BSF RCSTA,CREN;bật bit (1) tới sự nhận cho phép lại

Return

;Lỗi khung Bit lỗi khung FERR được bật

FrameErr BSF errorFlags,1; bit 1 là lỗi khung

Movf RCREG,W; đọc và bỏ dữ liệu xấu

Goto errExit

IV.Tổng kết bài:

-Tóm tắt các ý chính trong bài

-Chuẩn bị bài mới

V Câu hỏi và bài tập về nhà:

Chương 5: Truyền nối tiếp bất đồng bộ và đồng bộ

1.USART là gì?

2.Giao tiếp RS-232

3 Thanh ghi điều khiển nhận và phát dữ liệu: RCSTA và TXSTA

4 Thanh ghi RCREG (lưu dữ liệu được đọc vào) và TXREG (lưu dữ liệu được phát đi),

và SPBRG (thiết lập tốc độ baud)

5 Thu và phát radio dung PIC 16F84 hay 16F877A

Trang 14

Bài giảng số 6: Ngắt ( Số tiết: 3)

III.2 Đồ dung và phương tiện dạy học:

-Phấn trắng, bảng, khăn, bút long, micro có dây(hay không dây), máy tính, và đèn chiếu (hay máy chiếu)

III.3 Giáo trình và tài liệu tham khảo:

Giáo trình Vi xử lí của trường Đại học công nghiệp Tp HCM

D.W Smith, PIC in practice: a project-based approach, Elsevier, 2nd edition, 2006 Trương Trác, Chip đơn 16C84 và ứng dụng của chúng

Hồ Trung Mỹ, Vi xử lí, NXB ĐHQG Tp HCM, 2003

Tài liệu về vi điều khiển PIC của bọ môn Điện tử công nghiệp

Datasheet c ủa PIC 16F84 v à 16F877A

III.4.Nội dung bài giảng:

Nội dung chi tiết : xem bài giảng chi tiết

Phương pháp giảng dạy: thuyết trình, nêu vấn đề và đàm thoại trao đổi với sinh

Khi xảy ra ngắt chúng ta cần nhớ nội dung của file là gì, nghĩa là thanh ghi trạng thái STATUS, thanh tích lũy W, TMR0 và thiết lập PORT để mà khi trở về từ ngắt, các thiết lập được lưu trở lại (restored) Nếu chúng ta không nhớ các thiết lập, chúng ta không thể tiếp tục ở đâu chúng ta rời bỏ, bởi vì ngắt sẽ tắt tất cả ngõ ra và thanh ghi W bị ảnh hưởng tại lần gần nhất

6.1 Nguồn ngắt

Trang 15

16F84 có 4 nguồn ngắt:

Thay đổi cạnh lên hay cạnh xuống của PORTB,0

.TMR0 tràn từ FFh về 00h

PORTB bit 4-7 thay đổi

.Ghi dữ liệu EEPROM hoàn thành

16F877A có 15 nguồn ngắt Ngoài 4 nguồn ngắt nêu trên, các ngắt them vào là:

Chuyển đổi A/D hoàn thành

Ngắt port nối tiếp đồng bộ

TMR1 tràn

.TMR2 tràn

.Ngắt điều chế độ rộng xung, bắt giữ và so sánh

Những ngắt này có thể được cho phép (enable) hay cấm theo yêu cầu bởi bit cho phép/cấm ngắt Các bit này có thể được tìm thấy trong thanh ghi điều khiển ngắt INTCON cho 16F84/16F877A

6.2 Thanh ghi điều khiển ngắt INTCON:

Thanh ghi điều khiển ngắt INTCON, file 0Bh được minh họa ở hình 6.1

Bit 7 6 5 4 3 2 1 bit 0

Hình 6.1: Thanh ghi điều khiển ngắt INTCON cho 16F84/16F877A

Thanh ghi điều khiển ngắt ghi yêu cầu ngắt riêng rẽ vào bit cờ Nó cũng có bit cho phép ngắt toàn cục và riêng rẽ

Chú ý: bit cờ ngắt riêng rẽ được bật (=1) bất chấp trạng thái của bit mặt nạ tương ứng hay bit GIE

Bit cho phép ngắt toàn cục GIR (INTCON<7>), cho phép (nếu bật bit lên 1) tất cả các ngắt không che (unmasked interrupt) hay cấm (nếu bị xóa 0) tất cả các ngắt

Bit 6 trong thanh ghi này được gán như là bit cho phép ngắt ngoại vi PEIE(peripheral interrupt enable bit) cho 16f818/819

Trước khi bit cho phép ngắt riêng rẽ có thể chuyển qua ON (bật) thì bit cho phép bgắt toàn cục GIE, bit 7, phải được bật , nghĩa là ‘1’, cho phép tất cả các ngắt không che được và GIE=’0’ sẽ xoá tất cả các ngắt

Bit 6 EEIE (16F84/16F877A) là bit cho phép ngắt việc ghi dữ liệu eeprom hoàn thành 1=cho phép ngắt

0= cấm ngắt

Bit 6 PEIE (16F818/19): là bit cho phép khả năng của bit ngoại vi ngoài

Bit 5: T0IE là bit cho phép ngắt TMR0 tràn

Trang 16

0=TMR0 không tràn

Bit này phải được xoá bằng phần mềm

Bit 1 INTF là bit cờ ngắt RB0/INT mà chỉ ra sự thay đổi trên PORTB,0

1=chỉ ra một sự thay đổi diễn ra

0=chỉ ra không có sự thay đổi

Bit 0 RBIF là bit cờ ngắt thay đổi ở PORTB (B4-B7)

1=chỉ ra rằng một trong bốn chân ngõ vào PORTB, 4-7 có sự thay đổi trạng thái Bit này phải được xóa bằng phần mềm

0=chỉ ra không có bit nào ở PORTB,4-7 có thay đổi

Lệnh RETFIE (return from interrupt), trở về từ ngắt, thoát khỏi chương trình phục vụ ngắt, cũng như thiết lập GIE bit, mà cho phép lại ngắt

Cờ ngắt ngoại vi được chứa trong thanh ghi chức năng đặc biệt PIR1 và PIR2 Bit cho phép ngắt tương ứng được chứa trong thanh ghi chức năng đặc biệt , PIE1 và PIE2, và bit cho phép ngắt ngoại vi chứa trong thanh ghi INTCON

Cờ ngắt chân RB0/INT, cờ ngắt thay đổi portB (B4-B7) và cờ ngắt tràn TMR0 được chứa trong thanh ghi INTCON

Khi một ngắt được đáp ứng, bit GIE bị xóa để cấm các ngắt khác, địa chỉ trở về được cất vào ngăn xếp và thanh ghi bộ đếm chương trình PC được nạp giá trị 0004h Một khi trong chương trình phục vụ ngắt, nguồn của ngắt có thể được xác định bằng cách bit cờ ngắt Bit cờ ngắt phải được xóa bằng phần mềm trước khi cho phép lại ngắt để tránh ngắt đệ qui

Trong phần này, chúng ta xem xét ngắt gây ra bởi cạnh lên hay cạnh xuống của chân PORTB,0 Cho phép ngắt RB0/INT bằng lệnh

BSF INTCON,GIE; bit cho phép ngắt toàn cục

BSF INTCON,INTE;cho phép ngắt do RB0

6.3 Chương trình sử dụng ngắt:

Như là một ví dụ làm thế nào ngắt hoạt động, chúng ta hãy xem xét thí dụ sau:

Giả sử chúng ta có 4 led sang tuần tự mỗi 5 giây Một nút nhấn được nối với B0 hoạt động như một ngắt để mà khi B0 ở logic 0, một chương trình ngắt được gọi Chương trình ngắt này chớp tất cả 4 led sang (on) và tắt (off) 2 lần trong một giây và trở về chương trình chính giả sử nút nhấn B0 là ở logic 1

Chúng ta dung 16F877A trong ví dụ này

Sơ đồ mạch cho ứng dụng này ở hình 6.2

Trang 17

B1 B0 16F877A B2

B3 B4

Vcc

Hoạt động của chương trình:

Khi B0 tạo ra một ngắt, chương trình rẽ nhánh tới chương trình phục vụ ngắt ở đâu? vị trí 4 ở bộ nhớ chương trình báo cho vi điều khiển nhảy tới nơi tìm chương trình phục vụ ngắt

Vị trí ô nhớ số 4 của bộ nhớ chương trình thì được lập trình sử dụng lệnh sau: ORG 4; ghi lệnh kế tiếp vào ô nhớ 4 ở bộ nhớ chương trình

GOTO ISR;nhảy tới chương trình phục vụ ngắt

Trang 18

MOVWF PORTB;phục hồi PORTB

MOVF W_TEMP,W;phục hồi W

BCF INTCON,INTF;reset cờ ngắt

RETFIE ; trở về từ ngắt

Hoạt động của chương trình phục vụ ngắt:

Chương trình phục vụ ngắt hoạt động theo cách sau:

Khi một ngắt được thự hiện thì cho phép ngắt toàn cục bị xóa tự động (=’0’, cấm) để tắt tất cả các ngắt khác Chúng ta không muốn bị ngắt khi chúng ta đang bị ngắt

Thanh ghi W, STATUS, TMR0 và PORTB được lưu trong vị trí tạm W_TEMP, STATUS_T, TMR0_T, và PORTB_T

Chương trình ngắt được thực thi , led chớp sang và tắt 2 lần Đây là chuỗi tách biệt hơn trước đây để minh họa ngắt đã ngắt dòng chương trình thong thường Chú ý là chương trình đã không nhìn vào công tắc mà đã tạo ra ngắt

Chúng ta đợi cho tới khi công tắc trở về vit trí Hi (mức cao)

Ô nhớ tạm W_TEMP, STATUS_T, TMR0_T, và PORTB_T được phục hồi vào W, STATUS, TMR0 và PORTB

Cờ ngắt PORTB,0 ở thanh ghi INTCON là INTF bị xoá, sẵn sang chỉ ra ngắt khác nữa

Chúng ta trở về từ ngắt, bit cho phép ngắt toàn cục tự động được bật lên 1 để cho phép ngắt khác nữa

Chương trình minh họa ngắt:

Đoạn mã đầy đủ cho chương trình này được minh họa dưới đây với tên INTFLASH.ASM

;INTFLASH.ASM chớp tắt led dung ngắt bằng nút nhấn trên B0 dùng 16F877A

; Header877.asm điều này thiết lập portA là ngõ vào (1 là vào), portB,0 là ngõ vào, còn B1-B7 là ngõ ra ( 0 là ra), ;portC là ngõ vào, portE ngõ vào, portD ngõ ra

;thanh ghi OPTION được thiết lập để chia 256 cho ra xung định thì 1/32 của 1 giây

;trì hoãn 1 giây và 0,5 giây được đưa vào chương trình con

;***************************************

;phần tương đương

TMR0 EQU 1; nghĩa là TMR0 là file 1 (ô nhớ 1)

Trang 19

OPTION_R EQU 81h; thanh ghi OPTION là ô nhớ 81h

PORTA EQU 5;nghĩa là portA là ô nhớ 5

PORTB EQU 6;nghĩa là portB là ô nhớ 6

PORTC EQU 7

PORTD EQU 8

PORTE EQU 9

TRISA EQU 85H; TRISA (chọn I/O portA) là ô nhớ 85H

TRISB EQU 86H; TRISB (chọn I/O portB) là ô nhớ 86H

TRISC EQU 87H

TRISD EQU 88H

TRISE EQU 89H

STATUS EQU 3; nghĩa là STATUS là ô nhớ 3

ZEROBIT EQU 2; nghĩa là zerobit là bit 2

CARRY EQU 0

INTCON EQU 0BH; thanh ghi điều khiển ngắt

GIE EQU 7; bit ngắt toàn cục

INTE EQU 4;bit cho phép ngắt B0

INTF EQU 1; cờ ngắt B0

ADCON0 EQU 1Fh;thanh ghi cấu hình A/D 0

ADCON1 EQU 9FH;thanh ghi cấu hình A/D 1

ADRESH EQU 1EH

ADRESL EQU 9EH

COUNT EQU 20H ;COUNT là ô nhớ 20H, thanh ghi để đếm sự kiện

TMR0_T EQU 21H; ô nhớ tạm TMR0

W_TEMP EQU 22H; ô nhớ tạm W

STATUS_T EQU 23H; ô nhớ tạm STATUS

PORTB_T EQU 24H; ô nhớ tạm PORTB

COUNTA EQU 25H;COUNTA là thanh ghi đếm sự kiện

;***************************************

LIST P=16F87A ; chúng ta đang dùng 16F877A

ORG 0 ; địa chỉ bắt đầu là 0

GOTO START; nhảy đến START

ORG 4;ghi tới ô nhớ 4

GOTO ISR;vị trí 4 nhảy tới ISR

BTFSS STATUS, ZEROBIT; kiểm tra TIME-3=0 (3-W=0)

GOTO LOOPB; time không bằng 3

NOP ;them trì hoãn

Trang 20

LOOPC CALL DELAYP1

MOVWF PORTB;phục hồi PORTB

MOVF W_TEMP,W;phục hồi W

BCF INTCON,INTF;reset cờ ngắt

RETFIE ; trở về từ ngắt

;Phần cấu hình

START BCF STATUS,6

BSF STATUS,5; trở lại bank 1

MOVLW B’11111111’; 6 bit của port A là I/P (ngõ vào) MOVWF TRISA

MOVLW B’00000110’

MOVWF ADCON1; portA là số (digital)

Trang 21

MOVWF TRISD; PortD là output (ngõ ra)

MOVLW B’11111111’; 3 bit của port E là I/P (ngõ vào)

MOVWF TRISE

MOVLW B’00000111’;bộ chia tỉ lệ trước là /256

MOVWF OPTION_R; timer là 1/32sec, có thể dùng lệnh OPTION

BCF STATUS,5 ;trở lại bank 0

BCF STATUS,6

CLRF PORTA ; xóa PORTA

CLRF PORTB ;xóa PORTB

CLRF PORTC ;xóa PORTC

CLRF PORTD ;xóa PORTD

CLRF PORTE ;xóa PORTE

BSF INTCON,GIE; cho phép ngắt toàn cục

MOVWF PORTB;bật B2, led 2 sáng

CALL DELAY5; trì hoãn 5 giây

MOVLW B’00001000’

MOVWF PORTB;bật B3 , led 3 sáng

CALL DELAY5; trì hoãn 5 giây

MOVLW B’00010000’

MOVWF PORTB;bật B4, led 4 sáng

CALL DELAY5;trì hoãn 5 giây

GOTO BEGIN

END; dòng này luôn luôn đặt ở cuối chương trình

4 led chớp sáng và tắt đủ chậm (khoảng 5 giây) để mà bạn có thể ngắt cách quảng thông qua B0 mức thấp dùng nút nhấn Khi trở về từ ngắt, B0 ở mức cao trở lại, chương trình gĩư từ lúc nó bỏ đi

IV.Tổng kết bài:

-Tóm tắt các ý chính trong bài

-Chuẩn bị bài mới

V Câu hỏi và bài tập về nhà:

Chương 6: Ngắt

1.Ngắt là gì? Các nguồn ngắt của 16F84 và của 16F877A

2 Thanh ghi INTCON

3 Giả sử chúng ta có 4 led chớp(sang và tắt) tuần tự Một nút nhấn nối với B0 làm việc như 1 ngắt để mà khi B0 là ở logic 0 một chương trình ngắt được gọi Chương trình ngắt này chớp tất cả 4 led sang(ON) và tắt (OFF) hai lần ở khoảng thời gian 1 giây và trở về chương trình cung cấp nhút nhấn ở B0 là ở logic 1 Hãy viết chương trình trên

Trang 23

Bài giảng số 7: Bộ chuyển đổi tương tự-số ( Số tiết: 3)

III.1 Mục tiêu:

- Thực hiện việc đọc A/D

- Cấu hình thiết bị A/D

-Tiêu đề tương tự cho PIC 16F877A

- Thí dụ chuyển đổi A/D: chuyển mạch (switch) cảm biến nhiệt độ

- Mã chương trình

III.2 Đồ dung và phương tiện dạy học:

-Phấn trắng, bảng, khăn, bút long, micro có dây(hay không dây), máy tính, và đèn chiếu (hay máy chiếu)

III.3 Giáo trình và tài liệu tham khảo:

Giáo trình Vi xử lí của trường Đại học công nghiệp Tp HCM

D.W Smith, PIC in practice: a project-based approach, Elsevier, 2nd edition, 2006 Trương Trác, Chip đơn 16C84 và ứng dụng của chúng

Hồ Trung Mỹ, Vi xử lí, NXB ĐHQG Tp HCM, 2003

Tài liệu về vi điều khiển PIC của bọ môn Điện tử công nghiệp

Datasheet c ủa PIC 16F84 v à 16F877A

III.4.Nội dung bài giảng:

Nội dung chi tiết : xem bài giảng chi tiết

Phương pháp giảng dạy: thuyết trình, nêu vấn đề và đàm thoại trao đổi với sinh

viên

Chương 7: Bộ chuyển đổi tương tự-số (ADC)

Cho tới nay chúng ta xét ngõ vào như là số ở hoạt động nghĩa là ngõ vào là 0 hay 1 Nhưng giả sử chúng ta đo nhiệt độ, chứ không chỉ là nóng hay lạnh (1 hay 0) Chúng ta

có thể yêu cầu:

(a)Phát ra buzzer (còi hụ) nếu nhiệt độ xuống dưới freezing (đông)

(b) Bật lò lên nếu nhiệt độ dưới 18 độ C

(c) Bật quạt lên nếu nhiệt độ trên 25 độ C

(d)Báo động nếu nhiệt độ trên 35 độ C

Giải pháp tốt là sử dụng một ngõ vào nối với bộ chuyển đổi tương tự sang số (ADC)

và đo nhiệt độ với A/D

Hình 7.1 minh họa sử mạch cơ bản để đo nhiệt độ Nó gồm có điện trở cố định nối tiếp với thermistor (điện trở nhiệt bán dẫn)

Trang 24

Điện trở của thermistor (tec-mix-to) thay đổi theo nhiệt độ gây ra 1 điện áp tại điểm X

Khi nhiệt độ tăng điện áp tại X tăng

Khi nhiệt độ giảm , điện áp tại X giảm

Chúng ta cần biết quan hệ giữa nhiệt độ của tec-mix-to với điện áp tại X Cách đơn giản làm điều này là đặt tec-mix-to trong ly nước sôi (100 độ C) và đo điện áp tại X Khi nước nguội tương ứng việc đọc nhiệt độ và điện áp có thể đo được Nếu cần thiết,

đồ thị của nhiệt độ và việc đọc điện áp được vẽ ra

7.1 Thực hiện việc đọc A/D

Trong thí dụ trên chúng ta hãy giả sử:

0 độ C cho đọc điện áp là 0,6V

18 độ C cho đọc điện áp là 1,4V

25 độ C cho đọc điện áp là 2,4V

30 độ C cho đọc điện áp là 3,6V

Vi điều khiển sẽ đọc các điện áp này và chuyển đổi chúng thành số 8 bit trong

đó 0V là 0 và 5V là 255, nghĩa là việc đọc 51/volt hay độ phân giải là 1/51, nghĩa là 1 bit là 19,6 mV

Trang 25

PIC 16F877A có 8 ngõ vào analog AN0, AN1, AN2, AN3, AN4, AN5, AN6, AN7 và AN8 với bộ chuyển đổi tương tự-số (A/D) 10 bit có 8 kênh vào (PIC 16F877

có ADC 10 bit với 5 kênh vào)

7.2 Cấu hình thiết bị A/D:

Để thực hiện đo lường analog thì ta phải cấu hình thiết bị HEADER877A.ASM phải

có phần cấu hình thay đổi để làm cho một số ngõ vào port A là ngõ vào analog, portB được thiết lập ngõ ra

Để cấu hình 16F877A cho đo lường A/D, 3 thanh ghi cần được thiết lập:

ADCON0

.ADCON1

.ADRESH và ADRESL

Thanh ghi điều khiển A/D 0: ADCON0, đ ịa ch ỉ 1FH

Đầu tiên là thanh ghi A/D, ADCON0 là thanh ghi điều khiển tương tự sang số thứ 0 ADCON0 được dung:

Bật lên chuy ển đ ổi A/D v ới ADCON0, bit 0 Bit này bật chuyển đổi A/D khi nó được bật lên 1 và tắt A/D khi nó bị xóa về 0 Khi A/D được bật, nó có thể được để ON (bật) suốt thời gian nhưng nó lái dòng 90μA, so sánh với phần còn lại của vi điều khiển

mà lái dòng 15μA

Ra lệnh vi điều khiển thực thi chuyển đổi bằng cách bật bit GO/DONE, bit 2 Khi bit GO/DONE=’1’ thì vi điều khiển thực hiện chuyển đổi A/D Khi chuyển đổi hoàn thành, phần cứng xóa bit GO/DONE Bit này có thể được đọc khi kết quả là sẵn sang Thiết lập kênh cụ thể (ngõ vào) để thực hiện đo lường Điều này được thực hiện với 3 bit chọn kênh CHS0, CHS1 và CHS2, bit 3,4, và 5

Bit 7 6 5 4 3 2 1 0

Hình 7.2: Thanh ghi ADCON0

.Bit 7 và 6, ADCS1 và ADCS0: bit chọn clock chuyển đổi A/D

ADCS2 ADCS1 ADCS0 Tốc độ chuyển đổi

Trang 26

.Bit 5,4 và 3: CHS2, CHS1, và CHS0 :chọn kênh A/D

Thanh ghi điều khiển A/D 1: ADCON1, đ ịa chỉ 9FH

Trong ADCON1, thanh ghi chuyển đổi tương tự-số thứ 1, chỉ có các bit 0,1,2, và 3 được dung

Chúng là cấu hình port, PCFG1, PCFG2 và PCFG3 mà xác định chân nào của port A sẽ

là ngõ vào analog và chân nào là số

Thanh ghi ADCON1 được minh họa trong hình 7.3 và ngõ vào analog và ngõ vào số được minh họa ở bảng 7.4

Bit 7 6 5 4 3 2 1 0

Hình 7.3: Thanh ghi ADCON1

Bảng 7.4: Cấu hình port ADCON1

Bit 7, ADFM : bit chọn khuôn dạng kết quả A/D

1=chỉnh phải 6 bit trong số cao nhất của ADRESH là đọc là ‘0’

0=chỉnh trái 6 bit trọng số thấp nhất của ADRESH là đọc là ‘0’

Bit 6, ADCS2: bit chọn clock chuyển đổi A/D

A=analog (tương tự) , D= digital (số)

C/R=# của kênh vào analog/# của tham chiếu điện áp A/D

ADFM ADCS2 - - PCFG3 PCFG2 PCFG1 PCFG0

Trang 27

Như đề cập trước đây, vi điều khiển dẽ chuyển đổi một điện áp analog giữa 0 và 5V thành một số giữa 0 và 255 Nhưng giả sử việc đọc analog của chúng ta là, nhiệt độ đi

từ 0,6V thể hiện 0 độ C lên tới 3,6V thể hiện 30 độ C Nó có ý nghĩa để có tầm điện áp analog đi từ 0,6V đến 3,6V Chúng ta có thể thiết lập điều này bằng cách dung 2 điện

áp tham chiếu Một ở thiết lập thấp 0,6V được gọi là Vref-,nối với AN2 Thiết lập kia của 3,6V cho Vref+, nối với AN3 Hai cột bên phải chỉ ra rằng PCFG thiết lập là 1000

sẽ thiết lập cấu hình A/D sử dụng AN3 như là điện áp tham chiếu Trong ài giảng này, tôi không sử dụng điện áp tham chiếu mà dung 5V cho Vdd và 0V cho Vss là tham chiếu

ADRES:

Thanh ghi thứ ba là ADRES, thanh ghi kết quả A/D Đây là các ô nhớ mà kết quả chuyển đổi A/D được lưu trữ Nếu nhiều đo lường yêu cầu lưu trữ thì số trong ADRES cần được chuyển tới ô nhớ người dùng trước khi nó bị đè bởi đo lường kế tiếp PIC 16F877A có A/D 10 bit 8 bit cao được lưu trong ADRESH và 2 bit thấp hơn được lưu trong ADRESL Trong bài giảng này, tôi chỉ sử dụng 8 bit và gọi ô nhớ ADRES (chính là ADRESH)

7.3.Tập tin tiêu đề cho 16F877A: xem chương 4

7.4.Chuyển đổi A/D Ví dụ chuyển mạch nhạy cảm nhiệt độ:

Để giới thiệu sự làm việc của bộ chuyển đổi A/D, chúng ta sẽ xem xét ví dụ đơn giản, nghĩa là bật led khi nhiệt độ trên 250C và tắt led khi nhiệt độ thấp hơn 250C

Sơ đồ mạch cho chuyển mạch nhiệt độ được minh họa ở hình 7.4

*Lấy việc đọc giá trị A/D:

Bộ chuyển đổi A/D được chuyển sang bật (ON) trong tập tin tiêu đề và nó tự động nhìn vào kênh 0 Để thực hiện đo lường, bit GO/DONE, bit 2 được bật lên 1 và chúng

ta đợi cho tới khi nó bị xóa bằng lệnh:

BSF ADCON0,2; thực hiện đo, bật GO/DONE

WAIT BTFSC ADCON0,2; đợi cho tới khi GO/DONE bị xóa

GOTO WAIT

Việc đo lường này sẽ được đặt ở thanh ghi kết quả A/D, ADRES

Trang 28

B0 16F877A A0

Vcc

*Xác định xem nhiệt độ là trên hay thấp hơn 25 độ C

Giả sử điện áp trên ngõ vào analog, kênh 0, A0 là 2,4V khi nhiệt độ là 25 độ C Giá trị đọc A/D yêu cầu cho 2,4V là 2,4 x 51=122 Vì vậy chúng ta cần biết khi đọc A/D là trên hay thấp hơn 122, nghĩa là trên hay thấp hơn 25 độ C

Truớc đây chúng ta đã xem xét cách yêu cầu một giá trị bằng giá trị khác bằng cách trừ và xem bit zero trong thanh ghi trạng thái

Có 1 bit khác, bit 0 trong thanh ghi trạng thái được gọi là bit cờ nhớ C, mà chỉ ra kết quả của phép trừ là +ve (dương) hay –ve(âm) Nếu bit cờ C=’1’ (bật) thì kết quả là +ve, nếu bit cờ nhớ C=’0’ (bị xóa), kết quả là –ve Vì vậy chúng ta có thể yêu cầu 1 số

là lớn hơn hay thấp hơn 1 giá trị định nghĩa trước

Mã cho điều này là:

MOVF ADRES,W; chuyển kết quả analog vào W

SUBLW .122; thực hiện 122-ADRES, nghĩa là 122-W

BTFSC STATUS,CARRY;kiểm tra cờ nhớ C, xóa nếu ADRES>122, nghĩa là –ve GOTO TURNOFF; chương trình con tắt led

GOTO TURNON; chương trình con bật led

Việc đo lường được chuyển từ ADRES vào W, ở đó chúng ta có thể trừ nó từ 122 W) Chú ý là phép trừ luôn thực hiện giá trị-W

(122-Bit cờ nhớ báo cho ta kết quả A/D là trên hay dưới 122

Chú ý: Nếu kết quả của phép trừ là zero thì bit cờ nhớ cũng là 1 Nó phải là 1 hay 0 Là +ve (dương) hay 0 không thành vấn đề trong thí dụ này

Chúng ta tìm ra kết quả là bằng hay trên 122, hay kết quả thấp hơn 122

Trang 29

Khi việc đo lường được thực hiện, chúng ta đi tới một trong hai chương trình con, TURNON và TURNOFF Các chương trình con này không lớn nhưng chúng có thể dễ dàng phức tạp hơn , thậm chí dài hang trăm dòng

7.5.Mã chương trình:

Mã đầy đủ cho chương trình chuyển mạch nhạy cảm nhiệt độ được minh họa ở dưới với tên TEMPSENS.ASM

;TEMPSENS.ASM chương trình này thiết lập PORTA là ngõ vào analog /số PORTB

; là ngõ ra Dao động 32 Khz được chọn Thanh ghi OPTION được thiết lập để chia

; cho xung định thì 32,768 ms

;chương trình con trì hoãn 1 giây và 0,5 giây

;************************************

;phần khai báo tương đương

TMR0 EQU 1; nghĩa là TMR0 là file 1 (ô nhớ 1)

OPTION_R EQU 81h; thanh ghi OPTION là ô nhớ 81h

PORTA EQU 5;nghĩa là portA là ô nhớ 5

PORTB EQU 6;nghĩa là portB là ô nhớ 6

PORTC EQU 7

PORTD EQU 8

PORTE EQU 9

TRISA EQU 85H; TRISA (chọn I/O portA) là ô nhớ 85H

TRISB EQU 86H; TRISB (chọn I/O portB) là ô nhớ 86H

TRISC EQU 87H

TRISD EQU 88H

TRISE EQU 89H

STATUS EQU 3; nghĩa là STATUS là ô nhớ 3

ZEROBIT EQU 2; nghĩa là zerobit là bit 2

CARRY EQU 0

ADCON0 EQU 1Fh

ADCON1 EQU 9FH

ADRES EQU 1EH

ADRESL EQU 9EH

CHS0 EQU 3

GODONE EQU 2

COUNT EQU 20H; COUNT là ô nhớ 20H, thanh ghi để đếm sự kiện

;***************************************

LIST P=16F87A ; chúng ta đang dùng 16F877A

ORG 0 ; địa chỉ bắt đầu là 0

GOTO START; nhảy đến START

BTFSS STATUS, ZEROBIT; kiểm tra TIME-W=0 (32-W=0)

GOTO LOOPA; time không bằng 32

RETLW 0; trở về sau khi time là 32 (TMR0=32)

;trì hoãn 0,5 giây

Trang 30

DELAY5 CLRF TMR0 ; khởi động TMR0

LOOPB MOVF TMR0,W ; đọc TMR0 vào W

SUBLW 16 ;TIME-W

BTFSS STATUS,ZEROBIT;kiểm tra TIME-W=0

GOTO LOOPB ; TIME không bằng 16

RETLW 0; trở về sau khi time là 16 (TMR0=16)

;phần chương trình con

TURNON BSF PORTB,0;bật led trên B0

GOTO BEGIN;trở về chương trình chính

TURNOFF BCF PORTB,0;tắt led trên B0

GOTO BEGIN;trở về chương trình chính

;Phần cấu hình

START BCF STATUS,6

BSF STATUS,5; trở lại bank 1

MOVLW B’11111111’; 6 bit của port A là I/P (ngõ vào)

MOVWF TRISD; PortD là output (ngõ ra)

MOVLW B’11111111’; 3 bit của port E là I/P (ngõ vào)

MOVWF TRISE

MOVLW B’00000111’;bộ chia tỉ lệ trước là /256

MOVWF OPTION_R; timer là 1/32sec, có thể dùng lệnh OPTION BCF STATUS,6

BCF STATUS,5; trở về bank 0

BSF ADCON0,0; bật A/D lên

CLRF PORTA ; xóa PORTA

CLRF PORTB ;xóa PORTB

CLRF PORTC ;xóa PORTC

CLRF PORTD ;xóa PORTD

CLRF PORTE ;xóa PORTE

;chương trình chính bắt đầu

BEGIN BSF ADCON0,2;thực hiện đo lường, bật bit GO/DONE=’1’

WAIT BTFSC ADCON0,2; đợi cho tới khi GO/DONE bị xóa

GOTO WAIT

MOVF ADRES,W; chuyển kết quả analog vào W

SUBLW .122; thực hiện 122-ADRES, nghĩa là 122-W

BTFSC STATUS,CARRY;kiểm tra cờ nhớ C, xóa nếu ADRES>122 GOTO TURNOFF; chương trình con tắt led

GOTO TURNON; chương trình con bật led

END; dòng này luôn luôn đặt ở cuối chương trình

IV.Tổng kết bài:

-Tóm tắt các ý chính trong bài

Trang 31

-Chuẩn bị bài mới

V Câu hỏi và bài tập về nhà:

Chương 7: Bộ chuyển đổi tương tự-số (ADC)

1.Chuyển đổi A/D là gì?

2 Thanh ghi điều khiển tương tự-số: ADCON0, ADCON1 và thanh ghi kết quả A/D : ADRES

3 Viết chương trình điều khiển bật led khi nhiệt độ trên 25 độ C và tắt led khi nhiệt

độ dưới 25 độ C

Hình: Mạch chuyển mạch nhiệt độ

Viết lại chương trình cho PIC 16F84

VI Rút kinh nghiệm: (về thời gian, nội dung, phương pháp, chuẩn bị)

………

………

………

……… Ngày ….tháng… năm 2011 Ngày ….tháng… năm 2011

Bộ môn Giảng viên soạn

Trang 32

Bài giảng số 8: Bộ nhớ dữ liệu EEPROM Bắt giữ/so sánh/ điều rộng xung (PWM) MSSP(SPI/I 2 C) ( Số tiết: 4)

- Bộ nhớ dữ liệu EEPROM: giới thiệu, thí dụ sử dụng EEPROM

- Bắt giữ/So sánh/Điều rộng xung (PWM)

- MSSP: SPI/I2C

III.2 Đồ dung và phương tiện dạy học:

-Phấn trắng, bảng, khăn, bút long, micro có dây(hay không dây), máy tính, và đèn chiếu (hay máy chiếu)

III.3 Giáo trình và tài liệu tham khảo:

Giáo trình Vi xử lí của trường Đại học công nghiệp Tp HCM

D.W Smith, PIC in practice: a project-based approach, Elsevier, 2nd edition, 2006 Trương Trác, Chip đơn 16C84 và ứng dụng của chúng

Hồ Trung Mỹ, Vi xử lí, NXB ĐHQG Tp HCM, 2003

Tài liệu về vi điều khiển PIC của bọ môn Điện tử công nghiệp

Datasheet c ủa PIC 16F84 v à 16F877A

III.4.Nội dung bài giảng:

Nội dung chi tiết : xem bài giảng chi tiết

Phương pháp giảng dạy: thuyết trình, nêu vấn đề và đàm thoại trao đổi với sinh

vi điều khiển bị tắt đi, nghĩa là nó là bộ nhớ không bay hơi Giả sử chúng ta đang đếm

xe vào và ra trong bãi đậu xe và chúng ta mất nguồn tới mạch của chúng ta Nếu chúng

ta lưu trữ số đếm trong EEPROM thì chúng ta có thể nạp ô nhớ số đếm với dữ liệu này và tiếp tục không có mất dữ liệu, khi điện trở lại

Trang 33

Để truy xuất dữ liệu, nghĩa là đọc và ghi vào ô nhớ EEPROM, chúng ta phải ra lệnh vi điều khiển Có 64 byte EEPROM trên 16F84, 128 byte ở 16F818, 256 byte ở 16F819 và 256 byte EEPROM ở 16F877A Vì vậy chúng ta phải yêu cầu (bảo) vi điều khiển địa chỉ nào chúng ta yêu cầu và chúng ta đọc hay ghi vào nó

Khi đọc chúng ta nhận dạng địa chỉ từ 0 đến 3FH ,hay 0Æ63 (đối với 16F84)

và 0-367 đối với 16F877A dung thanh ghi EEADR Dữ liệu sau đó là dung được trong thanh ghi EEDATA

Khi ghi vào bộ nhớ dữ liệu EEPROM chúng ta phải chỉ ra dữ liệu trong thanh ghi EEDATA và vị trí trong thanh ghi EEADR

Hai ô nhớ khác được dung để cho phép quá trình, chúng là EECON1 và ECON2, hai thanh ghi điều khiển EEPROM

Thanh ghi EECON1 được minh họa ở hình 8.1

Ngoài ra cón có 2 ô nhớ khác là EEDATH và EEADRH Khi giao tiếp với khối bộ nhớ chương trình , thanh ghi EEDATA và EEDATH tạo thành một word (từ) 2 byte mà giữ

dữ liệu 14 bit cho đọc/ghi và EEADR và EEADRH tạo thành từ 2 byte mà giữ địa chỉ

13 bit của ô nhớ chương trình được truy xuất Các thiết bị này có 4 hay 8K từ của bộ nhớ chương trình Flash, với tầm địa chỉ từ 0000h đến 0FFFh cho PIC 16F873A/74A và 0000h tới 1FFFh cho PIC 16F876A/877A

Bộ nhớ dữ liệu EEPROM cho phép đọc một byte Bộ nhớ chương trình Flash cho phép đọc từng từ và ghi khối 4 từ Hoạt động ghi bộ nhớ chương trình tự động thực hiện việc xóa trước khi ghi trên khối 4 từ Ghi 1 byte vào bộ nhớ dữ liệu EEPROM tự động xóa ô nhớ và ghi dữ liệu mới (xóa trước khi ghi)

Thời gian ghi được điều khiển bởi timer trên chip Điện áp ghi/xóa được tạo bởi bộ bơm nạp trên chip

Khi thiết bị là bảo vệ mã, CPU có thể tiếp tục đọc và ghi bộ nhớ dữ liệu EEPROM Tùy thuộc vào thiết lập của bit chống ghi, thiết bị có thể hay không thể ghi một số khối của bộ nhớ chương trình, tuy nhiên việc đọc bộ nhớ chương trình là được phép Khi bảo vệ mã thiết bị lập trình có thể không còn truy xuất bộ nhớ dữ liệu và chương trình Điều này không cấm việc đọc ghi bên trong

Thanh ghi EECON1 (địa chỉ 18CH)

Bit 7 6 5 4 3 2 1 0

Hình 8.1: Thanh ghi EECON 1

Bit 0, RD được bật lên 1 để thực hiện đọc Nó được xóa bởi vi điều khiển khi việc đọc hoàn thành

Bit 1, WR được bật lên 1 để thực hiện việc ghi Nó được xóa bởi vi điều khiển khi việc ghi hoàn thành

Bit 2, WREN (EEPROM write enable)

1= cho phép chu kì ghi

0=cấm ghi vào EEPROM

Bit 3, WRERR, bit cờ sai EEPROM, đọc là 1 nếu việc ghi không hoàn thành, đọc là 0 nếu việc ghi hoàn thành thành công

Bit cờ ngắt, EEIF trong thanh ghi PIR2, được bật lên 1 khi việc ghi hoàn thành Nó phải được xóa bằng phần mềm

EEPGD - - - WRERR WREN WR RD

Trang 34

Bit 7, EEPGD (Program /Data EEPROM Select bit)(không dung ở 16F84) Bit này cho phép hoặc là bộ nhớ chương trình hay bộ nhớ dữ liệu

0=chọn bộ nhớ dữ liệu

1=chọn bộ nhớ chương trình

8.2 Thí dụ sử dụng EEPROM

Như thường lệ, Tôi nghĩ cách tốt nhất để hiểu bộ nhớ này làm việc như thế nào

là nhìn vào thí dụ đơn giản sau đây

Giả sử chúng ta muốn đếm sự kiện, người đi vào một tòa nhà, xe đi vào một bãi đậu xe Như vậy, nếu chúng ta bị mất nguồn tới mạch, thì dữ liệu vẫn còn lưu giữ Mạch cho thí dụ này được minh họa ở hình 8.2

EEPROM

Hình 8.2: Mạch đếm nhấn nút

Nút nhấn 1 được dung để mô phỏng quá trình đếm và 8 led trên PORTB hiển thị số đếm ở dạng nhị phân (Điều này là cơ hội tốt để thực hành đếm nhị phân) Công tắc dĩ nhiên là chống dội

Hãy nhớ ý tưởng của mạch này, chúng ta đang đếm sự kiện và hiển thị số đếm trên PORTB Nhưng nếu chúng ta bị mất nguồn-khi nguồn có lại chúng ta muốn giá trị đếm như thể không có gì xảy ra

Như vậy khi chúng ta chuyển mạch, chúng ta phải di chuyển dữ liệu EEPROM trước đó vào ô nhớ COUNT

Lưu đồ được minh họa ở hình 8.3

Một vài điểm trước khi chúng ta nhìn vào chương trình:

Trang 35

1/Thật là tốt để đảm bảo rằng bộ nhớ dữ liệu EEPROM được reset tại điểm bắt đầu Điều này được thực hiện bằng cách ghi 00h tới địa chỉ 00h dữ liệu EEPROM khi chúng ta nạp chương trình vào chip Điều này được thực hiện với cácdòng lệnh sau: ORG 2100H

DE 00H

2100H là địa chỉ của bộ nhớ dữ liệu EEPROM đầu tiên, nghĩa là 00H

DE là định nghĩa bộ nhớ dữ liệu EEPROM, vì vậy chúng ta khởi động nó với 00h, và

dĩ nhiên 2100H là địa chỉ EEPROM đầu tiên

Dữ liệu có thể được ghi vào EEPROM dung MPLAB, với View, EEPROM và ghi dữ liệu trong hộp EEPROM như minh họa trong hình 8.4

2/Đọc và ghi vào dữ liệu EEPROM không thẳng tiến như ô nhớ người dung, bạn có thể kiểm chứng điều này Có một khối đoạn mã bạn cần sử dụng- chỉ them nó vào chương trình của bạn theo yêu cầu

Khi đọc dữ liệu EEPROM tại địa chỉ 0 tới ô nhớ COUNT thì CALL READ Chương trình con được viết trong tiêu đề

Khi ghi ô nhớ COUNT tới địa chỉ dữ liệu EEPROM thứ 0, bạn hãy CALL WRITE

Chuyển COUNT tới PORTB

Chuyển COUNT tới dữ liệu EEPROM

Trang 36

Hình 8.4: Ghi dữ liệu EEPROM

*Mã chương trình EEPROM:

Chương trình hoàn chỉnh EEDATAWR.ASM được minh họa ở dưới đây:

;EEDATAWR.ASM Chương trình này sẽ đếm và hiển thị sự nhấn nút

;Giá trị đếm được lưu khi ngồn bị mất và tiếp tục khi nguồn có trở lại

; Header84.asm điều này thiết lập portA là ngõ vào (1 là vào), portB là ngõ ra ( 0 là ra)

;thanh ghi OPTION được thiết lập để chia 256 cho ra xung định thì 1/32 của 1 giây

;trì hoãn 1 giây và 0,5 giây được đưa vào chương trình con

;***************************************

;phần tương đương

TMR0 EQU 1; nghĩa là TMR0 là file 1 (ô nhớ 1)

OPTION_R EQU 81h; thanh ghi OPTION là ô nhớ 81h

PORTA EQU 5;nghĩa là portA là ô nhớ 5

PORTB EQU 6;nghĩa là portB là ô nhớ 6

TRISA EQU 85H; TRISA (chọn I/O portA) là ô nhớ 85H

TRISB EQU 86H; TRISB (chọn I/O portB) là ô nhớ 86H

STATUS EQU 3; nghĩa là STATUS là ô nhớ 3

ZEROBIT EQU 2; nghĩa là zerobit là bit 2

Trang 37

DE 00H; đặt 00H trong EEADR 0

ORG 0 ; địa chỉ bắt đầu là 0

GOTO START; nhảy đến START

BTFSS STATUS,ZEROBIT;kiểm tra TIME-W=0

GOTO LOOPB ; TIME không bằng 3

RETLW 0; trở về sau khi time là 3 (TMR0=3)

; Đặt EEDATA 0 vào ô nhớ COUNT

READ MOVLW 0; đọc EEDATA từ EEADR

START BSF STATUS,5; trở lại bank 1

MOVLW B’00011111’; 5 bit của port A là I/P (ngõ vào)

MOVWF TRISA

MOVLW B’00000000’

MOVWF TRISB ; PortB là output (ngõ ra)

MOVLW B’00000111’;bộ chia tỉ lệ trước là /256

Trang 38

MOVWF OPTION_R; timer là 1/32sec, có thể dùng lệnh OPTION

BCF STATUS,5 ;trở lại bank 0

BCF STATUS,6

CLRF PORTA ; xóa PORTA

CLRF PORTB ;xóa PORTB

CLRF COUNT ;xóa COUNT

;chương trình chính bắt đầu

CALL READ; đọc dữ liệu EEPROM vào COUNT

MOVF COUNT,W

MOVWF PORTB;hiển thị COUNT trước đó (nếu có thể)

PRESS BTFSC PORTA,0; đợi cho nhấn nút

GOTO PRESS

CALL DELAYP1;chống dội

RELEASE BTFSS PORTA,0; đợi cho nút nhấn được nhả

GOTO RELEASE

INCF COUNT;cộng 1 vào COUNT

MOVF COUNT,W; đặt COUNT vào W

MOVWF PORTB;chuyển W (COUNT) ra PORTB để hiển thị

CALL WRITE;ghi COUNT tới địa chỉ EEPROM 0

GOTO PRESS;trở về và đợi nhấn nút

END; dòng này luôn luôn đặt ở cuối chương trình

Microchip tiếp tục mở rộng phạm vi (loại) vi điều khiển và một họ mới của vi điều khiển Flash được giới thiệu, có tên là 16F87X, cụ thể là 16F877A, mà gồm có 8 Kx14 bit/word bộ nhớ chương trình, 368 byte RAM người dung và 256 byte bộ nhớ dữ liệu EEPROM và bộ chuyển đổi A/D 10 bit 8 kênh ngõ vào Như vậy bây giờ đo lường analog có thể được lưu trữ trong bộ nhớ dữ liệu EEPROM!

Chương trình hoàn chỉnh EEDATAWR.ASM được minh họa ở dưới đây:

;EEDATAWR.ASM Chương trình này sẽ đếm và hiển thị sự nhấn nút

;Giá trị đếm được lưu khi ngồn bị mất và tiếp tục khi nguồn có trở lại

; Header877.asm điều này thiết lập portA là ngõ vào (1 là vào), portB là ngõ ra ( 0 là ra);portC là ngõ vào, portE ngõ vào, portD ngõ ra

;thanh ghi OPTION được thiết lập để chia 256 cho ra xung định thì 1/32 của 1 giây

;trì hoãn 1 giây và 0,5 giây được đưa vào chương trình con

;***************************************

;phần tương đương

TMR0 EQU 1; nghĩa là TMR0 là file 1 (ô nhớ 1)

OPTION_R EQU 81h; thanh ghi OPTION là ô nhớ 81h

PORTA EQU 5;nghĩa là portA là ô nhớ 5

PORTB EQU 6;nghĩa là portB là ô nhớ 6

PORTC EQU 7

PORTD EQU 8

PORTE EQU 9

TRISA EQU 85H; TRISA (chọn I/O portA) là ô nhớ 85H

TRISB EQU 86H; TRISB (chọn I/O portB) là ô nhớ 86H

TRISC EQU 87H

TRISD EQU 88H

Trang 39

TRISE EQU 89H

STATUS EQU 3; nghĩa là STATUS là ô nhớ 3

ZEROBIT EQU 2; nghĩa là zerobit là bit 2

LIST P=16F87A ; chúng ta đang dùng 16F877A

ORG 2100H; Địa chỉ EEADR 0

DE 00H; đặt 00H trong EEADR 0

ORG 0 ; địa chỉ bắt đầu là 0

GOTO START; nhảy đến START

BTFSS STATUS,ZEROBIT;kiểm tra TIME-W=0

GOTO LOOPB ; TIME không bằng 3

RETLW 0; trở về sau khi time là 3 (TMR0=3)

; Đặt EEDATA 0 vào ô nhớ COUNT

READ MOVLW 0; đọc EEDATA từ EEADR

Trang 40

START BSF STATUS,5; trở lại bank 1

MOVLW B’00111111’; 6 bit của port A là I/P (ngõ vào)

MOVWF TRISD; PortD là output (ngõ ra)

MOVLW B’11111111’; 3 bit của port E là I/P (ngõ vào)

MOVWF TRISE

MOVLW B’00000111’;bộ chia tỉ lệ trước là /256

MOVWF OPTION_R; timer là 1/32sec, có thể dùng lệnh OPTION

BSF STATUS,6; bank 3

BCF EECON1,7; bộ nhớ dữ liệu EEPROM on

BCF STATUS,5 ;trở lại bank 0

BCF STATUS,6

CLRF PORTA ; xóa PORTA

CLRF PORTB ;xóa PORTB

CLRF PORTC ;xóa PORTC

CLRF PORTD ;xóa PORTD

CLRF PORTE ;xóa PORTE

CLRF COUNT ;xóa COUNT

;chương trình chính bắt đầu

CALL READ; đọc dữ liệu EEPROM vào COUNT

MOVF COUNT,W

MOVWF PORTB;hiển thị COUNT trước đó (nếu có thể)

PRESS BTFSC PORTA,0; đợi cho nhấn nút

GOTO PRESS

CALL DELAYP1;chống dội

RELEASE BTFSS PORTA,0; đợi cho nút nhấn được nhả

GOTO RELEASE

INCF COUNT;cộng 1 vào COUNT

MOVF COUNT,W; đặt COUNT vào W

MOVWF PORTB;chuyển W (COUNT) ra PORTB để hiển thị

CALL WRITE;ghi COUNT tới địa chỉ EEPROM 0

GOTO PRESS;trở về và đợi nhấn nút

END; dòng này luôn luôn đặt ở cuối chương trình

Thanh ghi EECON2 không là thanh ghi vật lí

Ngày đăng: 28/09/2015, 11:14

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w