STC15系列单片机串口2的使用

进期用51做课设用需要用到两个串口,故学习了一下51串口2.

使用串口2先检查你的芯片有没有串口2.
(2022年12月1日更正:本文使用的芯片信号为stc15系列。使用其他芯片可参考对应手册)
在这里插入图片描述
串口2的由定时器2产生波特率,中断号为8。
以下是关于串口2用的一些寄存器。具体请查看STC15系列单片机指南。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在使用时要注意寄存器是不是可位寻址,如果不可位寻址,需要用”与”“或”操作对寄存器进行进行相应位的置位。操作与串口1操作类似。

(以下代码仅供参考;如有错误,请多指教)

#include <stc15f2k60s2.h>
#define S2RI 0x01        //串口2接收中断请求标志位
#define S2TI 0x02        //串口2发送中断请求标志位
 
char flag = 0;
unsigned char a[10]={0};
void Uart2_Init(void)		//9600bps@22.1184MHz
{
	S2CON = 0x50;		//8位数据,可变波特率
	AUXR |= 0x04;		//定时器2时钟为Fosc,即1T
	T2L = 0xC0;			//设定定时初值
	T2H = 0xFD;			//设定定时初值
	AUXR |= 0x10;		//启动定时器2
	EA = 1;
	IE2 = 0X01;        //打开接收中断
}


void UART2_Send_Byte(unsigned char mydata)	
{
    IE2 = 0X00;
	S2CON&=~S2TI; //TI = 1
    S2BUF=mydata;
    while((S2CON&S2TI)==0);
	S2CON&=~S2TI; //TI = 1//清除发送标志位
    IE2 = 0X01;
}

void Uart2_send_string(unsigned char *p)   //串口2发送一个字符串
{
    while(*p!='\0')
    {
        UART2_Send_Byte(*p);
        p++;
    }
}
void UART_2Interrupt(void) interrupt 8
{
	unsigned char temp;
	char i = 0;
    if(S2CON&S2RI)		//RI == 0	
    {
		flag = 1;
        S2CON&=~S2RI;	//RI = 1
        temp = S2BUF;
		a[i++] = temp;
		if(i == 10)
		{
			i=0;
		}
    }
}
void main()
{
	Uart2_Init();
	Uart2_send_string("123\n");
	Uart2_send_string("456!");
	while(1)
	{
		if(flag == 1)
		{
			IE2  &= ~S2RI; 
			S2BUF = temp;
			while(!(S2CON&S2TI));
			S2CON&=~S2TI;
			IE2  |= S2RI; 
			flag = 0;
		}
	}
}
  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值