Hoạt động ở chế độ đồng bộ chủ và đồng bộ tớ là đồng nhất. Trừ trong trường hợp ở chế độ ngủ hoặc bất kỳ chế độ nghỉ nào. Bít SREN thì khơng được sử dụng trong chế độ này.
Quá trình nhận được cho phép bằng cách cài đặt bít CREN trước khi vào chế độ ngủ hoặc bất kỳ chế độ nghỉ nào. 1 word dữ liệu có thể nhận trong chế độ nguồn thấp. Mỗi lần nhận 1 word dữ liệu được nhận vào, thanh ghi RSR sẽ chuyển dữ liệu tới thanh ghi RCREG, nếu bít cho phép RCIE được đặt, ngắt tạo ra sẽ đánh thức vi điều khiển từ chế độ nguồn thấp. Nếu ngắt tồn cục được cho phép, chuong trình sẽ nhảy tới vector ngắt.
Các bước thực hiện ở chế độ đồng bộ tớ :
+ Cho phép cổng nối tiếp hoạt động ở chế độ đồng bộ tớ bằng cách đặt các bít SYNC, SPEN và xóa bít CSRC + Nếu muốn ngắt thì đặt bít cho phép ngắt RCIE
+ Nếu muốn nhận 9 bít thì đặt bít RX9 + Cho phép nhận bằng cách đặt bít CREN
+ Bít cờ RCIF sẽ được đặt khi nhận hồn thành, 1 ngắt sẽ tạo ra nếu bít cho Phép RCIE đã được đặt.
+ Đọc thanh ghi RCSTA lấy bít thứ 9 (nếu cho phép) và xác định bất kỳ lỗi nào xuất hiện trong thời gian nhận. + Đọc 8 bít dữ liệu đã nhận được bằng cách đọc thanh ghi RCREG
+ Nếu có bất kỳ lỗi nào xuất hiện, xóa lỗi bằng cách xóa bít CREN
+ Nếu sử dụng ngắt thì chắc chắn rằng các bít GIE và PEIE trong thanh ghi INTCON được đặt.
Bảng 11
Các thanh ghi liên quan tới quá trình nhận ở chế độ đồng bộ tớ.
3.5 ví dụ :
Truyền liên tục ký tự @ 9 ra cổng com .
#include<p18f4520.h> #include<stdio.h>
#pragma config OSC = HS #pragma config IESO = OFF #pragma config PWRT = OFF #pragma config WDT = OFF #pragma config WDTPS = 32768 #pragma config MCLRE = ON #pragma config LVP = OFF #pragma config DEBUG = OFF #pragma config CP0 = OFF #pragma config CP1 = OFF #pragma config CPB = OFF #pragma config CPD = OFF #pragma config WRT0 = OFF #pragma config WRT1 = OFF #pragma config WRTB = OFF #pragma config WRTC = OFF #pragma config WRTD = OFF #pragma config EBTR0 = OFF #pragma config EBTR1 = OFF
#pragma config EBTRB = OFF int j=0,k=0;
volatile unsigned char count; void delay(unsigned long int t) {
unsigned long int i; for(i=0;i<=t;i++); } void Init_UART(void) { TXSTA = 0b00100100; BAUDCON = 0b00000000; SPBRG =25; RCSTA = 0b10010000; }
void KIEMTRA(unsigned int a) { while(TXSTAbits.TRMT==0); TXREG = a; } void main(void) { TXSTAbits.TRMT=0; TRISA=0X00; TRISC = 0b11000000; ADCON1=0XFF; Init_UART(); delay(10000); while(1) { KIEMTRA(64); delay(3000); KIEMTRA(57); KIEMTRA(32); delay(3000); delay(10000); } } 4. Modul thí nghiệm :