#include
//-----------------------------------------------------------------------------
// 16-bit SFR Definitions for 'F34x
//-----------------------------------------------------------------------------
sfr16 SBRL1 = 0xB4;
sbit RI1=0xd2;
sbit TI1=0xd3;
//-----------------------------------------------------------------------------
// Global CONSTANTS
//-----------------------------------------------------------------------------
#define SYSCLK 12000000 // SYSCLK frequency in Hz
#define BAUDRATE0 115200 // Baud rate of UART0 in bps
#define BAUDRATE1 115200 // Baud rate of UART1 in bps
//-----------------------------------------------------------------------------
// Function PROTOTYPES
//-----------------------------------------------------------------------------
void SYSTEMCLOCK_Init (void);
void PORT_Init (void);
void UART0_Init (void);
void UART1_Init (void);
void Delay (void);
char UART1_send(char c) ;
unsigned char temp;
//-----------------------------------------------------------------------------
// MAIN Routine
//-----------------------------------------------------------------------------
void main (void)
{
PCA0MD &= ~0x40; //关闭看门狗
SYSTEMCLOCK_Init ();
PORT_Init ();
UART0_Init ();
UART1_Init ();
EA=1;
while (1)
{SBUF1='1';
while (!TI1)
{
;
}
TI1=0;
/*
SBUF0='Q';
while (!TI0)
{;}
TI0=0;*/
}
}
void SYSTEMCLOCK_Init (void)
{
OSCICN |= 0x83; // Configure internal oscillator for
// its maximum frequency and enable
// missing clock detector
}
void PORT_Init (void)
{
XBR0 = 0x01; // route UART 0 to crossbar
XBR1 = 0x40;
XBR2 = 0x01; // route UART 1 to crossbar
P0MDIN=0XFF;//不配置为模拟输入
P0MDOUT=0X11;
P0SKIP=0XCC;//P0.4 P0.5、P0.2、P0.1配置为串口0和串口1
P1MDIN=0XFF;//不配置为模拟输入
P1MDOUT=0XFF; //P1口配置为推挽输出
P2MDIN=0XFF;
P2MDOUT=0xFF;
P3MDIN=0XFF;
P3MDOUT=0xFF;
}
//-----------------------------------------------------------------------------
// UART0_Init
//-----------------------------------------------------------------------------
//
// Return Value : None
// Parameters : None
//
// Configure the UART0 using Timer1, for baudrate; and 8-N-1.
//
//-----------------------------------------------------------------------------
void UART0_Init (void)
{
SCON0 = 0x10; // SCON0: 8-bit variable bit rate
// level of STOP bit is ignored
// RX enabled
// ninth bits are zeros
// clear RI0 and TI0 bits
if (SYSCLK/BAUDRATE0/2/256 < 1)
{
TH1 = -(SYSCLK/BAUDRATE0/2);
CKCON &= ~0x0B; // 定时器1使用系统时钟,
CKCON |= 0x08;
}
else if (SYSCLK/BAUDRATE0/2/256 < 4)
{
TH1 = -(SYSCLK/BAUDRATE0/2/4);
CKCON &= ~0x0B; // 定时器1使用系统时钟4分频
CKCON |= 0x01;
}
else if (SYSCLK/BAUDRATE0/2/256 < 12)
{
TH1 = -(SYSCLK/BAUDRATE0/2/12);
CKCON &= ~0x0B; // 定时器1使用系统时钟12分频
}
else
{
TH1 = -(SYSCLK/BAUDRATE0/2/48);
CKCON &= ~0x0B; // 定时器1使用系统时钟48分频
CKCON |= 0x02;
}
TL1 = TH1; // init Timer1
TMOD &= ~0xf0;
TMOD |= 0x20; // 定时器1工作于方式2,8位重装载
//IP=0x10;//串口0优先级
ES0=1; //开串口0中断
TR1 = 1; // START Timer1
TI0 = 1; // Indicate TX0 ready
}
//-----------------------------------------------------------------------------
// UART1_Init
//-----------------------------------------------------------------------------
//
// Return Value : None
// Parameters : None
//
// Configure UART1 for baudrate1 and 8-N-1.
//
//-----------------------------------------------------------------------------
void UART1_Init (void)
{
SMOD1 = 0x0C; // UART1 8位数据
SCON1 = 0x70; // 接收允许,清发送和接收中断
if (SYSCLK/BAUDRATE1/2/0xFFFF < 1)
{
SBRL1 = -(SYSCLK/BAUDRATE1/2);
SBCON1 |= 0x03; // set prescaler to 1
}
else if (SYSCLK/BAUDRATE1/2/0xFFFF < 4)
{
SBRL1 = -(SYSCLK/BAUDRATE1/2/4);
SBCON1 &= ~0x03;
SBCON1 |= 0x01; // set prescaler to 4
}
else if (SYSCLK/BAUDRATE1/2/0xFFFF < 12)
{
SBRL1 = -(SYSCLK/BAUDRATE1/2/12);
SBCON1 &= ~0x03; // set prescaler to 12
}
else
{
SBRL1 = -(SYSCLK/BAUDRATE1/2/48);
SBCON1 &= ~0x03;
SBCON1 |= 0x02; // set prescaler to 4
}
//SCON1 |= 0x02; // indicate ready for TX
SBCON1 = 0x43; // enable baud rate generator
EIP2=0X02; //串口2优先级高
EIE2 =0X02;//开串口2中断
}
void UART1_receive(void) interrupt 16
{
unsigned temp;
if (SCON1 &0X01==0X01)
{
temp=SBUF1;
if (temp=='A')
{
P1=0X55;
}
}
//SCON1=SCON1&0XFE;
SCON1=0X70;
}
void UART0_receive(void) interrupt 4
{
unsigned temp;
if (RI0)
{
temp=SBUF0;
if (temp=='A')
{
P2=0X55;
}
}
RI0=0;
}