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

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

?? emodem.c

?? 嵌入式modem編程
?? C
字號:
//////////////////////////////////////////////////////////////////
//初始化MODEM
void InitializeModem(void)
{
        register BYTE i;

        PtrRecv=0;PtrSend=0;
        CounterRecv=0;
        CounterRing=0;
        MainReadFlash(62,4,(BYTE*)&ProductNumber,(BYTE*)&PRODUCTNUMBER);
        if(ProductNumber==0xffffffff)ptrcom=0;
        c8255ctl=0x02;          //reset modem
        DelayMs(200);           //100ms
        c8255ctl=0x03;
        DelayMs(2500);          //2.5s

        i=0x83;
        asm{stb i,lcr;}         //dlab=1,8 bits length,1 stop bit
        DelayUs(1);
        dlm=0;
        DelayUs(1);
        if(SystemParameter.Baudrate==600)dll=0xc0;
        else if(SystemParameter.Baudrate==1200)dll=0x60;
        else if(SystemParameter.Baudrate==2400)dll=0x30;
        else if(SystemParameter.Baudrate==4800)dll=0x18;
        else dll=12;            //baudrate=9600
        DelayUs(1);
        lcr=0x03;               //dlab=0;
        DelayUs(1);
        mcr=0x0b;               //interrupt mode
        DelayUs(1);
        fcr=0;
        DelayUs(1);
        ier=0x03;               //R&T interrupt
        DelayMs(5000);          //5s
        SendAt((void*)&AtMode);
        DelayMs(100);
}


//MODEM(extint1)中斷
#pragma interrupt(Extint1=29)
void Extint1(void)
{
        BYTE i=iir&0x0e;
        asm{ldb 0,lsr;}
        asm{ldb 0,msr;}

//send buffer empty
        if(i&0x02)
        {
                if((PtrSend!=0)&&(PtrSend<=((UWORD)SendBuffer[9]+11)))thr=SendBuffer[PtrSend++];
                else
                {
                        PtrSend=0;
                        mcr|=0x04;      //out1
                }
        }
//receive data available
        if(i&0x04)
        {
                i=rbr;
                if(PtrRecv>180)
                {
                        PtrRecv=0;
                        return;
                }
                RecvBuffer[PtrRecv++]=i;
                CounterRecv=2;
        }
}

//通訊地址校驗
//return:TRUE---address valid
//       FALSE--address invalid
BYTE CheckAddress(void)
{
        BYTE i,temp;
        UDWORD addr;

        if(RecvBuffer[6]==0x99)
        {
                if((RecvBuffer[5]==0x99)&&(RecvBuffer[4]==0x99)&&(RecvBuffer[3]==0x99)&&(RecvBuffer[2]==0x99)&&(RecvBuffer[1]==0x99))return TRUE;
        }
        else if(RecvBuffer[6]==0xaa)
        {
                MainReadFlash(62,4,(BYTE*)&addr,(BYTE*)&PRODUCTNUMBER);
                for(i=1;i<6;i++)
                {
                        temp=addr%10;
                        addr/=10;
                        temp+=(addr%10)<<4;
                        addr/=10;
                        if(RecvBuffer[i]!=temp)return FALSE;
                }
                return TRUE;
        }
        return FALSE;
}

//MODEM處理程序
void ComModem(void)
{
        BYTE i,ccode,*ptr;
        UWORD rdata,temp;
        TIMERECORD *addr=(TIMERECORD*)&main_flash_memory;
//使用EMODEM時打開以下語句
/*        if(FlagModem==FALSE)return;
        if((ioport2&0x04)||                     //p2.2(extint)
           (lsr&0x02)||                         //overflow err
           (lsr&0x08)||                         //framing err
           CheckRing())                         //check ring overflow
        InitializeModem();
*/
        if((PtrRecv==0)||(CounterRecv!=0))return;
        PtrRecv=0;
        if(RecvBuffer[0]!=0x68)return;

        CounterRing=0;
        if(!CheckAddress())return;
        if(RecvBuffer[7]!=0x68)return;
        ccode=0;
        for(i=0;i<(RecvBuffer[9]+10);i++)ccode+=RecvBuffer[i];
        if(ccode!=RecvBuffer[RecvBuffer[9]+10])return;

        rdata=RecvBuffer[8];
//read data
//read follow data
        if((rdata==0x01)||
           (rdata==0x02))
        {
                temp=RecvBuffer[10]+(((UWORD)RecvBuffer[11])<<8);
                if(temp==0xed33)                //0xed=0xba+0x33;variable
                {
                        if((rdata==0x02)&&(ptrcom!=RecordNumber))ptrcom++;
                        if(ptrcom>7167)ptrcom=0;
                        if(ptrcom!=RecordNumber)
                        {
                                SendBuffer[8]=RecvBuffer[8]|0xa0;
                                SendBuffer[9]=0x82;
                                                //130;data length
                                addr+=ptrcom%128;
                                MainReadFlash(ptrcom/128,128,&SendBuffer[12],(BYTE*)addr);
                        }
                        else
                        {
                                SendBuffer[8]=RecvBuffer[8]|0x80;
                                                //control code
                                SendBuffer[9]=0x02;
                                                //data length
                        }
                        SendBuffer[10]=0;       //data id
                        SendBuffer[11]=0xba;
                        PrepareData();
                        SendData();
                }
                else if(temp==0xf933)           //0xf9=0xc6+0x33;parameter
                {
                        SendBuffer[8]=RecvBuffer[8]|0x80;
                                                //control code
                        SendBuffer[9]=92;       //data length
                        SendBuffer[10]=0;       //data id
                        SendBuffer[11]=0xc6;
                        MainReadFlash(60,44,&SendBuffer[12],(BYTE*)&FlashSystemParameter);
                        MainReadFlash(63,46,&SendBuffer[56],(BYTE*)&FlashReactiveParameter);
                        PrepareData();
                        SendData();
                }
        }
//repeat read data
        else if(rdata==0x03)
        {
                ccode=SendBuffer[8];
                SendBuffer[8]|=0x03;            //control code
                SendBuffer[SendBuffer[9]+10]+=SendBuffer[8]-ccode;
                                                //check code
                SendData();
        }
//write data
        else if(rdata==0x04)
        {
                rdata=RecvBuffer[10]+(((UWORD)RecvBuffer[11])<<8);
                if(rdata==0xf933)               //0xf9=0xc6+0x33;parameter
                {
                        for(i=12;i<102;i++)RecvBuffer[i]-=0x33;
                        MainEraseFlashSector(60);
                        while(!(i=MainFlashEraseTest(60)));
                        while(i==0xff);
                        MainWriteFlash(60,44,(BYTE*)&FlashSystemParameter,(BYTE*)&RecvBuffer[12]);
                        MainEraseFlashSector(63);
                        while(!(i=MainFlashEraseTest(63)));
                        while(i==0xff);
                        MainWriteFlash(63,46,(BYTE*)&FlashReactiveParameter,(BYTE*)&RecvBuffer[56]);
                        SendBuffer[8]=0x84;     //control code
                        SendBuffer[9]=0;        //data length
                        PrepareData();
                        SendData();
                }
        }
//check clock
        else if(rdata==0x08)
        {
                rtcctr1=0xd6;
                second=RecvBuffer[10]-0x33;
                minute=RecvBuffer[11]-0x33;
                hour=RecvBuffer[12]-0x33;
                day=RecvBuffer[13]-0x33;
                month=RecvBuffer[14]-0x33;
                year=RecvBuffer[15]-0x33;
                SECOND=GetUnixt();
                rtcctr1=0x56;
        }
//change baudrate
        else if(rdata==0x0c)
        {
        }

//read checkout data
        else if(rdata==0x81)
        {
                if(CounterCheck!=0)return;
                SendBuffer[8]=0x81;
                SendBuffer[9]=29;
                SendBuffer[10]=0;       //data id
                SendBuffer[11]=0xba;
                SendBuffer[12]=0x33;
                ptr=(BYTE*)&Effective.Ua;
                for(i=0;i<12;i++)
                {
                        SendBuffer[13+2*i]=*ptr++;
                        SendBuffer[14+2*i]=*ptr++;
                }
                SendBuffer[37]=(BYTE)Effective.Frequency;
                SendBuffer[38]=(BYTE)(Effective.Frequency>>8);
                PrepareData();
                SendData();
        }
//checkout meter
        else if(rdata==0x84)
        {
                if((CounterCheck!=0)||(RecvBuffer[12]!=(0x33+0x33)))return;
                for(i=0;i<13;i++)
                {
                        CheckData[i]=(WORD)(RecvBuffer[13+2*i]-0x33)+((WORD)(RecvBuffer[14+2*i]-0x33))<<8;
                        if((i<6)&&(CheckData[1]>0x5555))SystemParameter.Channel[i]=1024;
                }
                if(CheckData[6]<20)             //Pa
                {
                        SystemParameter.Channel[6]=0;
                        SystemParameter.Channel[8]=0;
                }
                else if(CheckData[7]<20)        //Qa
                {
                        SystemParameter.Channel[7]=0;
                        SystemParameter.Channel[9]=0;
                }
                if(CheckData[1]>0x5555)
                {
                        MainWriteFlash(60,44,(BYTE*)&FlashSystemParameter,(BYTE*)&SystemParameter);
                        CounterCheck=3;                 //3s
                }
        }

        else
        {
                PtrSend=0;
                PtrRecv=0;
        }
}

//振鈴檢測
BYTE CheckRing(void)
{
        if(msr&0x04)CounterRing++;
        if(CounterRing>3)return TRUE;
        else return FALSE;
}

void PrepareData(void)
{
        BYTE i,ccode;
        UDWORD addr;

        SendBuffer[0]=0x68;
        ccode=0x68;
        for(i=1;i<7;i++)
        {
                SendBuffer[i]=RecvBuffer[i];
                ccode+=RecvBuffer[i];
        }
        SendBuffer[7]=0x68;
        ccode+=0x68;
        ccode+=SendBuffer[8];
        ccode+=SendBuffer[9];
        for(i=10;i<(SendBuffer[9]+10);i++)
        {
                SendBuffer[i]+=0x33;
                ccode+=SendBuffer[i];
        }
        SendBuffer[i]=ccode;
        SendBuffer[i+1]=0x16;
}

void SendData(void)
{
        BYTE i;

        mcr&=0xfb;              //out1
        CounterSend=2;          //2s
        thr=SendBuffer[0];
        PtrSend=1;
}

void SendAt(BYTE str[])
{
        BYTE i=0;

        do
        {
                thr=str[i];
                DelayUs[1];
        }while(str[i++]!=0x0d);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国精品自拍自在线| 成人午夜又粗又硬又大| 欧美日韩综合在线| 亚洲最大成人综合| 欧美日韩一区二区三区四区| 亚洲国产精品尤物yw在线观看| 日本韩国欧美一区| 天天综合色天天| 欧美α欧美αv大片| 成人性生交大片免费| 中文字幕一区二区三区在线不卡 | 热久久免费视频| 日韩一区二区麻豆国产| 久久91精品国产91久久小草| 国产亚洲成aⅴ人片在线观看| 国产99久久久国产精品潘金 | 日本黄色一区二区| 日欧美一区二区| 久久久久国产精品麻豆| 99re热这里只有精品视频| 午夜久久久影院| 国产农村妇女精品| 欧美三区在线视频| 国产原创一区二区| 亚洲影院理伦片| 久久午夜羞羞影院免费观看| 97久久超碰国产精品电影| 日韩高清一区二区| 国产精品电影一区二区三区| 欧美美女激情18p| 成人黄色综合网站| 秋霞电影网一区二区| 国产精品人成在线观看免费 | 亚洲啪啪综合av一区二区三区| 精品视频在线免费看| 国产高清在线观看免费不卡| 亚洲最大成人综合| 日本一区二区三级电影在线观看| 色偷偷一区二区三区| 国产精品亚洲人在线观看| 一二三四区精品视频| 久久精品在线免费观看| 欧美视频一区二区三区在线观看| 国产成人自拍高清视频在线免费播放| 一区二区三区色| 中文一区在线播放| 精品国精品自拍自在线| 欧美日韩国产免费一区二区| 不卡的av在线播放| 国产一区欧美一区| 日韩精品一二三区| 亚洲精品伦理在线| 中文字幕一区二区三区色视频 | 一区二区三区中文免费| 中文在线免费一区三区高中清不卡| 在线播放中文一区| 在线区一区二视频| av中文字幕在线不卡| 国产精品一区不卡| 久久97超碰国产精品超碰| 三级成人在线视频| 一区二区三区日韩精品视频| 亚洲欧洲www| 中文字幕 久热精品 视频在线| 日韩一级黄色片| 欧美日韩一二三区| 日本道色综合久久| 成人激情免费网站| 成人精品电影在线观看| 国产一区二区中文字幕| 久久99精品一区二区三区三区| 午夜精品久久久久久久| 亚洲成人av中文| 午夜视频在线观看一区| 日韩和欧美的一区| 视频在线观看一区| 免费视频一区二区| 日本一不卡视频| 麻豆91在线观看| 美女性感视频久久| 国产在线一区二区| 国产一区中文字幕| 丁香网亚洲国际| 不卡av免费在线观看| 成人18视频日本| 99久久er热在这里只有精品15| 粉嫩高潮美女一区二区三区| 成人免费电影视频| 99re这里都是精品| 欧洲av在线精品| 欧美福利视频一区| 日韩一区二区三| 国产日韩欧美在线一区| 国产精品进线69影院| 亚洲男人天堂av网| 亚洲777理论| 精品一区二区在线播放| 成人丝袜18视频在线观看| 91美女精品福利| 在线电影国产精品| 久久免费看少妇高潮| 国产精品久久久久影院亚瑟| 一区二区欧美视频| 三级欧美在线一区| 国产精华液一区二区三区| 99国产精品国产精品毛片| 欧美日韩久久不卡| 久久夜色精品国产噜噜av| 国产精品丝袜一区| 亚洲国产aⅴ成人精品无吗| 免费观看在线综合| 国产福利91精品一区二区三区| www.日韩av| 日韩一二三区视频| 国产精品污网站| 奇米精品一区二区三区在线观看一 | 欧美喷潮久久久xxxxx| www国产精品av| 最新中文字幕一区二区三区| 日韩**一区毛片| 成人av免费在线| 91精品福利在线一区二区三区| 中文字幕欧美日本乱码一线二线| 亚洲午夜三级在线| 成人午夜视频网站| 欧美一区二区美女| 亚洲另类在线视频| 国产成人综合自拍| 日韩欧美卡一卡二| 亚洲综合久久久久| 国产成人av电影在线播放| 欧美性videosxxxxx| 国产精品人人做人人爽人人添| 蜜臀av性久久久久蜜臀aⅴ| 99re热这里只有精品视频| 久久一区二区三区四区| 日韩国产欧美一区二区三区| 99re66热这里只有精品3直播| www激情久久| 美腿丝袜在线亚洲一区| 色综合久久66| 国产精品美女久久久久av爽李琼| 久久精品国产99久久6| 欧美巨大另类极品videosbest| 亚洲婷婷国产精品电影人久久| 国产毛片一区二区| 日韩欧美aaaaaa| 五月综合激情网| 欧美日韩免费观看一区二区三区| 中文字幕一区日韩精品欧美| 国产精品亚洲视频| 久久久久久**毛片大全| 老司机精品视频导航| 欧美日本一区二区三区四区| 亚洲精品欧美激情| 色综合婷婷久久| 国产精品国产成人国产三级| 国产一区二区看久久| 精品三级在线观看| 精品一二线国产| 日韩免费高清av| 久久精品国内一区二区三区| 91精品国产色综合久久久蜜香臀| 亚洲福利一区二区| 欧美日韩亚洲综合在线| 亚洲香肠在线观看| 欧美日韩国产不卡| 丝袜亚洲另类丝袜在线| 欧美精品丝袜久久久中文字幕| 午夜影院在线观看欧美| 91麻豆精品国产自产在线观看一区| 五月婷婷久久丁香| 日韩一区二区影院| 国产一区不卡在线| 久久久一区二区三区捆绑**| 国产在线视视频有精品| 中文字幕乱码一区二区免费| 99久久精品国产导航| 亚洲一区二区在线免费看| 欧美精选午夜久久久乱码6080| 午夜影视日本亚洲欧洲精品| 日韩欧美卡一卡二| 国产成人精品影视| 亚洲欧洲中文日韩久久av乱码| 欧美日韩一级大片网址| 精品系列免费在线观看| 欧美国产日韩精品免费观看| 91麻豆视频网站| 日韩精品三区四区| 久久久精品欧美丰满| 成人国产精品免费观看动漫| 亚洲一区二区不卡免费| 欧美成人高清电影在线| 国产成人免费视频网站| 一区二区三区不卡在线观看| 欧美一区欧美二区| 丰满少妇久久久久久久| 亚洲永久精品大片| 久久久99久久| 在线看国产一区|