📄 ana_uart.c
字号:
#pragma interrupt INTP4 MD_INTP4
#pragma interrupt INTTM001 MD_INTTM001
#include "includes.h"
unsigned char AnaUartBitCount = 0;
unsigned char AnaUartRxByte = 0;
unsigned char AnaCommParity = 0;
void AnaUartRxReady(void)
{
AnaUartBitCount = 10;
AnaUartRxByte = 0;
AnaCommParity = UART_BIT_9_L;
TMIF001 = 0;
TMMK001 = 1;
PMK4 = 0;
PIF4 = 0;
}
void INTP4Init(void)
{
ANA_UART_RX_DIR = 1;
AnaUartBitCount = 10;
AnaUartRxByte = 0;
AnaCommParity = UART_BIT_9_L;
PMK4 = 1;
PIF4 = 0;
PPR1 = 0;
EGP = 0x00;
EGN.4 = 0x01;
PMK4 = 0;
}
__interrupt void MD_INTP4( void )
{
CommPortChose |= ANA_UART_PORT;
PMK4 = 1;
TMMK001 = 1;
TMC01 = 0x00;
CRC01 = 0x00;
PRM01 = 0x01;
CR001 = ANA_UART_START_BIT_WAIT;
PR1H.2 = 0;
TMIF001 = 0;
TMMK001 = 0;
TMC01 = 0x0C;
}
__interrupt void MD_INTTM001( void )
{
unsigned char temp;
TMIF001 = 0;
if( AnaUartBitCount == 10 )
{
TMC01 = 0x00;
CR001 = ANA_UART_BAUD_RATE_5000;
TMC01 = 0x0C;
}
temp = ANA_UART_RX;
if ( AnaUartBitCount > 2 )
{
AnaUartRxByte >>= 1;
if ( temp )
{
AnaUartRxByte |= 0x80;
AnaCommParity = ~ AnaCommParity;
}
AnaUartBitCount--;
}
else if( AnaUartBitCount == 2 )
{
if ( temp )
{
if( ( UART_BIT_9_H == AnaCommParity ) == 0 )
{
FrameBuffer[0] = 0;
}
}
else
{
if( ( UART_BIT_9_L == AnaCommParity ) == 0 )
{
FrameBuffer[0] = 0;
}
}
AnaUartBitCount--;
UartRxByte = AnaUartRxByte;
RxFrameDispose();
}
else
{
if( temp == 0 )
{
AnaUartBitCount = 0;
}
TMC01 = 0x00;
TMMK001 = 1;
AnaUartRxReady();
}
}
void AnaUartSend0(void)
{
ANA_UART_TX = 0;
}
void AnaUartSend1(void)
{
ANA_UART_TX = 1;
AnaCommParity =~ AnaCommParity;
}
/*Send one byte(11bits)*/
void AnaUartSendByte(unsigned short sData)
{
unsigned char sBitCount = 11;
TMC01 = 0x00;
CR001 = ANA_UART_BAUD_RATE_5000;
TMC01 = 0x0C;
TMMK001 = 1;
TMIF001 = 0;
AnaCommParity = UART_BIT_9_L;
sData<<=1;
sData|=0x0400;
do{
if(sBitCount!=2)
{
if(sData&0x0001)
AnaUartSend1();
else
AnaUartSend0();
}else{
if(AnaCommParity==UART_BIT_9_H)
AnaUartSend1();
else
AnaUartSend0();
}
sData>>=1;
while(!TMIF001);//在这里等待
TMIF001 = 0;
}while(--sBitCount);
TMIF001 = 0;
}
void AnaUartStartToTx( void )
{
unsigned char ii;
for ( ii = 0; ii < FrameBuffer[ FRM_DATALEN ] + 12; ii++ )
{
AnaUartSendByte( FrameBuffer[ii] );
}
_sys_evt_add( EVT_INIT_COMM );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -