📄 main.c
字号:
#include <stdio.h>
#include <reg51.h>
#include "driver.h"
#include "sle4442.h"
main(void)
{
//系统初始化
//串口初始化
UART_INIT();
while(1)
{
ComTran();
}
}
/******************************************************
功能:串口初始化
入口参数:无
出口参数:无
******************************************************/
void UART_INIT()
{
SCON = 0X50;
TMOD = 0X21;
PCON |= 0X80;
TH1=TL1=FDH;
ES = 1;
EA = 1;
}
/******************************************************
功能:串口uart接收中断
入口参数:无
出口参数:无
*******************************************************/
void UART_ISR(void) interrupt 4
{
if((RI)&&(TI))
{
if (iend<255)
{
buffer[iend++] = SBUF;
unlen++;
}
while(!TI)//等待发送完成
TI=0;//清除发送标志
RI=0;//清除接收标志
}
}
/*****************************************************
功能:发送数据
*****************************************************/
void UartSndByt(U8 bb)
{
TI= 0;
SBUF= bb;
while(!TI);
return
}
/***************************************************
功能:接收过程处理,返回处理结果
输入:
this:指针
keycode:键值
输出: 无
返回: 无
***************************************************/
void ComTran(void)
{
U8 uu;
uu = ComRecive(0x05, 0x00);///等待出发
if(uu == 0x00)
{
//Send_len = SendPtr = 0x00;
ComFlag:
uu = comb();
if(uu != 0)
{
if(uu == 0x80)
goto ComFlag; ///重做
//FanHuiERR(uu); //返回错误代码
}
else
//FanHuiComc( 0,Send_len, Zhj+SendPtr);
1=1;
}
else
FanHuiERR(uu); //返回错误代码
}
U8 ComRecive(uchar Mode, uchar pno)
{
snd = 0 ;
RceString :
//time = TimVal;
istar = iend = unlen = 0;
coml = 0x00;
while(1)
{
while(unlen!=0)
{
bb = buffer[istar];
unlen--; istar++;
switch(coml)
{
case 0x00: //开始接受 0x1B 'N' 'U'
CHead1 = bb; coml = 1;
break;
case 0x01: //开始接受 0x10
CHead2 = bb;
coml = 2;
break;
case 0x02: //开始接受 关键字或NP:0
CKey = bb;
if(CHead1 == 0x1b && CHead2 == 0x10)///1b 10
Mode = 5 ;
if(Mode == 5)///0x1b
coml = 3; ///
else
coml = 4; ///NP
break;
case 0x03:
CNo = bb; //数据包序号
coml = 4;
break;
case 0x04: //开始接受 命令长
CLen = bb; //命令长度
datalen = 0x00; //命令数据长度(不包含命令头字节,含校验)
coml = 5;
break;
case 0x05: //开始接受数据
if(datalen + Mode >= CLen)
{
coml = 6;
verr.byte[1] = bb; //接收校验位高位
break;
}
if(datalen + Mode < CLen)
{
if(Mode != 5) ///NP
CNo = bb; //数据包序号 NP
else if(snd+datalen < ZhMax)///ZhMax = 528
Zhj[snd+datalen] = bb;
datalen++;
}
break;
case 0x06:
ES = 0; //关串口中断
verr.byte[0] = bb;//接收校验位低位
if(Mode == 0x05)///0x1b 0x10
{
if(CHead1 != 0x1b || CHead2 != 0x10)
{
ES = 0; //关串口中断 //modi wanjun
return 0X21; ///包头措
}
}
/////////
//if(verr.inter != 0x00)
if(cal_crc(buffer, CLen) == verr.inter )
{
if(Mode == 0x05)///0x1b 0x10
{
snd += datalen;
if(CNo != 0x00)
{
//send_NP(CNo);
goto RceString ; ///接收其余包
}
else
{
return 0x00;
}
}
else ///(NP ER)
{
if(CHead1 == 'N' && CHead2 == 'P' )
{
ES = 0; //关串口中断 //add by wanjun
if(CNo == pno)
return 0X04; //这个时干什么得,不知道
else //这个是干什么得,不知道
return 0X05;
}
else////错误
{
ES= 0; //关串口中断 //add by wanjun
return 0X1F;
}
}
}
else
//{
ES = 0; //关串口中断 //add by wanjun
return 0X1F;//校验位错
//}
}
time = 0x4ffff;
}
/****************************************************************
///////////超时
if(Mode == 0x05 && coml > 0 )
{
if(time-- == 0)//超时
{
ES = 0; //关串口中断 //add by wanjun
bb = 0x00 ;
if(coml < 5)
{
bb = PacketLenER;
}
else
{
if(CHead1 != 0x1b || CHead2 != 0x10)
bb = PacketER;
else
{
verr.inter = cal_crc(buffer, istar-2);
if((verr.byte[0] != buffer[istar-1]) || (verr.byte[1] != buffer[istar-2]))//通过校验
bb = MarkByteER;
else
bb = PacketLenER;
}
}
ES = 0; //关串口中断 //add by wanjun
return bb; ///返回
}
}
*/
};
return 0x00;
}
///////////////////////////////////
//命令处理
///////////////////////////////////
U8 Comb(void)
{
unsigned char i,j = 0,a = 0,cc , wi,ch;//接收卡返回的数据长//unsigned long vv;
unsigned int tt,suml,sedl;
unsigned long xx;
switch(CKey)
{
case 00:///注册
break;
case 01://分发一卷发票
break;
default:
return 1;
}
return 0;
}
U8 CheckXor(const char *pData, int iLen)
{
char cXor = 0;
for(int i=0; i<iLen; i++)
{
cXor ^= pData[i];
}
return cXor;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -