金砂紫钰 发表于 2012-9-22 09:36:44

单片机232协议中,数据包的格式和例子代码

我在项目时,须要单片机给上位机发数据包,协议是232.    现在已能发字符串了,请教大侠,怎么发数据包,   格式我知道了,希望得到例子代码,相关的也可以,,,随便问一下,单片面存储问题,没有处设存储器,我用的IC是,12S5A60S2   在此,先谢了,

LSZD 发表于 2012-9-22 12:44:26

也有人在问怎么发字符串啊!楼主你是怎么实现的?可以让大家参考一下嘛

金砂紫钰 发表于 2012-9-22 14:37:18

本帖最后由 金砂紫钰 于 2012-9-22 14:38 编辑

uchar Buf[]="wecome to nbc!\n";


//**************************************************************************************************
//延时函数
//*************************************************************************************************
void delay(uint n)
{
        while (n--);
}

//**************************************************************************************************
//初始化串口
//*************************************************************************************************
void init_com( void )
{
SCON = 0x50;   // 设定通信方式为方式1,允许接收,相当于REN = 1; SM1 = 1;   
PCON = 0x00;   //SMOD=0,该语句可去掉
IE |= 0x90 ;   //打开串口中断, 相当于 EA = 1;ES = 1;

//以下4句设置T1
TMOD = 0x20;   // 定时器1工作于8位自动重载模式, 用于产生波特率
TH1=0xE6;      //定时器
TL1=0xE6;      //TL
TR1 = 1;
}

//**************************************************************************************************
//串口发送字符
//**************************************************************************************************
void send_char( uchar ch1)
{
        SBUF=ch1;       //将待发数据放到SBUF
        while (TI==0); //
        TI=0 ;         //
}

//**************************************************************************************************
//串口发送字符串
//**************************************************************************************************
void send_string(uchar *buf)
{
        while (*buf != '\0')
        {
                send_char(*buf++);
        }
}

main()
{
        init_com();
       
        while (1)
        {
                send_string(Buf);
                delay(20000);
        }

}这就是发字符串的代码,能用,

金砂紫钰 发表于 2012-9-22 14:39:42

LSZD 发表于 2012-9-22 12:44 static/image/common/back.gif
也有人在问怎么发字符串啊!楼主你是怎么实现的?可以让大家参考一下嘛

搞好了,你看一看吧,

HeP028 发表于 2012-9-22 15:28:16

本帖最后由 HeP028 于 2012-9-22 15:31 编辑

#include <REG51.H>
#include <stdio.H>       
#define uchar unsigned char       
#define uint unsigned int



#define         ON                         0
#define         OFF                 1       
//::::::::::::::::::::::::::::::::::::::::::
        sbit D0=P0^0;
        sbit D1=P0^1;
        sbit D2=P0^2;
        sbit D3=P0^3;
        sbit D4=P0^4;
        sbit D5=P0^5;
        sbit D6=P0^6;
        sbit D7=P0^7;
//::::::::::::::::::::::::::::::::::::::::::
unsigned char Address = 'A';
unsigned char a= {0x00,0x00};
unsigned char Count = 0x00;
bit outFlag;
//::::::::::::::::::::::::::::::::::::::::::                                               
//::::::::::::::::::::::::::::::::::::::::::
void init_serialcomm(void)                                       
{                                                               
        SCON= 0x50;       //SCON: serail mode 1, 8-bit UART, enable ucvr
        TMOD |= 0x20;       //TMOD: timer 1, mode 2, 8-bit reload
        PCON |= 0x80;       //SMOD=1;
        TH1   = 0xFd;       //Baud:9600fosc=11.0592MHz
        TL1   = 0XFD;                 //Baud:9600fosc=11.0592MHz
        IE   |= 0x90;       //Enable Serial Interrupt
        TR1   = 1;          // timer 1 run                                                        
}       

//::::::::::::::::::::::::::::::::::::::::::
//::::::串口发送一个字符
//::::::::::::::::::::::::::::::::::::::::::
void COM_sendoneChar(unsigned char CH)
{
        SBUF = CH;
        while(!TI);
        TI = 0;
}
//::::::::::::::::::::::::::::::::::::::::::
//::::::串口发送一个字符串
//::::::::::::::::::::::::::::::::::::::::::
void COM_sendstring(unsigned char *String)
{
        while(*String != '\0')
        {
                COM_sendoneChar(*String);
                String++;
        }
}
       
//::::::::::::::::::::::::::::::::::::::::::                                               
void main(void)                       
{       
        init_serialcomm();       
        COM_sendstring(">Version information:1.0.0   ");
        COM_sendstring("\r\n");
        COM_sendstring(">Program function   :Eight LED control Demo");
        COM_sendstring("\r\n");
        COM_sendstring("-------------------------------------");
        COM_sendstring("\r\n");
    while(1)                               
    {                                               
                if(outFlag == 1)
                {       
                        if (a == 1)               
                        {       
                                switch(a)               
                                {
                                        case 1:if(a==0)D0=ON;else D0=OFF;break;
                                        case 2:if(a==0)D1=ON;else D1=OFF;break;
                                        case 3:if(a==0)D2=ON;else D2=OFF;break;
                                        case 4:if(a==0)D3=ON;else D3=OFF;break;
                                        case 5:if(a==0)D4=ON;else D4=OFF;break;
                                        case 6:if(a==0)D5=ON;else D5=OFF;break;
                                        case 7:if(a==0)D6=ON;else D6=OFF;break;
                                        case 8:if(a==0)D7=ON;else D7=OFF;break;
                                        default:break;
                               }
                                COM_sendstring("          ");
                                COM_sendstring("Number->");
                                COM_sendoneChar(a + 0x30);                                //输出通道显示
                                COM_sendstring(" = ");       
                                COM_sendstring(a <= 0 ? "Open":"Close");        //输出状态
                                COM_sendstring("\r\n");                                                //换行
                        }
                        if (a == 8)
                        {
                                P0 = a <= 0 ? 0x00:0xff;
                                COM_sendstring("          ");
                                COM_sendstring(a <= 0 ? "All port = Open!    ^_~ or ~_^ " : "All port = Close!   ^_~ or ~_^");
                                COM_sendstring("\r\n");
                        }
                outFlag=0;
                }
        }               
}
//::::::::::::::::::::::::::::::::::::::::::
//::::::::::::::::::::::::::::::::::::::::::
void serial_serve(void) interrupt 4
{
        //起始地址:A(设备ss号) + 控制字 + 端口号 + 端口状态 + !(郑伟)
        unsigned char temp = 0x00;
        RI = 0;
        EA = 0;
        temp = SBUF;
        switch(Count)
        {
           case 0:
                        if ((temp == Address) || (temp == 0xff))
                                Count = 1;
                          else        Count = 0;
                        break;
           case 1:
                        if ((temp == 0x31) || (temp == 0x38))
                        {        a = temp - 0x30;
                                switch (a)
                                {
                                        case 1: Count = 2;        break;
                                        case 8: Count = 3;break;
                                        default:
                                                break;
                                }
                        }
                          elseCount = 0;
                break;
           case 2:
                           if ((temp > 0x30) && (temp < 0x39))
                           {        a = temp - 0x30;
                                Count = 3;                       
                        }
                          elseCount = 0;
                        break;
           case 3:
                           if ((temp == 0x30) || (temp == 0x31))
                           {        a = temp - 0x30;
                                Count = 4;
                        }
                          elseCount = 0;
                        break;
           case 4:
                           if (temp == '!')       
                           {        Count = 0;
                                outFlag = 1;
                        }
                             elseCount = 0;
                        break;
           default:
                           break;       
        }
        EA=1;
}


这个程序的字体真好看,各位是不是?


金砂紫钰 发表于 2012-9-24 15:52:35

HeP028 发表于 2012-9-22 15:28 static/image/common/back.gif


我要发数据包呢,            struct packet{
int DataBuf;       //           起始符(包头起始标志0Xbb)包头:1-2字节
char len;       //           数据](包长度) 1-2字节
char content;       //数据        内容
int check;          //奇偶
int tail;//结束符(包尾结束标志0XAA)包头:1-2字节
}

我怎样在char content;        装不同的值呢,
还是用什么方法,能知道,数据结构的总长度呢,
还有int check;          //奇偶      怎样设呀,
页: [1]
查看完整版本: 单片机232协议中,数据包的格式和例子代码