void UartInit(void) //9600bps@11.0592MHz
{
PCON &= 0x7f; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
BRT = 0xDC; //设定独立波特率发生器重装值
AUXR |= 0x04; //独立波特率发生器时钟为Fosc,即1T
AUXR |= 0x01; //串口1选择独立波特率发生器为波特率发生器
AUXR |= 0x10; //启动独立波特率发生器
IP = 0X10; //PS = 1;串口1中断为最高优先级中断
ES = 1; //允许串口中断
EA = 1; //开总中断
}
void UartInit2(void) //9600bps@11.0592MHz
{
AUXR &= 0xf7; //波特率不倍速
S2CON = 0x50; //8位数据,可变波特率
BRT = 0xDC; //设定独立波特率发生器重装值
AUXR |= 0x04; //独立波特率发生器时钟为Fosc,即1T
AUXR |= 0x10; //启动独立波特率发生器
IE2=0x01; //允许串口2中断
EA=1; //开总中断
}
void sendoneByte(uchar c) //发送单字节数据
{
IE2=0x00; //关闭串口2中断
S2BUF=c;
while(!(S2CON&S2TI));//等待发送完毕
S2CON&=~S2TI; //软件清零
IE2=0x01;//允许串口中断
}
void sendString(uchar *aaa)
{
while(*aaa!='\0')
{
sendoneByte(*aaa);
aaa++;
}
}
void Com_Service(void) interrupt 4
{
uchar j;
if(RI)
{
RI=0;
for(j=0;j<11;j++)
{
rcv_dat[j]=SBUF;
}
Receive_Bflag = 1;
ES=0;//关中断,接收数据后ES=1 开中断
}}
//********************************************//
// 串口2中断服务
//********************************************//
void Com2_Service(void) interrupt 8
{
if( Receive_Bflag == 1)
{
S2CON=S2CON&0xFE;
sendString(rcv_dat);
ES=1;
}
else
{
S2CON=S2CON&0xFE;
}
}
void main()
{
//LCD_INIT();
UartInit();
UartInit2();
EA=1;//开总中断
while(1);
}
串口2 收不到数据
可以加您QQ吗?我的710730184
追答没有计算你的参数,但是9600bps的速度,无需选用1T模式,常规12T就好了
追问那我其他子函数部分存在错误码?
大神 帮帮忙吧
大神帮忙修改下用STC12C5A60S2 单片机串口1接收11个字节的数据然后将这...
串口1单独使用时,可以用独立波特率发生器也可使用定时器做波特率发生器,在串口1和串口2同时使用时,串口1就只能使用定时器做波特率发生器。 参看例程初始化两个串口
stc12c5a60s2型号单片机串口通信和定时器中断问题
按照你的说法,串口1接第一次收到数据后启动定时器开始计时,并把每次接收的数据放在一个临时的缓存里,当定时器时间到的时候开始串口2的发送程序。个人感觉给串口1的数据里定义一个起始位和结束位更好,这样就不用定时器了
stc12c5a60s2这款单片机的ad功能,测5v电压的话理论上十位ad可以达到1\/...
0x03就是00000011将ADC_RES&0x03就是将ADC_RES与0x03 ,这样就是取ADC_RES低二位,作为10位ad的高两位,乘256转成10进制,然后加上低八位ADC_RESL,就是实际采集数据转化的10ad值
求各位谁有STC12C5A60S2单片机第二串口的程序
void UartInit(void)\/\/4800bps@11.0592MHz { AUXR &= 0xf7;\/\/波特率不倍速 S2CON = 0x50;\/\/8位数据,可变波特率 BRT = 0xB8;\/\/设定独立波特率发生器重装值 AUXR |= 0x04;\/\/独立波特率发生器时钟为Fosc,即1T AUXR |= 0x10;\/\/启动独立波特率发生器 } 串口2查询方式函数,注意不要开中断...
STC12C5A60S2单片机的串口中断问题求助
还是那个中断优先级寄存器没有设置好,至少要设置IP,IP2寄存器,将两个串口设置成高优先级,而将定时器0设置成低优先级。另外,STC12C5A60S2串口的波特率可以设置得很高的,尽量用高波特发送,可以减少发送时间,完全可以设置成38400的,甚至57600,都没有问题的。
单片机STC12C5A60S2的串口2读取数据原理?
这就是标准的中断方式获取数据啊。当对方向单片机串口2发送数据时,单片机接受到数据就会进入串口2中断(向量号为8)。不过这里在中断添加了一点应用层的内容,也就是约定必须首字节为FDh并且长度为6才是有效的数据帧,其它情况下收到的数据会丢弃。
51单片机程序问题 stc12c5a60s2 的a\/d转换问题..
1.转换的引脚由ADC_CONTG的低3位CHS2、CHS1和CHS0控制,三位二进制能表示0~7八个数,与P1口一一对应。ADC的结构决定了它一次只能转换一个口,但是STC的转换速度达到10万次\/秒,依次转换P1.0和P1.1与同时转换差别不大。设置P1.0时,ch=0x00.设置P1.1时,ch=0x01.2.是按照一个字节读的...
stc12c5a60s2 双串口传输漏字符
您好,ASCII码在单片机中也是用16进制来表示的,只是解码后显示的是字符,你要是随便发一个字符,串口调试助手选择字符显示接收就可以显示一个字符出来(可能我们不认识这个字符)。发送一个字符串就是不停的发送直到发送完毕,51单片机有自己的串行发送端口P3.0和P3.1端口,但是它是一个字节一个字节...
stc12c5a60s2串口发送
看STC-ISP软件中的串口助手接收的字符,可以看出STC12C5A60S2单片机的串口的发送是正常的。而且重复不断发送一个字符串。但不知道,你想问什么问题?而且单片机还与ESP8266进行串口通信。
STC12C5A60S2单片机的输入输出问题
标准51单片机的IO口是双向的,无需进行端口方向(输入输出)配置,直接使用P0-Px,即可操作整排端口,如果是单个端口操作,建议先进行位定义:如P0.3作为LED sbit LED=P0^3; 位定义的分号不能少。后续对 LED赋值即可。