代码如下,程序没有报错,想实现的目的是,通过UART1发送A5 5A 00H给另外的芯片,发送成功会有声音响起,但是没有反应,烦请路过的大佬帮忙看看,不胜感激!
#include "Function_Init.H"
#include "stdio.H"
//选择三合一模式:
#define Uart1 0
#define TWI 1
#define SPI 2
#define SSI_Mode Uart1
void Uart1_Init(uint Freq,unsigned long int baud);
void UART1_SendByte(unsigned char dat);
void Delay_ms(unsigned int ms);
bit Uart1SendFlag = 0; //Uart发送中断标志位
bit Uart1ReceiveFlag = 0; //Uart接收中断标志位
// 主函数
void main(void)
{
// 初始化UART1
Uart1_Init(20,460800);
// 延时确保硬件稳定
Delay_ms(100);
// 发送控制指令 A5 5A 00 播放第一首歌曲
UART1_SendByte(0x00); //唤醒信号
Delay_ms(100);
UART1_SendByte(0xA5);
Delay_ms(100);
UART1_SendByte(0x5A);
Delay_ms(100);
UART1_SendByte(0x00);
Delay_ms(100);
while(1)
{
// 主循环中可以添加其他功能
}
}
void Uart1_Init(uint Freq,unsigned long int baud)
{
P2CON &= 0xFC; //TX/RX设置为输入带上拉
P2PH |= 0x03;
OTCON |= 0xC0; //串行接口SSI选择Uart1通信
SSCON0 = 0x50; //设置通信方式为模式一,允许接收
SSCON1 = Freq*1000000/baud; //波特率低位控制
SSCON2 = (Freq*1000000/baud)>>8; //波特率高位控制
IE1 |= 0x01; //开启SSI中断
EA = 1;
TMCON = 0X07; //------111 ;Timer0、Tiemr1和Tiemr2选择时钟Fsys
TMOD |= 0x20; //0010 0000;Timer1设置工作方式2
TL1 = 0xFC; //溢出时间:时钟为Fsys,则240*(1/Fsys)=20us;
TH1 = 0xFC;
TR1 = 0;
ET1 = 1;//定时器1允许
TR1 = 1;//打开定时器1
}
void Uart1_Int() interrupt 7 //Uart1中断函数
{
if(SSCON0&0x02) //发送标志位判断
{
SSCON0 &= 0xFD;
Uart1SendFlag = 1;
}
if((SSCON0&0x01)) //接收标志位判断
{
SSCON0 &= 0xFE;
Uart1ReceiveFlag = 1;
}
}
void UART1_SendByte(unsigned char dat)
{
TB8 = 0; // 第9位数据设为0 (通常用于奇偶校验,这里不用)
SBUF = dat; // 将数据放入发送缓冲区
while(!TI); // 等待发送完成
TI = 0; // 清除发送中断标志
}
// 简单延时函数
void Delay_ms(unsigned int ms)
{
unsigned int i, j;
for(i = 0; i < ms; i++)
for(j = 0; j < 2000; j++); // 调整循环次数适应20MHz时钟
}
|