📄 const.c
字号:
#include "560.h"
extern void main(void);
extern void Icmanage(void);
extern void Com0_Manage(void);
extern void _TIM5_INTER(void);
extern void _seri_send_c(void);
extern void _seri_rec_c(void);
extern void _seri_ok(void);
extern void seri_er(unsigned char);
extern void _get_time(void);
extern void _set_time(void);
extern void _USER_RESET(void);
extern void _SELECT_FILE02(void);
extern void _SELECT_EF01(void);
extern void _SELECT_EF03(void);
extern void _SELECT_EF05(void);
extern void _SELECT_EF07(void);
extern void _SELECT_EF08(void);
extern void _DISTRIBUTE_INVOICE_NB(void);
extern void _FISCAL_REGISTER(void);
extern void _card_release(void);
extern void Show_code(unsigned char ,unsigned char );
extern void Beep(unsigned char );
extern void Delayms(unsigned int );
extern void Flashrd(unsigned long , unsigned char *, unsigned int );
extern void Flashwr(unsigned long , unsigned char *, unsigned int );
extern void Flashwr_serialdata(unsigned long ,unsigned int );
extern void Callcrc(unsigned char *, unsigned char , unsigned char *);
extern unsigned char Data_cmp(unsigned char,unsigned char *,unsigned char *);
extern char *strcpy(char *,const char *);
/*********************only for test**********************/
//extern void LCD_display(unsigned char row);
extern void _lcd_show(void);
extern void _init_lcd(void);
extern void _clr_lcd(void);
extern void Show_string(unsigned char ,unsigned char *);
/*******************************************************/
//======================================================================//
void _Initial(void)
{
/*===[ Interrupt enable ]==========================================*/
__EI();
/*===[ Call main function ]========================================*/
main();
__DI();
/*===[ Dummy Loop ]================================================*/
for(;;); /*SAMPLE */
}
void login (void)
{
Buffer[0] = 0x1B;
Buffer[1] = 0x10;
Buffer[2] = 0x01;
Buffer[3] = 0x00;
Buffer[4] = 0x05;
Buffer[5] = 0xC4;
Buffer[6] = 0xC7;
if ((Debug_code[0] == 0xF5) && (Data_cmp(7,Buffer,rxd) == D_EQUAL))
{
system_lock = 0;
_seri_ok();
}
else
{
seri_er(0xE1);
Beep(30);
}
}
/*===================================================================*/
/* [ Sample of interrupt function ] */
/* Make interrupt routine to fit your program. */
/*===================================================================*/
void __interrupt _INT0()
{//IC卡中断
Delayms(50);
INTE0AD = 0x00;
Icmanage();
serialdata[0] = 0x55; /*中断标志的作用*/
Beep(150);
INTE0AD = 0x04;
}
void __interrupt _INT4()
{
// _counter();
}
void __interrupt _INT5()
{
}
void __interrupt _INT6()
{
}
void __interrupt _INT7()
{
}
void __interrupt _INTT0()
{
}
void __interrupt _INTT1()
{
// _TIME1_INTER();
}
void __interrupt _INTT2()
{
}
void __interrupt _INTT3()
{
}
void __interrupt _INTTR4()
{
}
void __interrupt _INTTR5()
{
comm_timeout++;
if (comm_timeout > 50)
{
txd[0]=0x57; //"W"
txd[1]=0x54; //"T"
txd[2]=0x00;
txd[3]=0x04;
txd[4]=0x28;
txd[5]=0x10;
_seri_send_c();
comm_timeout = 0;
}
}
void __interrupt _INTTR6()
{
}
void __interrupt _INTTR7()
{
_TIM5_INTER();
}
void __interrupt _INTRX0()
{//串口0接收中断
}
void __interrupt _INTTX0()
{//串口0发送中断
}
void __interrupt _INTRX1()
{//串口1接收中断
INTES0 = 0x00;
_seri_rec_c();
if(system_lock)
login();
// Com0_Manage();
// serialdata[0] = 0x55; /*中断标志的作用*/
INTES0 = 0x04; /*注意---在这里以后,串口中断是关闭的,在需要使用的时候,要自己打开*/
Beep(10);
command=rxd[2];
}
void __interrupt _INTTX1()
{//串口1发送中断
}
/*===[ Sample for interrupt : ]========*/
/*===[ This function has only one instruction 'RETI' ]========*/
void __interrupt _Int_dummy(void)
{
}
/*===================================================================*/
/* [ Define interrupt table ] */
/* Rewrite the base address of interrupt table to fit your target */
/* MCU. Write interrupt functions name you made, as initializer */
/* of table. */
/*===================================================================*/
#define _SecInt_Name inttbl /* Section name of interrupt table */
#define _BaseIntTbl 0x8000 /* Interrupt table base address */
#define _SecInt_Attr const /* Section attribute of interrupt table */
void _startup(void); /* Prototype definition for reset vector */
/* This function is defined in a 'stc93ml.mac' */
#pragma section _SecInt_Attr _SecInt_Name _BaseIntTbl
void * const _IntTbl[] = {
_startup /* Reset/SWI 0 */
,_Int_dummy /* SWI 1 */
,_Int_dummy /* INTUNDEF/SWI 2 */
,_Int_dummy /* SWI 3 */
,_Int_dummy /* SWI 4 */
,_Int_dummy /* SWI 5 */
,_Int_dummy /* SWI 6 */
,_Int_dummy /* SWI 7 */
,_Int_dummy /* NMI */
,_Int_dummy /* INTWD */
,_INT0 /* INT0 */
,_INT4 /* INT4 */
,_INT5 /* INT5 */
,_INT6 /* INT6 */
,_INT7 /* INT7 */
,_Int_dummy /* Reserved1 */
,_INTT0 /* INTT0 */
,_INTT1 /* INTT1 */
,_INTT2 /* INTT2 */
,_INTT3 /* INTT3 */
,_INTTR4 /* INTTR4 */
,_INTTR5 /* INTTR5 */
,_INTTR6 /* INTTR6 */
,_INTTR7 /* INTTR7 */
,_INTRX0 /* INTRX0 */
,_INTTX0 /* INTTX0 */
,_INTRX1 /* INTRX1 */
,_INTTX1 /* INTTX1 */
,_Int_dummy /* INTAD */
};
#pragma section _SecInt_Attr
/************************************************************/
//extern void _show(void);
extern void _VERIFY(void);
extern void _READ_RECORD(void);
extern void _READ_BINARY(void);
extern void _UPDATE_RECORD(void);
extern void _VERIFY_FISCAL_PIN(void);
extern void _DAILY_COLLECT_SIGN(void);
extern void _i2cee_byte_rd(void);
extern void _i2cee_seri_rd(void);
extern void _i2cee_byte_wr(void);
extern void _i2cee_seri_wr(void);
extern void Flashrd(unsigned long , unsigned char *, unsigned int );
/************************************************************/
/* I2c的读操作流程 */
void I2crd(unsigned long nAdd, unsigned int nSize)
{//I2C的读
union gyt2 I2cadd_union2;
/*操作的地址转化和赋值*/
if( nAdd > 0xFFFF)
{
Buffer[0] = 0xA4;
I2cadd_union2.pr = (unsigned int)(nAdd - 0xFFFF);
}
else
{/*根据地址判断操作的是哪一片E2PROM*/
if (nAdd < 0x8000)
{
Buffer[0] = 0xA0;
I2cadd_union2.pr = (unsigned int)nAdd;
}
else
{
Buffer[0] = 0xA2;
I2cadd_union2.pr = (unsigned int)(nAdd - 0x7FFF);
}
}
Buffer[2] = I2cadd_union2.str[0]; /*操作地址的低位*/
Buffer[1] = I2cadd_union2.str[1]; /*操作地址的高位*/
/*操作的数据长度赋值*/
I2cadd_union2.pr = nSize;
Buffer[4] = I2cadd_union2.str[0]; /*操作长度的低位*/
Buffer[3] = I2cadd_union2.str[1]; /*操作长度的高位*/
if (nSize == 1)
_i2cee_byte_rd(); /*单字节的读*/
else
_i2cee_seri_rd(); /*多字节连续读*/
}
/* I2c的写操作流程,一次最多写入64字节nSize<=64(0x40) */
/* 0x100:选择操作的E2PROM,第一片或第二片 */
/* 0x101:数据操作地址的高位,同时借用作为数据的偏移量 */
/* 0x102:数据操作地址的低位 */
/* 0x103:数据操作长度的高位 */
/* 0x104:数据操作长度的低位 */
/* 0x144:操作I2c的error debug码 */
/* 0x145:数据起始地址 */
void I2cwr(unsigned long nAdd,unsigned char nSize )
{
unsigned char error_counter; /*校验时用来作为错误计数器 */
unsigned char Lcv_i; /*循环变量、临时变量 */
unsigned char size_num; /*要写入数据的长度 */
unsigned char check_data[64]; /*备份数据,用来校验用 */
union gyt2 I2cadd_union2; /*I2c地址公用体 */
/*初始化变量、保存要求写入的数据为校验做准备*/
error_counter = 3;
size_num=nSize;
for (Lcv_i = 0; Lcv_i < nSize; Lcv_i++)
check_data[Lcv_i] = serialdata[Lcv_i];
/*根据地址判断操作的是哪一片E2PROM*/
if ( nAdd > 0xFFFF)
Buffer[0] = 0xA4;
else
{
if (nAdd < 0x8000)
Buffer[0] = 0xA0;
else
Buffer[0] = 0xA2;
}
while (con)
{
/*操作的地址转化和赋值*/
if ( nAdd > 0xFFFF)
I2cadd_union2.pr = (unsigned int)(nAdd - 0xFFFF);
else
{
if (nAdd < 0X8000)
I2cadd_union2.pr = (unsigned int)nAdd;
else
I2cadd_union2.pr = (unsigned int)(nAdd - 0X7FFF);
}
Buffer[2] = I2cadd_union2.str[0]; /*地址低地址*/
Buffer[1] = I2cadd_union2.str[1]; /*地址高地址*/
/*操作的数据长度赋值和变量偏移*/
Buffer[3] = 0; /*变量偏移*/
Buffer[4] = nSize; /*nSize */
if (nSize == 1)
_i2cee_byte_wr(); /*单字节的写入*/
else
{/*多字节的连续写*/
Lcv_i = (unsigned char)(I2cadd_union2.pr % 0x40);
Lcv_i = 0x40 - Lcv_i; /*一页64字节中还剩于没有写的字节数*/
if (size_num <= Lcv_i)
_i2cee_seri_wr();/*同一页内的写*/
else
{/*跨页的写*/
Buffer[4] = Lcv_i;
_i2cee_seri_wr();
/*检查写完没有?*/
while(con)
{
_i2cee_byte_rd();
if(Debug_code[0]==0x04)
break;
}
size_num = size_num - Lcv_i;/*Lcv_i为已经写了的个数*/
Buffer[4] = size_num; /*大小*/
Buffer[3] = Lcv_i; /*变量偏移*/
I2cadd_union2.pr = I2cadd_union2.pr + Lcv_i;/*地址偏移*/
Buffer[2] = I2cadd_union2.str[0];
Buffer[1] = I2cadd_union2.str[1];
_i2cee_seri_wr();
}
}/*end of if(nSize==1)*/
/*检查写完没有?*/
while(con)
{
_i2cee_byte_rd();
if(Debug_code[0]==0x04)
break;
}
// Delayms(50); /*EEPROM写入周期延时*/
/***以下是校验的过程***/
I2crd(nAdd, nSize);
Lcv_i = 0;
error_counter--;
while ((check_data[Lcv_i] == serialdata[Lcv_i]) && (Lcv_i < nSize))
Lcv_i++;
if (Lcv_i == nSize)
return;
else
{
if (error_counter <= 0)
{/*错误次数超过了三次退出*/
// Show_code(0xA4,0);
Beep(255);
return ;
}
}
for (Lcv_i = 0; Lcv_i < nSize; Lcv_i++)
serialdata[Lcv_i] = check_data[Lcv_i];
}/*end of while(con)*/
}
unsigned char UPDATE_RECORD(unsigned char CLA,unsigned char P1,unsigned char P2,unsigned char lc,unsigned char *data)
{//修改记录
unsigned char i;
SAM_P1[0]=P1;
SAM_P3[0]=lc;
for(i=0;i<lc;i++) SAM_DATA[i]=data[i];
_UPDATE_RECORD();
if (SAM_P1[0] == 0x90)
return RIGHT;
if ((SAM_P1[0] == 0x6A)&&(SAM_P2[0] == 0x84))
return HUANKA;
Show_code(SAM_P1[0],SAM_P2[0]);
return ERROR;
}
unsigned char READ_RECORD(unsigned char P1,unsigned char P2,unsigned char leng,unsigned char *rcmd)
{//读记录
unsigned char i;
SAM_P1[0]=P1;
SAM_P2[0]=P2;
SAM_P3[0]=leng;
_READ_RECORD();
if(SAM_P1[0] == 0x90)
{
for (i = 0; i < leng; i++)
rcmd[i] = SAM_DATA[i];
return RIGHT;
}
Show_code(SAM_P1[0],SAM_P2[0]);
return ERROR;
}
unsigned char READ_BINARY(unsigned char P1,unsigned char P2,unsigned char leng,unsigned char *rcmd)
{//读2进制文件
unsigned char i;
SAM_P1[0] = P1;
SAM_P2[0] = P2;
SAM_P3[0] = leng;
_READ_BINARY();
if(SAM_P1[0] == C_RIGHT)
{
for (i = 0; i < leng; i++)
rcmd[i] = SAM_DATA[i];
return RIGHT;
}
Show_code(SAM_P1[0],SAM_P2[0]);
return ERROR;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -