心得:串口2只能使用“独立波特率发生器”作为波特率发生器;
串口1可以用定时器1做波特率发生器,也可以选择“独立波特率发生器”作为波特率发生器。
stc12c5a.h stc12的头文件从:http://www.51hei.com/mcu/3282.html 这里下载.
双串口.c
//******************************(STC12串口2应用)*****************************************
// 马梓熔
//2012-12-4
//***************************************************************************************
#include "STC12C5A.h"
#define uchar unsigned char
#define uint unsigned int
#define Buf_Max 40
uchar i;
uchar Rec_Buf[]="hello! mazirong\n"; //uchar Rec_Buf[Buf_Max]; 这样写上位写什么 下位机接收什么,大大增加了灵活性
//********************延时函数
void delay(uint z)
{
uint i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
//********************串口2初始化
void Serial_Iint()
{
S2CON=0x50; //S2SM0 S2SM1=0 1 S2REN=1 //串口2的工作方式1,接收位允许
PCON=0x00; //波特率不加倍
AUXR=0x10; //BRTR=1,允许独立波特率发生器运行
BRT=0XFD; //独特波特率发生器定时器
EA=1;
IE2=0x01; //开串口2中断
}
//*******************发送一个字符
void Send_Char(uchar a)
{
IE2=0x00;
S2BUF=a;
delay(200);
while(!(S2CON&0x02)); //while(!S2TI) 等待S2TI变为1
S2CON&=0xFD; //S2TI清0
IE2=0x01;
}
//*******************发送一个字符串
void Send_String(uchar *tab)
{
IE2=0x00;
while(*tab!='\0')
{
Send_Char(*tab++);
}
IE2=0x01;
}
//********************主函数
void main()
{
while(1)
{
Serial_Iint();
delay(1000);
Send_String(Rec_Buf);
delay(1000);
}
}
//********************串口2中断函数
void Serial_2Int() interrupt 8
{
IE2=0x00; //关串口中断,防止中断的嵌套
if(S2CON&0x02) //如果是串口2发送中断(S2TI)不进行处理
{
S2CON&=0xFD; //S2TI清0
}
if(S2CON&0x01)
{
S2CON&=0xFE; //S2RI清0
Rec_Buf[i]=S2BUF;
i++;
if(i>Buf_Max)
{
i=0;
}
}
IE2=0x01; //开启串口中断
}
上一篇:外部中断(IT0,IT1)触发方式
下一篇:关于MSP430 Timer_A的问题
推荐阅读最新更新时间:2024-03-16 13:53
设计资源 培训 开发板 精华推荐
- 答题抽奖:Mentor Tessent Automotive相关测试解决方案(奖品池还剩不少奖品哟)
- 分享你的国赛经验,还有好礼相送!
- 身临其境不足以窥全貌,《TI嵌入式产品研讨会》比现场更有料的小小书
- 您的电路保护有足够的空间吗?Littelfuse的881系列保险丝迎接这一挑战
- 是德科技下载有好礼:高速数字测试修炼手册
- 【EE团】尽享TI MSP-EXP430FR5739实验板套件!
- 是德科技(Keysight)有奖征文,下笔赢示波器啦!
- 阅1SP0350V SCALE-2单通道即插即用型门极驱动器,参与PI答题享好礼!
- 将想法变成现实,Maxim MAX32630FTHR创意设计大赛,重磅开启!