单片机串口发送外部中断次数为什么不成功?

单片机串口发送外部中断次数为什么不成功?,想要串口发送外部中断的次数,外部中断发生了一次,串口就发送一次数据给PC,但是我的程序实际测出来的情况是串口一直在发送数据。 #inclu…

单片机串口发送外部中断次数为什么不成功?,想要串口发送外部中断的次数,外部中断发生了一次,串口就发送一次数据给PC,但是我的程序实际测出来的情况是串口一直在发送数据。

#include “stc8g.h”
#include “COMMON.H”
uint int0_count=0;

void SendStr(unsigned char *s);
void Sendint(unsigned int dat);
/*————————————————
                    串口初始化
————————————————*/
void InitUART  (void)//9600bps@12.000MHz
{
SCON = 0x50;    //8位数据,可变波特率
AUXR &= 0xBF;        //定时器1时钟为Fosc/12,即12T
AUXR &= 0xFE;        //串口1选择定时器1为波特率发生器
TMOD &= 0x0F;        //设定定时器1为16位自动重装方式
TL1 = 0xE6;                //设定定时初值
TH1 = 0xFF;                //设定定时初值
ET1 = 0;                //禁止定时器1中断
TR1 = 1;                //启动定时器1

}

void int0_init()                                                                                                                                 
{
  IT0 = 1;            //为 1 是下降沿; 为 0 是低电平
  EX0 = 0;                //为 1 允许中断; 为 0 是禁止中断
}

/*————————————————
                    主函数
————————————————*/
void main (void)
{
InitUART();
stc_init();
int0_init();
EA=1;
while (1)                       
{
  EX0 = 1;
//  SendStr(“UART test, thank you!”);
//    delay_xms(240);//延时循环发送
//    delay_xms(240);
}
}

/*————————————————
                    发送一个字节
————————————————*/
void Sendint(unsigned int dat)
{

SBUF =dat/256;
while(!TI);
      TI = 0;
SBUF =dat%256;
while(!TI);
      TI = 0;

}

///*————————————————
//                    发送一个字节
//————————————————*/
//void SendByte(unsigned char dat)
//{
// SBUF = dat;
// while(!TI);
//      TI = 0;
//}
///*————————————————
//                    发送一个字符串
//————————————————*/
//void SendStr(unsigned char *s)
//{
// while(*s!=’\0′)// \0 表示字符串结束标志,
//                //通过检测是否字符串末尾
//  {
//  SendByte(*s);
//  s++;
//  }
//}

void int0() interrupt 0         
{
int0_count++;
Sendint(int0_count);
if(int0_count>65534)
int0_count=0;         
}

不知道是什么原因,还望大神给解答一下,本人现在是初学者,没能找出原因。
,http://www.073107.com/bbs/dpj-200927-1.html
STC单片机串口发送 不需要while死等 串口接收执行软件复位

你去看看我的贴子,Uart1_Flag=1,就能发送一次多个字节。发送完成后自动停止。
你在你的外部中断里面把Uart1_Flag=1;即可。注意,两次外部中断的间隔时间不能比串口发送时间短。

作者: soufei

为您推荐


Fatal error: Can't use function return value in write context in /www/wwwroot/www.qianrushi.com.cn/wp-content/themes/news/footer.php on line 115