📄 comm.c
字号:
/******************************************************************
* copyright 2004 *
*******************************************************************
文件名称: comm.c
文件版本: 2.00
创建人: 于冬梅
创建日期: 2004.03.10
功能描述: 考勤机串口通讯程序
相关硬件: AT89S52,11.0592M晶震
修改记录: 2002.11.8汇编版本
*******************************************************************/
#include "kqj.h"
extern uchar re_buf[14]; //串口接收缓冲区
extern uchar tr_buf[22]; //串口发送缓冲区,串口发送缓冲区的第一个值是 mcu_adr
extern uchar re_num; //接收计数单元
extern uchar tr_num;
extern uchar tr_pointer;
extern uchar re_pointer;
void inti_comm()
{
RCAP2H=0XFF;
RCAP2L=0XDC; //;ffb2 12m, 4800
// ;ffb8 11.0592 4800; ffdch 11.0592 9600
SCON=0x50;
T2CON=T2CON|0X30;
TR2=1;
ES=1;
}
//串口中断服务子程序
void serial(void) interrupt 4
{
uchar temp;
if(TI)
{
TI=0;
/* tr_num--;
if(tr_num==0){tr_num=4;tr_pointer=0; return;}
else
{
SBUF=tr_buf[++tr_pointer];
}
*/
}
if(RI)
{
RI=0;
temp=SBUF;
re_buf[re_pointer++]=SBUF;
SBUF=temp;
re_num--;
if(re_num==0)
{
re_pointer=0;
re_num=4;
/*
if(re_crc(re_buf[2])) re_wr_ack(0x00);
else re_wr_ack(0xee);
re_num=0x04;
*/
}
}
}
//接收写命令应答祯
//帧格式:
//地址码 命令码 00H或eeh 校验和
void re_wr_ack(uchar type )
{
uchar crc=0;
//第一个字节,本机的地址已存在串口发送缓冲中,直接发送
SBUF=tr_buf[0];
tr_buf[1]=re_buf[1]; //命令码
tr_buf[2]=type; //正常应答祯数据标志
crc=tr_buf[0]+tr_buf[1];
crc=crc+tr_buf[2];
tr_buf[3]=crc;
tr_num=0x04;
tr_pointer=0x00;
}
void wr_sram()
{
switch (re_buf[1]) //命令代码
{
case 0xb1: //写卡号命令wr_card()
{
wr_card(re_buf[3]);
}
break;
case 0xb2: //写时间命令wr_time();
{
wr_time();
}
break;
case 0xb3: //写语音段号命令wr_sound();
{
wr_sound();
}
break;
case 0xb4: //写删除命令 wr_erase();
{
wr_erase();
}
break;
case 0xb5: //初始化命令 wr_inti();
{
wr_inti();
}
break;
default :
{
}
break;
}
}
void rd_record_ack()
{
}
//接收校验和正确,返回1,错误,返回0
//datanum 接收祯的数据域长度
bit re_crc(uchar datanum)
{
uchar crc;
uchar i;
crc=re_buf[0]+re_buf[1]; //地址码+命令码
crc=crc+datanum; //加数据域长度 re_buf[2]
if(datanum==0&&crc==re_buf[3]) return 1; //读命令校验
// if(re_buf[2]==0&&crc==re_buf[3])return 1;
else
{
for(i=3;i<datanum+3;i++)
crc=crc+re_buf[i];
if(crc==re_buf[datanum+3]) return 1;
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -