找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5086|回复: 11
收起左侧

STC15W408AS 89C52单片机定时器2的中断问题

[复制链接]
ID:472235 发表于 2020-1-4 20:40 | 显示全部楼层 |阅读模式
按照配置写定时器2中断程序,但是就是不行???是哪里出问题了吗?????#include "reg52.h"
#include "intrins.h"

sfr AUXR  = 0x8e;
sfr T2H   = 0xd6;
sfr T2L   = 0xd7;
sfr IE2    = 0xaf;

sbit led1 = P1^7;
sbit led2 = P1^6;
sbit led3 = P1^5;
sbit led4 = P1^4;



void Timer2Init(void)                //70毫秒@11.0592MHz
{
        EA = 1;
        IE2 = 0x04;
        AUXR &= 0xfb;                //定时器时钟12T模式
        T2L = 0x48;                //设置定时初值
        T2H = 0xff;                //设置定时初值
        AUXR |= 0x10;                //定时器2开始计时
        
}



void main(){
        while(1){
                Timer2Init();
                led2 = ~led2;
                while(1);
        }
}


void Timer2Inter() interrupt 12{        //定时器2中断
        led4 = ~led4;
        Delay500ms();
}



5bbf2368ebea4a6b501b1f558a4637c.jpg


回复

使用道具 举报

ID:65956 发表于 2020-1-5 09:00 | 显示全部楼层
void Timer2Inter() interrupt 12{        //定时器2中断         led4 = ~led4;         Delay500ms(); }这里面加了Delay500ms()这个当然有问题了,中断里作事时间越短越好,改用置标志位方式,然后要作的事情放在主函数里去作
回复

使用道具 举报

ID:213173 发表于 2020-1-5 11:01 | 显示全部楼层
给你改一下,你试试。
  1. #include "reg52.h"
  2. #include "intrins.h"

  3. sfr AUXR  = 0x8e;
  4. sfr T2H   = 0xd6;
  5. sfr T2L   = 0xd7;
  6. sfr IE2   = 0xaf;

  7. sbit led1 = P1^7;
  8. sbit led2 = P1^6;
  9. sbit led3 = P1^5;
  10. sbit led4 = P1^4;


  11. void Timer2Init()        //50毫秒@11.0592MHz
  12. {
  13.         AUXR &= 0xfb;        //定时器时钟12T模式
  14.         T2L = 0x00;                //设置定时初值
  15.         T2H = 0x4C;                //设置定时初值
  16.         AUXR |= 0x10;        //定时器2开始计时
  17.         EA=1;                                //开总中断
  18.         IE2 |=0x04;    //允许T2中断
  19. }

  20. void main()
  21. {
  22.         Timer2Init();
  23.         led2 = ~led2;
  24.         while(1);
  25. }

  26. void Timer2Inter() interrupt 12//定时器2中断
  27. {   
  28.         static unsigned char i=0;
  29.         i++;
  30.         if(i>=10)//500ms
  31.         {
  32.                 i=0;
  33.                 led4 = ~led4;
  34. //                Delay500ms();
  35.         }
  36. }
复制代码
回复

使用道具 举报

ID:472235 发表于 2020-1-5 11:47 | 显示全部楼层
aking991 发表于 2020-1-5 09:00
void Timer2Inter() interrupt 12{        //定时器2中断         led4 = ~led4;         Delay500ms(); } ...

这样???还是不行,所有灯都没亮

#include "reg52.h"

sfr IE2       = 0xaf;               //中断使能寄存器2
sfr AUXR      = 0x8e;               //辅助寄存器
sfr T2H       = 0xD6;               //定时器2高8位
sfr T2L       = 0xD7;               //定时器2低8位

sbit led1 = P1^7;
sbit led2 = P1^6;
sbit led3 = P1^5;
sbit led4 = P1^4;

unsigned char flag = 0;

/*-------------------------------------
  定时器2初始化,时钟12T、16位重载模式
--------------------------------------*/
void Timer2Init()                                        //200微秒@11.0592MHz
{
        AUXR &= 0xFB;                                        //定时器时钟12T模式
        T2L = 0x48;                                                //设置定时初值
        T2H = 0xFF;                                                //设置定时初值
        AUXR |= 0x10;                                        //定时器2开始计时
        IE2 |=0x04;                                            //允许中断
        EA=1;                                                        //开总中断
}
/*------------------------------
   定时器2中断服务程序  
-------------------------------*/
void timer2() interrupt 12
{
                flag = 1;
                led1 = ~led1;
}

void main(){

                Timer2Init();
                while(1){
                        if(flag == 1){
                                led2 = ~led2;
                        }
                        Delay500ms();
                }
       
}
回复

使用道具 举报

ID:472235 发表于 2020-1-5 11:47 | 显示全部楼层
wulin 发表于 2020-1-5 11:01
给你改一下,你试试。

还是不行。。。所有灯都没亮
回复

使用道具 举报

ID:213173 发表于 2020-1-5 15:56 | 显示全部楼层
121212121212123 发表于 2020-1-5 11:47
还是不行。。。所有灯都没亮

任何程序都是在硬件基础上编写的。你这学习板没有接触过,不知其硬件结构。图中表明有两片不同型号单片机,STC89C52RC/STC15W408AS,LED与其连接关系不搞清怎么判断程序运行状态?
回复

使用道具 举报

ID:398709 发表于 2020-1-5 20:49 | 显示全部楼层
有电路图吗
回复

使用道具 举报

ID:472235 发表于 2020-1-6 16:01 | 显示全部楼层
wulin 发表于 2020-1-5 15:56
任何程序都是在硬件基础上编写的。你这学习板没有接触过,不知其硬件结构。图中表明有两片不同型号单片机 ...

谢谢大佬,把问题搞清楚了,开发板上我一直都在写入c52芯片里
回复

使用道具 举报

ID:472235 发表于 2020-1-6 16:01 | 显示全部楼层

问题解决了,开发板一直写入到C52芯片,没有写入STC15W408AS
回复

使用道具 举报

ID:130230 发表于 2020-1-8 11:45 | 显示全部楼层
首先看看手册这个型号有没有定时器2。我之前用过一个stc的单片机居然没有定时器1。。。但是又定时器2你说坑不坑
回复

使用道具 举报

ID:753989 发表于 2021-4-2 10:06 | 显示全部楼层
兄嘚儿,我们买的同一款学习板
回复

使用道具 举报

ID:746422 发表于 2021-4-4 20:00 | 显示全部楼层
程序不是这样写的,既然用了定时器了,还用什么Delay500ms()?这样会占用cpu的资源。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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