打印

编写时间延时程序如一个小时

[复制链接]
1802|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小小猫咪|  楼主 | 2013-3-4 22:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
怎么编写时间延时程序如一个小时 十个小时  一天甚至更长
沙发
kangzj| | 2013-3-4 22:46 | 只看该作者
用定时器编写就能实现。

使用特权

评论回复
板凳
houcs| | 2013-3-4 22:48 | 只看该作者
中断里边定义个变量

ulong Counter = 0,DelayTime;
sbit TimeFlag = 0;
void Timer0(void) interrupt 1
{         
         Counter++;
         if(Counter == DelayTime)TimeFlag = 1;
}

delay(ulong i)
{
        EA = 0;
        TimeFlag = 0;
        DelayTime = Counter+i+1;
        EA = 1;
}

void main(void)
{
       delay(10);
       while(1)
       {
              ..............
              ..............
              if(TimeFlag)break;
       }
}

使用特权

评论回复
地板
liuzaiy| | 2013-3-4 22:48 | 只看该作者
这个比较简单,就是在计时器中断里定义几个全局变量

使用特权

评论回复
5
yinxiangh| | 2013-3-4 22:49 | 只看该作者
每次中断加一,一直到你想要的时间就跳出来

使用特权

评论回复
6
小小猫咪|  楼主 | 2013-3-4 22:50 | 只看该作者
越看越晕

使用特权

评论回复
7
pangb| | 2013-3-4 22:51 | 只看该作者
;***************************************
;*******定时0中断(0.5秒中断一次)********
t0_isr:   
        mov     acc_bak,a
        mov     a,status
        mov     status_bak,a            
        inc       half_second
        mov     a,half_second
        sub      a,2
        snz      c                      ;到了1秒吗?
        jmp     t0_ret                 ;没到,则退出
        clr       half_second                                   
        set      second_change_b        ;1S时间变化标志位
        inc       rtc_second             ;秒变量加一
        mov    a,60
        xor     a,rtc_second
        snz     z                      ;到了1minute吗?
        jmp    t0_ret
        clr      rtc_second             ;清1秒变量
        set     minute_change_b        ;1minute时间变化标志位
        inc     rtc_minute             ;分钟变量加一
        mov    a,60
        xor    a,rtc_minute
        snz    z                      ;到了1hour吗?               
        jmp    t0_ret
        clr      rtc_minute             ;清分钟变量
        inc      rtc_hour               ;小时变量加一
        mov    a,24
        xor    a,rtc_hour
        snz    z
        jmp    t0_ret
        clr     rtc_hour
        inc     rtc_week              ;星期变量加一
        mov    a,8
        xor    a,rtc_week
        snz    z                     ;到了星期天了没有?
        jmp    RTC_NEXT              ;没到,则跳到RTC_NEXT处检查其它时间变量
        mov    a,1
        mov    rtc_week,a            ;到了,则变为星期一
RTC_NEXT:
       inc     rtc_day               ;日期变量加一
       mov     a,rtc_month           ;查表看当前月份一共有多少天
       mov     disp_ram,a
       dec     rtc_month             ;因为1月~12月,而表中(地址是F00H)是从0~11,故TBLP减一
       mov     a,rtc_month
       add     a,dig_month_tab
       mov     tblp,a
       tabrdl  L_day
       mov     a,disp_ram
       mov     rtc_month,a           ;再保存回到rtc_month
       mov     a,28
       xor     a,L_day
       snz     z                     ;当月是28天的吗?  
       jmp     RTC_NEXT1             ;不是,则跳到RTC_NEXT1处计算,看是否是到了当前月份的最后一天
       mov     a,rtc_year            ;是的,则判断是否是平年还是闰年
       and     a,03h
       snz     z                     ;是闰年吗?
                                     ;闰年:能被4整除,2月为29天,当年为366天
                                     ;平年:3个平年后,就变为闰年,2月为28天,当年为365天
      
       jmp     RTC_NEXT1             ;不是,是平年,则跳到RTC_NEXT1处计算,看是否是到了当前月份的最后一天
       mov     a,29
       mov     L_day,a               ;是闰年的话,则2月为29天
RTC_NEXT1:
       mov     a,L_day
       sub     a,rtc_day
       sz      c                     ;到了当前月份的最后一天吗?
       jmp     t0_ret                ;不是,则直接退出定时中断子程序
       mov     a,1
       mov     rtc_day,a             ;是的话,;就变为1号
      
       inc     rtc_month             ;月变量加一
       mov     a,13
       xor     a,rtc_month
       snz     z                     ;到了12月份吗?
       jmp     t0_ret                ;没到,则直接退出定时中断子程序
       mov     a,1
       mov     rtc_month,a           ;到了,则月份变为1月
      
       inc      rtc_year              ;年变量加一
       mov     a,100               
       xor     a,rtc_year
       snz     z                     ;到了2100年吗?
       jmp     t0_ret                ;没到,则直接退出定时中断子程序
       clr     rtc_year              ;最大计算到2100年
  
t0_ret:      
        mov    a,status_bak
       mov     status,a
      mov     a,acc_bak  
      reti

使用特权

评论回复
8
pangb| | 2013-3-4 22:52 | 只看该作者
看看这个

使用特权

评论回复
9
小小猫咪|  楼主 | 2013-3-4 22:53 | 只看该作者
嗯,我试试~

使用特权

评论回复
10
小小猫咪|  楼主 | 2013-3-4 23:00 | 只看该作者
那就结贴了,大家晚安

使用特权

评论回复
11
huanghongxing| | 2013-3-13 23:17 | 只看该作者
时间程序要么是定时器,要么是延时程序,但是时间太长,使用延时不太好

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

313

主题

3014

帖子

6

粉丝