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.
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
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
#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
#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
#include "uart.h"
#include "lcd.h"
#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:
transmisja szeregowa
787 W03 Transmisja szeregowa
szeregowa transmisja
SZEREGI wyklad
Rola laboratoriów w świetle wymagań systemów zarządzania jakoscią
Laboratorium 3
Przewodowe media transmisyjne czII
Ćwiczenie laboratoryjne nr 6 materiały
Windows 2 Laboratorium 4b
szereg napeicowy
Chemia żywnosciCwiczenie laboratoryjne nr 1 wyodrebnianie i badanie własciwosci fizykochemicznych b
więcej podobnych podstron