|
/*-----------------------------------------------------* *文件描述:本文件包含了串行通信的4子程序,分别为: * *(1)SCISend1:串行发送1字节 * *(2)SCISendN:串行发送n字节 * *(3)SCIRe1:串行接收1字节 * *(4)SCIReN:串行接收n字节 * *-------------《嵌入式应用技术基础教程》--------------*/ //[以下为子程序源代码] //[包含头文件] #i nclude "SCI.h" /*SCISend1:串行发送1个字节-----------------------------* *功 能:串行发送1个字节 * *参 数:要发送的数据 * *返 回:无 * *-----------------------------------------------------*/ void SCISend1(unsigned char o) {//判断ReStatusR的第SendTestBit位是否为1,是1可以发送 while(1) if ((ReSendStatusR & (1<<SendTestBit)) != 0) { ReSendDataR=o; break;} } /*SCISendN:串行发送N个字节-----------------------------* *功 能:发送数组中的N个字节数据 * *参 数:待发送的数据字节数及其要存放的数组首地址 * *返 回:无 * *-----------------------------------------------------*/ void SCISendN(unsigned char n,unsigned char ch[]) {int i; for(i=0;i<n;i++) SCISend1(ch[i]); } /*SCIRe1:串行收一个字节数据----------------------------* *功 能:从串行口接收1个字节的数据 * *参 数:标志指针p * *返 回:接收到的数据(若接收失败,返回0xff) * *说 明:参数*p带回接收标志=0收到数据,=1未收到数据 * *-----------------------------------------------------*/ unsigned char SCIRe1(unsigned char *p) { unsigned int k; unsigned char i; //ReStatusR第ReTestBit位为1表示可接收数据 for(k=0;k<0xfbbb;k++) if ((ReSendStatusR & (1<<ReTestBit)) != 0) {i=ReSendDataR; *p=0x00; break;} if(k>=0xfbbb) {i=0xff; *p=0x01;} return i; //返回接收到的数据 } /*SCIReN:HC08串行接收N个字节---------------------------* *功 能:接收N个字节数据,并存放在ch数组中 * *参 数:待接收的数据字节数及其存放的数组首地址 * *返 回:接收标志=0收到数据,=1未收到数据 * *-----------------------------------------------------*/ unsigned char SCIReN(unsigned char n,unsigned char ch[]) {int m; unsigned char fp; m=0; while (m<n) { ch[m]=SCIRe1(&fp); if (fp==1) return 1; m++; } return 0; } |