打印

怎么编写时间延时程序

[复制链接]
1485|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
宋倩2010|  楼主 | 2013-11-10 10:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如一个小时 十个小时  一天甚至更长
沙发
kangzj| | 2013-11-10 10:23 | 只看该作者
用定时器编写就能实现。

使用特权

评论回复
板凳
houcs| | 2013-11-10 10:24 | 只看该作者
中断里边定义个变量

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-11-10 10:24 | 只看该作者
这个比较简单,就是在计时器中断里定义几个全局变量

使用特权

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

使用特权

评论回复
6
小小猫咪| | 2013-11-10 10:25 | 只看该作者
越看越晕

使用特权

评论回复
7
pangb| | 2013-11-10 10:26 | 只看该作者
;***************************************
;*******定时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

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
gcxzhz + 3 很给力!
8
pangb| | 2013-11-10 10:27 | 只看该作者
看看这个

使用特权

评论回复
9
ousj| | 2013-11-10 10:28 | 只看该作者
时间程序要么是定时器,要么是延时程序

使用特权

评论回复
10
ousj| | 2013-11-10 10:28 | 只看该作者
但是时间太长,使用延时不太好

使用特权

评论回复
11
小小猫咪| | 2013-11-10 10:29 | 只看该作者
嗯,我试试~

使用特权

评论回复
12
小小猫咪| | 2013-11-10 10:29 | 只看该作者
那就结贴了,大家晚安

使用特权

评论回复
13
abbccc308| | 2013-11-10 11:25 | 只看该作者
LS和LZ是同一个人

使用特权

评论回复
14
liangzhi213| | 2013-11-10 15:31 | 只看该作者
哪里有LS和LZ?

使用特权

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

本版积分规则

322

主题

3217

帖子

2

粉丝