STC单片机双串口使用设置与例程

发布者:才富五车330最新更新时间:2014-12-29 来源: 51hei关键字:STC单片机  双串口  使用设置 手机看文章 扫描二维码
随时随地手机看文章
在用STC_60s2单片机进行双串口同时收发时,要注意一些容易配置错误的地方。AUXR寄存器有很多功能。在对其中的位置位和复位时,很可能在不同的地方多次进行,应该使用AUXR |= bitx 和AUXR &=~bitx 语句进行对某一位的置位和复位。这样就不会影响其他功能位了。
 
附上程序: 
 
 #include
 
//sfr AUXR = 0x8E;
 
#define uchar unsigned char//
 
#define uint unsigned int //
 
#define BUADRATE 38400
 
#define FOSC 24000000
 
#define S2RI 0x01
 
#define S2TI 0x02
 
sbit LED1 = P2^7;
 
uchar ReceBuf[200]={0};
 
bit finishflag = 0;
 
uchar revcnt = 0;
 
uchar startflag = 0;
 
void InitUART1(void) //baudrate 115200
 
{
 
TMOD = 0x20;
 
SCON = 0x50;
 
TH1 = 0xf3; //115384
 
TL1 = TH1;
 
PCON = 0x80; //SMOD = 1;
 
ES = 1;
 
TR1 = 1;
 
}
 
void InitUART2() //baudrate 38400
 
{
 
S2CON = 0x50; //8-Bit 串口模式 允许接收
 
BRT = 236; //[24000000/(256-236)]/32 = 37500 error2.34%
 
AUXR |= 0x14; //BRTR=1使能BRT BRTx12=1 不分频 (AUXR 第二次出现,不能用‘=’应该用“|=”)
 
IE2 = 0x01; //enable UART2 interrupt
 
AUXR1 = 0; //UART2 TXD->P1.3 RXD->P1.2
 
}
 
void SendOneByte(unsigned char c)
 
{
 
SBUF = c;
 
while(!TI);
 
TI = 0;
 
}
 
void U1SendString(uchar *dat)
 
{
 
while(*(dat)!='\0')
 
{
 
SendOneByte(*dat);
 
dat ;
 
}
 
}
 
void U2SendOneByte(unsigned char c)
 
{
 
S2BUF = c;
 
while(!(S2CON & S2TI));
 
S2CON &= ~S2TI;
 
}
 
void U2SendString(uchar *dat)
 
{
 
while(*(dat)!='\0')
 
{
 
U2SendOneByte(*dat);
 
dat ;
 
}
 
}
 
void main()
 
{ uchar temp = 0x01;
 
AUXR = AUXR|0x40; // T1, 1T Mode AUXR 第一次出现
 
InitUART1();
 
EA = 1;
 
SendOneByte(0xaa);
 
SendOneByte(0xbb);
 
SendOneByte(0xcc);
 
InitUART2();
 
SendOneByte(0xdd);
 
while(1)
 
{// temp = ~temp;
 
// U2SendOneByte(temp);
 
if(finishflag)
 
{ LED1 = 1;
 
finishflag = 0;
 
U1SendString(ReceBuf);
 
LED1 = 0;
 
}
 
}
 
}
 
void UART1ISR(void) interrupt 4
 
{
 
if(RI)
 
{
 
RI = 0;
 
//add your code here!
 
}
 
else
 
TI = 0;
 
}
 
void UART2ISR(void) interrupt 8
 
{ static bit flash=0;
 
static uchar i=0;
 
static uchar endcnt = 0;
 
uchar tempdat = 0;
 
if(S2CON & S2RI)
 
{
 
S2CON &= ~S2RI;
 
if(~finishflag)
 
{
 
flash=~flash;
 
// LED1 = flash;
 
tempdat = S2BUF;
 
if(tempdat=='$')
 
{
 
startflag = 1;
 
}
 
////////////////////////////////////////////////////////////
 
if(startflag)
 
{
 
ReceBuf[i] = tempdat;
 
i ;
 
////////////////////////////////////////////////////////////
 
if(i==6&&ReceBuf[3]!='R'&&ReceBuf[5]!='C') //判断是不是$GPRMC帧
 
{
 
startflag = 0;
 
i = 0;
 
}
 
else if(ReceBuf[i-1]=='*')
 
{
 
endcnt ;
 
if(endcnt==2)
 
{
 
revcnt = i;
 
endcnt = 0;
 
i = 0;
 
finishflag = 1;
 
startflag = 0;
 
}
 
}
 
else ;
 
}
 
}
 
else ;
 
}
 
else
 
S2CON &= ~S2TI;
 
}
 
关键字:STC单片机  双串口  使用设置 引用地址:STC单片机双串口使用设置与例程

上一篇:根据FAT表研究MSP430内存对齐问题
下一篇:单片机写延时程序的几种方法

推荐阅读最新更新时间:2024-03-16 13:50

STC12C5A16S2串口使用
stc双串口的使用: MCU:STC15C5A16S2 时钟:11.0592 S2SMOD=1,BRTX12=1; 串口波特率:9600 #include stc12c5as2.h #define uint8 unsigned char #define uint16 unsigned int #define Fclk 11059200UL /*使用22.1184M晶体*/ #define BitRate 9600UL /*波特率定义为9600*/ #define RELOAD_COUNT 0Xb8 volatile uint8 Buf ={0x00,0x00,0x00,0x00};// volati
[单片机]
STC12C5A60S2串口通信
STC12C5A60S2单片机是一款功能比较强大的单片机,它拥有两个全双工串行通信接口,串口1的功能及操作与传统51单片机串行口相同;特殊的是STC12C5A60S2单片机内部有一个独立波特率发生器,串口1可以使用定时器1作为波特率发生器,也可以使用独立波特率发生器作为波特率发生器;而串口2只能使用独立波特率发生器作为波特率发生器。 下面是一段双串口通信的程序: /*********************************************************************** 时间:2012.11.24 芯片:STC12C5A60S2 晶振:22.1184MHz 波特率:9600bps 引
[单片机]
基于STC单片机的经济型步进电机控制系统
步进电机是工业控制中应用十分广泛的一种电动机,它能将数字信号直接转换成角位移或线位移,驱动速度和指令脉冲能严格同步,具有较高的定位精度,控制系统成本低廉,在经济型数控机床等领域应用广泛。这里针对电磁干扰较强以及要求低成本应用的场合,采用超强抗干扰、小巧低功耗的工业级STC12C系列单片机,充分利用单片机内部的硬件资源,设计实用的步进电机控制和驱动系统。 1 控制系统总体方案设计 系统功能原理示意图如图1所示。 在该系统中由单片机直接输出电机的各相控制脉冲序列,光耦进行必要的光电隔离,采用分立元件构成功率.MOSFET管驱动电路,带动电机转动。键盘接口与 LED显示功能由具有SPI串行接口功能的ZLG7289实现。既可使用按键
[电源管理]
基于<font color='red'>STC单片机</font>的经济型步进电机控制系统
STM32组合设备实现USB转串口
串口及其中断初始化 void USART1Init(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
[单片机]
pid调节器的使用操作与参数设置
  pid调节器的使用操作与调整   PID调节器的使用操作一般包括以下几个步骤:   设置目标值:确定需要控制的目标值,例如温度、压力、流量等。   连接控制器:将PID控制器连接到被控对象上,例如温度传感器、压力传感器、流量计等。   调整参数:根据实际控制效果和要求,调整PID控制器的三个参数,即比例系数、积分时间和微分时间。   启动控制器:启动PID控制器,并观察控制器输出量的变化和控制效果。   调整控制器:根据实际控制效果和要求,对PID控制器的参数进行进一步调整和优化,以达到最佳的控制效果。   PID调节器的参数调整是一个非常重要的过程,可以通过以下步骤进行:   初始设置:根据被控对象的特性和控制要求,设置
[嵌入式]
基于STC单片机的交通信号指示灯的设计
随着我国经济社会快速发展,城市机动车保有量快速增长,在进行基础设施建设以改善中心城区的交通同时,仍然存在道路体系未建全,功能未理顺,公交系统不发达等问题,交通矛盾突出。而我国的交通指示灯使用定周期控制和各路口各自的独立控制方法,在解决这些问题时效果并不是很好。 随着电子信息的发展,找到一种更为合理的的控制方法尤为重要。目前,控制交通信号灯的方法很多,一般为用89C51单片机控制。但是随着芯片的发展,89C51单片机逐渐地退出了历史的舞台。 文中使用STC89C51为核心芯片,设计了交通信号灯指示系统。 1 系统的总体设计 1.1 总体设计思想 本系统设计的交通信号指示灯,可以控制主道和支道各红绿黄3个LED。当主道
[单片机]
基于<font color='red'>STC单片机</font>的交通信号指示灯的设计
基于STC单片机和传感器的LED智能照明控制系统
   0 引言   我国是一个资源紧缺的国家,但在日常的生活中,人们并没有意识到这一点。以室内照明为例,在很多公共场合中都采用手动开关,经常出现没有及时关灯的现象,从而造成能源的浪费,也会缩短灯具的使用寿命。针对这一现象,有必要研究一种智能照明控制系统。该系统利用智能传感器感应室外亮度来自动调节灯光,以保持室内恒定照度,既能使室内有最佳照明环境,又能达到节能的效果。   LED 被称为第四代绿色光源,LED 的发光器件是冷光源,具有节能、环保、寿命长、体积小等特点。LED 光的单色性好,光谱窄,无需过滤,可直接发出有色可见光。在相同的照明情况下,LED 灯耗电量为白炽灯的十分之一,荧光灯的二分之一,是未来照明的发展趋势。  
[单片机]
基于<font color='red'>STC单片机</font>和传感器的LED智能照明控制系统
ubuntu下在连接arm开发板的情况下,使用无线网卡上网设置
一台双网卡电脑拥有两个网关是不可能的,因为默认网关(default gateway)只能是一个。给服务器安装两块网卡,分别设置不同的ip和网关(内网和外网),外网的通过外网网卡来访问,内网的通过内网网卡来访问,似乎实现起来很简单,但有些问题,因为默认网关(default gateway)只能是一个! 解决的办法就是: 1、将其中一块网卡(如外网)设置默认网关,另外一块网卡eth1不设置网关 sudo vi /etc/network/interfaces # The loopback network interface auto lo iface lo inet loopback # The primary network
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved