亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? iccard.c

?? 單相 CPU卡表復費率電能表,內部有提供I2C驅動,CPU卡驅動,NEC單片機0513等
?? C
?? 第 1 頁 / 共 3 頁
字號:
#pragma interrupt INTTM02     MD_INTTM02
#include "includes.h"

volatile  Dummy_Comm485_ParameterS Cpu_card_comm;

uchar cd_data[ICCARD_MAX_DLEN];
uchar IC_ATR_DATA[8];
uchar IC_CPU_RAND_DATA[8];
uchar IC_CPU_ENCRYPT_DATA[8];
uchar IC_ESAM_RAND_DATA[8];
uchar IC_ESAM_ENCRYPT_DATA[8];
uchar IC_ESAM_KEY_BUFFER[24];
uchar IC_WRITE_BUFFER[80];
uchar recv_flag = 0;
uchar card_in_slot = 0;
uchar test_value = 0;
uchar IC_Card_flag = 0;

const uchar IC_SOUND_CLR[] = {SOUND_OF_CLR_CARD, SOUND_OF_INSERT, SOUND_OF_SYS_DEAL, SOUND_OF_WAIT};
const uchar IC_SOUND_BUY[] = {SOUND_OF_BUY_CARD, SOUND_OF_SYS_DEAL, SOUND_OF_WAIT};
const uchar IC_SOUND_BUY_OK[] = {SOUND_OF_BUY_OK};
const uchar IC_SOUND_BUY_ERR[] = {SOUND_OF_BUY_ERR};
const uchar IC_SOUND_CLR_OK[] = {SOUND_OF_CLR_FINISH};
const uchar IC_SOUND_NOT_IDENTIFY[] = {SOUND_OF_NOT_IDENTIFY_CARD};
	
void TM02Init(void)
{
    CPUCARD_COMM_STOP();
    PER0.0 = 1;
    TS0L.2 = 0;
    TMR02 = 0x0000;
    TPS0L = 0x0044;
    TDR02 = CLK_COUNT_9600; 
}

__interrupt void MD_INTTM02( void )
{
    TMIF02 = 0;
    TS0L.2 = 0;	
    TDR02 = CLK_COUNT_9600;
    TS0L.2 = 1;
    Cpu_card_comm.BIT_Count++;
    if( Cpu_card_comm.State_T_Or_R == TXDING )
    {
        CPU_card_send();
    }
    else
    {
        CPU_card_receive();
    }
}

void CPU_card_start_tx(uchar frame_start_Pointer, uchar len)
{
    _disable_interrupt();
    Cpu_card_comm.Uart_Data = 0;
    Cpu_card_comm.Len_Of_Need_To_Send = len;
    Cpu_card_comm.FramePointer = frame_start_Pointer;
    Cpu_card_comm.BIT_Count = 0;
    Cpu_card_comm.State_T_Or_R = TXDING;
    Cpu_card_comm.verify = 0;
    MemsetZero( (uchar *)&Cpu_card_comm.Serial_Buffer[0], frame_start_Pointer );
    if( !TS0L.2 ) TS0L.2 = 1;
    TDR02 = CLK_COUNT_9600;
    TMIF02 = 0;
    CPUCARD_COMM_START();
    _enable_interrupt();
}

void CPU_card_receive(void)
{
    uchar temp_bit;

    IC_IO_DIR(IC_IO_DIR_INPUT);
    	
    if( Cpu_card_comm.selectDevice == SEL_CARD )
    {
        temp_bit = CPU_CARD_IO;
    }
    else
    {
        temp_bit = ESAM_IO_PIN;
    }		
	
    switch( Cpu_card_comm.BIT_Count )
    {
        case 9:
            if( Cpu_card_comm.verify != temp_bit )
            {
                Cpu_card_comm.verify |= VERIFY_ERROR;
            }
            else
            {
                Cpu_card_comm.verify = 0;
            }	
            break;
			
        case 10:
            recv_flag = 0;	
            TS0L.2 = 0;            			
            CPUCARD_COMM_STOP();			
            if( 0 == ( Cpu_card_comm.verify & VERIFY_ERROR ) )
            {
                if( Cpu_card_comm.FramePointer < sizeof( Cpu_card_comm.Serial_Buffer ) )
                {
                    Cpu_card_comm.Serial_Buffer[Cpu_card_comm.FramePointer++] = Cpu_card_comm.Uart_Data;
                }
            }            
            break;
			
	default:
            Cpu_card_comm.Uart_Data >>= 1;
            if( temp_bit )
            {
                Cpu_card_comm.Uart_Data |= 0x80;
            }
            Cpu_card_comm.verify ^= temp_bit;
            break;
    }
}

void CPU_card_send(void)
{	
    IC_IO_DIR(IC_IO_DIR_OUTPUT);
	
    if( Cpu_card_comm.Uart_Data & 0x01 )
    {
        IC_IO(1);
        Cpu_card_comm.verify=~Cpu_card_comm.verify;
    }
    else
    {
        IC_IO(0);
    }
	
    switch( Cpu_card_comm.BIT_Count )
    {
        case 1:
            Cpu_card_comm.Uart_Data = Cpu_card_comm.Serial_Buffer[Cpu_card_comm.FramePointer];
            Cpu_card_comm.Serial_Buffer[Cpu_card_comm.FramePointer] = 0;
            break;
			
        case 9:
            Cpu_card_comm.Uart_Data = Cpu_card_comm.verify;
            break;
			
        case 10:
            Cpu_card_comm.Uart_Data = 0x01;
            break;
			
        case 11:
            if( 0 == --Cpu_card_comm.Len_Of_Need_To_Send )
            {	
                CPUCARD_COMM_STOP();
                Cpu_card_comm.verify = 0;
                Cpu_card_comm.BIT_Count = 0;
                Cpu_card_comm.Uart_Data = 0;
            }
            break;
			
        case 12:
        case 13:
        case 14:						
            break;
			
        case 15:
            Cpu_card_comm.FramePointer++;
            Cpu_card_comm.verify = 0;
            Cpu_card_comm.BIT_Count = 0;
            Cpu_card_comm.Uart_Data = 0;
            break;
		
        default:
            Cpu_card_comm.Uart_Data>>=1;
            break;
    }
}

void CPU_card_start_rx(void)
{
    _disable_interrupt();	
    IC_IO_DIR(IC_IO_DIR_INPUT);
    Cpu_card_comm.State_T_Or_R = RXDING;
    Cpu_card_comm.FramePointer = 0;
    Cpu_card_comm.BIT_Count = 0;
    Cpu_card_comm.verify = 0;		
    _enable_interrupt();
}

void CPU_card_comm_init(void)
{
    Cpu_card_comm.FramePointer %= sizeof( Cpu_card_comm.Serial_Buffer );
    MemsetZero( &Cpu_card_comm.Serial_Buffer[0], Cpu_card_comm.FramePointer );
    CPU_card_start_rx();
}

void CPUCardReset()
{
    if( Cpu_card_comm.selectDevice == SEL_CARD )
    {
        CPU_RST(0);
        Delay(400);
        CPU_RST(1);
    }
    else
    {
        ESAM_RST(0);
        Delay(400);
        ESAM_RST(1);
    }	
} 

void CPU_card_read_response(uchar read_len)
{
    ushort ii = 0,old_IE0,old_IE1,old_IE2;
    uchar temp_bit;
			
    old_IE0 = MK0;
    old_IE1 = MK1;
    old_IE2 = MK2;
    MK0 = 0xFFFF;
    MK1 = 0xFFFF;
    MK2 = 0xFFFF;
    CPU_card_start_rx();	 
	
    while( Cpu_card_comm.FramePointer < read_len )
    {
        if( Cpu_card_comm.selectDevice == SEL_CARD )
            temp_bit = CPU_CARD_IO;
        else
            temp_bit = ESAM_IO_PIN;
	
        if( ( !temp_bit ) && ( recv_flag == 0 ) )
        {     
            CPUCARD_COMM_STOP();
            recv_flag = 1;
            Cpu_card_comm.BIT_Count = 0;
            Cpu_card_comm.verify = 0;
            Cpu_card_comm.State_T_Or_R = RXDING;	
            TDR02 = CLK_COUNT_9600; 
            TMIF02 = 0;
            TS0L.2 = 1;
            CPUCARD_COMM_START();
            ii = 0;
        }
		
        ii++;
        if( Cpu_card_comm.FramePointer > 1 )
        {
            if( ii > 6000 ) break;
        }
        else
        {
            if( ii > 60000 ) break;
        }		
    }

    CPUCARD_COMM_STOP();
    MK0 = old_IE0;
    MK1 = old_IE1;
    MK2 = old_IE2;
}

void CPU_card_send_command(uchar s_pos, uchar send_len)
{
    ushort ii = 0, old_IE0, old_IE1, old_IE2;

    old_IE0 = MK0;
    old_IE1 = MK1;
    old_IE2 = MK2;
    MK0 = 0xFFFF;
    MK1 = 0xFFFF;
    MK2 = 0xFFFF;
    CPU_card_start_tx( s_pos, send_len );
    while( !TMMK02 )
    {
        ClrWdt();
        Delay(2);
        if( ii++ > 60000 ) break;
    }

    if( !TMMK02 )
    {
        CPUCARD_COMM_STOP();
    }
	
    MK0 = old_IE0;
    MK1 = old_IE1;
    MK2 = old_IE2;	
}

/*
 * 清零卡:
 *     由生產廠家制作和使用,
 *     1.用于IC卡電度表進行"復位"操作,使IC卡電度表復位成生產狀態(tài).
 *     2.強制進行繼電器的開關操作.
 * 內容:68H+11H+00H+CSUM+16H (CSUM=校驗和)
 */
uchar ic_setting(void)
{
    ulong new_buy;
    uchar *recv_buf = cd_data;
    uchar fn_data,temp[4];
			
    memcpy( recv_buf, &Cpu_card_comm.Serial_Buffer[1], 0x19 );
    memcpy( temp, recv_buf+3, 4 );
    ExchangeData(temp);
    
    // 購電底數(shù)	
    new_buy = *((ulong *)(temp));
    new_buy = Hex2BcdLong( new_buy );
    
    // 購電次數(shù)清零
    MemsetZeroWriteE2prom( DB_GDCS, 4 );
    
    // 剩余電量	
    PrePayData.BalanceSum = new_buy;
    FramWrite( DB_SYDL, (uchar *)&new_buy, POWER_DATA_LEN );	
    
    // 累計購電量	
    PrePayData.CumulateBuySum = new_buy;
    FramWrite( DB_LJGDL, (uchar *)&new_buy, POWER_DATA_LEN );
    
    // 累計用電量	
    PrePayData.CumulatePaySum = 0;
    FramWrite( DB_LJDL, (uchar *)&PrePayData.CumulatePaySum, POWER_DATA_LEN );
    
    // 過零電量	
    PrePayData.OverZeroSum = 0;
    FramWrite( DB_GLDL, (uchar *)&PrePayData.OverZeroSum, POWER_DATA_LEN );
    
    // 最后購電量	
    FramWrite( DB_ZHGDL, (uchar *)&new_buy, POWER_DATA_LEN );

    // 重置狀態(tài)字
    fn_data = (~USED_METER);
    save_data( &fn_data, DB_ST, 1 );

    if( RELAYPARA.EnableFlag & BIT0 )
    {
        RELAY0_ON();
        RELAY1_ON();
        RELAYPARA.Status &=~ BIT0;
    }
    
#if 0
    if( RELAYPARA.EnableFlag & BIT1 )
    {
        RELAY1_ON();
        RELAYPARA.Status &=~ BIT1;
    }        
#endif

    FramWrite( ADDR_OF_RELAY_PARA+OFFSET_RELAY_STATUS, &RELAYPARA.Status, 1 );

    return OK;	
}

uchar ic_checking(void)
{
    uchar *recv_buf, rec_num;

    recv_buf = &Cpu_card_comm.Serial_Buffer[1];
	
    if( OK != IC_read_file( SEL_CARD, 2, 0, 1 ) )
    {
        return(EPM_E__5);
    }

    rec_num = recv_buf[0];		
    if( rec_num >= 15 )
    {
        return(EPM_E__19);
    }
	
    //選擇反寫文件	
    if( OK != IC_select_file( SEL_TYPE_EF, 2 ) )
    {
        return EPM_E__14;
    }

    if( OK != IC_checking_writeback(rec_num) )
    {
        return EPM_E__15;
    }

    Cpu_card_comm.Serial_Buffer[IC_WRITE_START_ADDR] = rec_num + 1;
    if( OK != IC_write_file( SEL_CARD, 2, 0, 1 ) )
    {
        return EPM_E__20;
    }

    Delay20ms(20);

    return(OK);
}

uchar ic_updating_pwd(void)
{
    uchar key_num = 0, ii ;
	
    if( OK != IC_read_file( SEL_CARD, FILE_ID_MODIFY_PASSWORD, 2, 1 ) )
    {
        return(EPM_E__5);
    }

    key_num = ( Cpu_card_comm.Serial_Buffer[1]/IC_KEY_LEN );
    if( ( key_num > MAX_PWD_NUM ) || ( key_num == 0 ) )
    {
        return EPM_E__27;
    }

    for( ii = 0 ; ii < key_num; ii++ )
    {
        if( OK != IC_read_file(SEL_CARD, FILE_ID_MODIFY_PASSWORD, 4 + ii * IC_KEY_LEN, IC_KEY_LEN ) )
        {
            return(EPM_E__5);
        }

        memcpy( IC_ESAM_KEY_BUFFER, Cpu_card_comm.Serial_Buffer + 1, IC_KEY_LEN );
        if( OK != ESAM_update_key() )
        {
            return(EPM_E__28);
        }
    }
	
    return OK;	
}

uchar ic_refill_writeback(uchar *meterAddr, ulong * buy_times, uchar card_sn)
{
    unsigned char fn_data[50];
    
    load_data( IC_WRITE_BUFFER, DB_SYDL, 20 );    
    ExchangeData( IC_WRITE_BUFFER );	
    ExchangeData( IC_WRITE_BUFFER+8 );	
    ExchangeData( IC_WRITE_BUFFER+12 );	
    ExchangeData( IC_WRITE_BUFFER+16 );

    Cpu_card_comm.Serial_Buffer[IC_WRITE_START_ADDR] = 0x68;
    Cpu_card_comm.Serial_Buffer[IC_WRITE_START_ADDR + 1] = 0x80;
    Cpu_card_comm.Serial_Buffer[IC_WRITE_START_ADDR + 2] = 0x22;	
    memcpy( &Cpu_card_comm.Serial_Buffer[IC_WRITE_START_ADDR + 3], IC_WRITE_BUFFER, 20 );

    //save buy times
    memcpy( &Cpu_card_comm.Serial_Buffer[IC_WRITE_START_ADDR + 7], (unsigned char *)buy_times, 4 );

    // 非法插卡次數(shù)清零
    Cpu_card_comm.Serial_Buffer[IC_WRITE_START_ADDR + 23] = 0;
    Cpu_card_comm.Serial_Buffer[IC_WRITE_START_ADDR + 24] = 0;    

    // 電能表狀態(tài)字
    Cpu_card_comm.Serial_Buffer[IC_WRITE_START_ADDR + 25] = 0;

    // 電表表號
    memcpy(&Cpu_card_comm.Serial_Buffer[IC_WRITE_START_ADDR + 26], meterAddr, USER_METER_LEN);

    // 卡序號
    Cpu_card_comm.Serial_Buffer[IC_WRITE_START_ADDR + 36] = card_sn;

    Cpu_card_comm.Serial_Buffer[IC_WRITE_START_ADDR + 0x25] = GetSum(&Cpu_card_comm.Serial_Buffer[IC_WRITE_START_ADDR + 1], 0x24);
    Cpu_card_comm.Serial_Buffer[IC_WRITE_START_ADDR + 0x26] = 0x16;

    if( OK != IC_write_file( SEL_ESAM, 2, 0, 0x27 ) )
    {
        return ERROR;
    }

    if( OK != IC_get_rand_data( SEL_CARD, 4 ) )
    {
        return ERROR;
    }

    if( OK != ESAM_read_MAC( 2, 0, 0x27 ) )
    {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品三级在线看| 91国偷自产一区二区三区成为亚洲经典| 久久久国产精品麻豆| 欧美精品1区2区3区| 91国偷自产一区二区开放时间 | 久久精品久久99精品久久| 亚洲欧美一区二区三区孕妇| 久久久久国产精品麻豆| 欧美成人一区二区三区| 欧美精品丝袜中出| 欧美唯美清纯偷拍| 91国产免费观看| 在线免费一区三区| 欧美在线视频全部完| 91看片淫黄大片一级| 色老汉av一区二区三区| 91在线精品一区二区三区| 国产91对白在线观看九色| 国产精品18久久久久久久久 | 国产亚洲一区二区三区在线观看| 欧美一区二区美女| 日韩一区二区三免费高清| 91精品欧美久久久久久动漫| 91精品国模一区二区三区| 91精品婷婷国产综合久久竹菊| 欧美日韩一区在线| 欧美一区日本一区韩国一区| 日韩色在线观看| 亚洲精品一区在线观看| 国产亚洲短视频| 国产精品久久一级| 一区二区三区波多野结衣在线观看| 一区二区三区在线视频免费| 婷婷久久综合九色综合绿巨人| 五月激情综合婷婷| 久久99国产精品麻豆| 国产成人av一区二区三区在线 | 日韩毛片一二三区| 亚洲综合久久av| 亚洲高清免费在线| 免费观看一级特黄欧美大片| 国产精品影视网| 色偷偷88欧美精品久久久| 欧美精品一卡两卡| 久久99精品一区二区三区三区| 麻豆精品视频在线观看视频| 国产69精品久久久久毛片| 99综合影院在线| 欧美精品在欧美一区二区少妇| 精品免费日韩av| 日韩美女视频一区二区 | 色综合久久中文字幕综合网| 在线播放日韩导航| 国产喷白浆一区二区三区| 伊人色综合久久天天| 老司机免费视频一区二区| 99久久精品国产网站| 91精品免费在线观看| 亚洲欧洲国产专区| 蜜桃av一区二区| 91丨九色丨黑人外教| 日韩欧美国产wwwww| 国产精品乱码人人做人人爱| 首页国产欧美日韩丝袜| 成人精品国产一区二区4080| 欧美男同性恋视频网站| 国产精品久久久久9999吃药| 欧美aa在线视频| 色欧美乱欧美15图片| 国产午夜三级一区二区三| 亚洲成av人片一区二区梦乃| 国产91在线观看| 欧美一区二区三区不卡| ...av二区三区久久精品| 久久国产视频网| 欧美老年两性高潮| 一区二区三区高清在线| 成人激情图片网| 久久综合精品国产一区二区三区| 亚洲地区一二三色| 色香色香欲天天天影视综合网| 久久久国产精品午夜一区ai换脸| 日韩电影免费在线看| 欧美视频在线播放| 亚洲精品国产品国语在线app| 国产传媒久久文化传媒| 日韩欧美一级二级三级| 天涯成人国产亚洲精品一区av| 91啪亚洲精品| 中文字幕一区av| 国产成人av一区二区| 久久精品一二三| 国产精品一区二区黑丝| 精品国产乱码久久| 麻豆91精品91久久久的内涵| 欧美肥妇free| 天天色综合成人网| 欧美精品乱码久久久久久按摩| 亚洲夂夂婷婷色拍ww47| 在线中文字幕不卡| 亚洲综合免费观看高清完整版 | 日韩欧美一二三| 日韩高清中文字幕一区| 欧美精品日韩一本| 麻豆成人av在线| 精品少妇一区二区三区日产乱码| 奇米综合一区二区三区精品视频| 欧美精品久久久久久久久老牛影院| 午夜视黄欧洲亚洲| 欧美一区二区视频免费观看| 日本欧美一区二区三区| 精品久久国产97色综合| 国产精品 欧美精品| 国产精品网站在线播放| 色婷婷av一区二区三区gif | 日韩精品综合一本久道在线视频| 奇米精品一区二区三区在线观看| 日韩亚洲欧美成人一区| 国产乱码一区二区三区| 国产精品久久久久aaaa| 色哟哟国产精品免费观看| 亚洲电影在线播放| 精品国内二区三区| 波多野结衣视频一区| 亚洲1区2区3区视频| 精品日韩99亚洲| 成人国产精品视频| 亚洲高清三级视频| 国产午夜精品理论片a级大结局| aaa欧美大片| 日本aⅴ精品一区二区三区| 国产色产综合产在线视频| 91麻豆免费看片| 捆绑变态av一区二区三区| 国产精品色哟哟| 欧美人xxxx| 成人黄色一级视频| 三级亚洲高清视频| 欧美激情艳妇裸体舞| 欧美精品在线观看播放| 粉嫩在线一区二区三区视频| 亚洲综合免费观看高清完整版| 26uuu成人网一区二区三区| 色婷婷综合视频在线观看| 韩国av一区二区| 亚洲影院久久精品| 久久精品亚洲国产奇米99| 精品视频999| 99久久伊人精品| 九九精品视频在线看| 亚洲国产色一区| 中文字幕一区视频| 337p日本欧洲亚洲大胆精品| 欧美性欧美巨大黑白大战| 成人黄色大片在线观看| 久久99精品久久久久久动态图 | 欧美一区二区三区在线视频| 国产999精品久久久久久绿帽| 亚洲成人先锋电影| 综合久久久久综合| 国产农村妇女精品| 精品久久久久久久人人人人传媒| 欧美日韩国产一区| 色综合天天天天做夜夜夜夜做| 国产一区二区视频在线播放| 日韩成人精品在线| 亚洲一区二区av在线| 亚洲日本在线看| 国产精品久久久久久亚洲毛片 | 国产视频不卡一区| 2欧美一区二区三区在线观看视频| 欧美日韩大陆一区二区| 91成人网在线| 91成人免费电影| 91久久精品网| 色综合天天综合色综合av | 韩日精品视频一区| 久热成人在线视频| 美女视频免费一区| 蜜桃视频在线观看一区| 秋霞国产午夜精品免费视频 | 中文字幕日本不卡| 国产精品美女视频| 国产精品不卡视频| 国产精品灌醉下药二区| 国产精品午夜在线观看| 中文字幕va一区二区三区| 亚洲国产成人午夜在线一区| 国产精品伦理一区二区| 国产精品天美传媒| 中文字幕中文字幕在线一区 | 精品国产一区二区在线观看| 日韩欧美激情在线| 久久亚洲综合色| 国产精品欧美极品| 亚洲日本va午夜在线电影| 亚洲一区二区综合| 日韩专区在线视频| 国产一区二区精品久久91| av午夜精品一区二区三区|