肯定加分 串口简单问题


我想实现发送什么,,接收到什么,,

你可以试试发送
welcometotssinghome
返回会少掉几个字符....

代码只有几行,,很容易看懂,,,

请帮忙,,谢谢

[ 本帖最后由 tssing 于 2008-7-20 13:25 编辑 ]

com.rar
(2008-07-20 11:05:13, Size: 37.6 KB, Downloads: 22)

虚拟串口.rar
(2008-07-20 11:05:13, Size: 1.94 MB, Downloads: 22)

sscom32T.rar
(2008-07-20 11:05:13, Size: 275 KB, Downloads: 15)


我也来说两句 查看全部回复

最新回复

  • tssing (2008-7-20 11:53:48)

    周末没人吗 周末没人吗 周末没人吗 周末没人吗 周末没人吗 周末没人吗 周末没人吗 周末没人吗 周末没人吗 周末没人吗 周末没人吗

    [ 本帖最后由 tssing 于 2008-7-20 12:39 编辑 ]


    QQ截图未命名.gif


    QQ截图未命名1.GIF


    QQ截图未命名2.gif

  • tssing (2008-7-20 13:47:43)

    这个问题对我来说太重要了,,请允许我再次顶上去...
  • tssing (2008-7-20 15:48:58)

    就这样沉了吗??????????????????????????????????????????????
  • tssing (2008-7-20 18:45:33)

    晚上了,,应该有人了吧,,继续顶上去晚上了,,应该有人了吧,,继续顶上去
  • tssing (2008-7-20 19:34:39)

    我用单步调试,是51少接收了字符,,请问是为何....
  • tssing (2008-7-20 22:05:39)

    顶上去...顶上去...顶上去...顶上去...顶上去...顶上去...顶上去...顶上去...顶上去...顶上去...顶上去...顶上去...顶上去...顶上去...
  • panhearii (2008-7-21 08:22:04)

    周末应该没人
    现在人来了 正在看
  • panhearii (2008-7-21 08:50:30)

    以下建议仅为参考 仅为参考
    void InterruptSerial() interrupt SIO_VECTOR
    {
            RI = 0;
            P1 = SBUF;
            ES = 0;       

            SBUF = P1;       
            while(!TI);                       
            TI = 0;       
            ES = 1;
    }

    ES别关
    SBUF同一名字 实际上好像是有2个寄存器 一个只能读 一个只能写
  • panhearii (2008-7-21 08:53:40)

    还有一个建议 仅为参考 仅为参考
    中断里的工作越少越好
    把中断要做的活都给WHILE(1)来做

    以下程序为转载 依然是
    仅供参考
    仅供参考
    #include <reg51.h>  
    #include <string.h>  

    #define INBUF_LEN 4 //数据长度  

    unsigned char inbuf1[INBUF_LEN];  
    unsigned char checksum,count3;  
    bit read_flag= 0 ;  

    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 = 0xF4 ; //Baud:4800 fosc=11.0592MHz  
    IE |= 0x90 ; //Enable Serial Interrupt  
    TR1 = 1 ; // timer 1 run  
    // TI=1;  
    }  

    //向串口发送一个字符  
    void send_char_com( unsigned char ch)  
    {  
    SBUF=ch;  
    while (TI== 0 );  
    TI= 0 ;  
    }  

    //向串口发送一个字符串,strlen为该字符串长度  
    void send_string_com( unsigned char *str, unsigned int strlen)  
    {  
    unsigned int k= 0 ;  
    do  
    {  
    send_char_com(*(str + k));  
    k++;  
    } while (k < strlen);  
    }  


    //串口接收中断函数  
    void serial () interrupt 4 using 3  //其实这里不用写这么多的 除了ch=SBUF; 这步骤外全部放到WHILE(1)里去做
    {  
    if (RI)  
    {  
    unsigned char ch;  
    RI = 0 ;  
    ch=SBUF;  
    if (ch> 127 )  
    {  
    count3= 0 ;  
    inbuf1[count3]=ch;  
    checksum= ch- 128 ;  
    }  
    else  
    {  
    count3++;  
    inbuf1[count3]=ch;  
    checksum ^= ch;  
    if ( (count3==(INBUF_LEN- 1 )) && (!checksum) )  
    {  
    read_flag= 1 ; //如果串口接收的数据达到INBUF_LEN个,且校验没错,  
    //就置位取数标志  
    }  
    }  
    }  
    }  


    main()  
    {  
    init_serialcomm(); //初始化串口  
    while ( 1 )  
    {  
    if (read_flag) //如果取数标志已置位,就将读到的数从串口发出   在WHILE(1)里做中断处理
    {  
    read_flag= 0 ; //取数标志清0  
    send_string_com(inbuf1,INBUF_LEN);
      
    }  
    }  

    }

    [ 本帖最后由 panhearii 于 2008-7-21 08:57 编辑 ]
  • tssing (2008-7-21 13:03:00)

    此方法我试过了,,我用单处调试,,,是51单片机那里少收了几个字符,,,
    不是返回的问题...
  • tssing (2008-7-21 13:28:16)

    晚上我回家再调试一下,,
    还有我怀疑不能运行,,因为当我RI==1时,,,如果没有运行如下语句,,下次中断就无法进入
    SBUF = P1;
    while(!TI);
    TI = 0;
  • tssing (2008-7-21 13:53:52)

    checksum不理解,,感觉好像有意思
  • panhearii (2008-7-21 15:14:13)

    你先别关中断试试
    我估计是你关的时候 数据刚好过来。。。。 猜的

    我猜我猜 我猜猜猜~
  • tssing (2008-7-21 17:13:24)

    刚刚硬件仿真没问题...,,,现在这个确定是proteus的问题了,,,
    谢谢帮忙
  • tssing (2008-7-21 17:25:54)

    钱是越来越多,,,,钱多后就是想要得到知识,,,,不吝啬钱
  • 故曰 (2008-7-21 19:12:27)

    新手,来看看但不是很懂。
    发贴还有字符限制,太奇怪了。
  • zyp005 (2008-7-23 12:47:19)

    hao e  a aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
    aaaaaaaaaaaaaaaaaaaaaaaaa
    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
    aaaaaaaaaaaaaaaaaaaaaaaaa
  • zyp005 (2008-7-23 12:50:36)

    谢谢你 啊 找了好久终于找到了 啊
    。。。。。。。。。。。。。。。
  • zyp005 (2008-7-23 12:51:35)

    就是 贵了点啊。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
  • xiaoxiao132 (2008-7-23 13:32:48)

    谢谢你的分享,串口很重要。。。。。。。。。。。