Đề cương bài giảng mô đun: Điều khiển hệ thống Cơ điện tử sử dụng vi điều khiển

136 32 0
Đề cương bài giảng mô đun: Điều khiển hệ thống Cơ điện tử sử dụng vi điều khiển

Đ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

Giáo trình gồm 10 chương với những nội dung chính như: Giới thiệu về vi điều khiển pic của microchip, kiến trúc phần cứng của PIC 18f4520, phần mềm MPLAB và trình dịch MCC18, hoạt động vào ra, hoạt động định thời, lập trình với LCD 1602, hoạt động ngắt, module CCP (CAPTURE/COMPARE/PWM), bộ chuyển đổi tương tự - số (ADC), truyền thông nối tiếp và giao tiếp giữa 2 vi điều khiển PIC. Mời các bạn cùng tham khảo.

BỘ LAO ĐỘNG THƯƠNG BINH VÀ XÃ HỘI TRƯỜNG CAO ĐẲNG KỸ NGHỆ II KHOA ĐIỆN – ĐIỆN TỬ ĐỀ CƯƠNG BÀI GIẢNG MODUL: ĐIỀU KHIỂN HỆ THỐNG CĐTSDVĐK GVBS: Bùi Ngọc An TPHCM, tháng 03 năm 2018 MỤC LỤC Chương GIỚI THIỆU VỀ VI ĐIỀU KHIỂN PIC CỦA MICROCHIP Giới thiệu PIC Các loại PIC thông dụng Ứng dụng PIC Chương KIẾN TRÚC PHẦN CỨNG CỦA PIC 18F4520 Sơ đồ khối Sơ đồ chân Tổ chức nhớ Khối tạo dao động 13 Hoạt động Reset 15 Các Port vào / 17 Chương PHẦN MỀM MPLAB VÀ TRÌNH DỊCH MCC18 Cài đặt MPLAB 29 Sử dụng MPLAB 29 Trình dịch MCC18 40 Chương HOẠT ĐỘNG VÀO RA Lập Trình xuất 50 Lập Trình nhập 50 Hoạt động xuất/nhập 51 Bài tập ứng dụng 52 Chương 5: HOẠT ĐỘNG ĐỊNH THỜI Giới thiệu 53 Timer 53 Timer 60 Lập trình với timer 64 Chương 6: LẬP TRÌNH VỚI LCD 1602 Khái niệm 69 Nguyên lý hoạt động 70 Nguyên tắc hiển thị LCD 70 Ví dụ lập trình điều khiển hiển thị LCD 71 Chương 7: HOẠT ĐỘNG NGẮT Khái niệm 75 Tổ chức ngắt PIC 18F4520 75 Ngắt 77 Các ghi liên quan 77 Lập trình sử dụng ngắt 85 Chương 8: MODULE CCP (CAPTURE / COMPARE / PWM) Giới thiệu 91 Các ghi liên quan 93 Sử dụng PWM 94 Lập trình điều chế độ rộng xung 96 Chương 9: BỘ CHUYỂN ĐỔI TƯƠNG TỰ - SỐ (ADC) Giới thiệu 99 Các ghi liên quan 101 Điều khiển hoạt động chuyển đổi A/D 104 Lập trình sử dụng ADC 111 Chương 10: TRUYỀN THÔNG NỐI TIẾP VÀ GIAO TIẾP GIỮA VI ĐIỀU KHIỂN PIC Giới thiệu 116 Các ghi liên quan 118 Tốc độ baud 121 Ngắt USART 128 Lập trình sử dụng USART 131 Chương GIỚI THIỆU VỀ VI ĐIỀU KHIỂN PIC CỦA MICROCHIP GIỚI THIỆU VỀ PIC PIC viết tắt “Programable Intelligent Computer”, tạm dịch “máy tính thơng minh khảtrình” hãng General Instrument đặt tên cho vi điều khiển họ PIC1650 thiết kế để dùng làm thiết bị ngoại vi cho vi điều khiển CP1600 Vi điều khiển sau nghiên cứu phát triển thêm từ hình thành nên dịng vi điều khiển PIC ngày Hình 1.1 Vi điều khiển PIC CÁC LOẠI PIC THƠNG DỤNG Các kí hiệu vi điều khiển PIC:  PIC12xxxx: độ dài lệnh 12 bit  PIC16xxxx: độ dài lệnh 14 bit  PIC18xxxx: độ dài lệnh 16 bit C: PIC có nhớ EPROM (chỉ có 16C84 EEPROM) F: PIC có nhớ flash LF: PIC có nhớ flash hoạt động điện áp thấp LV: LF, kí hiệu cũ Bên cạnh số vi điều khiển có kí hiệu xxFxxx EEPROM, có chữ A cuối flash (ví dụ PIC16F877 EEPROM, cịn PIC16F877A flash) Ngồi cịn có thêm dịng vi điều khiển PIC dsPIC Ở Việt Nam phổ biến họ vi điều khiển PIC hãng Microchip sản xuất Cách lựa chọn vi điều khiển PIC phù hợp: Trước hết cần ý đến sốchân vi điều khiển cần thiết cho ứng dụng Có nhiều vi điều khiển PIC với số lượng chân khác nhau, chí có vi điều khiển có chân, ngồi cịn có vi điều khiển 28, 40, 44, … chân Cần chọn vi điều khiển PIC có nhớ flash để nạp xóa chương trình nhiều lần hơn, cần ý đến khối chức tích hợp sẵn vi điều khiển, chuẩn giao tiếp bên sau cần ý đến nhớ chương trình mà vi điều khiển cho phép ỨNG DỤNG CỦA PIC Ngày PIC ứng dụng rộng rãi thực tế, từ vật dụng đơn giản hệ thống điều khiển phức tạp cơng nghiệp Hình 1.2 Ứng dụng PIC Chương KIẾN TRÚC PHẦN CỨNG CỦA PIC 18F4520 SƠ ĐỒ KHỐI Hình 2.1 Sơ đồ khối PIC18F4520 Các khối PIC 18F4520 bao gồm:  Bộ xử lý trung tâm CPU (Central Processing Unit):           Tần số làm việc tối đa 40 MHz, sản xuất công nghệ nanoWatt Thiết kế theo kiến trúc Havard, tập lệnh RISC Sử dụng kỹ thuật đường ống lệnh (Instruction Pipelining) Đơn vị logic học (ALU: Arithmetic Logical Unit) Thanh ghi làm việc (WREG: work register ) Bộ nhân phần cứng (8x8 Multiply), kết chứa cặp ghi (PRODH, PRODL)  Thanh ghi đếm chương trình (PC: Program Counter) có 21 bit bao gồm ghi PCL(PC-Low) chứa bit từ 7-0, ghi PCH (PC-High) chứa bit từ 15-8, ghi PCU (PC-upper) chứa bit từ 20-16  Thanh ghi trỏ ngăn xếp STKPTR (Stack Pointer)  31 mức ngăn xếp (31 level stack)  Thanh ghi lựa chọn băng (BSR: Bank Select Register)  Thanh ghi trỏ liệu gián tiếp FSR (Indirect Data Memory Address Pointer) Bộ nhớ (Memory):  Bộ nhớ chương trình (Program Memory) bao gồm 32 Kbytes nhớ ROM (Read-only Memory) kiểu Flash  Bộ nhớ liệu (Data Memory) bao gồm 1536 byte SRAM (Static Random Access Memory), 256 byte EEPROM Bộ phát xung hệ thống (Oscillator): Nguồn xung từ bên từ phát xung hệ thống qua nhân chia tần số để lựa chọn lấy tần số thích hợp để làm xung hệ thống  Nguồn xung đưa vào chip qua chân OSC1 OSC2  Nguồn xung phụ đưa vào chip qua chân T1OSI, T1OSO  Bộ phát xung nội INTRC tần số 31kHz  Bộ phát xung nội chíp tần số MHz Watchdog Timer (WDT): timer có chức đặc biệt, bị tràn khởi động lại hệ thống Thời gian khởi động lại hệ thống lựa chọn từ 4ms đến 131,072s WDT khởi tạo đầu chương trình, thân chương trình “chèn” lệnh reset WDT cho vi điều khiển thực lệnh, WDT chưa bị tràn Mục đích việc sử dụng WDT tránh cho vi điều khiển vơ tình thực phải vịng lặp chết (dead loop) mà khơng Bộ nạp chương trình: Bộ nạp chương trình nối tiếp chip (Single-Supply In-Circuit Serial Programming) giúp nạp chương trình từ mạch nạp vào nhớ ROM qua chân PGM, PGC PGD  Bộ Debugger (In-Circuit Debugger): Mạch Debugger chíp giúp người lập trình kiểm sốt lỗi chương trình cách cho vi điều khiển hoạt động chế độ chạy lệnh, nhóm lệnh hay tồn chương trình  Khối phát tín hiệu reset: Mạch phát tín hiệu reset có khả phát 03 nguồn reset:  Reset từ chân MCLR  Reset bật nguồn (POR: Power-on Reset)  Reset nguồn yếu (BOR : Brown-out Reset)  Khối quản lý lỗi phát xung (Fail-Safe Clock Monitor): Khối dụng để quản lý an toàn phát xung hệ thống  Khối định thời khởi động phát xung (Oscillator Start-up Timer): Khối sử dụng để tạo thời gian trễ chờ cho phát xung ổn định  Thiết bị ngoại vi (Peripheral): PIC18f4520 tích hợp thiết bị ngoại vi sau:  Bộ phát điện áp cao/thấp HLVD(High/low-Voltage Detect)  Bộ nhớ lưu liệu tắt nguồn EEPROM  04 đếm, định thời 16 bit: Timer0, Timer1, Timer2 Timer3  01 so sánh tín hiệu tương tự (Comparator)  02 CCP1, CCP2 (Capture, Compare, PWM : Chụp, So sánh, xung Pwm); 01 ECCP (Enhanced CCP)  01 cổng truyền thông nối tiếp đồng (Master Synchronous Serial Port) hoạt động chế độ SPI I2C  01 cổng truyền thông nối tiếp đồng bộ/không đồng tăng EUSART (Enhanced Universal Synchronous Asynchronous Receiver Transmitter), giúp vi điều khiển PIC giao tiếp với giao tiếp với cổng COM máy tính  13 kênh biến đổi tương tự - số (ADC) độ phân giải 10 bit  Khối giao tiếp vào/ra số: Vi điều khiển PIC18F4520 có cổng vào/ra A, B, C, D E Mỗi cổng có ghi đệm liệu tương ứng PORTA, PORTB, PORTC, PORTD PORTE, ghi định địa theo byte theo bit  PORTA : RA7 - RA0  PORTB : RB7 - RB0  PORTC : RC7 - RC0  PORTD : RD3 - RD0  PORTE : RE3-RE0 SƠ ĐỒ CHÂN Sơ đồ chân dạng PDIP (Lead Plastic Dual In-Line Package) Hình 2.2 Sơ đồ chân PIC 18F4520 dạng PDIP TỔ CHỨC BỘ NHỚ Bộ nhớ vi điều khiển PIC 18F4520 bao gồm loại:  Bộ nhớ chương trình (Program memory)  Bộ nhớ liệu RAM (Data RAM)  Bộ nhớ liệu EEPROM (Data EEPROM) Bộ nhớ PIC 18F4520 thiết kế theo kiến trúc Havard, nhớ chương trình nhớ liệu thiết kế riêng đường Bus, cho phép CPU truy cập lúc tới nhớ chương trình nhớ liệu Bộ nhớ liệu EEPROM sử dụng để lưu trữ liệu điện Bộ nhớ chương trình Thanh ghi đếm chương trình PC (Program Counter) PIC 18F4520 có 21 bit nên địa hóa Mbyte nhớ chương trình Bộ nhớ Flash PIC 18F4520 có dung lượng 32 Kbyte nên chứa 16384 lệnh từ đơn (single-word instructions), với dải địa từ 0000h đến 7FFFh Nếu đọc vùng nhớ 32Kbyte PIC 18F4520 khoảng Mbyte mà quản lý giá trị liệu trả “0” PIC 18F4520 có 31 mức ngăn xếp 10 Vector Reset PIC 18F4520 đặt địa 0000h, reset nội dung ghi đếm chương trình PC xóa Các ghi PIC 18F4520 tải lại giá trị mặc định Hình 2.3 Sơ đồ tổ chức nhớ chương trình ngăn xếp Vector ngắt ưu tiên cao (High-Priority Interrupt Vector) đặt địa 0008h, vector ngắt ưu tiên thấp (Low-Priority Interrupt Vector) đặt địa 0018h Thanh ghi đếm chương trình PC 21 bit chứa ghi bit riêng biệt, bit thấp chứa ghi PCL, bit chứa ghi PCH, bit cao chứa thi PCU Thanh ghi PCH PCU không cho phép truy cập trực tiếp mà phải truy cập thông qua hai ghi PCLATH PCLATU tương ứng PIC 18F4520 đươc thiết kế theo kỹ thuật đường ống lệnh (Instruction Pipelining) nên việc thực lệnh PC-2 đọc mã lệnh PC diễn thời điểm 122 Truyền thông nối tiếp USART thường sử dụng tốc độ baud chẵn như: 300, 600, 1200, 2400, 4800, 9600, 19200 v.v Trên thực tế vi điều khiển PIC18F4520 thường sử dụng loại thạch anh 40MHz, 20MHz, 16MHz, 10Mhz, 8MHz, 4MHz v.v Vì vậy, khó chọn giá trị nạp vào ghi điều chỉnh tốc độ baud SPBRG để tạo tốc độ baud mong muốn Cơng thức tính sai số: 𝑆𝑎𝑖 𝑠ố = 𝑡ố𝑐 độ 𝑡í𝑛ℎ 𝑡𝑜á𝑛 𝑡ℎự𝑐 𝑡ế – 𝑡ố𝑐 độ 𝑚𝑜𝑛𝑔 𝑚𝑢ố𝑛 (%) 𝑡ố𝑐 độ 𝑚𝑜𝑛𝑔 𝑚𝑢ố𝑛 Ví dụ: Với tần số thạch anh FOSC = 16MHz, tốc độ truyền thông mong muốn 9600, chế độ không đồng bộ, bit BRG: Tốc độ mong muốn = FOSC/(64([SPBRGH:SPBRG]+1)) Giá trị cần nạp vào cặp ghi SPBRGH:SPBRG: X = ((FOSC/ tốc độ mong muốn)/64) – = ((16000000/9600)/64) – = 25.042 Giá trị nạp vào cặp ghi SPBRGH:SPBRG phải số nguyên nên làm trịn 25 Tốc độ tính tốn thực tế = 16000000/(64 (25 + 1)) = 9615 = (9615 – 9600)/9600 = 0.16% Sai số - Các ghi liên quan đến điều chỉnh tốc độ baud (BRG): Tên Bit Bit Bit Bit Bit Bit Bit Bit TXSTA CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D RCIDL RXDTP TXCKP BRG16 — WUE ABDEN BAUDCON ABDOVF SPBRGH EUSART Thanh ghi tạo tốc độ baud byte cao SPBRG EUSART Thanh ghi tạo tốc độ baud byte cao Ghi chú: — Không sử dụng, đọc ‘0’ Các ô tô màu không sử dụng BRG Bảng 10.2 Tổng hợp ghi liên quan đến điều chỉnh tốc độ baud (BRG) CÁC CHẾ ĐỘ KHƠNG ĐỒNG BỘ 123 Chế độ khơng đồng lựa chọn bit SYNC (TXSTA) bị xóa (=0) Trong chế độ này, EUSART sử dụng tiêu chuẩn Non-Return-to-Zero (NRZ) Tiêu chuẩn NRZ biểu diễn bit mức điện áp cao, bit mức điện áp thấp không sử dụng mức điện áp trung tính Định dạng khung truyền NRZ chế độ bao gồm bit Start (bit khởi đầu khung truyền), bit liệu kết thúc khung truyền bit Stop (bit kết thúc khung truyền) Định dạng liệu phổ biến bit Bộ EUSART truyền/nhận bit liệu có trọng số thấp (LSb) trước Hoạt động truyền nhận EUSART độc lập sử dụng chung định dạng khung truyền tốc độ baud Kiểm tra chẵn lẻ không hỗ trợ phần cứng thực phần mềm lưu trữ bit thứ Khi hoạt động chế độ không đồng bộ, EUSART thực số tính quan trọng sau:      Tạo tốc độ baud (BRG) Mạch lấy mẫu Truyền không đồng Nhận không đồng Tự động đánh thức(Auto-Wake-up) ký tự đồng khung (Sync Break Character)  Truyền 12 bit ký tự ngắt khung (12-bit Break Character)  Hoạt động truyền EUSART chế độ không đồng Thanh ghi TSR (Transmit (Serial) Shift Register) sử dụng để dịch bit liệu nối tiếp từ bit trọng số thấp nhấp LSb đến bit có trọng số cao MSb chân TX Thanh ghi TSR không cho phép đọc/ghi phần mềm Thanh ghi TXREG sử dụng để đệm liệu cho ghi TSR Dữ liệu cần truyền nạp vào ghi TXREG, sau liệu nạp tự động từ TXREG sang TSR Thanh ghi TSR chưa nạp liệu bit Dừng (Stop) trước chưa truyền Ngay sau bit Dừng truyền liệu nạp vào TRS (nếu có liệu TXREG) Ngay sau liệu nạp từ TXREG sang TSR (trong chu kỳ máy), ghi TXREG rỗng cờ ngắt truyền TXIF (PIR1) thiết lập (=1) Bit TXIF sử dụng để biết trạng thái ghi TXREG, bit TRMT (TXSTA) sử dụng để biết trạng thái ghi TSR Bit TRMT phép đọc, thiết lập TSR rỗng Hoạt động ngắt khơng gắn liền với bit này, sử dụng để báo trạng thái rỗng ghi TSR 124 Các bước để truyền liệu chế độ không đồng bộ:  Bước Khởi tạo giá trị cho cặp ghi SPBRGH:SPBRG, thiết lập xóa bit BRGH BRG16 để đạt tốc độ truyền mong muốn (theo bảng chế độ công thức tính tốc độ baud)  Bước Xóa bit SYNC (TXSTA) phép chế độ không đồng thiết lập bit SPEN (RCSTA) phép PORT nối tiếp  Bước Nếu muốn sử dụng ngắt cần phải thiết lập bit TXIE  Bước Để thiết lập khung truyền - bit cần thiết lập bit TX9 (TXSTA) Khi bit - sử dụng để chứa địa / liệu bit kiểm tra chẵn lẻ  Bước Cho phép truyền liệu bit TXEN  Bước Nếu khung truyền bit lựa chọn, bit thứ cần nạp vào TX9D  Bước Nạp liệu cần truyền vào ghi TXREG (quá trình truyền liệu bắt đầu)  Bước Nếu sử dụng ngắt, cần chắn bit GIE PEIE ghi INTCON (INTCON) thiết lập Sơ đồ khối hoạt động truyền EUSART chế độ khơng đồng bộ: Hình 10.2 Sơ đồ khối truyền liệu EUSART chế độ không đồng Giản đồ thời gian hoạt động truyền khơng đồng bộ: 125 Hình 10.3 Sơ đồ khối hoạt động truyền không đồng Giản đồ thời gian hoạt động truyền không đồng (truyền liên tiếp byte): Hình 10.4 Sơ đồ khối hoạt động truyền không đồng (truyền liên tiếp byte) Các ghi liên quan đến hoạt động truyền không đồng bộ: Name Bit Bit Bit Bit Bit Bit Bit Bit INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF PIR1 PSPIF(1) ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF PIE1 PSPIE(1) ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE IPR1 PSPIP(1) ADIP RCIP TXIP SSPIP CCP1IP TMR2IP TMR1IP RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D TXREG Thanh ghi truyền liệu EUSART TXSTA CSRC BAUDCON ABDOVF SPBRGH Thanh ghi tạo tốc độ baud byte cao EUSART SPBRG Thanh ghi tạo tốc độ baud thấp cao EUSART TX9 TXEN SYNC SENDB BRGH TRMT TX9D RCIDL RXDTP TXCKP BRG16 — WUE ABDEN Bảng 10.3 Các ghi liên quan đến hoạt động truyền không đồng  Hoạt động nhận EUSART chế độ không đồng 126 Sơ đồ khối hoạt động nhận chế độ bất động thể hình 2.14 Dữ liệu nhận qua chân RX khối phục hồi liệu Chế độ thường sử hệ thống truyền thơng RS-232 Hình 10.5 Sơ đồ khối nhận liệu EUSART chế độ không đồng Các bước để truyền liệu chế độ không đồng bộ:  Bước Khởi tạo giá trị cho cặp ghi SPBRGH:SPBRG, thiết lập xóa bit BRGH BRG16 để đạt tốc độ truyền mong muốn (theo bảng chế độ cơng thức tính tốc độ baud)  Bước Xóa bit SYNC (TXSTA) phép chế độ không đồng thiết lập bit SPEN (RCSTA) phép PORT nối tiếp  Bước Nếu sử dụng ngắt cần phải thiết lập bit RCIE  Bước Để cho phép nhận bit thứ cần phải thiết lập bit RX9(RCSTA)  Bước Thiết lập bit CREN phép hoạt động nhận  Bước Bit cờ ngắt RCIF thiết lập hoạt động nhận hoàn thành, ngắt xảy bit cho phép ngắt RCIE thiết lập trước  Bước Đọc bit RX9D (RCSTA) để có bit thứ (nếu khung truyền bit cho phép), vào bit thứ để phát lỗi khung truyền  Bước Đọc bit liệu nhận ghi RCREG  Bước Nếu phát liệu nhận bị lỗi, xóa lỗi cách xóa bit cho phép nhận CREN  Bước 10 Nếu sử dụng ngắt, cần chắn bit GIE PEIE ghi INTCON (INTCON) thiết lập  Hoạt động dò tìm địa chế độ nhận bit 127 Chế độ thường sử dụng hệ thống truyền thông RS-485 Các bước để nhận không đồng cho phép tự động phát địa chỉ:  Bước Khởi tạo giá trị cho cặp ghi SPBRGH:SPBRG, thiết lập xóa bit BRGH BRG16 để đạt tốc độ truyền mong muốn (theo bảng chế độ cơng thức tính tốc độ baud)  Bước Xóa bit SYNC (TXSTA) phép chế độ không đồng thiết lập bit SPEN (RCSTA) phép PORT nối tiếp  Bước Nếu sử dụng ngắt cần phải thiết lập bit RCIE lựa chọn mức ưu tiên ngắt bit RCIP  Bước Thiết lập bit RX9 phép hoạt động nhận bit  Bước Thiết lập bit ADDEN phép phát địa  Bước Cho phép hoạt động nhận bit CREN  Bước Bit cờ ngắt RCIF thiết lập hoạt động nhận hoàn thành Ngắt xảy bit RCIE GIE thiết lập trước  Bước Đọc ghi RCSTA để xác đinh lỗi có xảy hoạt động nhận, đọc bit liệu thứ (nếu có)  Bước Đọc ghi RCREG để phát thiết bị có địa phù hợp  Bước 10 Nếu phát lỗi xảy cần phải xóa bit CREN  Bước 11 Nếu thiết bị phù hợp địa phát hiện, cần xóa bit ADDEN để nhận liệu vào đệm nhận ngắt CPU Giản đồ thời gian hoạt động nhận không đồng bộ: Hình 10.6 Giản đồ thời gian hoạt động nhận không đồng Các ghi liên quan đến chế độ nhận không đồng bộ: 128 Name Bit Bit Bit Bit Bit Bit Bit Bit GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF PIR1 PSPIF(1) ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF PIE1 PSPIE(1) ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE IPR1 PSPIP(1) ADIP RCIP TXIP SSPIP CCP1IP TMR2IP TMR1IP SPEN RX9 SREN CREN ADDEN FERR OERR RX9D INTCON RCSTA Thanh ghi nhận liệu EUSART RCREG CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D BAUDCON ABDOVF RCIDL RXDTP TXCK P BRG16 — WUE ABDEN SPBRGH Thanh ghi tạo tốc độ baud byte cao EUSART SPBRG Thanh ghi tạo tốc độ baud byte thấp EUSART TXSTA Bảng 10.4 Các ghi liên quan đến hoạt động nhận không đồng NGẮT USART Ngắt từ USART xảy kết thúc trình truyền ký tự (ngắt truyền) kết thúc trình nhận ký tự (ngắt nhận) Để đặt ngắt từ USART, ta cần ý thêm bit sau:  Bit cho phép ngắt nhận RCIE (thanh ghi PIE1); bit ưu tiên ngắt nhận RCIP (thanh ghi IPR1)  Bit cho phép ngắt truyền TXIE (thanh ghi PIE1); bit ưu tiên ngắt nhận TXIP (thanh ghi IPR1) Khi xảy ngắt, cờ ngắt tương ứng thiết lập: Với ngắt truyền bit TXIF (thanh ghi PIR1); Với ngắt nhận bit RCIF (thanh ghi PIR1) Các cờ ngắt cần xóa phần mềm  Một số hàm thông dụng thư viện usart.h Bảng 8.5 liệt kê hàm thư viện usart.h Hàm BusyUSART CloseUSART Mô tả Hàm báo bận hoạt động truyền nối tiếp Cấm USART OpenUSART Cấu hình PORT nối tiếp putsUSART ReadUSART WriteUSART Truyền mảng PORT USART Đọc byte từ PORT USART Truyền byte PORT USART Bảng 10.5 Các hàm thư viện usart.h • Hàm : BusyUSART 129 Chức năng: Nguyên mẫu: Chú thích: Giá trị trả về: Hàm báo bận hoạt động truyền nối tiếp char BusyUSART( void ); Sử dụng để báo trạng thái truyền PORT nối tiếp Bằng nếu hoạt động truyền trạng thái nghỉ Bằng truyền Ví dụ: while (BusyUSART()); • Hàm : OpenUSART Chức năng: Cấu hình cho PORT nối tiếp Nguyên mẫu: void OpenUSART( unsigned char config, unsigned int spbrg); Các đối số: “config”: dùng thiết lập thông số sau cho USART (các thơng số thiết lập đồng thời tốn tử “&”): Thơng số 1: USART_TX_INT_ON: cho phép ngắt truyền USART_TX_INT_OFF: cấm ngắt truyền Thông số 2: USART_RX_INT_ON: cho phép ngắt nhận USART_RX_INT_OFF: cấm ngắt nhận Thông số 3: USART_ASYNCH_MODE: Chọn chế độ cận đồng (Asynchronous Mode) USART_SYNCH_MODE: Chọn chế độ đồng (Synchronous Mode) Thông số 4: USART_EIGHT_BIT: Chọn chế độ truyền/nhận bit (8-bit transmit/receive) USART_NINE_BIT: Chọn chế độ truyền/nhận bit (9-bit transmit/receive) Thông số 5: USART_SYNC_SLAVE: Chọn chế độ tớ (Synchronous Slave mode) USART_SYNC_MASTER: Chọn chế độ chủ (Synchronous Master mode) Thông số 6: USART_SINGLE_RX: Chọn chế độ nhận byte (Single reception) USART_CONT_RX: Chọn chế độ nhận liên tục byte (Continuous reception) 130 Thông số 7: USART_BRGH_HIGH: Chọn tốc độ baud cao (High baud rate) USART_BRGH_LOW: Chọn tốc độ baud thấp (Low baud rate) “spbrg”: dùng để đặt tốc độ baud, tính sau: o Với chế độ cận đồng bộ, tốc độ baud cao (Asynchronous mode, high speed):  Tốc độ baud=Fosc/ (16 * (spbrg+ 1)) o Với chế độ cận đồng bộ, tốc độ baud thấp (Asynchronous mode, low speed):  Tốc độ baud=Fosc/ (64 * (spbrg+ 1)) o Với chế độ đồng (Synchronous mode):  Tốc độ baud=Fosc/ (4 * (spbrg+ 1)) Chú thích : Sử dụng để đặt thơng số USART Ví dụ: OpenUSART( USART_TX_INT_OFF & //khong su dung ngat truyen USART_RX_INT_OFF & //khong su dung ngat nhan USART_ASYNCH_MODE & //che can dong bo USART_EIGHT_BIT & //truyen/nhan 8bit USART_CONT_RX & //cho phep nhan lien tiep USART_BRGH_HIGH, //toc baud: 51 ); //8000000/(16*(51+1))=9615 • Hàm : CloseUSART Chức : Đóng (cấm) USART Nguyên mẫu : void CloseUSART( void ); Chú thích : Hàm gọi khơng sử dụng USART Ví dụ: CloseUSART(); • Hàm : WriteUSART Chức : Ghi byte vào đệm truyền USART Nguyên mẫu : void WriteUSART( char data); Chú thích : Hàm sử dụng để truyền byte Ví dụ: WriteUSART( 0x41); //truyền ký tự A • Hàm : ReadUSART Chức : Nhận byte từ đệm nhận USART Nguyên mẫu : char ReadUSART( void ); Chú thích : Hàm sử dụng để nhận byte Ví dụ: char x; 131 x= ReadUSART(); • Hàm : putsUSART Chức : Nhận byte từ đệm nhận USART Nguyên mẫu : char ReadUSART( void ); Chú thích : Hàm sử dụng để nhận byte Ví dụ: char x; x= ReadUSART(); LẬP TRÌNH SỬ DỤNG USART Ví dụ 1: Cho mạch điện hình 2.16 Viết chương trình cấu hình cho cổng nối tiếp với tốc độ baud 9600, bit liệu Liên tục truyền lên máy tính chuỗi ký tự “ABC” Hình 10.7 Sơ đồ mạch điện giao tiếp vi điều khiển-máy tính Gợi ý thực hiện: Bước 1: Viết chương trình vi điều khiển  Khai báo thư viện cổng nối tiếp usart.h  Sử dụng hàm OpenUSART() để khởi tạo cho cổng nối tiếp, tốc độ truyền nhận 9600, bit liệu, không sử dụng ngắt  Sử dụng hàm WriteUSART() để truyền byte cổng nối tiếp Đổi ký tự muốn hiển thị mã ASCII để truyền lên máy tính  Sử dụng hàm BusyUSART() để kiểm tra cờ bận (hàm BusyUSART() trả tương ứng cổng nối tiếp bận ngược lại) 132 Dưới chương trình tham khảo: #include #include #include #include #pragma config OSC = HS #pragma config MCLRE = ON #pragma config WDT = OFF void main() { TRISC=0X80; // dat chan RC7/RX chieu vao //Thiet lam cac thong so cho USART OpenUSART( USART_TX_INT_OFF & //khong su dung ngat truyen USART_RX_INT_OFF & //khong su dung ngat nhan USART_ASYNCH_MODE & USART_EIGHT_BIT & USART_CONT_RX & //che can dong bo //truyen/nhan 8bit //cho phep nhan lien tiep USART_BRGH_HIGH, //toc baud: 51 ); //8000000/(16*(51+1))=9615 PIR1bits.TXIF=1; //dat co de truyen byte dau tien while(1) { while (BusyUSART()); WriteUSART(0x41); while (BusyUSART()); WriteUSART(0x42); while (BusyUSART()); WriteUSART(0x43); } } Bước 2:  Kết nối USART với cổng Com (hoặc cổng com ảo) máy tính  Mở Hyper Teminal thiết lập thông số của cổng Com giống thiết lập với USART Ví dụ 2: Viết chương trình cấu hình USART với tốc độ 9600, bit liệu Truyền lên máy tính hiển thị chuỗi ký tự sau Hyper Terminal: “DU AN DAO TAO JICA” “VI DIEU KHIEN PIC” Gợi ý thực hiện: 133  Các bước thực ví dụ  Một số lưu ý:  Sử dụng hàm sprintf() để đổi ký tự muốn hiển thị thành mã ascii  Sử dụng hàm truyền chuỗi ký tự putsUSART() để truyền ký tự mảng qua USART Dưới số điểm chương trình: #include … void main() { char M[100]; … while(1) { sprintf(&M[0], " DU AN DAO TAO JICA \n"); putsUSART(&M[0]); WriteUSART(0x0d); //ve dau dong sprintf(&M[0], " VI DIEU KHIEN PIC \n"); putsUSART(&M[0]); WriteUSART(0x0d); } } Ví dụ 3: Sử dụng phần mềm mô Proteus vẽ mạch điện hình 8.8 Viết chương trình điều khiển theo yêu cầu: (1) Liên tục đọc trạng thái PS, nhấn, gửi ký tự “0”, nhả gửi ký tự “1” qua USART (2) Sử dụng ngắt USART để nhận ký tự “0” “1” Nếu nhận “1”, điều khiển LED D1 sáng; Nếu nhận “0”, điều khiển LED D1 tắt (3) Sử dụng bit ghi liên quan để thiết lập thông số cho USART Gợi ý thực hiện:  Vẽ mạch mô phỏng, sử dụng công cụ “VIRTUAL TERMINAL” để quan sát ký tự truyền/nhận qua USART  Thiết lập thơng số cho USART theo trình tự sau: (1) Ghi giá trị n vào cặp ghi SPBRGH: SPBRG để có tốc độ baud cần đặt n= ((FOSC / Tốc độ baud cần đặt) / 64) – BRGH(TXSTA) = 0; n = ((FOSC/Tốc độ baud cần đặt)/16) – BRGH(TXSTA) = 134 Thiết lập/xóa bit BRGH (TXSTA) BRG16 (BAUDCON) để có tốc độ baud theo yêu cầu (2) Chọn chế độ đồng bộ/dị cách thiết lập/xóa bit SYNC; Cho phép USART cách thiết lập bit SPEN (3) Thiết lập bit RCIE cho phép ngắt nhận, bit TXIE cho phép ngắt truyền (4) Chọn chế độ truyền nhận bit cách xóa bit TX9 (5) Cho phép truyền/nhận cách thiết lập bit TXEN; Cho phép nhận liên tiếp ký tự cách thiết lập bit CREN (6) Thiết lập bit IPEN, GIEH, RCIP để đặt ngắt nhận USART vector cao Hình 10.8 Mạch điện mơ ví dụ Dưới chương trình tham khảo: #include #include #include #include #pragma config OSC = HS #pragma config MCLRE = ON #pragma config WDT = OFF void high_isr(); void putchar(char x); void interrupt_at_high_vector(); #pragma code high_vector = 0x08 void interrupt_at_high_vector() { if(PIR1bits.RCIF) high_isr(); 135 } #pragma code #pragma interrupt high_isr void high_isr() { if (RCREG==0x30) PORTBbits.RB7=0; else PORTBbits.RB7=1; PIR1bits.RCIF=0; } void putchar(char x) { while (!PIR1bits.TXIF); PIR1bits.TXIF=0; TXREG=x; } void main() { TRISC=0b10000000; // dat chan RC7 chieu vao TRISB=0x04; PORTB&=0x00; PORTC&=0x00; ADCON1=0x0F; //1 SPBRG=51; // toc baud: 9615 SPBRGH=0; TXSTAbits.BRGH=1; //USART toc cao BAUDCONbits.BRG16=0; //Thanh ghi toc baud: 8bit TXSTAbits.SYNC=0; //Asynchronous mode RCSTAbits.SPEN=1; //Serial port enabled PIE1bits.RCIE=1; // ngat nhan TXSTAbits.TX9=0; //truyen nhan 8bit RCSTAbits.CREN=1; //Nhan lien tiep TXSTAbits.TXEN=1; //Cho phep truyen/nhan RCONbits.IPEN=1; INTCONbits.GIE_GIEH=1; IPR1bits.RCIP=1; while(1) { if(PORTBbits.RB2) putchar(0x31); if(!PORTBbits.RB2) putchar(0x30); } } 136 TÀI LIỆU THAM KHẢO Cape Wiki, Tutorial – PIC Programming Basic,Microchip, 2002 Darrel Johansen, MPLAB SIM, Microchip Technology, 2006 Darrel Johansen, MPLAB C18, Microchip Technology Inc, 2006 ... cho vi điều khiển họ PIC1650 thiết kế để dùng làm thiết bị ngoại vi cho vi điều khiển CP1600 Vi điều khiển sau nghiên cứu phát triển thêm từ hình thành nên dịng vi điều khiển PIC ngày Hình 1.1 Vi. .. 5 Ở Vi? ??t Nam phổ biến họ vi điều khiển PIC hãng Microchip sản xuất Cách lựa chọn vi điều khiển PIC phù hợp: Trước hết cần ý đến sốchân vi điều khiển cần thiết cho ứng dụng Có nhiều vi điều khiển. .. có vi điều khiển có chân, ngồi cịn có vi điều khiển 28, 40, 44, … chân Cần chọn vi điều khiển PIC có nhớ flash để nạp xóa chương trình nhiều lần hơn, cần ý đến khối chức tích hợp sẵn vi điều khiển,

Ngày đăng: 03/03/2021, 08:35

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan