|
单片机是8051f340
/*****************************************************************
*
*本程序是通过F340的uart0与PC进行串口通讯的例程,具体实现为当F340收
*从PC传来的数据后将数据原样回发给PC机 ,端口为RX=P0.5,TX=P0.4
******************************************************************/
#include
#define uchar unsigned char
#define uint unsigned int
char c_buffer[6] = {'g','d','d','e','j'};
/*****************************************************************
*
*从uart0发送一个字符
*****************************************************************/
void putc_uart0(char ch) reentrant
{
while(!TI0);
TI0 = 0;
SBUF0 = ch;
if(ch == '\n') putc_uart0('\r');
}
/*****************************************************************
*
*从uart0发送一个字符串
*****************************************************************/
void puts_uart0(char * pch)
{
while(*pch != '\0') putc_uart0(*pch++);
}
/*****************************************************************
*
*端口初始化函数
*****************************************************************/
void PORT_Init (void)
{
XBR0 = 0x01;
XBR1 = 0x40;
P0MDOUT = 0x10;
}
/****************************************************************
*
*UART0初始化函数
*****************************************************************/
void UART0_Init (void)
{
SCON0 |= 0x10; //UART0接收允许
CKCON = 0x01; //系统时钟/4
TH1 = 0x64; //波特率为9600
TL1 = TH1;
TMOD = 0x20; //方式 2:自动重装载的 8 位计数器/定时器
TR1 = 1; //定时器 1 允许
TI0 = 1; //发送中断标志
}
void timer2(void) interrupt 5
{
static uchar t;
TF2H = 0;
t++;
if(20 == t)
{
puts_uart0(c_buffer);
t = 0;
}
}
void Timer2_Init(void)
{
ET2 = 1; //允许 TF2L 或 TF2H 标志的中断请求
T2SPLIT = 0; //定时器 2 工作在 16 位自动重装载方式
T2SOF = 0; //配合T2SPLIT工作,使定时器2工作在16 位自动重装载方式
TR2 = 1; //T2允许
TMR2H = 0x3c; //定时器初始值
TMR2L |= 0xb0;
}
/*****************************************************************
*
*主函数
*****************************************************************/
void main()
{
PCA0MD &= ~0x40; //关闭看门狗
OSCICN |= 0x03; //SYSCLK 为内部高频振荡器输出(不分频)
PORT_Init();
UART0_Init();
Timer2_Init();
while(1);
}
求高手帮忙看下哪里写错了。
|
|