❶ STC单片机串口通信为什么上电后会多发出一串字节,后面的数据就一切正常了
STC单片机串口通信上电后会多发出一串字节,后面的数据就一切正常了。
出现这种情况估计是你的单片机直接连到写入器上了,由编程器直接供电,而单片机程序启动阶段没有加延时。写入器连接到USB口会有一个初始化过程,串口有数据输出,被单片机误接收了。
解决方法:
1、单片机程序启动阶段加1到2秒延时,躲过初始化数据。
2、单片机串口实行队列接收,只有整个队列符合特征才发送。串口助手发送端按队列发送。
3、单片机单独供电。
❷ stc单片机有哪些优缺点
stc单片机的优点:
1、下载烧录程序用串口方便好用,容易上手,拥有大量的学习资料及视频,最着名的要属于昌晖仪表网的那个视频了,好多对单片机有兴趣的朋友都是通过这个视频入门的,同时具有宽电压:5.5~3.8V,2.4~3.8V, 低功耗设计:空闲模式,掉电模式(可由外部中断唤醒)。
2、STC单片机具有在应用编程,调试起来比较方便;带有10位AD、内部EEPROM、可在1T/机器周期下工作,速度是传统51单片机的8~12倍,价格也较便宜。
3、4通道捕获/比较单元,STC12C2052AD系列为2通道,也可用来再实现4个定时器或4个外部中断,2个硬件16位定时器,兼容普通8051的定时器。4路PCA还可再实现4个定时器,具有硬件看门狗、高速SPI通信端口、全双工异步串行口,兼容普通8051的串口。
4、同时还具有先进的指令集结构,兼容普通8051指令集。
❸ STC单片机串口通信问题!
只能说提醒,
你用的芯片是stc12系列的芯片,但是你的头文件是reg51.h
你这样编译都能通过的吗?
reg51.h里面是标准51的寄存器,是只有1个串口的,
建议你去stc的官网把stc12系列的头文件下载下来进行包含,如果你的程序没错的话,应该就可以用了
欢迎追问
❹ STC单片机的SPI通信,主机发送数据给从机正常,然后从机返回主机的数据第一位有时候不正常
SPI是通讯时,主机发送一个数据后,从机也会返回一个数据的,这相当于一个移位寄存器,这边数据进那边数据就被移出来,但被移出来的这个数据是随机的。除非是从机主动发送数据给主机,若这时主机接收不正确,那就是接收那边的时序写错了吧,可以上传截图进一步分析
❺ STC 双串口单片机如何两串口相互通信
接线:
RXD--TXD2
TXD--RXD2
之后就初始化,两个单片机的波特率要一样。之后就一发一收了,可以用中断方式接收。
❻ 什么是STC单片机
STC系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机。
它是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K/S),针对电机控制,强干扰场合。
这种工艺的存储器用户可以用电的方式瞬间擦除、改写。而且STC系列单片机支持串口程序烧写。显而易见,这种单片机对开发设备的要求很低,开发时间也大大缩短。写入单片机内的程序还可以进行加密。
(6)stc单片机通信扩展阅读
单片机技术的开发
(1)CPU开发。
开发单片机中的CPU总线宽度,能够有效完善单片机信息处理功能缓慢的问题,提高信息处理效率与速度,开发改进中央处理器的实际结构,能够做到同时运行2-3个CPU,从而大大提高单片机的整体性能。
(2)程序开发。
嵌入式系统的合理应用得到了大力推广,对程序进行开发时要求能够自动执行各种指令,这样可以快速准确地采集外部数据,提高单片机的应用效率。
(3)存储器开发。
单片机的发展应着眼于内存,加强对基于传统内存读写功能的新内存的探索,使其既能实现静态读写又能实现动态读写,从而显着提高存储性能。
(4)计算机开发。
进一步优化和开发单机片应激即分析,并应用计算机系统,通过连接通信数据,实现数据传递。
❼ stc单片机的spi通信
可能原因1: SPI 线路与 继电器 过于靠近,继电器动作时产生的电磁辐射,或传导 到SPI 通讯线路上,导致的通讯异常。
可能原因2: SPI设备的电源电路去耦效果不佳(滤波电容参数过小),或电源线路过细(包括 电源线、地线回路,回路指从供电源头进来到供电源头回去的线路)。
可能原因3: 继电器驱动电路没有 反向电动势 吸收电路的设计,续流二极管是其中一种设计电路。
❽ stc12c5a60s2单片机第二串口通讯问题(可以发送不能接接收)
如果确定硬件没有问题,先用查询方式测试接收是否正常(标志位是S2CON的最低位)。如果查询方式接收正常,再检查中断相关的设置(串口2中断允许IE2的最低位置位了没有,时钟源有没有在运行,波特率设置是否正确,中断入口函数是不是对应于矢量8)
❾ STC单片机如何设置通信引脚不是上拉
STC单片机不能设置通信引脚不是上拉,只能设置往上拉,不然就是默认下拉
❿ STC单片机 串口通信 奇偶校验
1、51单片机SCON=0xDA,工作在方式3.(方式2也可以)
串口 1 模式 3:
波特率是可变的,其它和模式2 相同
11 位数据通过TxD/P3.1 发送,通过RxD/P3.0 接收。一帧数据包含一个起始位(0),8 个数据位(低位在
先),一个可编程的第9 位,和一个停止位(1)。发送时,第9 位数据位来自特殊功能寄存器SCON 的
TB8 位.接收时,第9 位进入特殊功能寄存器SCON 的RB8 位。
SMOD
串口1波特率在模式3 = ( 2 / 32 ) x BRT独立波特率发生器的溢出率
当SMOD = 0时,串口1波特率 = BRT 独立波特率发生器的溢出率 / 32,
当SMOD = 1时,串口1波特率 = BRT 独立波特率发生器的溢出率 / 16,
BRT独立波特率发生器的溢出率 = Fosc/12/( 256 - BRT ),当BRTx12 = 0时,
BRT独立波特率发生器的溢出率 = Fosc / ( 256 - BRT ),当BRTx12 = 1时
TB8:发送时校验位,可以奇校验或偶校验(直接置0或1),然后再发送。
RB8:接收时校验位,判断接数据是否正确。
2、程序
/*****************************************
*串口1中断
*****************************************/
void RXD_Int_Service() interrupt 4
{
uint8 ch;
if(RI)
{
RI=0;
Usart1.RxdDly=6; //超过0.3S清空计数
Usart1.RxdBuf[Usart1.RxdCnt]=ch;
Usart1.RxdCnt++;
if(Usart1.RxdCnt>=10)
{
Usart1.RxdTrue=1; //接收正确。
Usart1.RxdNum=Usart1.RxdCnt;
Usart1.RxdCnt=0;
}
}
if(TI)//防止发送中断
{
TI=0;
}
}
void Timer0_InSevice() interrupt 1
{
TH0=0xdc; //定义50ms 正常值0xfe 0x0c ,修正值:0xfe 0x16;
TL0=0x00; //11.0592MHz晶振
if(Usart1.RxdDly)
{
Usart1.RxdDly--; //0.3S没有接收到数据,清0计数。
if(Usart1.RxdDly==0)
{
Usart1.RxdCnt =0; //记数清0.
}
}
}