📄 msp430f1611_9600_only.c
字号:
}
}
else if (com8.Tx_status == 1)
{
com8.Tx_status = 0 ;
if ( com8.BitCnt == 0)
{
if (com8.BufferPtr <= 0x11)
//if (com6.BufferPtr <= (com6.RxBuf[12]+ 17)) //check send byte number
{
com8.TxTemp = com8.TxBuf[com8.BufferPtr++];
com8.BitCnt = 0x0b;
ii=com8.TxTemp; //add even bit start
kk=0;
for(jj=0;jj<8;jj++)
{
if(ii&0x80) kk^=0x100;
ii<<=1;
}
com8.TxTemp |=kk; //add even bit end
com8.TxTemp |=0x200; //add stop bit
com8.TxTemp = com8.TxTemp << 1; // Add space start bit
CCR2 = TAR; // Current state of TA counter
CCR2 += Bitime; // Some time till first bit
}
else
{
com8.BufferPtr=0;
CCTL2 &= ~ CCIE; // All bits TXed, disable interrupt
com8.Tx_finish = 1;
_NOP();
}
}
else
{
if (com8.TxTemp & 0x01) CCTL2 &= ~ OUTMOD2; // TX Mark
else CCTL2 |= OUTMOD2; // TX Space
com8.TxTemp = com8.TxTemp >> 1;
com8.BitCnt --;
}
}
//com8_TX_Byte();
} break;
}
}
}
// COM6 TX INTT
void com6_TX_Byte (void)
{
unsigned char i,j;
unsigned int k;
//com6.BitCnt = 0x0b; // Load Bit counter, ST+8data + EVEN + STOP
com6.BufferPtr = 0x0; //
for(i=0;i<0x12;i++) //RX DATA PUT TX BUFFER
{
com6.TxBuf[i]=com6.RxBuf[i];
com6.RxBuf[i] = 0;
}
com6.TxTemp = com6.TxBuf[com6.BufferPtr]; //take first tx data for tx regest
i=com6.TxBuf[com6.BufferPtr]; //get even start
k=0;
for(j=0;j<8;j++)
{
if(i&0x80)k^=0x100;
i<<=1;
}
com6.TxTemp |=k; //add odd or even end
com6.TxTemp |=0x200; //add stop bit
com6.TxTemp = com6.TxTemp << 1; // Add space start bit
CCR0 = TAR; // Current state of TA counter
CCR0 += Bitime; // Some time till first bit
CCTL0 = OUTMOD0 + CCIE + CCIS_2; // TXD = mark = idle
//while ( CCTL0 & CCIE ); // Wait for TX completion
}
// COM7 TX INTT
void com7_TX_Byte (void)
{
unsigned char i,j;
unsigned int k;
//com7.BitCnt = 0x0b; // Load Bit counter, ST+8data + EVEN + STOP
com7.BufferPtr = 0x0; //
for(i=0;i<0x12;i++) //RX DATA PUT TX BUFFER
{
com7.TxBuf[i]=com7.RxBuf[i];
com7.RxBuf[i] = 0;
}
com7.TxTemp = com7.TxBuf[com7.BufferPtr]; //take first tx data for tx regest
i=com7.TxBuf[com7.BufferPtr]; //get even start
k=0;
for(j=0;j<8;j++)
{
if(i&0x80)k^=0x100;
i<<=1;
}
com7.TxTemp |=k; //add odd or even end
com7.TxTemp |=0x200; //add stop bit
com7.TxTemp = com7.TxTemp << 1; // Add space start bit
CCR1 = TAR; // Current state of TA counter
CCR1 += Bitime; // Some time till first bit
CCTL1 = OUTMOD0 + CCIE + CCIS_2; // TXD = mark = idle
//while ( CCTL1 & CCIE ); // Wait for TX completion
}
// COM8 TX INTT
void com8_TX_Byte (void)
{
unsigned char i,j;
unsigned int k;
//com8.BitCnt = 0x0b; // Load Bit counter, ST+8data + EVEN + STOP
com8.BufferPtr = 0x0; //
for(i=0;i<0x12;i++) //RX DATA PUT TX BUFFER
{
com8.TxBuf[i]=com8.RxBuf[i];
com8.RxBuf[i] = 0;
}
com8.TxTemp = com8.TxBuf[com8.BufferPtr]; //take first tx data for tx regest
i=com8.TxBuf[com8.BufferPtr]; //get even start
k=0;
for(j=0;j<8;j++)
{
if(i&0x80)k^=0x100;
i<<=1;
}
com8.TxTemp |=k; //add odd or even end
com8.TxTemp |=0x200; //add stop bit
com8.TxTemp = com8.TxTemp << 1; // Add space start bit
CCR2 = TAR; // Current state of TA counter
CCR2 += Bitime; // Some time till first bit
CCTL2 = OUTMOD0 + CCIE + CCIS_2; // TXD = mark = idle
//while ( CCTL2 & CCIE ); // Wait for TX completion
}
// COM6 RX INIT
void com6_RX_Ready (void)
{
com6.BitCnt = 0x9; // Load Bit counter
CCTL0 = SCS + CCIS_0 + OUTMOD0 + CM1 + CAP + CCIE; // Sync, Neg Edge, Capture
TACTL = TASSEL_1 + MC_2; // ACLK, continuous mode
com6.BufferPtr = 0x00;
com6.RxTemp = 0x00;
}
// COM7 RX INIT
void com7_RX_Ready (void)
{
com7.BitCnt = 0x9; // Load Bit counter
CCTL1 = SCS + CCIS_0 + OUTMOD0 + CM1 + CAP + CCIE; // Sync, Neg Edge, Capture
TACTL = TASSEL_1 + MC_2; // ACLK, continuous mode
com7.BufferPtr = 0x00;
com7.RxTemp = 0x00;
}
// COM8 RX INIT
void com8_RX_Ready (void)
{
com8.BitCnt = 0x9; // Load Bit counter
CCTL2 = SCS + CCIS_0 + OUTMOD0 + CM1 + CAP + CCIE; // Sync, Neg Edge, Capture
TACTL = TASSEL_1 + MC_2; // ACLK, continuous mode
com8.BufferPtr = 0x00;
com8.RxTemp = 0x00;
}
// fe fe 68 10 01 00 00 00 00 00 00 01 03 1F 90 00 2c 16
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
CCR0 += Bitime; // Add Offset to CCR0
com6.Tx_finish = 0;
//CCR0 RX
if ((CCTL0 & 0x3000) == 0) // RX on CCI0A?
{
if( CCTL0 & CAP ) // Capture mode = start bit edge
{
CCTL0 &= ~ CAP; // Switch from capture to compare mode
CCR0 += Bitime_5;
com6.BitCnt = 0x9;
com6.Checkbit = 0x00;
}
else
{
if (CCTL0 & SCCI)
{
com6.RxTemp |= 0x200; // Get bit waiting in receive latch
com6.Checkbit ^=0x1;
}
com6.BitCnt --;
com6.RxTemp = com6.RxTemp >> 1; // All bits RXed?
//Rxmark = 0x0;
Rxmark =2; //com6 RX
com6.Rx_status = 1;
_BIC_SR_IRQ(CPUOFF);
}
}
//CCR0 TX
else
{
com6.Tx_status = 1; // set TX status flag
com6.Tx_finish = 0; // clear TX finish flag
_BIC_SR_IRQ(CPUOFF);
Rxmark = 0x0;
Rxmark =2; //com6 RX
}
}
#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A1 (void)
{
switch( TAIV )
{
// CCR1 com7
case 2:
{
CCR1 += Bitime; // Add Offset to CCR0
com7.Tx_finish = 0;
//CCR1 RX
if ((CCTL1 & 0x3000) == 0) // RX on CCI0A?
{
if( CCTL1 & CAP ) // Capture mode = start bit edge
{
CCTL1 &= ~ CAP; // Switch from capture to compare mode
CCR1 += Bitime_5;
com7.BitCnt = 0x9;
com7.Checkbit = 0x00;
}
else
{
if (CCTL1 & SCCI)
{
com7.RxTemp |= 0x200; // Get bit waiting in receive latch
com7.Checkbit ^=0x1;
}
com7.BitCnt --;
com7.RxTemp = com7.RxTemp >> 1; // All bits RXed?
//Rxmark = 0x0;
Rxmark =4; //com6 RX
com7.Rx_status = 1;
_BIC_SR_IRQ(CPUOFF);
}
}
//CCR1 TX
else
{
com7.Tx_status = 1; // set TX status flag
com7.Tx_finish = 0; // clear TX finish flag
_BIC_SR_IRQ(CPUOFF);
Rxmark = 0x0;
Rxmark =4; //com7 RX
}
} break;
//--------------------- ccr2 rx/tx -----------------
case 4:
{
CCR2 += Bitime; // Add Offset to CCR0
com8.Tx_finish = 0;
//CCR2 RX
if ((CCTL2 & 0x3000) == 0) // RX on CCI0A?
{
if( CCTL2 & CAP ) // Capture mode = start bit edge
{
CCTL2 &= ~ CAP; // Switch from capture to compare mode
CCR2 += Bitime_5;
com8.BitCnt = 0x9;
com8.Checkbit = 0x00;
}
else
{
if (CCTL2 & SCCI)
{
com8.RxTemp |= 0x200; // Get bit waiting in receive latch
com8.Checkbit ^=0x1;
}
com8.BitCnt --;
com8.RxTemp = com8.RxTemp >> 1; // All bits RXed?
Rxmark = 0x0;
Rxmark =6; //com6 RX
com8.Rx_status = 1;
_BIC_SR_IRQ(CPUOFF);
}
}
//CCR2 TX
else
{
com8.Tx_status = 1; // set TX status flag
com8.Tx_finish = 0; // clear TX finish flag
_BIC_SR_IRQ(CPUOFF);
Rxmark = 0x0;
Rxmark =6; //com8 RX
}
} break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -