最近在学UART串口
通信。我想通过51
单片机通过二线串口通讯控制音乐播放器模块。
选用的是JQ8400模块。
通过下载在单片机的程序,然后通过二线串口控制语音模块。程序如下(然而并没有驱动模块播放。。。)
#include <reg52.h>
void UART1_SendByte(unsigned char dat);
void ConfigUART(unsigned int baud);
void Music_play();
void Flash_sw
tich();
void delay(unsigned int i);
void main()
{
EA = 1; //使能总中断
ConfigUART(9600);
Flash_swtich();
Music_play();
while (1);
}
/* 串口配置函数,baud-通信波特率 */
void ConfigUART(unsigned int baud)
{
SCON = 0x50; //配置串口为模式 1
TMOD &= 0x0F; //清零 T1 的控制位
TMOD |= 0x20; //配置 T1 为模式 2
TH1 = 256 - (11059200/12/32)/baud; //计算 T1 重载值
TL1 = TH1; //初值等于重载值
ET1 = 0; //禁止 T1 中断
ES = 1; //使能串口中断
TR1 = 1; //启动 T1
}
void UART1_SendByte(unsigned char dat)
{
SBUF = dat;
while(!TI);
TI = 0;
delay(1000);
// SBUF=dat; //将数据写入到串口缓冲
// sending=1; //设置发送标志
// while(sending); //等待发送完毕
}
void Music_play()
{
UART1_SendByte(0xAA);
UART1_SendByte(0x02);
UART1_SendByte(0x00);
UART1_SendByte(0xAC);
}
void Flash_swtich()
{
UART1_SendByte(0xAA);
UART1_SendByte(0x0B);
UART1_SendByte(0x01);
UART1_SendByte(0x02);
UART1_SendByte(0xB8);
}
void delay(unsigned int i)
{
unsigned char j;
for(i;i>0;i--)
for(j=200;j>200;j--);
}
/* UART 中断服务函数 */
void InterruptUART() interrupt 4
{
unsigned char temp;
if (RI) //接收到字节
{
RI = 0; //手动清零接收中断标志位
temp = SBUF;
}
if (TI) //字节发送完毕
{
TI = 0; //手动清零发送中断标志位
}
}
我的程序有问题。所以请问各位大虾多多指点。。。
一周热门 更多>