找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

这是单片机中断优先级造成的吗?

查看数: 3532 | 评论数: 8 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2019-3-18 13:26

正文摘要:

本帖最后由 wtm_lxy 于 2019-3-19 08:35 编辑 我做采集模拟电压控制指示灯的效果: temp是采集到的模拟电压值,tv是保存的临时值。 我想实现的效果是: 当temp<=800时打开计数器1,同时保留当前的temp值;当 ...

回复

ID:495752 发表于 2019-3-21 21:46

T0设置错误:定时器模式2是8位自动重载,最大定时时间256us,超过255部分溢出无效。也有可能是软件模拟的问题。
ID:427430 发表于 2019-3-21 21:35
.不会2.因为在默认情况下(即每次单片机复位时),中断优先级寄存器ip为xxx0 0000b,未设置ip时,所有中断都是同等级的!
ID:69072 发表于 2019-3-21 20:49
不一定 protues仿真软件 本身也存在一些问题
建议用最新版本
ID:495226 发表于 2019-3-21 10:58
把 if(count==3000)改成  if(count>=3000)试试,主循环怎么能那么巧判断到3000,如果你正在送显示时中断计数可能超过3000了
ID:487930 发表于 2019-3-19 08:33
7358655 发表于 2019-3-18 22:14
不是优先级导致
TMOD=0x02; 模式0000  0010 你选模式2  八位自动装载你看你赋值还不一样
        TH0=(65 ...

        TMOD=0x02;
        TH0=0x14;   
        TL0=0x00;   
        IE=0x82;
        TR0=1;
应该不是T0的问题吧?我改成这样了。
我的问题是T1没有生效?T0是正常的。
ID:487930 发表于 2019-3-19 08:31
wulin 发表于 2019-3-18 20:53
T0设置错误:定时器模式2是8位自动重载,最大定时时间256us,超过255部分溢出无效,你这样设置的结果是定时 ...

我不是很明白,这里T0是给ADC0808做时钟脉冲输入端的,从检测结果来看,是可以检测到模拟值的。

问题是T1好像没有生效。
我用T1来控制报警指示和保存临时电压值。这个if(count==3000)总是不能成立。
ID:466164 发表于 2019-3-18 22:14
不是优先级导致
TMOD=0x02; 模式0000  0010 你选模式2  八位自动装载你看你赋值还不一样
        TH0=(65536-3500)/256;    //0x14;   
        TL0=(65536-3500)%256;    //0x00;
再看你中断,又给赋值
void Time1() interrupt 3 using 0 //“interrupt”声明函数为中断服务函数
                 //其后的3为定时器T1的中断编号;0表示使用第0组工作寄存器
{
        count++;   //自加1  每次1ms
          TH1=(65536-1000)/256;        //定时器T1的高8位重新赋初值
        TL1=(65536-1000)%256;      //定时器T1的高8位重新赋初值
}
估计问题出在此处
ID:213173 发表于 2019-3-18 20:53
T0设置错误:定时器模式2是8位自动重载,最大定时时间256us,超过255部分溢出无效,你这样设置的结果是定时14us。

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

Powered by 单片机教程网

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