单片机串口发送外部中断次数为什么不成功?,想要串口发送外部中断的次数,外部中断发生了一次,串口就发送一次数据给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;即可。注意,两次外部中断的间隔时间不能比串口发送时间短。