Microsoft Word Bai Giang LT Vi xu ly Khoa CNDT docx Bài giảng KỸ THUẬT VI XỬ LÝ 119 CHƯƠNG 8 TRUYỀN DỮ LIỆU Trình bày được cấu trúc và tập lệnh của VĐK PIC và các thanh ghi liên quan đến các Modul UART, Modul MSSP của VĐK PIC Trình bày được nguyên lý hoạt động và điều khiển Modul UART, Modul MSSP của VĐK PIC ở các chế độ cơ bản của VĐK PIC Xây dựng được mô hình, phân tích và thiết kế, vẽ lưu đồ và lập trình ứng dụng Modul UART, Modul MSSP của VĐK PIC cho các ứng dụng 8 1 Tổng quan về các kiểu tr.
Bài giảng KỸ THUẬT VI XỬ LÝ CHƯƠNG 8: TRUYỀN DỮ LIỆU - Trình bày cấu trúc tập lệnh VĐK PIC ghi liên quan đến Modul UART, Modul MSSP VĐK PIC - Trình bày nguyên lý hoạt động điều khiển Modul UART, Modul MSSP VĐK PIC chế độ VĐK PIC - Xây dựng mơ hình, phân tích thiết kế, vẽ lưu đồ lập trình ứng dụng Modul UART, Modul MSSP VĐK PIC cho ứng dụng 8.1 Tổng quan kiểu truyền liệu + Truyền liệu đồng không đồng bộ: USART viết tắt cho Universal Synchronous Asynchronous Receiver Transmitter (Bộ thu phát đồng bộ/ bất đồng bộ) cho phép vi điều khiển PIC giao tiếp với tầm rộng thiết bị khác từ chip nhớ riêng biệt LCD hiển thị tinh thể lỏng, tới máy tính! Điều bao gồm gửi hay nhận gói liệu bit hay bit (nghĩa byte hay byte cộng thêm bit kiểm tra chẵn/lẻ) Bit chẵn lẻ bit phụ gửi kèm với liệu mà giúp kiểm tra lỗi Nếu có số lẻ số byte liệu (thí dụ b’00110100’), bit parity có số chẵn số (thí dụ b’00110011’) bit parity Trong giảng này, có lỗi (ví dụ lật bit) diễn lúc gửi byte nhận bit parity khơng cịn khớp loại liệu Bên nhận biết có sai sót u cầu gửi lại byte Nếu có bit lỗi xảy việc truyền, bit parity xuất đúng, nhiên hai lỗi diễn đồng thời nhỏ hơn, điều thường bị bỏ qua + Chế độ USART có chế độ (mode) chính: hoạt động đồng bất đồng Trong hoạt động bất đồng bộ, chân phát (TX-transmitter) từ thiết bị nối với chân thu (RX-Receiver) thiết bị liệu hoán đổi (được gọi song công-full duplex) Trong chế độ đồng bộ, xung clock (CK) đường liệu (DT) chia sẻ số thiết bị (một chủ (master) hay nhiều tớ (Slaves)) Chủ chịu trách nhiệm tạo xung clock đồng Trong hai trường hợp, tốc độ liệu gửi phát (và mong đợi thu) biết đến tốc độ baud + Master Synchronous Serial Port (MSSP) Module: Môđun port nối tiếp đồng chủ giao tiếp nối tiếp, có ích cho truyền thông với thiết bị vi điều khiển hay ngoại vi khác Những thiết bị ngoại vi EEPROM nối tiếp, ghi dịch, hiển thị, chuyển đổi A/D,vv… Mơ đun MSSP hoạt động hai chếđộ: Giao tiếp ngọai vi nối tiếp (Serial Peripheral Interface - SPI) Mạch tích hợp liên kết (Inter-Integrated Circuit - I2C) 8.2 Modul UART VĐK PIC 119 Bài giảng KỸ THUẬT VI XỬ LÝ a Khảo sát ghi truyền liệu UART + Có hai ghi để cấu hình/kiểm sốt việc nhận phát liệu: RCSTA TXSTA Dữ liệu mà đọc thành công lưu vào ghi RCREG, liệu mà gửi nên đặt ghi TXREG Tốc độ baud đặt sử dụng ghi SPBRG + Trong chế độ bất đồng bộ, USART lấy kí tự bit hay bit để gửi, thêm bit bắt đầu (start bit -bit 0) đầu, bit dừng (stop bit - bit) vào cuối để tạo nên chuỗi 10 hay 11 bit Điều chuyển vào ghi dịch mà quay bit vào chân phát (TX) Môđun nhận liên tục kiểm tra trạng thái chân thu RX, mà bình thường mức cao Nếu dị thấy chân RX xuống mức thấp (bit start – bit 0), lấy thêm mẫu bit (cho phép lên xuống chậm lần) lấy giá trị ba Nếu giá trị 0, khẳng định thực bit bắt đầu tiến hành lấy mẫu bit với mẫu bit Thời gian mẫu tốc độ baud Khi đạt đến bit dừng, phải đọc bit 1, ngược lại khẳng định kí tự thu bị lỗi Nhớ với thiết lập phù hợp TXSTA RCSTA, tất điều thực tự động cho bạn mơđun USART + Bạn dùng chế độ bất đồng để giao tiếp với port nối tiếp RS232 máy tính PC Cách đơn giản để gửi byte thông qua port nối tiếp PC sử dụng chương trình kèm Microsoft Windows gọi Hyper Terminal Bạn tạo 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, kí tự mà bạn gõ gửi (như mã ASCII) thông qua port nối tiếp Kí tự mà nhận hiển thị lên hình Cả hai chế độ đồng bất đồng hỗ trợ đặc tính biết dị tìm địa mà cho phép số thiết bị kết nối Khi gửi liệu, byte địa phải gửi để nhận diện nơi nhận dự định + Bộ tạo tốc độ baud hỗ trợ chế độ bất đồng đồng USART Nó tạo tốc độ baud bit Thanh ghi SPBRG (địa 99H) điều khiển chu kì định bit chạy tự Trong chế độ bất đồng bit BRGH (TXSTA) kiểm soát tốc độ baud Trong chế độ đồng bộ, bit BRGH bị bỏ qua Cơng thức tính tốc độ baud sau: 120 Bài giảng KỸ THUẬT VI XỬ LÝ 121 Bài giảng KỸ THUẬT VI XỬ LÝ 122 Bài giảng KỸ THUẬT VI XỬ LÝ b Các kiểu truyền liệu UART VĐK + Trong mode kiểu truyền liệu không đồng (UART), USART sử dung dạng NRZ (Non-Return –to-Zero) chuẩn (một bit bắt đầu(start), hay bit liệu, bit dừng(stop)) Dạng liệu thông dụng bit Một tạo tốc độ baud bit có sẵn chip dùng để tạo tần số tốc độ baud chuẩn từ tần số thạch anh hệ thống USART phát nhận bit LSB trước tiên Bộ phát thu độc lập chức sử dụng chung dạng liệu tốc độ baud Bộ tạo tốc độ baud tạo xung clock, x16 hay x64 tốc độ dịch bit phụ thuộc vào bit BRGH (TXSTA) 123 Bài giảng KỸ THUẬT VI XỬ LÝ Chẵn lẻ (parity) không hỗ trợ phần cứng thực phần mềm (và lưu bit liệu thứ 9) Mode bất đồng bị dừng Sleep Mode bất đồng chọn cách xóa bit SYNC (TXSTA) Mơđun bất đồng USART gồm 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ộ thu bất đồng + Khi thiết lập phát bất đồng bộ, bạn theo bước sau: Khởi động ghi SPBRG cho tốc độ baud phù hợp Nếu tốc độ baud tốc độ cao mong muốn ta bật (lên 1) bit BRGH Cho phép port nối tiếp bất đồng cách xóa bit SYNC bật bit SPEN Nếu ngắt mong muốn, ta bật bit cho phép TXIE Nếu truyền bit mong muốn, ta bật bit truyền TX9 Cho phép truyền cách bật bit TXEN mà bật bit TXIF 124 Bài giảng KỸ THUẬT VI XỬ LÝ Nếu truyền bit chọn, bit thứ nạp vào bit TX9D Kiểm tra nhớ đệm (thanh ghi dịch – bit TRMT)đang trống trước nạp liệu truyền Nạp liệu vào ghi TXREG (bắt đầu truyền) Nếu dùng ngắt, đảm bảo GIE PEIE (bit 6) ghi INTCON bật + Các ghi dùng phát bất đồng USART: + Dữ liệu nhận chân RC7/RX/DT đến khối phục hồi liệu Khối khôi phục liệu thực chất dịch tốc độ cao, hoạt động 16x tốc độ baud, dịch nối tiếp thu hoạt động tốc độ bit hay Fosc + Khi thiết lập thu bất đồng bộ, bạn theo bước sau: Khởi động ghi SPBRG cho tốc độ baud phù hợp Nếu tốc độ baud tốc độ cao chọn, ta bật bit BRGH Cho phép port nối tiếp bất đồng cách xóa bit SYNC bật bit SPEN Nếu ngắt mong muốn, ta bật bit cho phép RCIE Nếu nhận bit mong muốn, ta bật bit RX9 Cho phép nhận cách bật bit CREN Bit cờ RCIF bật (=1) nhận hoàn thành ngắt tạo bit cho phép RCIE bật Đọc ghi RCSTA để nhận bit thứ (nếu cho phép) xác định xem có lỗi xảy trình nhận (thu) Đọc liệu nhận bit cách đọc ghi CRREG Nếu có lỗi xảy ra, xố lỗi cách xóa bit cho phép CREN Nếu dùng ngắt, đảm bảo GIE PEIE (bit 6) ghi INTCON bật 125 Bài giảng KỸ THUẬT VI XỬ LÝ + Các ghi dung phát bất đồng USART: 126 Bài giảng KỸ THUẬT VI XỬ LÝ c Ứng dụng truyền liệu UART Ví dụ 1: Viết chương trình cho vđk phát chuỗi ký tự dùng kiểu truyền bất đồng bit (UART) Khi vđk nhận ký tự (dùng phương pháp ngắt) hồi âm (feedback/echo) ký tự vừa nhận #define _XTAL_FREQ 4000000 #define uchar unsigned char #define uint unsigned int #define ulong unsigned long #include CONFIG(0x3FFA); void senddata_uart(uchar cdd); void sendstring_uart(const uchar *dd); //*************** main ******************** void main(void) { SYNC=0; // uart mode BRGH=1; // hi-speed mode SPBRG=25; // 9600 baud with 4Mhz crytal SPEN=1; // Enable serial port TRISC7=1; // Rx - Input TRISC6=0; // Tx - Output TXEN=1; // Enable Tx CREN=1; // Enable Continue Receive GIE=1; // Enable Interrupt Receive PEIE=1; RCIE=1; 127 Bài giảng KỸ THUẬT VI XỬ LÝ sendstring_uart("***string 1****\r\n"); sendstring_uart("***STRING 2****\r\n"); sendstring_uart("***STRING 3****\r\n"); sendstring_uart("\r\n"); // \r\n means new lines while(1) { } } //********************* INTTERUPT ***************** void interrupt isr(void) { uchar cd; if(RCIE&&RCIF) { cd=RCREG; // map with Rx UART Int // read byte to cd while(!TRMT); TXREG= cd; // wait until reading complete // echo read byte back to UART sender TRISD = 0; PORTD = cd; // display received byte to led } } //****************** UART send Subroutin ******************* void senddata_uart(uchar cdd) { while(!TRMT); // wait for free buffer TXREG=cdd; } //************************UART send one string************** void sendstring_uart(const uchar *dd) { while((*dd)!=0) { senddata_uart(*dd); dd++; } } d Giao tiếp truyền liệu máy tính VĐK theo kiểu truyền UART + Sử dụng lại chương trình truyền/nhận ký tự để giao tiếp UART với máy tính 128 Bài giảng KỸ THUẬT VI XỬ LÝ { spi_send_byte(byte_send); byte_send ++; delay_ms(500); } } //********************* INTTERUPT ***************** void interrupt isr(void) { } void spi_send_byte(uchar dd) { while (WCOL) ; //Check the SSPBUF collision SSPBUF = dd; while(!SSPIF); SSPIF = 0; } RC0=0; RC0=1; // Latch data to output for 74595 Chú ý: Việc thiết lập thông số SPI cho vđk phụ thuộc vào giản đồ xung 74LS595 sau: 138 Bài giảng KỸ THUẬT VI XỬ LÝ Ví dụ 3: Gửi ký tự từ PIC SPI master đến PIC SPI slave, ký tự Slave thu truyền qua kênh truyền UART để hiển thị (ví dụ UART monitor) #define _XTAL_FREQ 4000000 #define uchar unsigned char #define uint unsigned int #define ulong unsigned long #include CONFIG(0x3FFA); void senddata_uart(uchar cdd); void sendstring_uart(const uchar *dd); void spi_send_byte(uchar dd); uchar byte_send = '0'; uchar recv_byte ; //*************** main ******************** void main(void) { SYNC=0; // uart mode BRGH=1; // hi-speed mode SPBRG=25; // 9600 bps with 4Mhz crytal SPEN=1; // Enable serial port TRISC7=1; // Rx - Input TRISC6=0; // Tx - Output TXEN=1; // Enable Tx CREN=1; // Enable Continue Receive SSPM3=0; SSPM2=1; SSPM1=0; SSPM0=0; // SPI slave mode 139 Bài giảng KỸ THUẬT VI XỬ LÝ SSPIE=1; // Enable received Interrupt CKP=0; CKE=1; // rising edge with Low state SMP=0; // sampling data at the middle bit TRISC3=1; TRISC4=1; TRISC5=0; // RC3/SCK // RC4/SDI // RC5/SDO SSPEN=1; // enable SPI operation WCOL = ; // Init no SSPBUF collision at the begining while(1) { } } //********************* INTTERUPT ***************** void interrupt isr(void) { if(SSPIE&&SSPIF) // map with SSP Int { SSPIF=0; recv_byte = SSPBUF; senddata_uart (recv_byte); } } //****************** UART send Subroutin ******************* void senddata_uart(uchar cdd) { while(!TRMT); // wait until writing complete TXREG=cdd; } //************************UART send one string************** void sendstring_uart(const uchar *dd) { while((*dd)!=0) { senddata_uart(*dd); dd++; } } //****************** SPI send Subroutin ******************* void spi_send_byte(uchar dd) { while (WCOL) ; //Check the SSPBUF collision SSPBUF=dd; } 140 Bài giảng KỸ THUẬT VI XỬ LÝ 8.3.2 I2C a Giới thiệu + Viết tắt Inter-Intergrated Circuit – bus nối tiếp Philip phát triển Trước I2C chủ yếu dùng việc chế tạo hệ thống điện tử sử dụng chip Philip Ngày I2C sử dụng rộng rãi việc kết nối thiết bị ngoại vi tốc độ thấp vào mạch tích hợp b Tổng quan truyền liệu I2C + I2C sử dụng đường truyền tín hiệu chiều (một đường clock đường data), sử dụng hiệu điện 5V kéo lên cao (pull-ups) điện trở Hai chân dung cho truyền liệu: Clock nối tiếp (SCL)-RC3/SCK/SCL Dữ liệu nối tiếp (SDA)-RC4/SDI/SDA + I2C hoạt động theo nhiều mode: mode chuẩn (standard mode) hoạt động tốc độ 100kbit/s, mode tốc độ thấp (low-speed mode) hoạt động tốc độ 10kbit/s Tần số clock cho xuống + I2C có sử dụng bit để định địa chỉ, bus có 112 nút (16 địa sử dụng vào mục đích riêng) + Điểm mạnh I2C chỗ, vi điều khiển dùng để điều khiển mạng thiết bị mà tốn chân vi điều khiển Chính ngun nhân mà I2C SPI hai chuẩn giao tiếp sử dụng nhiều IC đặc biệt VĐK bít + Giao tiếp I2C hỗ trợ chế độ sau phần cứng: Chế độ chủ (master mode) Chế độ đa (nhiều) chủ (multi master mode) Chế độ tớ (slave mode) c Quy trình truyền liệu I2C + Để truyền nhận I2C tạo thành khối, người ta dùng bít Stop, Start, Restart, ACK, NACK + Quá trình hoạt động bit giống đẻ bắt đầu phát đi: ta phải set bit tưong ứng ghi (VD: muốn gửi bít Stop ta cần PEN =1), tương tự với bit lại truyền xong bit tự động chuyển ( thông qua Hardware) + Lưu ý, q trình hoạt động có tác dụng mà I2C hoàn thành xong nhiệm vụ trước Như ta cần phải biết lúc chương trình hồn thành xong nhiệm vụ vai trị cờ SSPIF ghi PIR1, SSPIF báo cho vđk biết hoạt động kết thúc cách Set từ lên ta phải xoá cờ băng phần mềm cho hoạt động Do 141 Bài giảng KỸ THUẬT VI XỬ LÝ yêu cầu I2C là: hoạt động kết thúc, cho phép hoạt động bắt đầu yêu cầu đặt phải có chương trình báo hiệu kết thúc hoạt động + Quá trình truyền byte liệu từ Master qua slave ( transmit), để truyền byte liệu gồm có bước bản: Gửi bít Start từ Master tới slave, đợi truyền xong Gửi địa slave lên đường truyền Dùng để chọn Slave hoạt động Đợi truyền xong Gửi địa cần lưu liệu tới, đợi cho đên truyền xong Gửi liệu cần truyền tới Slave, đợi truyền xong Tiếp tục gửi liệu Khi muốn kết thúc gửi bít Stop lên đường truyền + Q trình nhận liệu từ slave phải tuân thủ theo bước sau: Gửi bít Start từ Master tới slave Đợi truyền xong Gửi địa slave (chú ý: bit = ) lên đường truyền Dùng để chọn Slave hoạt động, Đợi truyền xong Gửi địa liệu cần nhận Đợi cho đên truyền xong Gửi bit Restart, Đợi truyền xong Gửi địa slave lên đường truyền ( ý, bit =1 báo hoạt động tới read) Đợi truyền xong Đọc liệu từ Slave Đợi cho đên đọc xong Phát bít ACK báo tiếp tục nhận liệu Đợi truyền xong Đọc liệu từ Slave Đợi cho đên đọc xong Phát bít ACK báo tiếp tục nhận liệu Đợi cho đên truyền xong (Lập lại đến đủ liệu cần đọc) Đọc liệu từ Slave Đợi cho đên đọc xong Phát bít NACK báo qua trình nhận liệu kết thúc Đợi cho đên truyền xong Phát bít Stop để kết thúc d Khảo sát dạng sóng truyền liệu I2C 142 Bài giảng KỸ THUẬT VI XỬ LÝ 143 Bài giảng KỸ THUẬT VI XỬ LÝ 144 Bài giảng KỸ THUẬT VI XỬ LÝ 145 Bài giảng KỸ THUẬT VI XỬ LÝ e Khảo sát ghi truyền liệu + Trong Pic 16F87x có ghi điều khiẻn q trình truyền nhận liệu: SSPSTAT ( 94h bank 1), SSPCON1 ( 14H bank 0) SSPCON2 ( 91H bank ) Trong thì: SMP chọn Speed chuẩn (SMP =1: 100kHz, 1MHz; SMP =0: 400KHz) R/W báo trình truyền diễn BF báo SSPBUF đầy ( hai trường hợp Transmit, Receive ) WCOL: báo có xếp chơng liệu SSPEN: enable chế độ I2C SSPM3:SSPM0: chọn chế độ với chế độ I2C master: '1000' ACKSTAT: Bít ACK nhận từ Slave ( =0, dùng Transmit ) ACKDT, ACKEN: dùng để phát bít ACK hay NACK từ Master ( chế độ Receive ACKDT =0 ACK, ACKDT =1 NACK ) RCEN : tín hiêu báo hiệu q trình nhân ( dùng Receive: RCEN = 1, Master nhận tín hiệu từ Slave ) PEN, RSEN, SEN: bit khởi tạo trình truyền Stop, Restart, Start + Để điều khiển tốc độ baud chế độ, người ta sử dụng ghi SSPADD I2C làm việc chế độ chuẩn ( tất nhiên tương đối ) : 100Kb, 400Kb, 1Mb Nếu ta dùng thạch anh 4M, cần sử dụng tốc độ 100Kb ta phải nạp giá trị vào ghi SSPADD là: 28H với tốc độ 400Kb ta cần giá trị 0AH Còn để lưu nhận liệu người ta dùng ghi SSPBUF + Như vây tổng cộng có ghi dùng đến : SSPSTAT, SSPCON1, SSPCON2 ( chọn chế độ đỉều khiển đường truyền ) SSPADD ( khởi tạo tốc độ Baud ) SSPBUF dùng để lưu liệu hai trình Receive, Transmister 146 Bài giảng KỸ THUẬT VI XỬ LÝ f Khảo sát thiết bị ngoại vi dùng chuẩn truyền I2C Ví dụ 4: Giao tiếp I2C PIC với EEROM 24c02 PIC thực Write ký tự lên ROM, sau Read ký tự vừa Write lên ROM 147 Bài giảng KỸ THUẬT VI XỬ LÝ #define _XTAL_FREQ 4000000 #define uchar unsigned char #define uint unsigned int #define ulong unsigned long #include CONFIG(0x3FFA); void senddata_uart(uchar cdd); void sendstring_uart(const uchar *dd); void WaitMSSP(void); void STARTBit(void); void RESTARTBit(void); void STOPBit(void); void ACKBit(void); void NACKBit(void); 148 Bài giảng KỸ THUẬT VI XỬ LÝ uchar write_iic_24c02(uchar address,uchar ddt); uchar read_iic_24c02(uchar address); uchar LC01CTRLIN=0xA0 ; uchar LC01CTRLOUT=0xA1 ; uchar LC01ADDR=0x00 ; uchar LC01DATA=0x10 ; // I2C value for CONTROL BYTE when Writing 24c02 // I2C value for CONTROL BYTE when Reading 24c02 // Sample value for ADDRESS BYTE // Sample data to write to EEPROM uchar write_iic_return; uchar read_iic_return; //*************** main ******************** void main(void) { SYNC=0; // uart mode BRGH=1; // hi-speed mode SPBRG=25; // 9600 bps with 4Mhz crytal SPEN=1; // Enable serial port TRISC7=1; // Rx - Input TRISC6=0; // Tx - Output TXEN=1; // Enable Tx CREN=1; // Enable Continue Receive GIE=1; PEIE=1; RCIE=1; delay_ms(1000); sendstring_uart("Debug and Display results:\r\n"); sendstring_uart("\r\n"); // *** Setup Registers for I2C ***// // Configure MSSP module for Master Mode TRISC3=1; // RC3(SCL) TRISC4=1; // RC4(SDA) SSPCON=0B00101000; //I2C Master mode with bit_rate=Fosc/(4*(SSPADD+1)) // and I2C enable SMP=1; //slew rate control, using bit_rate at 100 kbps SSPADD=0x0A; while(1) { write_iic_return = write_iic_24c02(LC01ADDR,LC01DATA); if (write_iic_return == 0) sendstring_uart("Write IIC pass \r\n"); else if (write_iic_return == 1) sendstring_uart("Write IIC fail at Write_command \r\n"); else if (write_iic_return == 2) 149 Bài giảng KỸ THUẬT VI XỬ LÝ sendstring_uart("Write IIC fail at WORD_ADDR \r\n"); else if (write_iic_return == 3) sendstring_uart("Write IIC fail at DATA TX \r\n"); read_iic_return = read_iic_24c02(LC01ADDR); if (read_iic_return > 10) sendstring_uart("Read IIC pass \r\n"); else if (read_iic_return == 1) sendstring_uart("Read IIC fail at Write_command \r\n"); else if (read_iic_return == 2) sendstring_uart("Read IIC fail at WORD_ADDR \r\n"); else if (read_iic_return == 3) sendstring_uart("Read IIC fail at READ_command \r\n"); else if (read_iic_return == 4) sendstring_uart("Read IIC fail at DATA RX \r\n"); LC01ADDR ++; LC01DATA ++; if (LC01ADDR == 0xFF) { sendstring_uart("Write and Read all data to IIC \r\n"); while (1); } } } //********************* INTTERUPT ***************** void interrupt isr(void) { uchar cd; if(RCIE&&RCIF) { cd=RCREG; // map with Rx UART Int // read byte to cd while(!TRMT); // wait until reading complete TXREG= cd; // echo read byte back } } //****************** UART send Subroutin ******************* void senddata_uart(uchar cdd) { while(!TRMT); // wait until writing complete TXREG=cdd; } 150 Bài giảng KỸ THUẬT VI XỬ LÝ //************************UART send one string************** void sendstring_uart(const uchar *dd) { while((*dd)!=0) { senddata_uart(*dd); dd++; } } //**************I2C with 24C02 EEROM condition************** void WaitMSSP(void) { while (!SSPIF) ; SSPIF = ; } void STARTBit(void) { SEN = ; WaitMSSP (); } void RESTARTBit(void) { RSEN = ; WaitMSSP (); } void STOPBit(void) { PEN = ; WaitMSSP (); } void ACKBit(void) { ACKDT = ; ACKEN = ; WaitMSSP (); } void NACKBit(void) { ACKDT = 1; ACKEN = 1; WaitMSSP (); } 151 Bài giảng KỸ THUẬT VI XỬ LÝ //****************************I2C write to EEROM 24C02************************ uchar write_iic_24c02(uchar address,uchar ddt) { STARTBit (); // Always with Start condition SSPBUF=LC01CTRLIN; WaitMSSP (); if (ACKSTAT==1) return 1; SSPBUF=address; WaitMSSP (); if (ACKSTAT==1) return 2; SSPBUF=ddt; WaitMSSP (); if (ACKSTAT==1) return 3; STOPBit (); return 0; // WRITE command // ROM Address wanna to write to // Value wanna to write to // Always end with Stop condition } //***************************I2C read from EEROM24c02************************ uchar read_iic_24c02(uchar address) { uchar ddt; RESTARTBit (); // Always with Start or Restart condition SSPBUF=LC01CTRLIN; // WRITE command WaitMSSP (); if (ACKSTAT==1) return 1; SSPBUF=address; // ROM Address wanna to read from WaitMSSP (); if (ACKSTAT==1) return 2; RESTARTBit (); // Always with Restart condition SSPBUF=LC01CTRLOUT; WaitMSSP (); if (ACKSTAT==1) return 3; RCEN = 1; WaitMSSP (); if (ACKSTAT==1) return 4; // READ command NACKBit (); STOPBit (); // Always with NACK condition before STOP codition // Always end with Stop condition // Enable Reading and waiting to complete ddt = SSPBUF; return ddt; } 152 ... Khảo sát dạng sóng truyền liệu I2C 142 Bài giảng KỸ THUẬT VI XỬ LÝ 143 Bài giảng KỸ THUẬT VI XỬ LÝ 144 Bài giảng KỸ THUẬT VI XỬ LÝ 145 Bài giảng KỸ THUẬT VI XỬ LÝ e Khảo sát ghi truyền liệu + Trong... BRGH bị bỏ qua Công thức tính tốc độ baud sau: 120 Bài giảng KỸ THUẬT VI XỬ LÝ 121 Bài giảng KỸ THUẬT VI XỬ LÝ 122 Bài giảng KỸ THUẬT VI XỬ LÝ b Các kiểu truyền liệu UART VĐK + Trong mode kiểu... PEIE (bit 6) ghi INTCON bật 125 Bài giảng KỸ THUẬT VI XỬ LÝ + Các ghi dung phát bất đồng USART: 126 Bài giảng KỸ THUẬT VI XỬ LÝ c Ứng dụng truyền liệu UART Ví dụ 1: Vi? ??t chương trình cho vđk phát