Laboratorium 5 transmisja szeregowa

background image

Laboratorium 5 – transmisja szeregowa

Transmisja szeregowa za pomoc

ą

układu UART



Układ Usart MSP430 umożliwia transmisję szeregową w trybie asynchronicznym.
USART podłączony jest do urządzeń zewnętrznych za pomocą 2 zewnętrznych pinów,
URXD i UTXD (3.4 i 3.5).
Pracę w tym trybie, umożliwiającym komunikację z komputerem przez port RS-232,
zerując bit SYNC w rejestrze sterującym.


Format ramki danych.

background image

Ramka danych trybu asynchronicznego UART składa się z następujących pól:

bit startu,

7 lub 8 bitów danych

Bit parzystości /nieparzystości

address bit (address-bit mode),

1 lub 2 bitów stopu.



Prędkość transmisji uzależniona jest od częstotliwości zegara taktującego i zawartości
odpowiednich rejestrów sterujących: UxBR1, UxBR0, UxMCTL.


Typowe pr

ę

dko

ś

ci transmisji

Ustawienia rejestrów sterujących dla standardowych prędkości transmisji (dla zegara 32,768-
Hz (ACLK) i 1,048,576-Hz SMCLK) przedstawia poniższa tabela:


Sposób wyznaczania dowolnej innej prędkości określa dokumentacja układu MSP430.

Rejestry układu USART

background image




background image


background image

background image

Przykładowy kod:


Porty układu UART s
ą przyłączone do pinów 3.4 i 3.5

#define Tx 0x10 // P3.4
#define Rx 0x20 // P3.5



Przykład inicjalizacji portów 3.4 i 3.5 do pracy w trybie UART

#include <msp430x14x.h>

background image

#include "portyUart.h"

void initPortyUart(void)
{
P3SEL |= Tx + Rx;
P3DIR |= Tx;
P3DIR &= ~ Rx;
}


Inicjalizacja układu UART do pracy z szybkością 1200 b/s.

#include <msp430x14x.h>
#include "uart.h"



void initUart( int Speed)
{
int i;

BCSCTL1 |= XTS; // ACLK = LFXT1 = HF XTAL 8MHz

do

{

IF1 &= ~OFIFG; // Czyszczenie flgi OSCFault

for (i = 0xFF; i > 0; i--); // odczekanie

}

while ((IFG1 & OFIFG)); // dopóki OSCFault jest ci

ą

gle ustawiona

BCSCTL2 |= SELM1+SELM0 ; // MCLK =LFXT1

switch(Speed)
{
case 1200:{
ME1 |= UTXE0 + URXE0; // Wł

ą

czenie USART0 TXD/RXD

UCTL0 |= CHAR; // 8-bitów
UTCTL0 |= SSEL0; // UCLK = ACLK
UBR00 = 0x0A; // 8MHz/Speed in Bauds
UBR10 = 0x1A; //
UMCTL0 = 0x5B; // Modulation
UCTL0 &= ~SWRST; // Inicjalizacja UARTA
IE1 |= URXIE0; // Wł

ą

czenie przerwa

ń

od RX

break;
}
}
}

//---------------- wysyłanie znaku ---------
void UartCharTransmit(unsigned char znak)
{
while ( (IFG1 & UTXIFG0)==0); // gdy ukł

ą

d nie jest zaj

ę

ty

TXBUF0=znak; // wysyłamy znak
}

//---------------- wysyłanie napisu ----------
void UartStringTransmit(char * napis)
{
while( *napis)
UartCharTransmit(*napis ++);
}

Wysyłanie danych z prędkością 1200 b/s.

#include<msp430x14x.h>
#include "uart.h"
#include "lcd.h"

background image

#include "portyUart.h"
#include "portyLcd.h"

char Bufor[30]; // bufor odczytywanych danych
int low=0; // znacznik pocz

ą

teku danych w buforze

int high=0; // zmacznik ko

ń

ca danych w buforze


void main(void)
{
WDTCTL=WDTPW + WDTHOLD; // wył

ą

czenie WDT


InitPortsLcd(); // inicjalizacja portów LCD
InitLCD(); // inicjalizacja LCD
clearDisplay(); // czyszczenie wy

ś

wietlacza

initPortyUart(); // inicjalizacja portow UART
initUart(1200); // inicjalizacja UARTa pr

ę

dko

ść

transmisji


_EINT(); // wł

ą

czenie przerwa

ń


while(1) // niesko

ń

czona p

ę

tla

{
UartStringTransmit("Tekst"); // wysłanie napisu Tekst do ternimala
UartDecimalTransmit(1); // wysłanie cyfry jeden

while(high != low) // gdy odebrano dane
{
putc(Bufor[low]); // wypisanie danych na wy

ś

wietlaczu

low= (++low)%30; // inkrementowanie znaczika pocz

ą

tka danych

}
}
}

#pragma vector=UART0RX_VECTOR // procedura obsługi przerwania UART
__interrupt void usart0_rx (void)
{
Bufor[high]=RXBUF0; // wpisanie odebranych danych do bufora
high=(++high)%30; // inkrementowanie znacznika ko

ń

ca danych

}


Zadania:

1.

Ustawi

ć

pr

ę

dko

ść

transmisji na 2400, 9600, 115200 b/s. Format

ramki danych: 8 bitów danych, 1 bit stopu, bez parzysto

ś

ci.

2.

Zdefiniowa

ć

4 napisy. Wysłanie ka

ż

dego z napisów do okna

terminala zainicjowa

ć

za pomoc

ą

naci

ś

ni

ę

cia jednego z 4

klawiszy

3. Wy

ś

wietli

ć

aktualny czas z zegara na ekranie terminala.

Aktualizowa

ć

wy

ś

wietlany czas co 1 sekund

ę

.


Wyszukiwarka

Podobne podstrony:

więcej podobnych podstron