中科因仑“3+1”工程特种兵精英论坛
标题:
串口12演示
[打印本页]
作者:
张衍波
时间:
2015-5-6 09:43
标题:
串口12演示
/*--------------------------------------
芯片 :STC12C5A60S2
晶振 :11.0592MHZ
开发平台:KEIL
功能 :串口一,串口二,同步发送接收数据(采用中断方式,波特率发生器产生波特率)
波特率 :9600BPS
日期 :11.5.19
注意 :下载完程序后请复位系统!!(切记!)
--------------------------------------*/
#include "STC12C5A60S2.h"
#define uchar unsigned char
#define uint unsigned int
uchar dat1=0,dat2=0;
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 tab[]={"liguangyang!"};
uchar i,j=12;
uchar *p;
init();
p=tab;
for(i=0;i<13;i++){
j--;
uart1_txd(p[j]);
uart2_txd(p
);
delay(150); }
while(1){
P0=dat1;
delay(500);
P0=dat2;
delay(500);
}
}
[attach]2773[/attach]
欢迎光临 中科因仑“3+1”工程特种兵精英论坛 (http://bbs.enlern.com/)
Powered by Discuz! X3.4