芯睿MK9M186P串口例程序
#include "MK9M186P.h"
#include "UartDef.h"
#include "clib9m186p.h"
#define _TxCode
#if 1
uchar CharCnt;
uchar CmdEnd;
uchar __at 0x0C0 Cmd[10];
uchar __at (0x040) lcdram[64];
#else
uchar CharCnt;
uchar CmdEnd;
uchar Cmd[10];
#endif
void INT(void) __interrupt
{
if(IRQF2bits.RXF)
{
if(UART_RX_DATA == _CR)
CharCnt = 0;
else if(UART_RX_DATA == _LF)
CmdEnd = 1;
Cmd[CharCnt] = UART_RX_DATA;
#ifdef _Rx_PC_Code
UART_TX_DATA = Cmd[CharCnt];
UART_STATUSbits.TX_S = 1;
#endif
CharCnt++;
PA_DATbits.PA3 ^= 1;
}
if(IRQF2bits.TXF)
{
PA_DATbits.PA1 ^= 1;
}
IRQF = 0x00;
IRQF2 = 0x00;
}
void Fast4MHz()
{
SYS_CTL = 0x00;
SYS_CTL1 = 0x01;
SYS_CTL = 0x80;
Nop();
Nop();
}
void Fast1_2MHz()
{
SYS_CTL = 0x20;
SYS_CTL1 = 0x00;
SYS_CTL |= 0x80;
Nop();
Nop();
}
void DecodeUartCmd()
{
if(CmdEnd)
{
if((Cmd[1] == 'P') && (Cmd[2] == 'A') && (Cmd[4] == '='))
{
switch(Cmd[3] - '0')
{
case 0:
PA_DATbits.PA0 = (Cmd[5] - '0');
break;
case 1:
PA_DATbits.PA1 = (Cmd[5] - '0');
break;
case 2:
PA_DATbits.PA2 = (Cmd[5] - '0');
break;
case 3:
PA_DATbits.PA3 = (Cmd[5] - '0');
break;
case 4:
PA_DATbits.PA4 = (Cmd[5] - '0');
break;
case 5:
PA_DATbits.PA5 = (Cmd[5] - '0');
break;
case 6:
PA_DATbits.PA6 = (Cmd[5] - '0');
break;
}
}
CmdEnd = 0;
PA_DATbits.PA4 ^= 1;
}
}
void NopWait()
{
Nop();
Nop();
Nop();
Nop();
}
void WaitCompleted()
{
while(true)
{
if(!UART_STATUSbits.TX_S)
break;
}
}
void delay()
{
volatile unsigned char i, j, k;
for(i = 0; i < 200; i++)
for(j = 0; j < 100; j++)
for(k = 0; k < 100; k++)
Nop();
}
void main()
{
CharCnt = 0;
CmdEnd = 0;
IRQM = 0x00;
IRQF = 0x00;
IRQF2 = 0x00;
WDT_CTL = 0x00;
PA_DIR = 0x00;
PA_DAT = 0x00;
PD_DIR = 0xFF;
PAD_CTL1 = 0x00;
PAD_CTL10 = 0x02;
UART_STATUS = 0x00;
UART_BAUD0 = (bps_9600 & 0x00FF);
UART_BAUD1 = ((bps_9600 >> 8) & 0x00FF);
Set_IRQM_CTL(IRQM_CTL_INTM_EN | IRQM_CTL_RXM_EN);
Fast4MHz();
#ifdef _TxCode
while(true)
{
WaitCompleted();
UART_TX_DATA = 0x0D;
UART_STATUSbits.TX_S = 1;
WaitCompleted();
UART_TX_DATA = 0x50;
UART_STATUSbits.TX_S = 1;
WaitCompleted();
UART_TX_DATA = 0x41;
UART_STATUSbits.TX_S = 1;
WaitCompleted();
UART_TX_DATA = 0x30;
UART_STATUSbits.TX_S = 1;
WaitCompleted();
UART_TX_DATA = 0x3D;
UART_STATUSbits.TX_S = 1;
WaitCompleted();
UART_TX_DATA = 0x31;
UART_STATUSbits.TX_S = 1;
WaitCompleted();
UART_TX_DATA = 0x0A;
UART_STATUSbits.TX_S = 1;
WaitCompleted();
UART_STATUS = 0x00;
PA_DATbits.PA2 ^= 1;
delay();
}
#endif
#ifdef _Rx_PC_Code
while(true)
{
DecodeUartCmd();
NopWait();
}
#endif
}