|
串口七日 之 创世纪篇
作者:程序匠人
Ø 第四日
============================
圣经创世纪篇之第四日
上帝说:“天上要有光体,可以分管昼夜,作记号,定节令、日子、年岁,并要发光普照全地。”
于是上帝造就了两个光体,给它们分工,让大的那个管理昼,小的那个管理夜。
上帝又造就了无数的星斗。把它们嵌列在天幕之中。
============================
串口创世纪篇之第四日
匠人说:“底层驱动程序上要有具体功能模块,可以对计算机发过来的命令进行解析和执行。”
于是匠人写了一些子模块,给它们分工,让大的那个负责对计算机发送过来的命令进行解析,让小的那些负责执行具体功能。
匠人把它们嵌入了整个项目中。
//----------------------
//串行通讯处理
//----------------------
void COMM_CNT(void)
{
COMM_DELAY_JSQ++;
if (COMM_DELAY_JSQ>=100)
{
SCI_Init(); //串行口初始化
}
if ( COMM_SEND_EN_T && ( COMM_DELAY_JSQ>=3) ) //通信发送使能标志=1,且通讯延时计数器>=3,才能执行本模块
{
SCC2_RE = 0; //禁止接受
//通讯错误检测
if (COMM_BUF[0] == 0) COMM_err(0); //通讯缓冲区首字节=0?
else if (COMM_JSQ <= 2) COMM_err(1); //接收计数器<2?
else if (count_CKSUM( COMM_BUF,COMM_JSQ-1 ) != COMM_BUF[COMM_JSQ-1]) COMM_err(2); //校验和错误?
//分析命令字,并执行相关功能
else
{
switch( COMM_BUF[1] ) //根据命令字跳转
{
case 0X00 :
if (PASSWORD_OK_T) COMM_CNT_READ_VER(); //读软件版本信息
else COMM_err(7); //密码未登录
break;
case 0X01 :
COMM_CNT_PASSWORD(); //密码登录
break;
case 0X02 :
if (PASSWORD_OK_T) COMM_CNT_READ_E2PROM(); //读E2PROM
else COMM_err(7); //密码未登录
break;
case 0X03 :
if (PASSWORD_OK_T) COMM_CNT_WRITE_E2PROM(); //写E2PROM
else COMM_err(7); //密码未登录
break;
default :
COMM_err(3); //命令错误
}
//SCI_Send_N(); //数据回传 //for TEST
}
SCI_Init(); //串行口初始化
}
}
其实网上关于串口的程序很多,现收集部分如下(点击连接进入。如果无法进入,可以到《匠人的百宝箱》搜索):
W77E58 双串口通信源代码
一个非常好的串口程序
51 IO口模拟串口通讯C源程序
LPC2xxx ARM7 串口 FIFO中断方式 的源代码
LPC2xxx ARM7 串口 FIFO中断方式 的源代码的头文件
51单片机串口调试程序一列
纯软件单片机串口(一)(ASM)
纯软件单片机串口(二)(ASM)
待续……
============================ |