wszjw2 发表于 2024-11-28 16:28:20

【已解决】为何ISP中定时器计算器给的程序没有用

本帖最后由 wszjw2 于 2024-11-29 10:40 编辑

现在用开天斧三.2,用下面这段,是51教学视频上用的方式,P20可以正常一秒闪一下void time1_init(void)
{
      TMOD|=0X10;//选择为定时器0模式,工作方式1
      TH1=0XFC;      //给定时器赋初值,定时1ms
      TL1=0X18;      
      ET1=1;//打开定时器1中断允许
      EA=1;//打开总中断
      TR1=1;//打开定时器               
}
void main()
{      
                  P0M0 = 0x00; P0M1 = 0x00;
    P1M0 = 0x00; P1M1 = 0x00;
    P2M0 = 0x00; P2M1 = 0x00;
    P3M0 = 0x00; P3M1 = 0x00;
    P4M0 = 0x00; P4M1 = 0x00;
    P5M0 = 0x00; P5M1 = 0x00;
    P6M0 = 0x00; P6M1 = 0x00;
    P7M0 = 0x00; P7M1 = 0x00;
      
      time1_init();//定时器1中断配置

      while(1)
      {                        
                                                      
      }               
}

void time1() interrupt 3 //定时器1中断函数
{
      static u16 i;//定义静态变量i
      TH1=0XFC;      //给定时器赋初值,定时1ms
      TL1=0X18;
      i++;
      if(i==1000)
      {
                i=0;
                LED1=!LED1;      
      }                                                
}但是用ISP中的代码就不行,见附图。请各位大佬帮忙看看是为啥

_奶咖君_ 发表于 2024-11-28 16:53:03

不行是怎么个不行法?不闪?还是不是按照1s间隔闪?

_奶咖君_ 发表于 2024-11-28 16:53:51

至少你也得把你用ISP的代码改完之后的程序发一下吧

_奶咖君_ 发表于 2024-11-28 16:54:33

猜一个没开总中断

wszjw2 发表于 2024-11-28 16:56:23

_奶咖君_ 发表于 2024-11-28 16:53
至少你也得把你用ISP的代码改完之后的程序发一下吧

就是用了ISP的定时器设置,其他没改,本来也就一句话{:4_167:}原来是1s闪烁,换了之后直接不亮了

wszjw2 发表于 2024-11-28 16:57:33

_奶咖君_ 发表于 2024-11-28 16:54
猜一个没开总中断

还真是,大意了{:4_167:}

wszjw2 发表于 2024-11-28 17:01:36

_奶咖君_ 发表于 2024-11-28 16:54
猜一个没开总中断

另外想问一下,如果想定时15分钟,什么办法比较好呀,目前是想定时器1s然后标志位+1,判断标志位。然后我看定时器的TMOD说明T1/T0要在INT1/INT0为高电平时才能打开,那是不是可以用硬件控制定时器T1/T0

_奶咖君_ 发表于 2024-11-28 17:05:53

wszjw2 发表于 2024-11-28 17:01
另外想问一下,如果想定时15分钟,什么办法比较好呀,目前是想定时器1s然后标志位+1,判断标志位。然后我 ...

1.定时15分钟这个 可以这么做。通过计数变量的方式你可以定义到天荒地老{:4_165:}
2.你说的这个功能我没有测试过,,没法提供太多的想法。{:4_185:}

王昱顺 发表于 2024-11-28 17:10:31

wszjw2 发表于 2024-11-28 17:01
另外想问一下,如果想定时15分钟,什么办法比较好呀,目前是想定时器1s然后标志位+1,判断标志位。然后我 ...

1.如果想定时比较长的,可以使用单片机的RTC功能。
2.一般是用来做PPM(脉宽控制,舵机常见控制信号)的,你说的这个用法确实是可以的

wszjw2 发表于 2024-11-28 17:11:00

_奶咖君_ 发表于 2024-11-28 17:05
1.定时15分钟这个 可以这么做。通过计数变量的方式你可以定义到天荒地老
2.你说的这个功能我没有测试过, ...

刚刚发现ISP的程序还是不行{:4_167:}灯一直亮着

#include "stc8h.h"

typedef unsigned int u16;        //对系统默认数据类型进行重定义
typedef unsigned char u8;

u8 pump_flag=0;
u16 sec=0;


/*******************************************************************************
* 函 数 名       : delay_10us
* 函数功能               : 延时函数,ten_us=1时,大约延时10us
* 输    入       : ten_us
* 输    出           : 无
*******************************************************************************/
void delay_10us(u16 ten_us)
{
        while(ten_us--);       
}

/*******************************************************************************
* 函 数 名       : time0_init
* 函数功能               : 定时器0中断配置函数,通过设置TH和TL即可确定定时时间
* 输    入       : 无
* 输    出           : 无
*******************************************************************************/
void time1_init(void)
{
        AUXR |= 0x40;                        //定时器时钟1T模式
        TMOD &= 0x0F;                        //设置定时器模式
        TL1 = 0xCD;                                //设置定时初始值
        TH1 = 0xD4;                                //设置定时初始值
        TF1 = 0;                                //清除TF1标志
        TR1 = 1;                                //定时器1开始计时
        ET1 = 1;                                //使能定时器1中断
}

/*******************************************************************************
* 函 数 名       : main
* 函数功能               : 主函数
* 输    入       : 无
* 输    出           : 无
*******************************************************************************/
void main()
{       
       
                P0M0 = 0x00; P0M1 = 0x00;
    P1M0 = 0x00; P1M1 = 0x00;
    P2M0 = 0x00; P2M1 = 0x00;
    P3M0 = 0x00; P3M1 = 0x00;
    P4M0 = 0x00; P4M1 = 0x00;
    P5M0 = 0x00; P5M1 = 0x00;
    P6M0 = 0x00; P6M1 = 0x00;
    P7M0 = 0x00; P7M1 = 0x00;
        EA=1;
        P_SW2|=0X80;
       

        while(1)
        {                       
                time1_init();//定时器0中断配置
        }               
}

void time1() interrupt 3 //定时器0中断函数
{
        P20=~P20;
}
页: [1] 2 3
查看完整版本: 【已解决】为何ISP中定时器计算器给的程序没有用