我用ZLG的P89LPC952来编写串口程序,这个程序实现的功能:
将TX和RX直接连接起来,然后串口发送0xaa,如果接受到的也是0xaa,那么P4.7上接的LED就灭掉,如果接收到的不是0xaa那么等就亮着。但是。。。。
但是,灯一直亮着。并且用示波器看,发送的并不是一串占空比50%,脉宽104μ的矩形波。而是,一串脉宽不均匀,并3个50μ的与一个104μ的交替出现。
求真相!!!在线等。。。。。
#include"reg952.h" //包含头文件
#define uchar unsigned char
uchar temp;
void IniPort();//端口初始化
void UART_Init();//串口初始化
void send_char_com(uchar ch) ;//发送函数
void main(void)//主函数
{
IniPort();
UART_Init();
send_char_com(0x00) ;
while (1)
{
if(temp==0xAA) P4=0xff;//等于就灭
else P4=0x7f;//不等就亮
send_char_com(0xAA) ;
}
}
void IniPort()//端口初始化
{
P0M1=0x30;P0M2=0xcf;//p0.4p0.5仅为输入,用于ICP
P1M1=0x20;P1M2=0xdc;//p1.5仅为输入,用于ICP;P1.0,P1.1设置为准双向口
P2M1=0x00;P2M2=0xff;//0X00,0XFF是推挽输出
P3M1=0x00;P3M2=0xff;
P5M1=0X00;P5M2=0XFF;
P4M1=0x00;P4M2=0xff;
}
void UART_Init()
{
//IniPort();
S0CON=0x50;//使能接收,选择串口模式1
BRGCON_0=0x00;//清零初始化
S0STAT=0xe0;//选择独立的Tx Rx
//S0STAT=0x00;
BRGR0_0=0xf0;//波特率9600 7.37MHz
BRGR1_0=0x02;
BRGCON_0=0x03;//是能BRG
ES=1;//使能串口接收中断
EST=1;//使能串口发送中断
EA=1;//使能总中断
}
void rec(void) interrupt 4
{
EA=0;
//while(!RI_0);
temp=S0BUF;
RI_0=0;
//S0BUF=temp;
//S0BUF=0xaa;
//while(!TI_0);
//TI_0=0;
EA=1;
}
//向串口发送一个字符
void send_char_com(uchar ch)
{
S0BUF=ch;
while(TI_0==0);
TI_0=0;
} |