OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4027|回复: 6

STC15F2K60S2 无法进入中断

[复制链接]

5

主题

17

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2016-12-7
在线时间
10 小时
发表于 2016-12-7 21:27:45 | 显示全部楼层 |阅读模式
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);
}


最佳答案

查看完整内容[请看2#楼]

你在中断里就让灯一直亮着,然后看看到底是不是没进中断
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

346

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3657
金钱
3657
注册时间
2016-2-21
在线时间
542 小时
发表于 2016-12-7 21:27:46 | 显示全部楼层
你在中断里就让灯一直亮着,然后看看到底是不是没进中断
回复

使用道具 举报

5

主题

17

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2016-12-7
在线时间
10 小时
 楼主| 发表于 2016-12-7 21:28:24 | 显示全部楼层
端口初始化  是在头文件里面定义的
回复

使用道具 举报

13

主题

611

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1929
金钱
1929
注册时间
2014-10-6
在线时间
625 小时
发表于 2016-12-8 07:04:53 | 显示全部楼层
你定时器中断充许没有打开,"ET0=0;"定时器如何进入中断!
回复

使用道具 举报

5

主题

17

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2016-12-7
在线时间
10 小时
 楼主| 发表于 2016-12-8 15:58:44 | 显示全部楼层
烟酒不沾 发表于 2016-12-8 07:04
你定时器中断充许没有打开,"ET0=0;"定时器如何进入中断!

我第一个自己编写的程序 ET0 是等于0的呢
回复

使用道具 举报

5

主题

17

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2016-12-7
在线时间
10 小时
 楼主| 发表于 2016-12-8 16:28:00 | 显示全部楼层
呵呵SS 发表于 2016-12-8 15:58
我第一个自己编写的程序 ET0 是等于0的呢

仔细看了下数据手册 ET0 = 1为定时器0开中断
回复

使用道具 举报

5

主题

17

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2016-12-7
在线时间
10 小时
 楼主| 发表于 2016-12-8 16:59:04 | 显示全部楼层
这个问题 比较白痴  已经解决了 多谢大家的答复
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 20:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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