S
superhuat
Guest
Ahoj všichni, já jsem v současné době pracuje na projektu.Potřebuji pro vysílání a příjem 10 bajtů dat mezi PC a MSP430F425.I am using timerA funkce MCU to udělat.Právě teď jsem schopen posílat a přijímat 1 byte z ascii dat mezi PC a MCU.Otázkou je, jak mám upravit kód pro odesílání a příjem 10 bajtů dat?Musím použít buffer pro ukládání dat byte na byte?10 bajtů dat bude se skládá z 5 informací (2 bajtech).Ještě jedna otázka, která je lepší - pomocí timerA nebo UART funkce MCU?Děkuji vám všem předem.BTW jsem pomocí IAR Vestavěné Workbench a výpis kód je zde -
-Hlavní
for (;
<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="Mrknutí" border="0" />(
RX_Ready (); / / UART připraven RX jeden bajt
_BIS_SR (LPM3_bits GIE); / / Enter LPM3 Do charakter RXed
TX_Byte ();
)
/ / Funkce Přenáší postava z RXTXData pufr
neplatné TX_Byte (void)
(
BitCnt = 0xA; / / Load Bit čítač, 8data ST / SP
CCR0 = TAR, / / Současný stav TA počítadlo
CCR0 = Bitime; / / Nějaký čas do první bit
RXTXData | = 0x100; / / Přidat značka stop bit na RXTXData
RXTXData = RXTXData <<1, / / Přidat prostor start bit
CCTL0 = OUTMOD0 CCIE; / / TXD = značka = idle
while (CCTL0 & CCIE), / / Počkat na dokončení TX
)/ / Funkce připravuje UART Dostávat znaků do RXTXData pufr
neplatné RX_Ready (void)
(
BitCnt = 0x8, / / Load Bit čítač
CCTL0 = SCS CCIS0 OUTMOD0 CM1 SZP CCIE; / / Sync, Neg Edge, Capture
)/ / Timer A0 přerušení provozu rutinní
# Pragma vektor = TIMERA0_VECTOR
__interrupt neplatné Timer_A (void)
(
CCR0 = Bitime; / / Přidat Posun k CCR0
/ / RX
if (CCTL0 & CCIS0) / / RX na CCI0B?
(
if (CCTL0 & CAP) / / Zachycení mode = start bit okraj
(
CCTL0 & = ~ SZP; / / zachycení porovnat režimu
CCR0 = Bitime_5;
)
jiný
(
RXTXData = RXTXData>> 1;
if (CCTL0 & SCCI) / / Získání bit čekal dostávat západku
RXTXData | = 0x80;
BitCnt -, / / Všechny bity RXed?
if (BitCnt == 0)
//>>>>>>>>>> Dekódování obdržených Byte Zde <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<
(
CCTL0 & = ~ CCIE; / / Všechny bity RXed, vypnout přerušení
_BIC_SR_IRQ (LPM3_bits); / / Clear LPM3 kousky od 0 (SR)
)
//>>>>>>>>>> Dekódování obdržených Byte Zde <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<
)
)
/ / TX
jiný
(
if (BitCnt == 0)
CCTL0 & = ~ CCIE; / / Všechny bity TXed, vypnout přerušení
jiný
(
CCTL0 | = OUTMOD2; / / TX vesmíru
if (RXTXData & 0x01)
CCTL0 & = ~ OUTMOD2; / / TX OZ
RXTXData = RXTXData>> 1;
BitCnt -;
)
)
)
-Hlavní
for (;
<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="Mrknutí" border="0" />(
RX_Ready (); / / UART připraven RX jeden bajt
_BIS_SR (LPM3_bits GIE); / / Enter LPM3 Do charakter RXed
TX_Byte ();
)
/ / Funkce Přenáší postava z RXTXData pufr
neplatné TX_Byte (void)
(
BitCnt = 0xA; / / Load Bit čítač, 8data ST / SP
CCR0 = TAR, / / Současný stav TA počítadlo
CCR0 = Bitime; / / Nějaký čas do první bit
RXTXData | = 0x100; / / Přidat značka stop bit na RXTXData
RXTXData = RXTXData <<1, / / Přidat prostor start bit
CCTL0 = OUTMOD0 CCIE; / / TXD = značka = idle
while (CCTL0 & CCIE), / / Počkat na dokončení TX
)/ / Funkce připravuje UART Dostávat znaků do RXTXData pufr
neplatné RX_Ready (void)
(
BitCnt = 0x8, / / Load Bit čítač
CCTL0 = SCS CCIS0 OUTMOD0 CM1 SZP CCIE; / / Sync, Neg Edge, Capture
)/ / Timer A0 přerušení provozu rutinní
# Pragma vektor = TIMERA0_VECTOR
__interrupt neplatné Timer_A (void)
(
CCR0 = Bitime; / / Přidat Posun k CCR0
/ / RX
if (CCTL0 & CCIS0) / / RX na CCI0B?
(
if (CCTL0 & CAP) / / Zachycení mode = start bit okraj
(
CCTL0 & = ~ SZP; / / zachycení porovnat režimu
CCR0 = Bitime_5;
)
jiný
(
RXTXData = RXTXData>> 1;
if (CCTL0 & SCCI) / / Získání bit čekal dostávat západku
RXTXData | = 0x80;
BitCnt -, / / Všechny bity RXed?
if (BitCnt == 0)
//>>>>>>>>>> Dekódování obdržených Byte Zde <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<
(
CCTL0 & = ~ CCIE; / / Všechny bity RXed, vypnout přerušení
_BIC_SR_IRQ (LPM3_bits); / / Clear LPM3 kousky od 0 (SR)
)
//>>>>>>>>>> Dekódování obdržených Byte Zde <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<
)
)
/ / TX
jiný
(
if (BitCnt == 0)
CCTL0 & = ~ CCIE; / / Všechny bity TXed, vypnout přerušení
jiný
(
CCTL0 | = OUTMOD2; / / TX vesmíru
if (RXTXData & 0x01)
CCTL0 & = ~ OUTMOD2; / / TX OZ
RXTXData = RXTXData>> 1;
BitCnt -;
)
)
)