为什么我的STC12C5A60S2开发板只有摁了RESET才能成功传成功。。
时间:10-02
整理:3721RD
点击:
就是这个程序。我想通过串口二用十六进制指令0x40控制模块的,结果每次只有在摁了复位键后才能成功一次,重启都不行。为什么啊?
*********************************************************************/
#include "STC12C5A60S2.h" //库文件
#define uchar unsigned char//宏定义无符号字符型
#define uint unsigned int //宏定义无符号整型
#define S2TI 0x02//串口2发送中断请求标志位
/********************************************************************
延时函数
*********************************************************************/
void delay ( uchar t )
{
uchar i,j;
for( i=0; i<t; i++)
for( j=0; j<250; j++);
}
/********************************************************************
串口初始化
*********************************************************************/
void init(void)
{
S2CON = 0x50; //方式1,八位数据,可变波特率
AUXR1 = 0x00; //1T工作方式
PCON = 0x00; //不倍增波特率
IP2 = 0x00; //优先级默认
BRT = 0xFD; //设置波特率9600
AUXR = 0x10; //启动波特率发生器
EA = 1; //开总中断
IE2 = 0x01; //开串口2中断
}
/********************************************************************
发送一个字符
*********************************************************************/
void txd_c(uchar x)
{
S2BUF = x;
while(!(S2CON&S2TI)); //若S2TI=0,在此等待
S2CON&=~S2TI; //S2TI=0
}
/********************************************************************
发送接收中断函数
*********************************************************************/
void uart2_isr() interrupt 8
{
if( S2CON & 0x01 )
{
S2CON &= ~0x01;
dat = S2BUF;
}
if( S2CON & 0x02 )
{
S2CON &= ~0x02;
}
}
/********************************************************************
主函数
*********************************************************************/
void main()
{
init();
delay(50);
txd_c(0x40);
P2=0x00;
while(1);
}
/********************************************************************
结束
*********************************************************************/
*********************************************************************/
#include "STC12C5A60S2.h" //库文件
#define uchar unsigned char//宏定义无符号字符型
#define uint unsigned int //宏定义无符号整型
#define S2TI 0x02//串口2发送中断请求标志位
/********************************************************************
延时函数
*********************************************************************/
void delay ( uchar t )
{
uchar i,j;
for( i=0; i<t; i++)
for( j=0; j<250; j++);
}
/********************************************************************
串口初始化
*********************************************************************/
void init(void)
{
S2CON = 0x50; //方式1,八位数据,可变波特率
AUXR1 = 0x00; //1T工作方式
PCON = 0x00; //不倍增波特率
IP2 = 0x00; //优先级默认
BRT = 0xFD; //设置波特率9600
AUXR = 0x10; //启动波特率发生器
EA = 1; //开总中断
IE2 = 0x01; //开串口2中断
}
/********************************************************************
发送一个字符
*********************************************************************/
void txd_c(uchar x)
{
S2BUF = x;
while(!(S2CON&S2TI)); //若S2TI=0,在此等待
S2CON&=~S2TI; //S2TI=0
}
/********************************************************************
发送接收中断函数
*********************************************************************/
void uart2_isr() interrupt 8
{
if( S2CON & 0x01 )
{
S2CON &= ~0x01;
dat = S2BUF;
}
if( S2CON & 0x02 )
{
S2CON &= ~0x02;
}
}
/********************************************************************
主函数
*********************************************************************/
void main()
{
init();
delay(50);
txd_c(0x40);
P2=0x00;
while(1);
}
/********************************************************************
结束
*********************************************************************/
难道是复位电路出问题了?换个复位电路中的电容试试?
我用的是直接买的开发板,我网上查了一下,复位电路如果出问题的话应该在烧写程序的时候就能看出来问题吧?我问了做开发板的店家他们说可以从软件上把这个问题解决,但是具体怎么解决店家也说不知道。
不明白你说的重启都不行啥意思?重启之后不就接着复位的么?
复位电路错了,高变低。