jijiali 发表于 2013-1-29 09:49

2812SCIA利用FIFO与PC机进行串口通信

2812SCIA利用FIFO与PC机进行串口通信时,利用中断实现。就是当在串口调试助手上输入发送内容,2812利用接收中断接到内容,再利用发送中断发给PC在串口调试助手上显示。我有些地方不明白,请给位大牛指教:
1.当程序运行,在串口调试助手输入内容后,点击发送,可以实现通信。但是我想知道,2812发送端和接收端的波形在示波器上是什么样子?
2、当我把仿真器跟2812连接断开时,发送窗口输入内容,再次点击发送,接收区仍能有数据显示。难道,此时不需要2812.也能实现串口通信。实在费解。请各位不吝赐教,本人刚接触2812.

jlass 发表于 2013-1-29 09:53

1、波形无非是高高低低,速度就是波特率
2、要么硬件有问题,收发短路了,要么2812仍然在运行(如果你是点击run后再把仿真器把下来就是这种情况)

jijiali 发表于 2013-1-29 09:58

to jilass:哦,我觉得波形也应该是高低电平。但是我打出来不是啊。但是通信时,发的什么,收到就是什么。这不能叫做通信成功吗?第二点是我把2812运行,然后发送端接收端不与串口线连接仍然可以通信,是怎么回事?

jlass 发表于 2013-1-29 10:10

jijiali 发表于 2013-1-29 09:58 static/image/common/back.gif
to jilass:哦,我觉得波形也应该是高低电平。但是我打出来不是啊。但是通信时,发的什么,收到就是什么。这 ...

从你的描述来看,你根本没有通信成功,要么你的收发短路了,要么你所谓收到的数据其实是你的发送打印而已。

jijiali 发表于 2013-1-29 10:19

我估摸着是短路了,所以换了一块测试版,结果这次,刚一运行程序,输入发送内容后,接收窗口就受到一些00000,但是一会儿就又没了》这是怎么回事?

zhangmangui 发表于 2013-1-29 10:24

嗯如果用示波器看发送和接收的波形的话就是高低高低的数据按一定的规律和波特率的速度进行传输的
关于你将仿真器拔掉还能通信的问题似乎我也遇到过当你在程序run时,拔掉仿真器只要别断电程序还是
在运行的   虽然你还没有烧到flash中去   正常   不见得是硬件有问题或收发短接啦

jijiali 发表于 2013-1-29 10:33

版主也遇到过啊,但是你试过将你的发送端,接收端打出来,是高低电平吗?我的不是啊,就3.3V的高电平》想问问是哪里出现了问题呢?纠结一天了

jijiali 发表于 2013-1-29 10:55

本帖最后由 jijiali 于 2013-1-29 11:10 编辑

zhangmangui 发表于 2013-1-29 10:24 https://bbs.21ic.com/static/image/common/back.gif
嗯如果用示波器看发送和接收的波形的话就是高低高低的数据按一定的规律和波特率的速度进行传输的
关于 ...

我刚刚又试了一下,数据正常发送接收的时候,我有时候可以观察到高高低低的(正弦波????),会不会是示波器要设置什么触发之类的东西呢?

jlass 发表于 2013-1-29 11:12

jijiali 发表于 2013-1-29 10:55 static/image/common/back.gif
我刚刚又试了一下,数据正常发送接收的时候,我有时候可以观察到高高低低,会不会是示波器要设置什么触发 ...

你先自己调一下吧,理一理头绪,别急着问问题。思考很重要。:)

jijiali 发表于 2013-1-29 11:15

jlass 发表于 2013-1-29 11:12 static/image/common/back.gif
你先自己调一下吧,理一理头绪,别急着问问题。思考很重要。

恩,思考着的。越思考问题越多,想把串口弄好,哈哈。不过也可以学到东西

zhangmangui 发表于 2013-1-29 11:33

jijiali 发表于 2013-1-29 10:55 static/image/common/back.gif
我刚刚又试了一下,数据正常发送接收的时候,我有时候可以观察到高高低低的(正弦波????),会不会是 ...

刚我试了一下   波特率115200看到的都是方波

zhangmangui 发表于 2013-1-29 11:35

jijiali 发表于 2013-1-29 10:33 static/image/common/back.gif
版主也遇到过啊,但是你试过将你的发送端,接收端打出来,是高低电平吗?我的不是啊,就3.3V的高电平》想问 ...

检测串口短路自发自收如果合适在检查程序在线仿真查看寄存器的值

jijiali 发表于 2013-1-29 11:45

zhangmangui 发表于 2013-1-29 11:35 static/image/common/back.gif
检测串口短路自发自收如果合适在检查程序在线仿真查看寄存器的值 ...

这个活儿已经干过咯,都没问题。主要是示波器不太会。可以观察到在发送接收了。顺便问一句,我还想写个用FIFO功能实现2812直接向PC发送的测试程序。是不是也需要发送接收中断实现呢?看了些资料,感觉思路不清楚。
谢谢斑竹哦,还亲自测试一下!遇到我这种菜鸟,够为民请命。我会常来顶贴的,哈哈。

zhangmangui 发表于 2013-1-29 13:53

jijiali 发表于 2013-1-29 11:45 static/image/common/back.gif
这个活儿已经干过咯,都没问题。主要是示波器不太会。可以观察到在发送接收了。顺便问一句,我还想写个用 ...

interrupt void SCIRXINTA_ISR(void)   // SCI-A
{
        unsigned char i;         //ReceivedAChar;
        DINT;//关闭总中断

           // 数据接收
           //temp=SciaRegs.SCIFFRX.bit.RXFIFST;         //数据长度
    for(i=0;i<5;i++)
        {
                Receviced_data = SciaRegs.SCIRXBUF.all;
                //ReceivedAChar = SciaRegs.SCIRXBUF.all;
                //Receviced_data = ReceivedAChar;   //接收串口数据
                Receviced_data = '\0';
        }
          
        flag=1;                                  //表示接受完成
        SciaRegs.SCIFFRX.bit.RXFIFORESET=0;      //将FIFO指针复位为0
        for(i=0;i<20;i++); //延时
        SciaRegs.SCIFFRX.bit.RXFIFORESET=1;      //退出复位状态
           SciaRegs.SCIFFRX.bit.RXFFINTCLR = 1;   // 清除接收中断标志
    SciaRegs.SCIFFRX.bit.RXOVF_CLR = 1;      //清除溢出中断标志
        PieCtrl.PIEACK.all |= M_INT9;            //响应中断
        EINT;   //开总中断
}

interrupt void SCITXINTA_ISR(void)   // SCI-A
{
        unsigned char ReceivedAChar;
        DINT;//关闭总中断
       
        //自动侦测波特率处理
        if(SciaRegs.SCIFFCT.bit.ABD == 1)
           {
            SciaRegs.SCIFFCT.bit.ABDCLR = 1; //清除ABD
              SciaRegs.SCIFFCT.bit.CDC = 0; //禁止自动波特率侦测
              ReceivedAChar = SciaRegs.SCIRXBUF.all;
                SciaRegs.SCIFFRX.bit.RXFFINTCLR = 1;//清除中断标志位
                SciaRegs.SCIFFRX.bit.RXFIFORESET=0; //将FIFO指针复位为0
                SciaRegs.SCIFFRX.bit.RXFIFORESET=1; //退出复位状态
              if(ReceivedAChar == 'A')
                {        
                        Send_String_SCIA("right!");//        Autobaud
                        SciaRegs.SCIFFRX.bit.RXFFIENA = 1;// 使能SCIA FIFO接收中断
                        connect_right = 1;
                }       
              else
              {
                      Send_String_SCIA("wrong!");//        Autobaud
                        connect_right = 0;
                }
           }
       
        SciaRegs.SCIFFRX.bit.RXFFINTCLR = 1;//清除中断标志位
        PieCtrl.PIEACK.all |= M_INT9;   //响应中断
        EINT;   //开总中断
}

zhangmangui 发表于 2013-1-29 13:54

zhangmangui 发表于 2013-1-29 13:53 static/image/common/back.gif
interrupt void SCIRXINTA_ISR(void)   // SCI-A
{
        unsigned char i;         //ReceivedAChar;


我以前用过的程序看看能不能帮上你

zhangmangui 发表于 2013-1-29 13:56

这里我会想办法分享视频的到时候看看
https://bbs.21ic.com/icview-434831-1-1.html

jijiali 发表于 2013-1-29 15:54

zhangmangui 发表于 2013-1-29 13:56 static/image/common/back.gif
这里我会想办法分享视频的到时候看看
https://bbs.21ic.com/icview-434831-1-1.html

好的,不胜感激

jlass 发表于 2013-1-29 15:57

zhangmangui 发表于 2013-1-29 13:54 static/image/common/back.gif
我以前用过的程序看看能不能帮上你

授人以鱼不如授人以渔,你太直接了:curse:

jijiali 发表于 2013-1-29 16:11

jlass 发表于 2013-1-29 15:57 static/image/common/back.gif
授人以鱼不如授人以渔,你太直接了

哈哈。不急啊,这要取决于当事人对不?我不会照抄代码的。我只是参考思路,代码要自己一个一个地敲出来才行。我会多向各位请教的!

zhangmangui 发表于 2013-1-30 10:09

jlass 发表于 2013-1-29 15:57 static/image/common/back.gif
授人以鱼不如授人以渔,你太直接了

参考啊   
页: [1]
查看完整版本: 2812SCIA利用FIFO与PC机进行串口通信