导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→硬件:老古,8019,为什么我发送的数据,在接收那端读出来会[leech42]

 *第1081篇: 硬件:老古,8019,为什么我发送的数据,在接收那端读出来会是这样子的呀!

  
楼 主:leech42 2001年11月14日09:03
 硬件:老古,8019,为什么我发送的数据,在接收那端读出来会是这样子的呀!
我发送的数据是这样的。
88 88 88 00 00 01 88 88 88 00 00 02 00 77 01 02 03 04 05 06 07 08 09 0A 0B 0C 
0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 
27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 
41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 
5B 5C 5D 5E 5F 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 
75 76 77
而接收到的数据确是这样子的,这是为什么呀!
01 89 88 88 00 88 88 00 00 01 03 05 07 09 0B 0D 0F 11 13 15 17 19 1B 1D 1F 21 
23 25 27 29 2B 2D 2F 31 33 35 37 39 3B 3D 3F 41 43 45 47 49 4B 4D 4F 51 53 55 
57 59 5B 5D 5F 61 63 65 67 69 6B 6D 6F 71 73 75 77 77 77 77 77 77 77 77 77 77 
77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 
77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 
77 77 77 77 77 77 77

  
2楼:老古 2001年11月14日09:30
 可能你使用了16位的dma,而不是8位的dma
  
3楼:leech42 2001年11月14日09:31
 老古,16位还是8位是在哪里设置的呀!
  
4楼:老古 2001年11月14日09:40
 DCR
  
5楼:老古 2001年11月14日09:41
 Data Config Register
  
6楼:leech42 2001年11月14日09:43
 DCR我是按你的文章里那样设置的,是C8
  
7楼:老古 2001年11月14日09:31
 你将数据通过dma传到发送缓冲区时,再把发送缓冲区的内容读出来看一下.
  
8楼:leech42 2001年11月14日09:40
 我读出来是这样子的。
88 88 00 88 88 00 00 01 03 05 07 09 0B 0D 0F 11 13 15 17 19 1B 1D 1F 21 23 25 
27 29 2B 2D 2F 31 33 35 37 39 3B 3D 3F 41 43 45 47 49 4B 4D 4F 51 53 55 57 59 
5B 5D 5F 61 63 65 67 69 6B 6D 6F 71 73 75 77 D0 D0 D0 D0 D0 D0 D0 D0 D0 D0 D0 
D0 D0 D0 D0 D0 D0 D0 D0 D0 D0 D0 D0 D0 D0 D0 D0 D0 D0 D0 D0 D0 D0 D0 D0 D0 D0 
D0 D0 D0 D0 D0 D0 D0 D0 D0 D0 D0 D0 D0 D0 D0 D0 D0 D0 D0 D0 D0 D0 D0 D0 D0 D0 
D0 D0 D0 80 6C 0B FF 00 
  
9楼:老古 2001年11月14日09:42
 就是说你写入到发送缓冲区已经错了.
  
10楼:leech42 2001年11月14日09:44
 怎么会呢!我是一个字节一个字节的写的呀!
  
11楼:老古 2001年11月14日09:46
 你是在电脑里编写还是用单片机?
  
12楼:leech42 2001年11月14日09:48
 我是用77e58的。
  
13楼:老古 2001年11月14日09:50
 77e58我也用过,可以的.
  
14楼:老古 2001年11月14日09:49
 你把你读写dma的程序贴出来分析一下.
  
15楼:leech42 2001年11月14日09:51
 是这样子的。
    page(0);
    P2 = reg09;
    P0 = 0x40;
    IOWB = 0;
    IOWB = 1; //RSAR1 dma read highaddress=0x40 
    P2 = reg08;
    P0 = 0x00;
    IOWB = 0;
    IOWB = 1; //RSAR0 dma read lowaddress=0x00;
    P2 = reg0b;
    P0 = uByteNum.byte.hi;
    IOWB = 0;
    IOWB = 1; //RBCR1 read count high 
    P2 = reg0a;
    P0 = uByteNum.byte.lo;
    IOWB = 0;
    IOWB = 1; //RBCR0 count low
    P0 = 0xff;
    P2 = reg00;
    IORB = 0;
    cCR = P0;
    IORB = 1; //read CR register
    cCR = cCR & 0xc4;
    cCR = cCR | 0x12;
    P2 = reg00;
    P0 = cCR;
    IOWB = 0;
    IOWB = 1; //dma write and start
    for(uTempNum.cd = 0;uTempNum.cd < uByteNum.cd;uTempNum.cd++)
    {
        P0 = xTbuff_rtl[0][uTempNum.cd];
        P2 = reg10;
        IOWB = 0;
        IOWB = 1;
    }    //远程DMA写
  
16楼:老古 2001年11月14日09:55
 写应该是对的.读呢?
  
17楼:leech42 2001年11月14日11:01
 谢谢老古!原来是我程序的问题!
我把写改成这样
    for(uTempNum.cd = 0;uTempNum.cd < uByteNum.cd;uTempNum.cd++)
    {
        cCR = xTbuff_rtl[0][uTempNum.cd];
        P0=cCR;
        P2 = reg10;
        IOWB = 0;
        IOWB = 1;
    }    //远程DMA写
读改成这样
        P0 = 0xff;
        P2 = reg10;
        IORB = 0;
        cCR=P0;
        IORB=1;
        xTbuff_cpu[uTempNum.cd] = cCR;
就对了原来还是我自己程序的问题呀!
看来我得努力了。

>>>>>>对该主题发表你的看法

本主题贴数17,分页: [第1页]


[上一篇主题]:硬件:请问51系列单片机哪种型号的具有512B以上的RAM

[下一篇主题]:AVR单片机:请问各大高手:哪有IAR C Compiler免费下载,谢谢?