-
赛元SC92F8463B的SSI中使用UART1与其他芯片通信问题
代码如下,程序没有报错,想实现的目的是,通过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时钟 }
164浏览量 3回复量 关注量 -
赛元仿真时,鼠标移动到变量上就发生程序复位 sos
Keil C51版本9.60 烧录器 SC Link Pro 1.18 keil 插件版本:SOC_KEIL_Setuup V1.35(LIB0D25) 赛元LB1010-92F8462B开发板,官方触摸例程 仿真时,如果鼠标移动到变量上就会发生复位,请问应该怎么解决? 另外,哪个寄存器可以查看复位原因?
1142浏览量 0回复量 关注量