打印
[MSP430]

UART红外通信收发,,不确定自己思路对不对,,求助!

[复制链接]
2263|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
某月要坚持|  楼主 | 2015-7-21 19:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
13年全国电设的题目,红外通信。
发射端:硬件进行音频信号的编码,输入至单片机,但单片机需要将音频信号与采集到的温度信号复用,输出给红外发射管驱动电路。
接收端:红外接收模块接收数据,单片机将音频信号与温度信号区分开,用LCD屏显示温度,音频信号输出值后级解码电路,喇叭播放音乐

在下初学UART自己思路如下,不知道对不对,求教ing

发射端单片机,UART接收编好码的音频信号,写入Rx_FIFO(接收缓冲区,大小设为8)。再用UART发送,Tx_FIFO发送缓冲区大小设为10,Tx_FIFO[0]写入温度信号,后Tx_FIFO[1]~Tx_FIFO[8]写入音频信号,最后一位Tx_FIFO[10]定义0xFF,做标志位。

接收端单片机,UART接收信号,写入Rx_FIFO(接收缓存区,大小设为10),Rx_FIFO[0]为温度信号,Rx_FIFO[1]~Rx_FIFO[8]为音频信号,IO口依次输出八个八位高低电平给后级解码电路。

不确定这样的思路可以吗?等于我是把接受发送缓存区大小设为了10,相当于10个一组收发数据,第一位温度,二至八位为音频信号,最后一位为结束标志

然后收发速度频率之类的我都很没有概念,,,不清楚需要设成什么,按照书上的SMCLK为波特率源,波特率设为9600,可以吗?

相关帖子

沙发
某月要坚持|  楼主 | 2015-7-21 19:24 | 只看该作者
部分代码如下

//红外发射管发送端单片机,接收编码完成的音频信号
void UART_OnRx(void)
{
        unsigned char Temp;
        static unsigned int i;
        //接收编码完成的音频信号,调用FIFO库函数,将音频信号写入Rx_FIFO
        Temp_R=UCA0RXBUF;
        Rx_FIFO_WriteChar(Temp_R);
        //将Rx_FIFO中的数据读入数组
        Rx_FIFO_ReadChar(&Temp);
        Music[i]=Temp;//Music[]音频信号数组,八位
        i++;
        if(i=8)
                i=0;
}

//红外发射管发送端单片机,将音频信号与温度复用,发送
void UART_OnTx(void)
{
        unsigned char Temp;
        static unsigned int i;
        //将温度、音频信号写入Tx_FIFO
        if (i==0)
                Tx_FIFO_WriteChar(TMPRT_T);//调用FIFO库函数,TX_FIFO[0]写入温度信号
        else if(i==9)
        {
                Tx_FIFO_WriteChar(END);//TX_FIFO[9]最后一位写入结束标志位
        }
        else
        {
                Tx_FIFO_WriteChar(Music[i-1]);//调用FIFO库函数,TX_FIFO[1]~TX_FIFO[8]写入音频信号
        }
        i++;
        if(i==10)
                i=0;

        //将发送FIFO中的数据读入发送缓存
        if(Tx_FIFO_DataNum>0)
        {
                Tx_FIFO_ReadChar(&Temp);//调用FIFO库函数,将发送FIFO中的数据读入发送缓存
                UCA0TXBUF= Temp;
                //发送完最后标志位整体清空
                if(Temp=END)
                {
                        Rx_FIFO_Clear();
                        Tx_FIFO_Clear();
                }
        }
}

使用特权

评论回复
板凳
某月要坚持|  楼主 | 2015-7-21 19:24 | 只看该作者
//接收端单片机区分音频信号与温度
void UART_OnRx(void)
{
        unsigned char Temp_R,Temp;
        unsigned int n;
        static unsigned int i;

        //将数据从缓存器里读进Rx_FIFO
        Temp_R=UCA0RXBUF;
        if(Temp=END)
                Rx_FIFO_Clear();
        else
        {
        Rx_FIFO_WriteChar(Temp_R);

        //将数据从Rx_FIFO中读出并区分音频信号与温度
        if (i==0)
                TMPRT_R=Rx_FIFO[0];
        else
        {
                //P1.4依次输出八位二进制数
                Temp=Rx_FIFO[i];
                for(n=0;n<8;n++)
                {
                if (Temp&BIT7==1)
                        P1OUT=BIT4;
                else
                        P1OUT&=~BIT4;
                Temp=Temp<<1;
                }
        }
        i++;
        if(i=9)//结束标志位不会进入i++,固只到9
                i=0;
        }
}

使用特权

评论回复
地板
某月要坚持|  楼主 | 2015-7-22 00:33 | 只看该作者
自顶~~~求助!!!

上面程序中的以下函数都是FIFO的库函数
Tx_FIFO_WriteChar():向Tx_FIFO(发送FIFO)中写一字节数据
Tx_FIFO_ReadChar():从Tx_FIFO(发送FIFO)中读一字节数据
Tx_FIFO_Clear():复位FIFO
Rx_FIFO_WriteChar:向Rx_FIFO(接收FIFO)中写一字节数据
Rx_FIFO_ReadChar:从Rx_FIFO(接收FIFO)中读一字节数据
Rx_FIFO_Clear():复位FIFO

使用特权

评论回复
5
某月要坚持|  楼主 | 2015-7-22 10:21 | 只看该作者
再顶求助

使用特权

评论回复
6
外方爱| | 2016-1-18 17:42 | 只看该作者
调试成功了?

使用特权

评论回复
7
兴隆| | 2016-1-19 05:35 | 只看该作者
没看程序,就9600速率,就不能传音频,数字才9k,音频带宽太慢。标准电话3k的带宽,数字化后64k(没有压缩)马速率。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

10

帖子

0

粉丝