打印

一个小时 十个小时 一天甚至更长

[复制链接]
393|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yufe|  楼主 | 2017-3-18 22:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
延时程序
沙发
llia| | 2017-3-18 22:12 | 只看该作者
用定时器编写就能实现。

使用特权

评论回复
板凳
wangpe| | 2017-3-18 22:14 | 只看该作者
中断里边定义个变量

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;
         }
}

使用特权

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

使用特权

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

使用特权

评论回复
6
yufe|  楼主 | 2017-3-18 22:22 | 只看该作者
越看越晕

使用特权

评论回复
7
zhanglli| | 2017-3-18 22:24 | 只看该作者
;***************************************
;*******定时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
lium| | 2017-3-18 22:25 | 只看该作者
看看这个

使用特权

评论回复
9
guoyt| | 2017-3-18 22:27 | 只看该作者
时间程序要么是定时器,要么是延时程序

使用特权

评论回复
10
llia| | 2017-3-18 22:28 | 只看该作者
但是时间太长,使用延时不太好

使用特权

评论回复
11
wangpe| | 2017-3-18 22:31 | 只看该作者

硬件定是中断加软件计数变量即可,C还是汇编都一样

使用特权

评论回复
12
yufe|  楼主 | 2017-3-18 22:33 | 只看该作者
好的,我明天去单位试一下,多谢各位大侠了哈,结贴了先

使用特权

评论回复
13
kk5004| | 2017-3-22 11:28 | 只看该作者
你好,我這邊是 希特電子(深圳)有限公司, 是中國大陸笙泉MCU的代理商  有需要的可以 加我 QQ 328626444 詳細聊聊,   潘,R

使用特权

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

本版积分规则

983

主题

10170

帖子

1

粉丝