📄 sci.h
字号:
void SCI_Init()
{
*SCICCR = 0x7;
*SCICTL1 = 0x13;
*SCICTL2 = 0x2;//使能接收中断,禁止发送中断。
*SCIHBAUD = 0x1;
*SCILBAUD = 0x37;//9600,计算公式--》BRR = (SYSCLK/(SCI通讯波特率×8))-1,在这里开发板SYSCLK是15M
//自己作的板子,12M晶振,为9B
//2倍频的时候是0x137
//4倍频的时候不稳定
*SCICTL1 = 0x33;
*SCIPRI = 0x60;
*PADATDIR = 0x100;
}
void SCI_Send_Char(char m_char)
{
*SCITXBUF = m_char;
while(!(*SCICTL2 & 0x80));//等待发送完成
}
void SCI_Send_String(char * string)
{
int l = strlen(string);
int i = 0;
for(i=0;i<l;i++)
{
*SCITXBUF = string[i];
while(!(*SCICTL2 & 0x80));//等待发送完成
}
*SCITXBUF = '\n';//换行
while(!(*SCICTL2 & 0x80));//等待发送完成
}
void SCI_Send_DATA(UINT data)
{
char i,temp = 0;
for(i=12;i>=0;i = i-4)
{
temp = (data>>i)&0x000F;
*SCITXBUF = (temp<10 ? temp+48 : temp+55);
while(!(*SCICTL2 & 0x80));//等待发送完成
}
}
void SCI_Send_SPDU(UINT SPDU_num)
{
UINT i = 0;
*SCITXBUF = SPDU[SPDU_num].ID>>8;
while(!(*SCICTL2 & 0x80));//等待发送完成
*SCITXBUF = SPDU[SPDU_num].ID;
while(!(*SCICTL2 & 0x80));//等待发送完成
for(i=0;i<8;i++)
{
SPDU[SPDU_num].Data[i] = (UINT)((SPDU[SPDU_num].Ver_Data[i]-SPDU[SPDU_num].Data_Def[i].Offset) / SPDU[SPDU_num].Data_Def[i].Precis);
}
for(i=0;i<8;i++)
{
//先发高字节
*SCITXBUF = SPDU[SPDU_num].Data[i]>>8;
while(!(*SCICTL2 & 0x80));//等待发送完成
*SCITXBUF = SPDU[SPDU_num].Data[i];
while(!(*SCICTL2 & 0x80));//等待发送完成
}
}
void Load_SPDU()
{
SPDU[0].Ver_Data[0] = (float)AD_ACC/(float)0x03FF;
SPDU[0].Ver_Data[1] = (float)AD_BRK/(float)0x03FF;
SPDU[0].Ver_Data[2] = (float)ADIN_3/(float)0x03FF;//应该采集DA输出的电压信号
SPDU[0].Ver_Data[3] = 0;
SPDU[0].Ver_Data[4] = 0;
SPDU[0].Ver_Data[5] = 0;
SPDU[0].Ver_Data[6] = 0;
SPDU[0].Ver_Data[7] = 0;
SPDU[1].Ver_Data[0] = ((ADIN_5 > ADIN_6)?(ADIN_5-ADIN_6):(ADIN_6-ADIN_5));
SPDU[1].Ver_Data[1] = QEP_count;
SPDU[1].Ver_Data[2] = 0;
SPDU[1].Ver_Data[3] = 0;
SPDU[1].Ver_Data[4] = 0;
SPDU[1].Ver_Data[5] = 0;
SPDU[1].Ver_Data[6] = 0;
SPDU[1].Ver_Data[7] = 0;
}
void SCI_Recv()
{
char RCV_char;
static int i = 0;
RCV_char = *SCIRXBUF;
if(RCV_char == 0x0d)//回车符
SCI_Send_Char('\n');
else
SCI_Send_Char(RCV_char);
*IFR = 0x0010;
asm(" clrc INTM");//开总中断
return;
}
void interrupt SCI_INT()
{
switch( *PVIR )
{
case 6: SCI_Recv();
// case 7: SCI_Send_String("I am LvWei!");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -