找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1389|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)串口發(fā)送外部中斷次數(shù)為什么不成功?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:721008 發(fā)表于 2021-1-8 15:34 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
想要串口發(fā)送外部中斷的次數(shù),外部中斷發(fā)生了一次,串口就發(fā)送一次數(shù)據(jù)給PC,但是我的程序?qū)嶋H測出來的情況是串口一直在發(fā)送數(shù)據(jù)。

#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位數(shù)據(jù),可變波特率
AUXR &= 0xBF;        //定時器1時鐘為Fosc/12,即12T
AUXR &= 0xFE;        //串口1選擇定時器1為波特率發(fā)生器
TMOD &= 0x0F;        //設(shè)定定時器1為16位自動重裝方式
TL1 = 0xE6;                //設(shè)定定時初值
TH1 = 0xFF;                //設(shè)定定時初值
ET1 = 0;                //禁止定時器1中斷
TR1 = 1;                //啟動定時器1

}

void int0_init()                                                                                                                                 
{
  IT0 = 1;            //為 1 是下降沿; 為 0 是低電平
  EX0 = 0;                //為 1 允許中斷; 為 0 是禁止中斷
}

/*------------------------------------------------
                    主函數(shù)
------------------------------------------------*/
void main (void)
{
InitUART();
stc_init();
int0_init();
EA=1;
while (1)                       
{
  EX0 = 1;
//  SendStr("UART test, thank you!");
//    delay_xms(240);//延時循環(huán)發(fā)送
//    delay_xms(240);
}
}

/*------------------------------------------------
                    發(fā)送一個字節(jié)
------------------------------------------------*/
void Sendint(unsigned int dat)
{

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

}

///*------------------------------------------------
//                    發(fā)送一個字節(jié)
//------------------------------------------------*/
//void SendByte(unsigned char dat)
//{
// SBUF = dat;
// while(!TI);
//      TI = 0;
//}
///*------------------------------------------------
//                    發(fā)送一個字符串
//------------------------------------------------*/
//void SendStr(unsigned char *s)
//{
// while(*s!='\0')// \0 表示字符串結(jié)束標(biāo)志,
//                //通過檢測是否字符串末尾
//  {
//  SendByte(*s);
//  s++;
//  }
//}

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

不知道是什么原因,還望大神給解答一下,本人現(xiàn)在是初學(xué)者,沒能找出原因。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:390416 發(fā)表于 2021-1-8 15:40 | 只看該作者
http://www.torrancerestoration.com/bbs/dpj-200927-1.html
STC單片機(jī)串口發(fā)送 不需要while死等 串口接收執(zhí)行軟件復(fù)位

你去看看我的貼子,Uart1_Flag=1,就能發(fā)送一次多個字節(jié)。發(fā)送完成后自動停止。
你在你的外部中斷里面把Uart1_Flag=1;即可。注意,兩次外部中斷的間隔時間不能比串口發(fā)送時間短。
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表