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

[复制链接]
 楼主| 某月要坚持 发表于 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
 楼主| 某月要坚持 发表于 2015-7-22 10:21 | 显示全部楼层
再顶求助
外方爱 发表于 2016-1-18 17:42 | 显示全部楼层
调试成功了?
兴隆 发表于 2016-1-19 05:35 | 显示全部楼层
没看程序,就9600速率,就不能传音频,数字才9k,音频带宽太慢。标准电话3k的带宽,数字化后64k(没有压缩)马速率。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

10

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部