Tải bản đầy đủ (.ppt) (19 trang)

giao tiếp máy tính

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (449.81 KB, 19 trang )


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<8> đượ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

Chương trình
chính
Đọc giá trị từ cổng
Com
Đẩy ra PORTD
Đẩy data lên máy
tính
Kbhit()
Đ
S

#include <16f877a.h>
#include <def_877a.h>
#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

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×