想要串口發送外部中斷的次數,外部中斷發生了一次,串口就發送一次數據給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;
}
不知道是什么原因,還望大神給解答一下,本人現在是初學者,沒能找出原因。
|