新手上路
- 积分
- 44
- 金钱
- 44
- 注册时间
- 2016-12-7
- 在线时间
- 10 小时
|
2金钱
想用stc15f2k60s2定时器间隔定时,发现无法进入中断程序如下 u8 cnt = 0;
void main()
{
u8 j;
u8 temp = 0x01;
AUXR |= 0X80;//定时器时钟1T模式
TMOD &= 0X00;//定时器模式为16位自动重装
TL0 = 0X00;
TH0 = 0X28;
//TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
EA = 1;
ET0 = 0;
P1 = temp;
while(1) ;
/*{
for(j = 0; j<7;j++)
{
if(cnt == 5)
{
cnt = 0;
temp <<= 1;
P1 = temp;
}
if(temp == 0x80) break;
}
for(j = 0;j<7;j++)
{
if(cnt == 5)
{
cnt = 0;
temp >>= 1;
P1 = temp;
}
if(temp == 0x01) break;
}
}
}
void Timer0Init() interrupt 1 using 1
{
P1 = !P1;
u8 i = 0;
TL0 = 0X00;
TH0 = 0X28;
i++;
if(i == 40)
cnt++;
}
用了官方的例子发现也不行 三脸懵逼
typedef unsigned char BYTE;
typedef unsigned int WORD;
//-----------------------------------------------
#define FOSC 11059200L
#define T1MS (65536-FOSC/1000) //1T模式
//#define T1MS (65536-FOSC/12/1000) //12T模式
//-----------------------------------------------
/* Timer0 interrupt routine */
void tm0_isr() interrupt 1 using 1
{
P1 = ! P1; //将测试口取反
}
//-----------------------------------------------
/* main program */
void main()
{
P1M0 = 0x00;
P1M1 = 0x00;
AUXR |= 0x80; //定时器0为1T模式
// AUXR &= 0x7f; //定时器0为12T模式
TMOD = 0x00; //设置定时器为模式0(16位自动重装载)
TL0 = T1MS; //初始化计时值
TH0 = T1MS >> 8;
TR0 = 1; //定时器0开始计时
ET0 = 1; //使能定时器0中断
EA = 1;
P1 = 0XFF;
while (1);
}
|
|