tai lieu pic- Kết nối PIC với EEPROM, DS1307 dùng I2C - vuson.tk
lượt xem 182
download
Trang cá nhân : http://vn.360plus.yahoo.com/vuvanson_bk/ or vuson.tk Viết tắt của Universal Asynchronous Receiver – Transmitter – thường là một mạch tích hợp được sử dụng trong việc truyền dẫn dữ liệu nối tiếp giữa máy tính và thiết bị ngoại vi thông qua cổng nối tiếp. Rất nhiều vi điều khiển hiện nay đã tích hợp UART. Để bắt đầu việc truyền dữ liệu bằng UART, một start bit được gửi đi, sau đó là 5‐8...
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: tai lieu pic- Kết nối PIC với EEPROM, DS1307 dùng I2C - vuson.tk
- Người báo cáo: Phạm Đức Mạnh Tài liệu: TUT03.01 Ngày: 2/9/2006 Trang: 1/9 Tutorial no 03.02 Gửi đến: picvietnam@googlegroups.com Nội dung: Kết nối PIC với EEPROM, DS1307 dùng I2C MICROSOFT WORD Tóm tắt: Trong Tutorial của bạn Ngô Hải Bắc đã có phần hướng dẫn về cách lập trình giao tiếp cổng Com trong PC dùng VC++6.0. Hôm nay mình sẽ giới thiệu cho các bạn cách thức lập trình giao tiếp nối tiếp UART trên PIC: 1. Giao tiếp nối tiếp dùng UART Viết tắt của Universal Asynchronous Receiver – Transmitter – thường là một mạch tích hợp được sử dụng trong việc truyền dẫn dữ liệu nối tiếp giữa máy tính và thiết bị ngoại vi thông qua cổng nối tiếp. Rất nhiều vi điều khiển hiện nay đã tích hợp UART. Để bắt đầu việc truyền dữ liệu bằng UART, một start bit được gửi đi, sau đó là 5‐8 bit dữ liệu, sau đó là stop bit. Start bit có trạng thái ngược với trạng thái bình thường của đường truyền dữ liệu. Stop bit có cùng trạng thái với trạng thái bình thường của đường truyền dữ liệu. Tốc độ của UART được quy định bởi tốc độ baud. Một số interface chuẩn của UART là EIA, RS 232, RS 422 và RS 485. Như vậy để làm việc với UART chúng ta phải quan tâm đến các thông số sau: • Tốc độ Baud: thường là 9600 • Số bít được dùng để truyền Data: từ 5 đến 8 ( thường là 8 ) • Bít Stop 1, hay 2 thường chọn 1 • Bit chẵn lẻ 2. Giao tiếp UART trong PIC16F877A 2.1. Các thanh ghi được sử dụng trong PIC16F877A Trong PIC16F877A có tất cả 5 thanh ghi cho qua trình điều khiển UART: Trong đó có 2 thanh ghi chức năng TXSTA, RCSTA, 2 thanh ghi dữ liệu RCREG, TXREG., và thanh ghi tốc độ Baud: SPBRG.
- Người báo cáo: Phạm Đức Mạnh Tài liệu: TUT03.01 Ngày: 2/9/2006 Trang: 2/9 Thanh ghi TXSTA CSRC: TX9 : chọn chế độ chuyền 9 bit: ( =1: 9 bit, =0: 8 bit ) TXEN : Cho phép truyền SYNC : Chọn chế độ truyền đồng bộ hay không đồng bộ: ( =1: đồng bộ, =0: không đồng bộ ) BRGH : chọn chế dộ truyền cao hay thấp ( =1 HIGH, =0: LOW ) TRMT : bít báo trạng thái của bộ đệm: =1: TSR rỗng( dữ liệu đã đựoc truyền xong ), =0: TSR đầy ( dữ liệu còn trong bộ đệm của UART ) TX9D : giá trị của bít thứ 9 trong chế độ truyền 9 bit. Bit này có thể dùng để lưu bit Parity; Thanh ghi RCSTA SPEN : cho phép sử dụng bộ UART RX9 : chấp nhận chế độ nhận 9 bit SREN : không dùng với trường hợp Asychoronous CREN : tiếp tục nhận dữ liệu ADDEN : dùng trong chế độ chọn 9 bit: ( master , slave )
- Người báo cáo: Phạm Đức Mạnh Tài liệu: TUT03.01 Ngày: 2/9/2006 Trang: 3/9 FERR : bít báo hiệu lỗi đường truyền OERR : báo hiệu lỗi đường truyền RX9D : giá trị bít thứ 9 trong quá trình Receive được lưu tại đây. Thanh ghi TXREG: dùng để chứa dữ liệu truyền đi trong quá trình Transmit Thanh ghi RCREG: dùng để lưu dữ liệu từ ngoài vào trong quá trình Receive Thanh ghi: SPBRG là thanh ghi thiết lập tốc độ baud của PIC Trong PIC16F877A có hai chế độ truyền High speed, và Low speed được quy định bởi bit BRGH của thanh ghi TXSTA. Việc phân chia hai mức tốc độ này để có sự chọn lựa cho trường hợp sai số với tốc độ baud chuẩn của PC: Mà trong PC có các mức chuẩn: 300, 2400, 9600, 19200, 28800. Các bạn có thể tham khảo bảng 10‐3 ở trang 114 để biêt được các mức tốc độ : Hình 1: BAUD RATE FOR ASYNCHORONOUS MODE ( BRGH=0 )
- Người báo cáo: Phạm Đức Mạnh Tài liệu: TUT03.01 Ngày: 2/9/2006 Trang: 4/9 Hình 2: BAUD RATE FOR ASYNCHRONOUS MODE ( BRGH=1 ) Thông qua bảng trên ta thấy ứng với tần số thạch anh là 4M để chọn cho tốc độ baud là 9600 ta có thể chọn hai giá trị của thanh ghi SPBRG ở hai trường hợp : SPBRG = 25 ứng với BRGH =1 cói sai số là 0.15 và SPBRG = 6 ứng với BRGH =0 có sai số 6.99. Rõ ràng là ta chọn gia trị nào có sai số bế nhất và ứng với VD trên ta nên chọn SPBRG = 25 , BRGH= 1 vì nó có sai số nhỏ hơn trường hợp kia. Như vậy ứng với trường hợp nào có sai số nhỏ hơn trong hai giá trị thì ta sẽ chọn cái đó. 2.2. Quá trình truyền và nhận của PIC với PC Trong PIC16F877A có nhiều chế độ truyền nhận khác nhau: chế độ truyền nhận dùng bit 9 để định chẵn lẻ, hay cho mạng VĐK 1 master và nhiều slave. Và chế độ chuyền đồng bộ ứng dụng cho việc giao tiếp với A/D, D/A hay với các EEPRO. Và tất nhiên các chế dộ này sẽ được thiết lập bởi các bit trong thanh ghi TXSTA, và TCSTA. Tuy nhiên trong tutorial này chỉ xin giới thiệu chế độ truyền và nhận 8 bit giao tiếp với PC một trong các chức năng của bộ AUSART của PIC Quá trình nhận dữ liệu Trong PIC16F877A để nhận biết được dữ liệu truyền tới người ta dùng bit cờ RCIF trong thanh ghi PIR1. Như vậy khi thanh ghi đệm dữ liệu chứa dữ liệu thì RCIF sẽ được đưa lên 1. Và chính cờ này cho phép PIC16F877A có hai phương thức để nhận biết lúc nào có dữ liệu truyền tới. Sử dụng ngắt và sử dụng kiểu Polling ( quay vòng )
- Người báo cáo: Phạm Đức Mạnh Tài liệu: TUT03.01 Ngày: 2/9/2006 Trang: 5/9 • Kiểu Polling: liên tục kiểm tra cờ RCIF nếu =1 thì đọc dữ liệu: Phương thức này có ưu điểm dẽ lâp trình , phù hợp với những ứng dụng nhỏ. • Kiểu dùng ngăt: được thiết lập bằng cách cho RCIE= 1 để cho phép ngắt. Tức là mỗi khi có dữ liệu truyền tới RCREG thì sinh ra một ngắt và PIC sẽ tạm dừng chương trình hiện thời để xử lý dữ liệu vừa nhận được. Cách này chủ yếu được sử dụng Như vậy các bước cho quá trình nhận dữ liệu của quá trình sử dụng INTERUPT bao gồm: ‐ 1. Khởi tạo tốc độ baud: ở thanh ghi SPBRG. Cho SPBRG = 25, BRGH =1 ứng với tốc độ 9600 ( thạch anh 4M) ‐ 2. Cho phép quá trình truyền không đồng bộ bắng cách thiết lập SPEN = 1, SYNC= 0; ‐ 3. Cho phép ngắt quá trình nhận dữ liệu: RCIE=1 ‐ 4 Cho phép nhận dữ liệu : CREN = 1 ‐ 5. Cho phép ngắt toàn cục băng việc GIE =1, PEIE = 1 ( GIE, PEIE trong thanh ghi INTCON ) ‐ 6. Xử lý các phần khác chương trình khi có ngắt xảy ra thì xử lý dữ liệu VD : nhận dữ liệu từ PC với tốc độ baud: 96000 sử dụng ngắt BSF TXSTA, BRGH ; Cho BRGH =1 MOVLW Dʹ25ʹ ; Chon che do 9.600 MOVWF SPBRG BSF RCSTA, SPEN ; SPEN = 1 BCF TXSTA, SYNC ; SYNC = 0 BSF TXSTA, CREN BSF PIE, RCIE ; RCIE = 1 BSF INTCON, GIE BSF INTCON, PEIE ........................ ; Hàm ngắt xử lý dữ liệu: MOVF RCREG,W ; Nhan du lieu tu RCREG chuyen cho thanh ghi W MOVWF PORTB ; Dua du lieu ra PORTB ......................
- Người báo cáo: Phạm Đức Mạnh Tài liệu: TUT03.01 Ngày: 2/9/2006 Trang: 6/9 2.2.2. Quá trình truyền dữ liệu Trong quá trình truyền dữ liệu cũng có hai chế độ sử dụng ngắt và Polling , tuy nhiên quá trình truyền dữ liệu lên PC không phải là thời diểm bất kỳ mà dặt dưới sự kiểm soát của chương trình cho nên người ta thưòng sử dụng kiểu polling khi cần truyền thì truyền đi. Như vậy các bước cho quá trình thiết lập ngắt: ‐ 1. Khởi tạo tốc độ baud: ở thanh ghi SPBRG. Cho SPBRG = 25, BRGH =1 ứng với tốc độ 9600 ( thạch anh 4M) ‐ 2. Cho phép quá trình truyền không đồng bộ bắng cách thiết lập SPEN = 1, SYNC= 0; ‐ 3. Cho phép truyền dữ liệu bằng cách thiết lập bít TXEN = 1; ‐ 4. Khi cần truyền dữ liệu chỉ cần Load dữ liệu đó lên TXREG VD: BSF TXSTA, BRGH ; Cho BRGH =1 MOVLW Dʹ25ʹ ; Chon che do 9.600 MOVWF SPBRG BSF RCSTA, SPEN ; BCF TXSTA, SYNC ; BSF TXSTA, TXEN ; TXEN = 1 ................. MOVF DATA, W ; Chuyen du lieu tu DATA qua W MOVWF TXREG ; Truyen du lieu bang cach load du lieu len TXREG ............. Lưu ý: trư khi cho quá trình truyền và nhận dữ liệu ta phải thiết lập trạng thái chân của RC7, RC6 cho hợp lý. Cho RC7 là dạng in , RC6 là dạng out 3. Một vi dụ đơn giản Đây là một VD về quá trình truyền và nhận dữ liệu từ PC. PIC nhận dữ liệu tù PC chuyển qua PORTB ( hiển thị qua led ) rồi truyền trở lại PC
- Người báo cáo: Phạm Đức Mạnh Tài liệu: TUT03.01 Ngày: 2/9/2006 Trang: 7/9 list p=16f877A #include __CONFIG 0x393A errorlevel ‐302 w_temp EQU 0x71 status_temp EQU 0x72 pclath_temp EQU 0x73 ACC EQU 0x74 R2 EQU 0x7A R3 EQU 0x7B R4 EQU 0x7C ;********************************************************************** ORG 0x000 ; processor reset vector goto main ; go to beginning of program ORG 0x004 ; interrupt vector location movwf w_temp ; save off current W register contents movf STATUS,w ; move STATUS register into W register movwf status_temp ; save off contents of STATUS register movf PCLATH,W ; move PCLATH register into W register movwf pclath_temp ; save off contents of PCLATH register ;============================================================================= BANKSEL RCREG MOVF RCREG,W ; Nhan du lieu tu RCREG chuyen cho thanh ghi W MOVWF PORTB ; Dua du lieu ra PORTB BANKSEL TXREG MOVWF TXREG ; Truyen du lieu do len PC ;============================================================================== movf pclath_temp,w ; retrieve copy of PCLATH register movwf PCLATH ; restore pre‐isr PCLATH register contents movf status_temp,w ; retrieve copy of STATUS register movwf STATUS ; restore pre‐isr STATUS register contents swapf w_temp,f swapf w_temp,w ; restore pre‐isr W register contents retfie main BANKSEL ADCON1 MOVLW 0x06 MOVWF ADCON1 ; Chọn chế độ Digital ở cac chan CALL Init_serialport BANKSEL TRISB CLRF TRISB ; Cho dang PORTB la dang out BSF INTCON,GIE ; Cho phep ngat BSF INTCON,PEIE GOTO $ Init_serialport BANKSEL TXSTA
- Người báo cáo: Phạm Đức Mạnh Tài liệu: TUT03.01 Ngày: 2/9/2006 Trang: 8/9 BSF TRISC,7 ; Chon chan rb2 la dang in BCF TRISC,6 MOVLW Bʹ00100100ʹ ; Chon che do 8 bit, Hightbaudrate MOVWF TXSTA MOVLW Dʹ25ʹ ; Chon che do 9.600 MOVWF SPBRG BSF PIE1,RCIE ; Cho phep ngat ( receive ) BANKSEL RCSTA MOVLW Bʹ10010000ʹ ; MOVWF RCSTA RETURN END Với sơ đồ kêt nối như hình vẽ: +5V Mach TEST USART dung PIC16F877A 16 MAX232 2 1 VCC V+ C1+ 6 3 U1 V- C1 1 4 2 MCLR/VPP 33 C2+ 3 RA0/AN0 RB0/INT 34 P1 4 RA1/AN1 RB1 35 U5 1 5 5 RA2/AN2 RB2 36 U6 6 C2- 6 RA3/AN3/VREF+ RB3 37 U7 2 14 11 7 RA4/TOCKI RB4 38 U8 7 T1out T1in RA5/AN4 RB5 39 U9 3 7 10 15 RB6 40 8 T2out T2in 16 RC0 RB7 4 17 RC1 19 9 13 12 18 RC2 RD0 20 5 R1in R1out 23 RC3/SCL RD1 21 GND 8 9 24 RC4/SDA RD2 22 R2in R2out 25 RC5 RD3 27 CONNECTOR DB9 26 RC6/TX RD4 28 RC7/RX RD5 15 29 RD6 30 13 RD7 OSC1/CLK1 8 RE0 9 14 RE1 10 +5V OSC2/CLK0 RE2 11 12 32 VDD VSS 31 VDD VSS PIC16F877A Hình 3: Mạch test USART dung PIC16F877A Lưu ý: ở sơ đồ trên sử dụng Max232 kết nối máy tính vì mức điện áp của PC và PIC là khác nhau và Max232 ở đây có tác dụng làm bộ chuyển đổi trung gian giữa PC và PIC ‐ Cách thức test
- Người báo cáo: Phạm Đức Mạnh Tài liệu: TUT03.01 Ngày: 2/9/2006 Trang: 9/9 ‐ Sử dụng chương trình giao tiếp máy tính bất kỳ có chế độ truyền và nhận dữ liệu. ( dùng chương trình MSCOM của Ngohaibac ) ‐ Soạn thảo code chương trình như trên tạo file Hex rồi nạp vào PIC16F877A. ‐ Thiết lập phần cứng như trong hình vẽ. ‐ Kết nối PIC với cổng com của máy tính như sơ đồ trên. ‐ Mở chương trình giao tiếp máy tính qua cổng Com rồi chọn chế độ truyền 8 bit, tốc độ BAUD 9600. ‐ Chọn connect rồi chuyền dữ liệu. Các bạn sẽ thấy dữ liệu nhận được sẽ như khi ta nối tắt hai chân 2, 3 của cổng com và bạn sẽ thấy dữ liệu hiển thị qua LED> VD truyền chữ ʺTʺ ứng với 0x54 hay 01010100 các bạn sẽ thấy có ba led sáng: led 6 và led 4 , led 2 sáng còn các Led còn lại tối ‐ ( lưu ý là dữ liệu hiển thị ra led là dữ liệu cuối cùng của đoạn text, vì các dữ liệu kia chỉ xuất hiện trong thời gian rất ngắn nên không thể nhận ra được ) Hình 4: Giao diện mẫu 4. Kết luận Trong tutorial này chỉ hướng dãn về cách thức truyền và nhận dữ liệu không đồng bộ qua PC cơ chế sử dụng 8 bit. Để tìm hiểu thêm về cơ chế USART trong PIC các bạn có thể tham khảo Datasheet của PIC16F877A ( trang 111 ) Qua tutorial này các bạn sẽ biết được cách lập trình truyền nhận dữ liệu một cách đơn giản, cách sử dung chương trình kết nối máy tính hay sơ đô sử dụng Max232 kết nối máy tính.
CÓ THỂ BẠN MUỐN DOWNLOAD
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn