搜索
bottom↓
回复: 0

急!求教关于CH341AAVR端接受时序问题!求帮忙

[复制链接]

出0入0汤圆

发表于 2013-9-25 14:24:49 | 显示全部楼层 |阅读模式
    RT  本人现在想用CH341A芯片将计算机USB端口转为EPP并口接到设备上!!以前设备是SPP接口 上位机软件发送的波形数据 下位机接受后处理后输出的波形和上位机控制的波形是一样。
    现在的问题是上位机 利用CH341A一次发送一个字节到单片机 单片机能接受到正常显示。但是我现在要上位机发送一个连续波形的数据给单片机,如果一次只发送一个数据的话 那么会造成 生成的波形的频率会扩大 不会原样输出。
    现在一次性发送6个数据单片机,单片机端没法接受这6个数据。 我想还是下位机接受时序的问题
   想请教下 用过的大神能否给我一份 下位机接受多字节数据的时序图 或者代码。下面附上我自己写的单片机端接受数据的代码。
#define setbit(address,bit) (address |= (1<<bit))        //置1
#define clearbit(address,bit) (address &= ~(1<<bit))        //清零
#define checkbit(address,bit) (address &= (1<<bit))        //保留某一位的状态
#define BUSY_SET setbit(PORTA,6)  
#define BUSY_CLR clearbit(PORTA,6)
uchar com_epp(void)
{
  uchar c;
  _NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
  BUSY_CLR; //接CH341芯片的Wait#引脚 也就是EPP模式的Wait信号,先置低
   while(checkbit(PINA,7)); // MEGA128端的PA7接CH341芯片的DS#引脚 ,当PA7为低是开始一个EPP周期
_NOP();_NOP();_NOP();_NOP(); //延时
   c=PINC; //接受数据
   BUSY_SET;//置高Wait#结束一个周期
   
   return c;
}

单片机端接收数据处理代码————实现意图是LCD屏显示数据123456 六个数字
int spp_control(void)
{
  uchar i;
  uchar kk,a,last_mark,xor;
  int addr_save;
  unsigned char temp[20];
  uchar addr,road,dada_low,dada_high,test;
  uint dada,display_mark;
  float ttt=0,adc;
  clear_screen();//清屏
  //SREG=0X80;
  SDI_SET;
  SEPP_CLR;
  BUSY_CLR;
  dada=0;   
  last_mark=1;  
  display_mark=0;
  road=0;
  lcd_dis_hzstr(0,0,hzstr00,0);
  lcd_dis_hzstr(6,0,hzstr03,0);
  lcd_dis_hzstr(0,4,hzstr10,0);
  lcd_dis_number(15,4,10);
  lcd_dis_hzstr(0,6,hzstr06,0);  
  addr_save=read_from_eeprom(0x01);
  //sprintf(buf,"%d",addr_save);
  //lcd_dis_ascii(8,6,buf,strlen(buf));
  short_sprintf(8,6,addr_save);  
  for(;;)
  {
    display_mark++;
    if(scan_key()==14) goto end;
     if((!checkbit(PINA,7))&&(last_mark==1)
        {
          last_mark=0;
          for(i=0;i<6;i++)
            temp[i]=com_epp();
          last_mark=1;       
         // _NOP();
          //_NOP();
          //_NOP();
         // _NOP();
          BUSY_CLR;
        }
       
          temp[0]=a;
          temp[1]=addr;
          temp[2]=road;
          temp[3]=dada_high;
          temp[4]=dada_low;
          temp[5]=test;
        if(a=='B')
           lcd_dis_number(1,2,1);
        if(addr=='C')
           lcd_dis_number(2,2,2);
        if(road=='D')
           lcd_dis_number(3,2,3);
        if(dada_high=='E')
           lcd_dis_number(4,2,4);
        if(dada_low=='F')
           lcd_dis_number(5,2,5);
        if(test=='G')
           lcd_dis_number(6,2,6);
        else
           lcd_dis_number(7,2,10);  
        }  
  end:
  setting();
  
  return 0;
}
  但是现在无论我怎么发数据 下面就是没法显示!!!求大神显示指导  

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-27 00:14

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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