找回密码
 立即注册

QQ登录

只需一步,快速开始

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

嵌入中断,发现第二个中断没有用

[复制链接]
跳转到指定楼层
楼主
ID:166058 发表于 2017-2-25 09:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是我做的一个用I/O口去模拟PWM去控制LED灯亮度缓缓变亮的程序
但是调试过程中我发现外部中断可以打开,但是定时器的中断却没有打开
请大神帮忙看看,程序如下
#include"reg52.h"

typedef unsigned int u16;          
typedef unsigned char u8;

sbit k1=P3^3;              //这是外部中断的那个口
sbit PWM=P2^1;       //这就是那个LED

u16 count,time0,value;

void delay100us(void)   //误差 0us
{
    unsigned char a,b;
    for(b=1;b>0;b--)
        for(a=47;a>0;a--);
}

void Int1Init()        //外部中断1的初始
{
        EA=1;
        EX1=1;
        IT1=1;
}

void Timer0Init()       //定时器中断0的初始
{
        TMOD|=0X01;

        TH0 = 0xFF;
        TL0 = 0xff;       //期望定时为1us,晶振为12MHZ
               
        ET0=1;
        EA=1;
        TR0=1;               
}


void Int1() interrupt 2
{
                if(k1==0)      //用于消抖
                {
                    delay100us();
                        if(k1==0)
                        {
                                count=0;
                                value=1;
                                time0=0;       
                        }
                        while(!k1);       
                }
                Timer0Init();
                while(1)                         //此处为我模拟PWM时序的地方
                {
                        if(count>1000)                                                 
                        {
                                count=0;
                                value++;          
                        }
                        if(time0>1000)
                        {
                                 time0=0;
                        }
                        if(time0<value)
                        {
                                PWM=1;
                        }
                        else
                        {
                                PWM=0;
                        }
                }                               
}


void main()
{
    PWM=0;
        Int1Init();
        while(1);
}

void Timer0() interrupt 1       //定时器中断函数
{
        TH0 = 0xFF;
        TL0 = 0xff;   
        time0++;
    count++;
}

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

使用道具 举报

沙发
ID:166627 发表于 2017-2-25 20:21 | 只看该作者
定时器初始化函数没有被正确调用,还有按键读取不要放到中断里
回复

使用道具 举报

板凳
ID:7485 发表于 2017-2-26 19:52 | 只看该作者
“期望定时为1us,晶振为12MHZ”,不可能的事。
回复

使用道具 举报

地板
ID:166794 发表于 2017-2-26 20:54 | 只看该作者
学习了
回复

使用道具 举报

5#
ID:166058 发表于 2017-2-26 22:41 | 只看该作者
谢谢大神了
回复

使用道具 举报

6#
ID:166058 发表于 2017-2-26 22:44 | 只看该作者
2412679278 发表于 2017-2-25 20:21
定时器初始化函数没有被正确调用,还有按键读取不要放到中断里

请问大神要怎么样才能正确调用定时器初始函数
回复

使用道具 举报

7#
ID:140906 发表于 2017-3-11 18:29 来自手机 | 只看该作者
定时器的那个初始化没有放在主函数里
回复

使用道具 举报

8#
ID:140906 发表于 2017-3-11 18:31 来自手机 | 只看该作者
直接在你的主函数的第一行加上Timer0Init(),就可以了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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