找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 970|回复: 1
打印 上一主题 下一主题
收起左侧

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

[复制链接]
跳转到指定楼层
楼主
ID:721008 发表于 2021-1-8 15:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
想要串口发送外部中断的次数,外部中断发生了一次,串口就发送一次数据给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;         
}

不知道是什么原因,还望大神给解答一下,本人现在是初学者,没能找出原因。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:390416 发表于 2021-1-8 15:40 | 只看该作者
http://www.51hei.com/bbs/dpj-200927-1.html
STC单片机串口发送 不需要while死等 串口接收执行软件复位

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表