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

tai lieu pic- Kết nối PIC với EEPROM, DS1307 dùng I2C - vuson.tk pps

9 446 1
Tài liệu đã được kiểm tra trùng lặp

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 9
Dung lượng 315,62 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Tutorial n o 03.02 Gửi đến: picvietnam@googlegroups.com Nội dung: Kết nối PIC với EEPROM, DS1307 dùng I2C 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ậ

Trang 1

Tutorial n o  03.02 

  Gửi đến:  picvietnam@googlegroups.com  

Nội dung:  Kết nối PIC với EEPROM, DS1307 dùng I2C 

 

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. 

Trang 2

 

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 ) 

Trang 3

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 ) 

Trang 4

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 )  

Trang 5

• 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 

           

 

Trang 6

 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 

 

Trang 7

list    p=16f877A     

#include  <p16f877A.inc>     

  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  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,w        ; restore pre‐isr W register contents 

      retfie     

main 

          MOVLW     0x06 

          MOVWF     ADCON1    ; Chọn chế độ Digital ở cac chan 

          CALL      Init_serialport 

          BANKSEL   TRISB 

          BSF              INTCON,GIE           ; Cho phep ngat  

          BSF              INTCON,PEIE 

 

Init_serialport 

          BANKSEL   TXSTA 

Trang 8

          BSF              TRISC,7       ; Chon chan rb2 la dang in 

          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

+5V

U5

U8 U7 U9 U6 P1

CONNECTOR DB9

5

9

4

8

3

7

2

6

1

MAX232

1

3

4

5

11

10

12

9

2

6

14

7

13

8

C1+

C1 C2+

C2-T1in T2in

R1out R2out

V+

V-T1out T2out

R1in R2in

U1

PIC16F877A

1 2 3 4 5 6 7

8 9 10 13

14

15 16 17 18

19 20 21 22 23

24 25 26

27 28 29 30

33 34 35 36 37 38 39 40

11 32

12 31

MCLR/VPP RA0/AN0 RA1/AN1 RA2/AN2 RA3/AN3/VREF+

RA4/TOCKI RA5/AN4

RE0 RE1 RE2 OSC1/CLK1

OSC2/CLK0

RC0 RC1 RC2 RC3/SCL

RD0 RD1 RD2 RD3 RC4/SDA

RC5 RC6/TX RC7/RX

RD4 RD5 RD6 RD7

RB0/INT RB1 RB2 RB3 RB4 RB5 RB6 RB7

VDD VDD

VSS VSS

Mach TEST USART dung  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 

Trang 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.              

Ngày đăng: 03/07/2014, 20:20

HÌNH ẢNH LIÊN QUAN

Hình 1: BAUD RATE FOR ASYNCHORONOUS MODE  ( BRGH=0 ) - tai lieu pic- Kết nối PIC với EEPROM, DS1307 dùng I2C - vuson.tk pps
Hình 1  BAUD RATE FOR ASYNCHORONOUS MODE  ( BRGH=0 ) (Trang 3)
Hình 2: BAUD RATE FOR ASYNCHRONOUS MODE ( BRGH=1 ) - tai lieu pic- Kết nối PIC với EEPROM, DS1307 dùng I2C - vuson.tk pps
Hình 2  BAUD RATE FOR ASYNCHRONOUS MODE ( BRGH=1 ) (Trang 4)
Hình 3: Mạch test USART dung PIC16F877A - tai lieu pic- Kết nối PIC với EEPROM, DS1307 dùng I2C - vuson.tk pps
Hình 3  Mạch test USART dung PIC16F877A (Trang 8)
Hình 4: Giao diện mẫu - tai lieu pic- Kết nối PIC với EEPROM, DS1307 dùng I2C - vuson.tk pps
Hình 4  Giao diện mẫu (Trang 9)

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w