/********************************************************************
汇诚科技
实现功能:STC12C5A60S2单片机之双串口通信
使用芯片:STC12C5A60S2
晶振:11.0592MHZ
波特率:9600
编译环境:Keil
作者:zhangxinchun
网站:www.ourhc.cn
淘宝店:
汇诚科技 http://ourhc.taobao.com
郑兴电子直销部 http://shop68451856.taobao.com
【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!
功能 :功能 :串口一,串口二,同步发送接收数据(采用中断方式,波特率发生器产生波特率)
其他 :采用查询方式发送稳定,但是接收数据极不稳定由于
官方资料使用的是中断方式,所以建议使用中断方式收发数据。
注意 :下载完程序后请复位系统后运行!(切记!!)
*********************************************************************/
#include "STC12C5A60S2.h" //库文件
#define uchar unsigned char//宏定义无符号字符型
#define uint unsigned int //宏定义无符号整型
/********************************************************************
初始定义
*********************************************************************/
uchar dat1=0,dat2=0;
uchar tab[]={"www.ourhc.cn"};
/********************************************************************
串口初始化
*********************************************************************/
void init ()
{
TMOD = 0x20; //定时器1产生波特率
SCON = 0x50; //方式1,8位数据,波特率可变
TH1 = TL1 = 0xfd; //波特率 9600
S2CON = 0x50; //方式1,八位数据,可变波特率
BRT = 0XFD; //设置波特率9600
TR1 = 1; //启动定时器产生波特率
AUXR = 0x10; //启动波特率发生器
IP = 0x00; //优先级默认
EA = 1; //开总中断
ES = 1; //开串口1中断
IE2 = 0x01; //开串口2中断
}
/********************************************************************
串口一 发送一个字符
*********************************************************************/
void uart1_txd(uchar x)
{
SBUF = x;
}
/********************************************************************
串口一 发送接收中断函数
*********************************************************************/
void uart_isr() interrupt 4
{
if( RI ) RI = 0;
dat1 = SBUF;
if( TI ) TI = 0;
}
/********************************************************************
串口二 发送一个字符
*********************************************************************/
void uart2_txd(uchar x)
{
S2BUF = x;
}
/********************************************************************
串口二 发送接收中断函数
*********************************************************************/
void uart2_isr() interrupt 8
{
if( S2CON & 0x01 )
{
S2CON &= ~0x01;
dat2 = S2BUF;
}
if( S2CON & 0x02 )
{
S2CON &= ~0x02;
}
}
/********************************************************************
延时函数
*********************************************************************/
void delay ( uint t )
{
uint i,j;
for( i=0; i<t; i++)
for( j=0; j<250; j++);
}
/********************************************************************
主函数
*********************************************************************/
void main()
{
uchar i;
uchar *p;
init();
p=tab;
for(i=0;i<13;i++)
{
uart1_txd(p);
uart2_txd(p);
delay(150);
}
while(1)
{
P0=dat1;
delay(500);
P0=dat2;
delay(500);
}
}
/********************************************************************
结束
*********************************************************************/
|