You are on page 1of 37

Сериска комуникација НА PIC16F887

МИКРОКОНТОРЛЕР
Аудиториски вежби 10
EUSART
 Хардвер со кој се овозможува влезно/излезна
сериска комуникација
 CTS – clear to send
 RTS – request to send
 RX , TX – read , transmit – сигнални линии за читање и
праќање
EUSART
Превод: Enhanced Universal Synchronous
/Asynchronous Receiver /Transmitter
 Синхрон половичен дуплекс (Half-duplex)
 Часовник за синхронизација
 Комуникацијата е двонасочна, а наизменично се примаат и праќаат податоци
 Асинхрон потполн дуплекс (full-duplex)
 Нема часовник за синхронизација, се користат почетен и стоп бит за ознака на
податокот кој се праќа
 Комуникацијата е двонасочна, а и двата уреди можат да праќаат и примаат во
исто време
 Битови
 Почетен бит
 Програмибилни 8 или 9 бита
 Стоп бит
EUSART
TXSTA Register (1/4)
 CSRC - Clock Source Select bit – Го определува изворот
на часовникот, само во синхрон мод.
 1 - Master mode. Baud Rate Generator
 0 - Slave mode. Надворешен извор.
 TX9 - 9-bit Transmit Enable bit
 1 - 9-bit data transmission via EUSART system.
 0 - 8-bit data transmission via EUSART system.
 TX9D – 9th бит од пренесениот податок.
TXSTA Register (2/4)
 TXEN - Transmit Enable bit - го одредува изборот на
приемот, во синхрон мод
 1 – Овозможена е трансмисија
 0 – Оневозможена е трансмисија
 SYNC - EUSART – избор на мод на работа
 1 - EUSART работи во синхрон мод.
 0 - EUSART работи во асинхрон мод.
TXSTA Register (3/4)
 SENDB - Send Break Character bit , се користи во
асинхрон мод.
 1 – пренос на битот Break е овозможен
 0 – пренос на битот Break е завршен
 BRGH - High Baud Rate Select bit – ја одредува
брзината на тактот во асинхрон мод
 1 - EUSART работи со голема брзина.
 0 - EUSART работи со мала брзина.
TXSTA Register (4/4)
 TRMT - Transmit Shift Register Status bit
 1 - TSR регистерот е празен
 0 - TSR регистерот е полн
RCSTA Register (1/3)
 SPEN - Serial Port Enable bit
 1 – Serial port enabled. Пиновите RX/DT и TX/CK автоматски се
конфигуриран на влез и излез, соодветно
 0 – Serial port disabled
 RX9 - 9-bit Receive Enable bit
 1 – Прием на 9-битни податоци преку EUSART.
 0 – Прием на 8-бирни податоци преку EUSART.
 RX9D – 9th bit од примениот податок.
RCSTA Register (2/3)
 SREN - Single ReceiveEnable bit , во синхрон мод.
 1 – Овозможен е единичен прием
 0 – Оневозможен е единичен прием
 CREN - Continuous Receive Enable bit
 Во асинхрон мод
 1 – прием на 9-битен податок преку EUSART.
 0 – прием на 8-битен податок преку EUSART.
 Во синхрон мод
 1 – Овозможува континуиран прием додека не се исчисти битот CREN.
 0 – Оневозможува континуиран прием.
RCSTA Register (3/3)
 ADDEN - Address Detect Enable bit
 1 – Овозможува детекција на адресата кај 9-битен приемен податок
 0 – Оневозможува детекција на адреса. 9тиот бит може да се користи како
бит на парност
 FERR - Framing Error bit
 1 – На прием се детектира Framing Error.
 0 – На прием не се детектира оваа грешка.
 OERR - Overrun Error bit
 1 – На прием се детектира Overrun Error.
 0 - На прием не се детектира оваа грешка
EUSART Пренос –
 За да се овозможи пренос на податоци со EUSART, треба
да се конфигурираат соодветните битови
 TXEN = 1 – се овозможува трансмисија (TXSTA)
 SYNC = 0 – АСИНХРОН МОД (TXSTA)
 SPEN = 1 – Автоматски да се конфигурира TX/CК пинот за излез
(RCSTA)
EUSART Пренос
 Главна улога има TSR поместувачкиот регистер кој не е
директно достапен до корисникот
 Податокот кој се праќа треба да се запише во регистарот
TXREG
 TXREG Register е достапен до корисникот
EUSART Пренос
 Секој бајт веднаш се пренесува во поместувачкиот регистер TSR
 TXREG останува празен и тоа може да се идентификува од TXIF.
 Ако TXIE=1, ќе се генерира прекин
 TXIE ќе се постави на 1 без разлика дали се овозможени прекини или не.
Овој бит не може да се постави на 0 софтверски, но може да се промени со
запишување на нов податок во регистерот TXREG
 Синхронизирано потоа се праќаат битовите: START bit (0) ... data ... STOP
bit (1).
 Кога најмалку значајниот бит (LSB) ќе помине низ TSR регистерот,
битот TRMT во регистерот TXSTA автоматски ќе се постави на 1.
 Ако регистерот TXREG прими нов знак во меѓувреме, целата процедура
веднаш ќе се повтори откако ќе помине последниот STOP бит од
претходниот знак
EUSART Пренос
9 – битен пренос
 9-битен преносот е овозможен ако се постави на 1 битот
TX9D од TXSTA регистерот.
 TX9D мора да се запише пред да се запишат 8те помалку значајни
битови во регистерот TXREG.
 Сите 9 бита ќе бидат запишани во поместувачкиот
регистер TSR веднаш откако запишувањето во TXREG е
завршено.
EUSART Прием
 За да се овозможи прием на податоци преку EUSART,
треба да се конфигурираат одредени битови
 CREN = 1 – Се овозможува примот (RCSTA)
 SYNC = 0 – АСИНХРОН МОД (TXSTA)
 SPEN = 1 – автоматски се конфигурираат пиновите RX/DT за влез
(RCSTA)
EUSART Прием
 По конфигурација, кога ќе се детектира битот START,
податокот се пренесува на RSR поместувачкиот регистер
преку RX pin.
 Кога ќе се прими битот STOP, се случува следното:
 Податокот автоматски се префрла во регистерот RCREG (ако е
празен);
EUSART Прием
 Битот знаменце RCIF е поставен на 1 и ако е овозможено се случува
прекин
 Треба да е овозможено преку битот RCIE од регистерот PIE1
 Потоа слично како кај преносот битот знаменце се поставува на 0
софтверски, т.е. со читање на регистерот RCREG
 Забелешка: Овој систем овозможува прием на 2 знаци симултано
EUSART Прием
 Ако регистерот RCREG е зафатен (содржи 2 бајти) и поместувачкиот
регистер детектира нов бит STOP, битот за преоптоварување OERR
ќе се постави на 1.
 Тогаш тој нов податок ќе се изгуби и битот OEER мора да се ресетира софтверски.
Тоа се прави со ресетирање на битот CREN;
 Забелешка: Не може да се примаат нови податоци ако битот OERR е сетиран
(поставен на 1).
EUSART Прием
 Ако битот STOP е 0, битот FERR од регистерот RCSTA кој детектира
грешка при прием ќе се постави на 1;
 За да се овозможу прием до 9-бита, треба да се сетира битот RX9 од
регитерот RCSTA.
 MSB (најзначајниот бит) автоматски ќе се запише во RX9D од RCSTA .
 Битот RX9D мора да се прочита, пред да се прочитаат 8-те бита од регистерот
RCREG
Генератор на такт (BRG)
 BAUD RATE GENERATOR
 За синхронизација и на пренос и на прием се користи
сигнал од часовникот од локалниот тајмер BRG
 Тајмерот BRG се состои од два 8-битни регистри (Има
16 бита)
 Бројот кој е запишан во овие битови е всушност BR
 Мерна единица bps
Функции во mikroC
• void UART1_Init(longint baud_rate);
– иницијализација на UART модулот
– byte UART1_Data_Ready()
– Функцијата враќа вредност 1 ако има податок во
приемниот регистер т.е. има податок за читање, а 0 во
спротивно
– byte UART_T1_Idle()
– Функцијата враќа вредност 1 ако податокот е веќе
пренесен, а 0 во спротивно
Функции во mikroC
• byte UART1_Read();
• Се враќа бајтот добиен со прием.
– void UART1_Read_Text(char [255] out, char[10]
delimiter, byte Attempts) ;
– Во низата out се зачувува стрингот добиен на прием
– Крајот на стрингот е даден во делиметарот
– Attempts - бројот на обиди (ако се надмине 255 ќе се
блокира програмата)
Функции во mikroC
 void UART1_Write(char character);
• Се врши пренос на еден бајт даден како аргумент.
 void UART1_Write_Text(char[255] text);
• Се врши пренос на целиот стринг даден како
аргумент.
ЕUSART во mikroC
char uart_rd;
void main() {
ANSEL = ANSELH = 0;

UART1_Init(9600); // иницијализација на UART на 9600 bps


Delay_ms(100); // почекај да се стабилизира UART
UART1_Write_Text("Start"); // пренос на стринг

while (1) {
if (UART1_Data_Ready()) { // ако е примен еден бајт
uart_rd = UART1_Read(); // го враќа бајтот кој е примен
UART1_Write(uart_rd); // пренос на бајтот назад преку UART
}
}
}
Master Synchronous Serial Port
 Хардвер кој овозможува сериска комуникација
 Синхронизирана комуникација со друг уред со кој е поврзан
контролерот
 Во комуникацијата едната страна претставува Master, a другата Slave
 Контролерот кој претставува Master ја воспоставува комуникацијата,
генерира такт за комуникацијата итн.
 Постојат два мода на работа на овој хардвер
 SPI (Serial Peripheral Interface)
 I2C (Inter-Integrated Circuit)
SPI Mод
 Овозможува податок од 8 битови да се праќа и
прима истовремено (full-duplex)
 SDO(Serial Data Out) сигнална линија за праќање
 SDI (Serial Data In) сигнална линија за примање
 SCK (Serial Clock) сигнална линија за синхронизација
 SS (Slave Select) сигнална линија за селекција на Slave
SPI Mод
 Комуникацијата се одвива преку дадените сигнални линии
 Master контролерот го дава тактот за комуникацијата
 Slave контролерот преку SS знае дали има воспоставено комуникација
 Се користат бафери за привремено складирање на податок кој се праќа
и прима (SSPBUF)
 Се користи поместувачки регистер до кој немаме директен пристап за
да се прати или прими податок преку дадените сигнални линии (SSPSR)
 Дополнителни регистри за разни подесувања: контролниот регистер
SSPCON и статусниот регистер SSPSTAT
I2C мод
 Овозможува податок од 8 битови да се праќа и
прима преку иста сигнална линија (half-duplex)
 SDA (Serial Data) сигнална линија за праќање и примање
 SCL (Serial Clock) сигнална линија за синхронизација
 Преку TRIS регистрите се индицира дали овие сигнали се
влезни или излезни за дадениот контролер
I2C мод
 Маster конролерот го избира Slave контролерот со тоa
што праќа адреса преку SDA. Со оној контролер кој ја
имаа таа адреса ќе се воспостави комуникација
 Чекор 1: Master контролерот праќа 1 бајт
 Бит за старт START (логична 0)
 Адреса од 7 бита
 Еден бит кој укажува дали Master контролерот бара да
прати или да прими податок (0 прати, 1 прими)
I2C мод
 Чекор 2: Master контролерот чека сигнал од Slave
контролерот дека ја добил пораката
 По ова во следните чекори прво се праќа податок преку
сигналната линија SDA, а потоа се чека на одговор.
 Ова се повторува додека Master контролерот да прати
сигнал за стоп
I2C мод
 Следните регистри се користат
 SSPCON – контролер регистер
 Дали конролерот е Master
 SSPCON2 – контролен регистер
 SSPSTAT – статус регистер
 SSPBUF – бафер регистер
 Се чува вредност на податок кој е примен или пратен
 SSPSR – поместувачки регистер
 Се чува вредност на податок кој е примен или пратен и не е
достапен од контролерот
 SSPADD
 Се подесува тактот
Функции во mikroC
• Software SPI Library
• Се користи за SPI комуникација независно од
хардверот
• Подесено е во Master мод, а тактот е 20Hz

extern sfr sbit SoftSpi_SDI; Data In line. sbit SoftSpi_SDI at RC4_bit;


extern sfr sbit SoftSpi_SDO; Data Out line. sbit SoftSpi_SDO at RC5_bit;
extern sfr sbit SoftSpi_CLK; Clock line. sbit SoftSpi_CLK at RC3_bit;
extern sfr sbit SoftSpi_SDI_Direction; Насока на Data In. sbit SoftSpi_SDI_Direction at TRISC4_bit;
extern sfr sbit SoftSpi_SDO_Direction; Насока на Data Out sbit SoftSpi_SDO_Direction at TRISC5_bit;
extern sfr sbit SoftSpi_CLK_Direction; Насока на Clock pin. sbit SoftSpi_CLK_Direction at TRISC3_bit;
Функции во mikroC
 void Soft_SPI_Init();
• Се иницијализира SPI
 unsigned short Soft_SPI_Read(char sdata);
• Овозможува такт
• Прима еден бајт
• Праќа еден бајт
 void Soft_SPI_Write(char sdata);
• Праќа еден бајт
Функции во mikroC
• Software I2C Library
• Се користи за I2C комуникација независно од
хардверот

extern sbit Soft_I2C_Scl; I²C Clock line. sbit Soft_I2C_Scl at RC3_bit;


extern sbit Soft_I2C_Sda; I²C Data line. sbit Soft_I2C_Sda at RC4_bit;
sbit Soft_I2C_Scl_Direction at
extern sbit Soft_I2C_Scl_Direction; Насока на I²C Clock pin.
TRISC3_bit;
sbit Soft_I2C_Sda_Direction at
extern sbit Soft_I2C_Sda_Direction; Насока на I²C Data pin.
TRISC4_bit;
Функции во mikroC
 void Soft_I2C_Init();
• Се иницијализира I2C
 void Soft_I2C_Start(void);
• Се праќа старт сигнал
 unsigned short Soft_I2C_Read(unsigned int ack);
• Прима еден бајт од slave контролерот
• Ако ack e 0 не се праќа одговор дали е примен бајтот
 unsigned short Soft_I2C_Write(unsigned short
data_);
• Праќа еден бајт до slave контролерот – data_
• Враќа одговор дали е пратен бајтот – 0 ако нема грешкa
Функции во mikroC
 void Soft_I2C_Stop(void);
• Се праќа стоп сигнал
 void Soft_I2C_Break(void);
• Кога функцијата е повикувана во рутина за прекин,
може да се прекине настаната блокада во
извршувањето на програмата

You might also like