Giao tiếp máy tính Usart
Tài liệu tham khảo khối Usart, ứng dụng giao tiếp vi điều khiển với máy tính
Bạn đang xem nội dung tài liệu Giao tiếp máy tính Usart, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Bài 6: Giao tiếp máy tính Nội dung Khối USART Ứng dụng giao tiếp vi điều khiển với máy tính USART Universal Synchronous Asynchronous Receiver Transmitter Synchronous: giao tiếp với các thiết bị ngoại vi như các IC A/D, D/A, EEPROMs Asynchronous: giao tiếp với máy tính PC USART trong PIC16F877A 5 thanh ghi quan trọng: 2 thanh ghi chức năng TXSTA, RCSTA 2 thanh ghi dữ liệu RCREG, TXREG Thanh ghi tốc độ Baud: SPBRG TXSTA CSRC: Clock Source Select bit Chế độ bất đồng bộ: không quan tâm Chế độ đồng bộ: 1->chế độ Master( clock từ BRG) 0->chế độ Slave( clock từ bên ngoài) TX9 : 9-bit Transmit Enable bit: chọn chế độ truyền 9 bit: ( =1: 9 bit, =0: 8 bit ) TXEN : Transmit Enable bit =1: cho phép truyền , =0: cấm SYNC : USART Mode Select bit Chọn chế độ truyền đồng bộ hay không đồng bộ( =1: đồng bộ, =0: không đồng bộ ) BRGH : High Baud Rate Select bit Chỉ hoạt động ở chế độ bất đồng bộ: chọn tốc độ cao hay thấp ( =1 HIGH, =0: LOW ) TRMT : Transmit Shift Register Status bit bít báo trạng thái của bộ đệm: =1: TSR rỗng( dữ liệu đã được truyền xong ), =0: TSR đầy ( dữ liệu còn trong bộ đệm của UART ) TX9D : 9th bit of Transmit Data, can be Parity bit giá trị của bít thứ 9 trong chế độ truyền 9 bit. RCSTA Bit 7 SPEN Serial Port Enable bit( = 1 Cho phép cổng giao tiếp USART ) Bit 6 RX9 9-bit Receive Enable bit( = 1 nhận 9 bit dữ liệu, = 0 nhận 8 bit dữ liệu) Bit 5 SREN Single Receive Enable bit Ỡ chế độ USART bất đồng bộ: bit này không cần quan tâm. Ở chế độ USART Master đồng bộ:( = 1 cho phép chức năng nhận 1 byte dữ liệu (8 bit hoặc 9 bit)) Bit 4 CREN Continous Receive Enable bit Ở chế độ bất đồng bộ:( = 1 cho phép nhận 1 chuỗi dữ liệu liên tục) Ở chế độ đồng bộ:(= 1 cho phép nhận dữ liệu cho tới khi xóa bit CREN, = 0 không cho phép nhận chuỗi dữ liệu) Bit 3 ADDEN Address Detect Enable bit Ở chế độ USART bất đồng bộ 9 bit ADDEN = 1 cho phép xác nhận địa chỉ, khi bit RSR được set thì ngắt được cho phép thực thi và giá trị trong buffer được nhận vào. ADDEN = 0 không cho phép xác nhận địa chỉ, các byte dữ liệu được nhận vào và bit thứ 9 có thể được sử dụng như là bit parity. Bit 2 FERR Framing Eror bit( = 1 xuất hiện lỗi “Framing- sai bit Stop” trong quá trình truyền nhận dữ liệu Bit 1 OERR Overrun Error bit(= 1 xuất hiện lỗi “Overrun- tràn”) Bit 0 RX9D Bit này chứa bit dữ liệu thứ 9 của dữ liệu truyền nhận TXREG , RCREG , SPBRG TXREG: chứa dữ liệu truyền đi trong quá trình truyền RCREG: lưu dữ liệu từ ngoài vào trong quá trình nhận SPBRG: thiết lập tốc độ baud (BRGH=0) ( BRGH=1 ) Quá trình truyền và nhận Quá trình nhận dữ liệu : Nhận biết lúc nào có dữ liệu truyền tới: Kiểu Polling: liên tục kiểm tra cờ RCIF( thanh ghi PIR1) nếu =1 thì đọc dữ liệu 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 1. Khởi tạo tốc độ baud: ở thanh ghi SPBRG. 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 Quá trình truyền và nhận 1. Khởi tạo tốc độ baud: ở thanh ghi SPBRG 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 Quá trình truyền dữ liệu CCS #use rs232 (options) options được tách nhau bởi dấu phẩy, và có thể là: BAUD=x// Đặt baud rate parity=N// Đặt parity XMIT=pin// Đặt chân truyền RCV=pin// Đặt chân nhận Bits=x// Số bit Ví dụ: #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8) - value = getc() value = fgetc(stream) value=getch() value=getchar() Hàm này trả về 1 giá trị kí tự 8 bit. Hàm này có tác dụng nhận về 1 kí tự từ chân nhận - putc (cdata) putchar (cdata) fputc(cdata, stream) Hàm này không trả về giá trị,nó có tác dụng đặt 1 kí tự lên chân truyền - gets (string) value = fgets (string, stream) Nó có tác dụng nhận 1 xâu từ chân nhận - puts (string) value = fputs (string, stream) Đặt 1 xâu lên chân truyền printf (string) printf (cstring, values...) printf (fname, cstring, values...) fprintf (stream, cstring, values...) chức năng như hàm puts() - value = kbhit() value = kbhit (stream) Hàm naỳ trả về 1 (hoặc TRUE) nếu 1 kí tự đã được nhận. - setup_uart(baud, stream) setup_uart(baud) set_uart_speed (baud, [stream, clock]) perror(string); Bài toán #include #include #device *=16 ADC=8 #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT #use delay(clock=20000000) #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8) char h_thi; void main() {trisd=0x00;//dau ra portd=0x00;//ban dau led tat while(true) { if(kbhit()){ h_thi=getc(); portd=h_thi; putc(h_thi); }; } } Truyền 1 số có 3 chữ số ( < 256) từ máy tính xuống. Vi điều khiển nhận và hiển thị giá trị nhận được lên các led ở portd. Chẳng hạn: Ta truyền số 255 thì tất cả các led ở portd đều sáng Bài toán