📄 serial.c
字号:
/* 2407A板:将JP11和JP14短接到2-3;
使用直连的串口通信电缆;
启动串口调试助手.exe;
PC机发送一个"."为结束标志
*/
#include "2407c.h"
void wait(int nWait);
char cString[17]={ "Hello PC!,Over|" },cReceive,cBuffer[17],cAnswer[16]={"Oh,you say"};
int bReceive,nLen;
main()
{
unsigned int uWork;
int i,k;
bReceive=0;
asm(" setc INTM");
asm(" clrc SXM");
asm(" clrc OVM");
*WDCR=0x6f;
*WDKEY=0x5555;
*WDKEY=0xaaaa;
*SCSR1=0x81fe; /* 40MHz */
uWork=(*MCRA);
uWork|=0x03; /* use SCITXD,SCIRXD */
(*MCRA)=uWork;
(*SCICCR)=0x07; /* 8位字符,1停止位,无校验*/
(*SCICTL1)=0x03; /* 使能发送和接收 */
(*SCICTL2)=0x00; /* 禁止接收和发送中断 */
(*SCIHBAUD)=0x02; /* 波特率=208H,40MHz */
(*SCILBAUD)=0x08; /* 208h=40*10^6/(9600*8)-1 */
(*SCICTL1)=0x23; /* 使能发送和接收,复位SCI */
while ( 1 )
{
if ( bReceive==0 )
{
for ( i=0;i<16;i++ )
{
do
{
uWork=(*SCICTL2);
} while ( uWork&0x0c0 != 0x0c0 );
(*SCITXBUF)=cString[i];
wait(100);
}
}
else
{
for ( i=0;i<10;i++ )
{
do
{
uWork=(*SCICTL2);
} while ( uWork&0x0c0 != 0x0c0 );
(*SCITXBUF)=cAnswer[i];
wait(100);
}
do
{
uWork=(*SCICTL2);
} while ( uWork&0x0c0 != 0x0c0 );
(*SCITXBUF)='\"';
for ( i=0;i<nLen;i++ )
{
do
{
uWork=(*SCICTL2);
} while ( uWork&0x0c0 != 0x0c0 );
(*SCITXBUF)=cBuffer[i];
wait(100);
}
do
{
uWork=(*SCICTL2);
} while ( uWork&0x0c0 != 0x0c0 );
(*SCITXBUF)='\"';
wait(1024);
for ( i=9;i<16;i++ )
{
do
{
uWork=(*SCICTL2);
} while ( uWork&0x0c0 != 0x0c0 );
(*SCITXBUF)=cString[i];
wait(100);
}
}
k=0; bReceive=0;
while ( 1 )
{
do
{
uWork=(*SCIRXST);
} while ( (uWork&0x40)==0 );
cReceive=(*SCIRXBUF);
cBuffer[k]=cReceive;
if ( cReceive=='.' )
{
cBuffer[k+1]='\0';
nLen=k+1;
bReceive=1;
break;
}
k++; k%=16;
}
}
}
void wait(int nWait)
{
int i,j,k=0;
for ( i=0;i<nWait;i++ )
for ( j=0;j<64;j++ )
k++;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -