找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机死活不进中断 求分析原因

[复制链接]
跳转到指定楼层
楼主
ID:558225 发表于 2020-1-21 10:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*****************************************
*函数名:delay_us(u16 i)
**作用*:较高精度的延时,延时范围1~65536us
**传入参数:i,无符号十六位
**传出参数:无
*****************************************/
void delay_us(u16 i)//定时范围1~65536us
{

  AUXR &= 0x7F;  //定时器时钟12T模式
TMOD &= 0xF0;  //设置定时器模式
TMOD |= 0x01;  //设置定时器模式
TL0 = (65536-i)&0x00ff;  //设置定时初值
TH0 = (65536-i)>>8;  //设置定时初值
TF0 = 0;  //清除TF0标志
a=1;
  EA = 1;
  ET0 = 1;                        //使能定时器0中断
TR0 = 1;                        //定时器0开始计时
while(a);
}
/*****************************************
函数名: Timer0Callback()  interrupt 1
作用 :定时器T0的回调函数
传入:无
传出:无
*****************************************/
void Timer0Callback ()   interrupt 1 using 1
{
led=~led;
a=0;
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:558225 发表于 2020-1-21 10:39 | 只看该作者
单片机型号为IAP15F2K61S2
回复

使用道具 举报

板凳
ID:378182 发表于 2020-1-21 11:55 | 只看该作者
主程序main在哪里?
回复

使用道具 举报

地板
ID:213173 发表于 2020-1-21 15:38 | 只看该作者
19980813 发表于 2020-1-21 10:39
单片机型号为IAP15F2K61S2

IAP15F2K61S2端口模式需要初始化,程序中连main入口都没有这么运行?给你补充完整。
  1. #include <STC15F2K60S2.H>

  2. sbit led=P1^0;

  3. unsigned int a,b;

  4. void Timer0Init()                //10毫秒@11.0592MHz
  5. {
  6.         AUXR &= 0x7F;                //定时器时钟12T模式
  7.         TMOD &= 0xF0;                //设置定时器模式
  8.         TL0 = 0x00;                        //设置定时初值
  9.         TH0 = 0xDC;                        //设置定时初值
  10.         TF0 = 0;                                //清除TF0标志
  11.         TR0 = 1;                                //定时器0开始计时
  12.         EA = 1;
  13.         ET0 = 1;  
  14. }

  15. void main()
  16. {
  17.         P0M0 = 0x00;
  18.         P0M1 = 0x00;
  19.         P1M0 = 0x00;
  20.         P1M1 = 0x00;
  21.         P2M0 = 0x00;
  22.         P2M1 = 0x00;
  23.         P3M0 = 0x00;
  24.         P3M1 = 0x00;
  25.         P4M0 = 0x00;
  26.         P4M1 = 0x00;
  27.         P5M0 = 0x00;
  28.         P5M1 = 0x00;
  29.         P6M0 = 0x00;
  30.         P6M1 = 0x00;
  31.         P7M0 = 0x00;
  32.         P7M1 = 0x00;
  33.         Timer0Init();
  34.         b=50;//延时时间=b*10ms
  35.         while(1);
  36. }

  37. void Timer0Callback() interrupt 1 using 1
  38. {
  39.         a++;
  40.         if(a>=b)
  41.         {
  42.                 a=0;
  43.                 led=~led;//闪烁频率1Hz
  44.         }
  45. }
复制代码

回复

使用道具 举报

5#
ID:93224 发表于 2020-1-21 16:59 | 只看该作者
你在哪里调用的delay_us函数
回复

使用道具 举报

6#
ID:93224 发表于 2020-1-21 17:00 | 只看该作者
你这个中断函数写的有问题,你这个只能进一次中断,没有在终端里面对定时器赋初值,具体可以咨询我1014461948@1qq.com
回复

使用道具 举报

7#
ID:195446 发表于 2020-1-21 17:42 | 只看该作者
延时函数里a=1;while(a);执行到这里就死在这了。
回复

使用道具 举报

8#
ID:394148 发表于 2020-1-21 20:24 | 只看该作者
建议可以直接在STC那个烧写软件中,直接复制中断或者定时器程序,我有有时候就是寄存器稍微配置弄错了,或者明明想开中断0,但是敲的是中断1的,或者对照着数据手册,好好看一看,应该是那个寄存器弄错了,我有时候调了一天,就是有的位应该写1但是给的0
回复

使用道具 举报

9#
ID:558225 发表于 2020-1-21 20:59 来自手机 | 只看该作者
有主程序   主程序调用初始化函数
回复

使用道具 举报

10#
ID:558225 发表于 2020-1-21 21:00 来自手机 | 只看该作者
znz43a 发表于 2020-1-21 11:55
主程序main在哪里?

主程序在另一个页面里   主程序调用初始化函数
回复

使用道具 举报

11#
ID:558225 发表于 2020-1-21 21:04 来自手机 | 只看该作者
有没有可能是while里的标志识别不了
回复

使用道具 举报

12#
ID:558225 发表于 2020-1-21 23:08 | 只看该作者
调试发现在while 里出不来但是为什么呢
难道while的优先级还没中断高?
但是不应该呀
回复

使用道具 举报

13#
ID:558225 发表于 2020-1-21 23:56 来自手机 | 只看该作者
mffhxa 发表于 2020-1-21 17:42
延时函数里a=1;while(a);执行到这里就死在这了。

调试发现就是死在这里了,但是为什么
回复

使用道具 举报

14#
ID:326783 发表于 2020-1-22 14:27 | 只看该作者
你开总中断了么?
回复

使用道具 举报

15#
ID:207421 发表于 2020-1-22 15:53 | 只看该作者
1. 16位要在中断里面重赋值
2. 你这函数弄不了
3. IO模式也没设置
4. 重写吧
回复

使用道具 举报

16#
ID:235200 发表于 2020-1-22 18:20 | 只看该作者
请别人看程序,有些需要完整的程序,如中断初始化设置,中断程序的写法,上面程序好象在delay_us中设置了定时计数器,主程序是否调用它,是否有另外的初始化程序,不得而知
回复

使用道具 举报

17#
ID:558225 发表于 2020-1-23 14:12 | 只看该作者
找到原因了,分页里有个相同的回调函数被调用了,编译器没提示
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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