一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 3754|回复: 2

[其他综合] 上位机上位机 怎么写通讯协议呢

[复制链接]
发表于 2012-3-16 12:00 | 显示全部楼层 |阅读模式
这是总图
QQ截图20120316115727.jpg
这是下位机的代码,
#include<reg51.h>
#include<intrins.h>
void delay();//延时
void lie();//列控制
void send8bit(unsigned int n);
void send8bit1(unsigned int n);//发送字函数
sbit P15=P3^3;//主信号
sbit P12=P3^4;//时钟信号
sbit P13=P3^5;//锁存信号
sbit P11=P3^2;//154门控信号
unsigned char count;//列计数器
unsigned char flage;//标志位
unsigned int  sum1;//字节数
unsigned char xdata text[2048];//定义外数据存储器?
unsigned char code cctab[640]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF00,0x00,0x00,
              
0x08,0x20,0x44,0x20,0x26,0x7E,0x30,0x80,0x01,0x01,0x20,0x02,0x2E,0x04,0x21,0x88,
0x20,0x50,0x20,0x20,0x20,0xD0,0x23,0x08,0x7C,0x06,0x20,0x03,0x00,0x02,0x00,0x00,
0x00,0x40,0x08,0x40,0x30,0x40,0x24,0x40,0x24,0x40,0x24,0x42,0xA4,0x41,0x64,0xFE,
0x25,0x40,0x26,0x40,0x24,0x40,0x20,0x40,0x28,0x40,0x30,0xC0,0x00,0x40,0x00,0x00,
0x00,0x02,0x00,0x42,0x00,0x22,0x7F,0xB2,0x49,0x02,0x49,0xFE,0x49,0x02,0x49,0x02,
0x49,0x02,0x49,0xFE,0x49,0x02,0xFF,0x92,0x40,0x22,0x00,0x66,0x00,0x02,0x00,0x00,
0x02,0x00,0x02,0x08,0x42,0x10,0x42,0x20,0x42,0x60,0x42,0x02,0x42,0x01,0x43,0xFE,
0x42,0x00,0x42,0x00,0x42,0x40,0xC2,0x20,0x42,0x30,0x06,0x18,0x02,0x00,0x00,0x00,
0x00,0x10,0x00,0x10,0x00,0x10,0xFF,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,
0x11,0x10,0x11,0x32,0x11,0x11,0x11,0x02,0x33,0xFC,0x11,0x00,0x00,0x00,0x00,0x00,
0x01,0x00,0x02,0x00,0x04,0x00,0x1F,0xFF,0xE0,0x00,0x08,0x01,0x08,0x02,0x08,0x0C,
0x8F,0xF0,0x69,0x02,0x09,0x01,0x09,0x02,0x0B,0xFC,0x19,0x00,0x08,0x00,0x00,0x00,
0x00,0x08,0x20,0x08,0x20,0x09,0x2F,0xFA,0x2A,0xAC,0x2A,0xA8,0x2A,0xA8,0xFA,0xA8,
0x2A,0xA8,0x2A,0xA8,0x2A,0xAC,0x3F,0xFA,0x68,0x0B,0x20,0x18,0x00,0x08,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF00,0x00,0x00
};//  han字显示与仿真     
unsigned int y;

void recint() interrupt 4 {//接收中断,串行口的中断n=4;
P11=1;//关闭屏幕显示防止屏幕出现乱码;
flage=1;
y=0;
//以下代码为从串行口接受数据存如xdata text[]中;
while(y<1024)
  {while(!RI);//空语句判断字符是否收完,ri=1跳出循环执行接收;
  text[y]=SBUF;
  RI = 0;//清RI
  y++;
   }
sum1=text[1]*32+64;
return;
}
void main()
{   
     unsigned char i,j;
     unsigned int m=0;
     TMOD=0x20;//设置定时器 T1 方式 2
     PCON=0x00;//使 SMOD 为 0
     TL1=0x0Fd;
     TH1=0x0Fd;//波特率为 9600b/s
     EA=1;//开全局中断
     ET1=0;//关 T1 中断
   ES=1;//开串行中断
   TR1=1;//开T1定时器
   SCON=0x50;//串行方式 1 ,允许接收
     flage=0;//标志位置0,发送片内字
   P11=1;//关闭显示,防止花屏
      
  if(flage) goto outdisplay;
  while(flage==0)
   { count=0x00;
      P11=1;
    for(j=0;j<1;j++)
   
   P12=0;
    P13=0;
   {  for(i=1;i<=32;i+=2)
           {   
       send8bit(i+m+32);//从串口发送字模数据         
            _nop_();
           send8bit(i+m+31);
     _nop_();
          send8bit(i+m);  //由于使用移位寄存74hc595,先发送一列的下半部分        
          _nop_();//延时
         
          send8bit(i+m-1);//后发送一列的上半部分,
               _nop_();         
          lie();//一个字的上半部分和下半部分发送完毕点燃该列。
   
          delay();//调用延时子程序
              P11=1;//关列显示
             }
     }
   m+=2;
   if(flage) goto outdisplay;//
   if(m>256)//字数控制
     m=0;
   
}

outdisplay:while(flage)
         {  P11=1;
      flage=0;
      m=6;   
            while(flage==0)
        {
      count=0x00;
              P11=1;
              
          P12=0;
          P13=0;
             {  for(i=1;i<=32;i+=2)
                {  

                      send8bit1(i+m+32);//从串口发送字模数据         
                   _nop_();
                  send8bit1(i+m+31);
                        _nop_();
                          
                send8bit1(i+m);  //由于使用移位寄存74hc595,先发送一列的下半部分        
                _nop_();//延时
         
                send8bit1(i+m-1);//后发送一列的上半部分,
                    _nop_();         
                lie();//一个字的上半部分和下半部分发送完毕点燃该列。
   
                delay();//调用延时子程序
                    P11=1;//关列显示
                  }
               }
           m+=2;
      if(flage) goto outdisplay;
      
           if(m>sum1)//字数控制
             m=2;
     }
   }
   
}


void send8bit(unsigned int n)/*机内码发送子程序*/
{
    unsigned char q;
     for(q=0;q<8;q++)
      {
    P15=((_cror_(cctab[n],q))&0x1);//右移(7-q)位,从低位到高位取。即595发送,
                                   //为从高到低为:Q7---Q0;
   
        P12=1;//寄存器时钟上跳沿,将一位数据存入移位寄存器。
        P12=0;
  }
        P13=1;//锁存器上跳沿,8位数据存入所存器,e为底允许发送,数据从并口发送
        P13=0;
}

void send8bit1(unsigned int n)/*片外数据存贮器发送子程序*/
{
    unsigned char q;
     for(q=0;q<8;q++)
      {
    P15=((_cror_(text[n],q))&0x1);//右移(7-q)位,从高位到低位取。即595发送,
                                   //为从高到低为:Q7---Q0;
        P12=1;//寄存器时钟上跳沿,将一位数据存入移位寄存器。
        P12=0;
  }
        P13=1;//锁存器上跳沿,8位数据存入所存器,e为底允许发送,数据从并口发送
        P13=0;
}

void delay()
{unsigned int n;
for(n=0;n<250;n++)
   {;}
}
void lie()//列控制
{
P11=0;//允许列选择
P1=count;
count++;
}


上位机的代码的mscomm该怎么写呢,自己有点不会,请求指导
发表于 2012-3-16 18:20 | 显示全部楼层
一同关注 请问这个 下位机程序 是怎么写出来的 你测试过么
回复

使用道具 举报

发表于 2012-3-19 18:06 | 显示全部楼层
通讯协议当然是你自己定了啊,它就是个约定,来对上位机和下位机之间传送的数据进行定义~~
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-11-4 20:13 , Processed in 0.035469 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表