最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

STC15W和STC15F系列单片机串口1通信

来源:动视网 责编:小OO 时间:2025-10-05 18:47:21
文档

STC15W和STC15F系列单片机串口1通信

/*************功能说明**************双串口全双工中断方式收发通讯程序。通过PC向MCU发送数据,MCU收到后通过串口把收到的数据原样返回.******************************************/#defineMAIN_Fosc11059200L//22118400L//定义主时钟#include"STC15Fxxxx.H"#defineBaudrate19600L#defineUART1_BUF_LENGTH32u8TX1_Cnt;//
推荐度:
导读/*************功能说明**************双串口全双工中断方式收发通讯程序。通过PC向MCU发送数据,MCU收到后通过串口把收到的数据原样返回.******************************************/#defineMAIN_Fosc11059200L//22118400L//定义主时钟#include"STC15Fxxxx.H"#defineBaudrate19600L#defineUART1_BUF_LENGTH32u8TX1_Cnt;//


/*************功能说明**************

双串口全双工中断方式收发通讯程序。

通过PC向MCU发送数据, MCU收到后通过串口把收到的数据原样返回.

******************************************/

#define MAIN_Fosc11059200L // 22118400L//定义主时钟

#include"STC15Fxxxx.H"

#defineBaudrate19600L

#defineUART1_BUF_LENGTH32

u8TX1_Cnt;//发送计数

u8RX1_Cnt;//接收计数

bitB_TX1_Busy;//发送忙标志

u8 idata RX1_Buffer[UART1_BUF_LENGTH];//接收缓冲

voidUART1_config(u8 brt);// 选择波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer1做波特率.

void PrintString1(u8 *puts);

void delay(int t)

{

int i,j;

for(i=0;i<1000;i++)

for(j=0;j}

//========================================================================

// 函数: void main(void)

// 描述: 主函数。

// 参数: none.

// 返回: none.

// 版本: VER1.0

// 日期: 2014-11-28

// 备注:

//========================================================================

void main(void)

{

P0M1 = 0;P0M0 = 0;//设置为准双向口

P1M1 = 0;P1M0 = 0;//设置为准双向口

P2M1 = 0;P2M0 = 0;//设置为准双向口

P3M1 = 0;P3M0 = 0;//设置为准双向口

P4M1 = 0;P4M0 = 0;//设置为准双向口

P5M1 = 0;P5M0 = 0;//设置为准双向口

P6M1 = 0;P6M0 = 0;//设置为准双向口

P7M1 = 0;P7M0 = 0;//设置为准双向口

UART1_config(1);// 选择波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer1做波特率.

EA = 1;//允许总中断

PrintString1("STC15F2K60S2 UART1 Test Prgramme!\

\

");//SUART1发送一个字符串

while (1)

{

//PrintString1("STC15F2K60S2 UART1 Test Prgramme!\

\

");//SUART1发送一个字符串

}

}

//========================================================================

// 函数: void PrintString1(u8 *puts)

// 描述: 串口1发送字符串函数。

// 参数: puts: 字符串指针.

// 返回: none.

// 版本: VER1.0

// 日期: 2014-11-28

// 备注:

//========================================================================

void PrintString1(u8 *puts)//发送一个字符串

{

for (; *puts != 0;puts++) //遇到停止符0结束

{

SBUF = *puts;

while(!TI);

TI=0;

}

}

//========================================================================

// 函数: SetTimer2Baudraye(u16 dat)

// 描述: 设置Timer2做波特率发生器。

// 参数: dat: Timer2的重装值.

// 返回: none.

// 版本: VER1.0

// 日期: 2014-11-28

// 备注:

//========================================================================

voidSetTimer2Baudraye(u16 dat)// 选择波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer1做波特率.

{

AUXR &= ~(1<<4);//Timer stop

AUXR &= ~(1<<3);//Timer2 set As Timer

AUXR |= (1<<2);//Timer2 set as 1T mode

TH2 = dat / 256;

TL2 = dat % 256;

IE2 &= ~(1<<2);//禁止中断

AUXR |= (1<

<4);//Timer run enable

}

//========================================================================

// 函数: voidUART1_config(u8 brt)

// 描述: UART1初始化函数。

// 参数: brt: 选择波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer1做波特率.

// 返回: none.

// 版本: VER1.0

// 日期: 2014-11-28

// 备注:

//========================================================================

voidUART1_config(u8 brt)// 选择波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer1做波特率.

{

/*********** 波特率使用定时器2 *****************/

if(brt == 2)

{

AUXR |= 0x01;//S1 BRT Use Timer2;

SetTimer2Baudraye(65536UL - (MAIN_Fosc / 4) / Baudrate1);

}

/*********** 波特率使用定时器1 *****************/

else

{

TR1 = 0;

AUXR &= ~0x01;//S1 BRT Use Timer1;

AUXR |= (1<<6);//Timer1 set as 1T mode

TMOD &= ~(1<<6);//Timer1 set As Timer

TMOD &= ~0x30;//Timer1_16bitAutoReload;

TH1 = (u8)((65536UL - (MAIN_Fosc / 4) / Baudrate1) / 256);

TL1 = (u8)((65536UL - (MAIN_Fosc / 4) / Baudrate1) % 256);

ET1 = 0;//禁止中断

INT_CLKO &= ~0x02;//不输出时钟

TR1 = 1;

}

/*************************************************/

SCON = (SCON & 0x3f) | 0x40;//UART1模式, 0x00: 同步移位输出, 0x40: 8位数据,可变波特率, 0x80: 9位数据,固定波特率, 0xc0: 9位数据,可变波特率

//PS = 1;//高优先级中断

ES = 1;//允许中断

REN = 1;//允许接收

P_SW1 &= 0x3f;

P_SW1 |= 0x00;//UART1 switch to, 0x00: P3.0 P3.1, 0x40: P3.6 P3.7, 0x80: P1.6 P1.7 (必须使用内部时钟)

//PCON2 |= (1<<4);//内部短路RXD与TXD, 做中继, ENABLE,DISABLE

B_TX1_Busy = 0;

TX1_Cnt = 0;

RX1_Cnt = 0;

RI=0;

TI=0;

}

//========================================================================

// 函数: void UART1_int (void) interrupt UART1_VECTOR

// 描述: UART1中断函数。

// 参数: nine.

// 返回: none.

// 版本: VER1.0

// 日期: 2014-11-28

// 备注:

//========================================================================

void UART1_int (void) interrupt 4

{

ES=0;

if(RI)

{

RI = 0;

RX1_Buffer[RX1_Cnt] = SBUF;

//-------必须在这里对接收到的数据进行判断和响应---------------

if (RX1_Buffer[RX1_Cnt] == 'a')

{

PrintString1("bc\

\

");

PrintString1("AbcD\

\

");

}

//---------------------

if(++RX1_Cnt >= UART1_BUF_LENGTH)RX1_Cnt = 0;//防溢出

}

if(TI)

{

TI = 0;

B_TX1_Busy = 0;

}

RI=0;

TI=0;

ES=1;

}

文档

STC15W和STC15F系列单片机串口1通信

/*************功能说明**************双串口全双工中断方式收发通讯程序。通过PC向MCU发送数据,MCU收到后通过串口把收到的数据原样返回.******************************************/#defineMAIN_Fosc11059200L//22118400L//定义主时钟#include"STC15Fxxxx.H"#defineBaudrate19600L#defineUART1_BUF_LENGTH32u8TX1_Cnt;//
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top