⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 20090309161950f65785[1].txt

📁 /8051单片机TLC1549数据采集程序源代码 //单片机:At89S52 //连接类型:232 |485 接口
💻 TXT
📖 第 1 页 / 共 5 页
字号:
                        { 
                        uchar n=0; 
                        RI=0; 
                        while (1) 
                        { 
                        while(!RI);//等接收数据 
                        //----------------- 
                        ComBuf[n]=SBUF; 
                        RI=0; 
                        // SBUF=ComBuf[n]; 
                        if (ComBuf[n]==0x7e) break;//接收到结束符则退出 
                        if (n>=MAXCMD_LENGTH) 
                        n=0;//接收10个字节,如果还没有接收到0x7e结束符,就重新记录 
                        else 
                        n++; 
                        } 
                        } 


                        /*------------------------------- 
                        * * 
                        * 发送combuf数据至上位机 * 
                        * * 
                        --------------------------------*/ 
                        void SendByteArray() 
                        { 
                        unsigned i; 
                        SetCheckSUM();//加入ComBuf[5]的checkSUM校验码 
                        ComBuf[4]=P0;//取读本模块地址 
                        ComBuf[6]=0x7e;//结束符 
                        for(i=0;i<=MAXCMD_LENGTH-1;i++) 
                        { 
                        SendByte(ComBuf[i]); 
                        } 
                        } 

                        /*------------------------------- 
                        * * 
                        * 送端口状态至上位机 * 
                        * * 
                        --------------------------------*/ 
                        void GetP0() 
                        { 
                        switch(ComBuf[2]) 
                        { 
                        case 0x00: ComBuf[3]=P0_0; break; 
                        case 0x01: ComBuf[3]=P0_1; break; 
                        case 0x02: ComBuf[3]=P0_2; break; 
                        case 0x03: ComBuf[3]=P0_3; break; 
                        case 0x04: ComBuf[3]=P0_4; break; 
                        case 0x05: ComBuf[3]=P0_5; break; 
                        case 0x06: ComBuf[3]=P0_6; break; 
                        case 0x07: ComBuf[3]=P0_7; break; 
                        default: 
                        ComBuf[3]=P0;//为8时...则以上传整个port状态 
                        } 
                        } 
                        //-------------------- 
                        void GetP1() 
                        { 
                        switch(ComBuf[2]) 
                        { 
                        case 0x00: ComBuf[3]=P1_0; break; 
                        case 0x01: ComBuf[3]=P1_1; break; 
                        case 0x02: ComBuf[3]=P1_2; break; 
                        case 0x03: ComBuf[3]=P1_3; break; 
                        case 0x04: ComBuf[3]=P1_4; break; 
                        case 0x05: ComBuf[3]=P1_5; break; 
                        case 0x06: ComBuf[3]=P1_6; break; 
                        case 0x07: ComBuf[3]=P1_7; break; 
                        default: 
                        ComBuf[3]=P1;//为8时...则以上传整个port状态 
                        } 
                        } 
                        //--------------- 
                        void GetP2() 
                        { 
                        switch(ComBuf[2]) 
                        { 
                        case 0x00: ComBuf[3]=P2_0; break; 
                        case 0x01: ComBuf[3]=P2_1; break; 
                        case 0x02: ComBuf[3]=P2_2; break; 
                        case 0x03: ComBuf[3]=P2_3; break; 
                        case 0x04: ComBuf[3]=P2_4; break; 
                        case 0x05: ComBuf[3]=P2_5; break; 
                        case 0x06: ComBuf[3]=P2_6; break; 
                        case 0x07: ComBuf[3]=P2_7; break; 
                        default: 
                        ComBuf[3]=P2;//为8时...则以上传整个port状态 
                        } 
                        } 
                        //-------------- 
                        void GetP3() 
                        { 
                        switch(ComBuf[2]) 
                        { 
                        case 0x00: ComBuf[3]=P3_0; break; 
                        case 0x01: ComBuf[3]=P3_1; break; 
                        case 0x02: ComBuf[3]=P3_2; break; 
                        case 0x03: ComBuf[3]=P3_3; break; 
                        case 0x04: ComBuf[3]=P3_4; break; 
                        case 0x05: ComBuf[3]=P3_5; break; 
                        case 0x06: ComBuf[3]=P3_6; break; 
                        case 0x07: ComBuf[3]=P3_7; break; 
                        default: 
                        ComBuf[3]=P3;//为8时...则以上传整个port状态 
                        } 
                        } 
                        //-------发送AT89S5x的指定端口状态到上位机----- 
                        void SendPortData() 
                        { 
                        switch (ComBuf[1])/*Port号*/ 
                        { 
                        case 0x00: GetP0(); break; 
                        case 0x01: GetP1(); break; 
                        case 0x02: GetP2(); break; 
                        case 0x03: GetP3(); break; 
                        } 

                        /*--------------------*/ 
                        SendByteArray();//发送数据 
                        } 




                        /*------------------------------- 
                        * * 
                        * 各个端口的状态设定 * 
                        * * 
                        --------------------------------*/ 
                        void SetP0() 
                        { 
                        switch(ComBuf[2]) 
                        { 
                        case 0x00: P0_0=ComBuf[3]; break; 
                        case 0x01: P0_1=ComBuf[3]; break; 
                        case 0x02: P0_2=ComBuf[3]; break; 
                        case 0x03: P0_3=ComBuf[3]; break; 
                        case 0x04: P0_4=ComBuf[3]; break; 
                        case 0x05: P0_5=ComBuf[3]; break; 
                        case 0x06: P0_6=ComBuf[3]; break; 
                        case 0x07: P0_7=ComBuf[3]; break; 
                        default: 
                        P0=ComBuf[3];//为8时...则设置整个port状态 
                        } 
                        } 
                        //================================= 
                        void SetP1() 
                        { 
                        switch(ComBuf[2]) 
                        { 
                        case 0x00: P1_0=ComBuf[3]; break; 
                        case 0x01: P1_1=ComBuf[3]; break; 
                        case 0x02: P1_2=ComBuf[3]; break; 
                        case 0x03: P1_3=ComBuf[3]; break; 
                        case 0x04: P1_4=ComBuf[3]; break; 
                        case 0x05: P1_5=ComBuf[3]; break; 
                        case 0x06: P1_6=ComBuf[3]; break; 
                        case 0x07: P1_7=ComBuf[3]; break; 
                        default: 
                        P1=ComBuf[3];//为8时...则设置整个port状态 
                        } 
                        } 
                        //================================= 
                        void SetP2() 
                        { 
                        switch(ComBuf[2]) 
                        { 
                        case 0x00: P2_0=ComBuf[3]; break; 
                        case 0x01: P2_1=ComBuf[3]; break; 
                        case 0x02: P2_2=ComBuf[3]; break; 
                        case 0x03: P2_3=ComBuf[3]; break; 
                        case 0x04: P2_4=ComBuf[3]; break; 
                        case 0x05: P2_5=ComBuf[3]; break; 
                        case 0x06: P2_6=ComBuf[3]; break; 
                        case 0x07: P2_7=ComBuf[3]; break; 
                        default: 
                        P2=ComBuf[3];//为8时...则设置整个port状态 
                        } 
                        } 
                        //================================= 
                        void SetP3() 
                        { 
                        switch(ComBuf[2]) 
                        { 
                        case 0x00: P3_0=ComBuf[3]; break; 
                        case 0x01: P3_1=ComBuf[3]; break; 
                        case 0x02: P3_2=ComBuf[3]; break; 
                        case 0x03: P3_3=ComBuf[3]; break; 
                        case 0x04: P3_4=ComBuf[3]; break; 
                        case 0x05: P3_5=ComBuf[3]; break; 
                        case 0x06: P3_6=ComBuf[3]; break; 
                        case 0x07: P3_7=ComBuf[3]; break; 
                        default: 
                        P3=ComBuf[3];//为8时...则设置整个port状态 
                        } 
                        } 

                        /*================================= 
                        WritePortData() 

                        按上位机传来的格式进行端口的设置 
                        =================================*/ 
                        void WritePortData() 
                        { 
                        switch (ComBuf[1])/*Port号*/ 
                        { 
                        case 0x00: SetP0(); break; 
                        case 0x01: SetP1(); break; 
                        case 0x02: SetP2(); break; 
                        case 0x03: SetP3(); break; 
                        } 
                        } 

                        /*---------------------------------- 
                        * SetEA() * 
                        * * 
                        * 中断允许设定,(EA寄存器) * 
                        * ComBuf[1]==>0x00为EA设定 * 
                        * 0x01为读取EA值 * 
                        ------------------------------------*/ 
                        void SetEA() 
                        { 
                        if (ComBuf[1]==0x00) 
                        EA=ComBuf[3]; 
                        else 
                        { 
                        ComBuf[3]=EA; 
                        SendByteArray();//发送数据 
                        } 
                        }
                        /*--------------------------------------------------------------- 

                        * * 
                        * float型转为2位char型,并发送至串行 * 
                        * void Convert_AD_VOL_ValueToChar() * 
                        * * 
                        ---------------------------------------------------------------*/ 

                        void Convert_AD_VOL_ValueToChar(uint vol) 
                        { 
                        float temp_float_vol; 
                        unsigned int temp; 
                        uchar AD_Hight,AD_Low; 

                        temp_float_vol=vol*0.0048*AD_VOL_PER; 
                        temp=temp_float_vol*100; 
                        AD_Hight=temp /100;//取个位数 
                        AD_Low=temp-AD_Hight*100;//取2位小数 
                        ComBuf[2]=AD_Hight; 
                        ComBuf[3]=AD_Low; 
                        SendByteArray();//发送数据 
                        } 

                        /*-------------------------------- 
                        * * 
                        * 预先采集一次AD数据 * 
                        * * 
                        *--------------------------------*/ 
                        void Befor_Once_AD() 
                        { 
                        uchar i; 

                        ADCLK=ADOUT=0; 
                        //---------- 
                        ADCS=0; //开启控制电路,使能DATA OUT和I/O CLOCK 
                        for(i=1;i<=10;i++) 
                        { 
                        ADCLK=1; 
                        ADCLK=0; 
                        } 
                        ADCS=1; 
                        delay(25);//两次转换间隔大于21us 
                        } 

                        /*--------------------------------------------------------------- 

                        * GetAD() TLC1549数据采集 * 
                        * sbit ADCLK=P2^0; * 
                        * sbit ADOUT=P2^1; * 
                        * sbit ADCS=P2^2; * 
                        -----------------------------------------------------------------*/ 

                        void GetAD() 
                        { 
                        uchar i=1,w,PickCount; 
                        uint vol; 

                        Befor_Once_AD();//预先采集一次AD数据 

                        //--------------- 

                        if (ComBuf[1]==0)ComBuf[1]=0x01; 
                        PickCount=ComBuf[1]; 
                        for(w=1;w<=PickCount;w++) 
                        { 
                        ADCLK=ADOUT=0; 
                        vol=0; 
                        ADCS=0; //开启控制电路,使能DATA OUT和I/O CLOCK 
                        for(i=1;i<=10;i++) 
                        { 
                        //给一个脉冲 
                        ADCLK=1; 
                        vol<<=1; 
                        if(ADOUT)vol|=0x01; 
                        ADCLK=0; 
                        } 
                        ADCS=1; 
                        delay(21);//两次转换间隔大于21us 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -