stc12c5a单片机双串口驱动

本文提供了一套适用于STC12C5A60S2单片机的双串口驱动程序代码,包括串口1和串口2的初始化设置及数据发送功能。代码详细展示了如何配置寄存器以实现特定波特率,并提供了字符串发送函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

废话不多说了,直接上代码
#include "stc12c5a60s2.h"
#ifndef __UART2_H__
#define __UART2_H__

typedef unsigned char uchar;
typedef unsigned int  uint;

#define UART1 0
#define UART2 1

#define SYS_CLK  11059200L //Íⲿ¾§ÕñÓõÄ11.0592MHz,½éÒâÓÃÕâ¸ö£¬»î×Å18.432MHz
#define BAUD2 115200
#define BAUD1 9600

#define NONE_PARITY 0  //УÑéλΪnone
#define S2RI 0x01
#define S2TI 0x02
#define S2RB8 0x04
#define S2TB8 0x08
extern uchar angle[8];
extern uchar sign;
extern uchar uart1_temp;

void uart1_init();
void uart2_init();
void send_data(uint uart,uchar dat);
void send_uart1_string(char *s);
void send_uart2_string(char *s);

#endif

#include "uart2.h"
bit busy1;
bit busy2;
uchar temp;
uchar  angle[8]={0xaa,0x01,0x02,0x03,0x04,0x05,0x06,0x55}; //½Ç¶È´æ´¢Çø Êý¾Ý½á¹¹²Î¿¼¸ÃĿ¼ÏÂÊÖ²á
uchar  cnt = 0;
uchar  sign = 1;
uchar uart1_temp;
void uart2_init()
{
#ifdef NONE_PARITY   //ÎÞУÑé
	S2CON = 0x50;
#endif
	busy2 = 0;
	BRT = -(SYS_CLK/32/BAUD2);
	AUXR = 0x14;
	IE2 = 0x01;
	//EA = 1;
}

void uart1_init()
{
	SCON = 0x50;
	busy1= 0;
	TMOD = 0x20;
	TH1  = 0xFD;
	TL1  = TH1;
	PCON =0x00;
	TR1  = 1;
	ES   = 1;
	//EA   = 1;
}

void send_data(uint uart,uchar dat)
{
	if(uart)
	{
   while(busy2);
	 busy2 = 1;
	 S2BUF = dat;
	}
	if(uart==0)
	{
	 while(busy1);
		busy1 = 1;
		SBUF = dat;
	}
}

void send_uart1_string(char*s)
{
    while(*s)
	  {
	   send_data(0,*s++);
	  }
}

void send_uart2_string(char*s)
{
   while(*s)
	 {
	  send_data(1,*s++);
	 }
}

void uart2() interrupt 8 using 1
{
   if(S2CON&S2RI)
	 {
	   S2CON&=~S2RI;
		 angle[cnt] = S2BUF;
		 cnt++;
		 if(cnt==8)
		 {
			 cnt = 0;
			 sign=1;
		 }
	 }
	 if(S2CON&S2TI)
	 {
	   S2CON&=~S2TI;
		 busy2=0;
	 }
}	

void uart1() interrupt 4 using 1
{
    if(RI)
		{
		   RI = 0;
			 uart1_temp = SBUF;
		}
		if(TI)
		{
		   TI = 0;
			 busy1=0;
		}
}

程序写好了串口1跟串口2的驱动程序
可以直接使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值