3502|6

98

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

C51汇编语言交通灯模拟程序,求指教。 [复制链接]

请问下面这个程序定时器定时的时间是怎么算的,这是一个用模拟交通灯变化的程序。请高手指点一下,定时器的用法。
ORG   000BH
LJMP  T0_INT

ORG   0100H
MAIN:
   MOV SP, #60H
   LCALL  INIT
   LCALL   T0_INIT
LOOP:
         JNB    SECOND_FLAG,LOOP
         LCALL  STATUS_CHANGE
         CLR    SECOND_FLAG
         SJMP   LOOP

STATUS_CHANGE :
      MOV   A, STATUS_FLAG
      ADD   A,STATUS_FLAG
          MOV          DPTR,#STATUS_PROC_TABLE
          JMP   @A+DPTR
STATUS_PROC_TABLE:
      AJMP   STATUS1
          AJMP   STATUS2
          AJMP   STATUS3
          AJMP   STATUS4
          AJMP   STATUS5
          AJMP   STATUS6

STATUS1:
     DJNZ  SECOND_COUNT,STATUS1_EXIT
         MOV    SECOND_COUNT,#6
         MOV    STATUS_FLAG,#01H
STATUS1_EXIT:
     RET

STATUS2:
     DJNZ   SECOND_COUNT, STATUS2_EXIT
         MOV    SECOND_COUNT,#4
         MOV    STATUS_FLAG,#02H
         SETB   SOUTH_RED
         CLR    SOUTH_YELLOW
         SETB   SOUTH_GREEN
         CLR    EAST_RED
         SETB   EAST_YELLOW
         SETB   EAST_GREEN
         RET
STATUS2_EXIT:
     CPL           SOUTH_GREEN
         RET

STATUS3:
     DJNZ   SECOND_COUNT, STATUS3_EXIT
         MOV    SECOND_COUNT,#40
         MOV    STATUS_FLAG,#03H
         CLR    SOUTH_RED
         SETB   SOUTH_YELLOW
         SETB   SOUTH_GREEN
         SETB   EAST_RED
         SETB   EAST_YELLOW
         CLR    EAST_GREEN
STATUS3_EXIT:
     RET


STATUS4:
     DJNZ  SECOND_COUNT,STATUS4_EXIT
         MOV    SECOND_COUNT,#6
         MOV    STATUS_FLAG,#04H
STATUS4_EXIT:
     RET

STATUS5:
     DJNZ   SECOND_COUNT, STATUS5_EXIT
         MOV    SECOND_COUNT,#4
     MOV    STATUS_FLAG,#05H
         CLR   SOUTH_RED
     SETB    SOUTH_YELLOW
         SETB   SOUTH_GREEN
         SETB   EAST_RED
         CLR   EAST_YELLOW
         SETB   EAST_GREEN
         RET
STATUS5_EXIT:
     CPL           SOUTH_GREEN
         RET


STATUS6:
     DJNZ   SECOND_COUNT, STATUS6_EXIT
         MOV    SECOND_COUNT,#40
         MOV    STATUS_FLAG,#06H
         SETB  SOUTH_RED
     SETB    SOUTH_YELLOW
         CLR  SOUTH_GREEN
         CLR   EAST_RED
         SETB  EAST_YELLOW
         SETB   EAST_GREEN
         
STATUS6_EXIT:
         RET


INIT:
    SETB SOUTH_RED
        SETB  SOUTH_YELLOW
        CLR  SOUTH_GREEN
        CLR   EAST_RED
        SETB  EAST_YELLOW
        SETB  EAST_GREEN
        MOV   TIME_COUNT0,#250
        MOV   TIME_COUNT1,#8
        MOV   SECOND_COUNT, #40
    MOV    STATUS_FLAG,#00H
        CLR   SECOND_FLAG
        RET
T0_INT:
    DJNZ   TIME_COUNT0, T0_INT_EXIT
        MOV    TIME_COUNT0,#250
        DJNZ   TIME_COUNT1,T0_INT_EXIT
        MOV    TIME_COUNT1,#8
        SETB   SECOND_FLAG
T0_INT_EXIT:
   RETI

T0_INIT:
    MOV   TMOD,#00000010B
        MOV    TL0,#06H
        MOV    TH0,#06H
        MOV    TCON,#00010000B
        SETB   EA
        SETB   ET0
        RET

END

最新回复

具體的定時間隔要看你的晶體的頻率的 看看手冊上關於定時器的幾個工作模式部分應該可以得出答案  详情 回复 发表于 2009-11-22 13:25
点赞 关注

回复
举报

71

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
改用Keil C吧
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
就是keil编出来的。个人打算先把汇编学好了。以后比较有用
 
 
 

回复

57

帖子

0

TA的资源

一粒金砂(初级)

4
 
后面3段就是计算时间的.用定时器0.

 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

5
 
用一个功能模块通用的过程都是这样的:

设置控制寄存器

设置相关寄存器

启动

中断请求或查询工作状态
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

6
 
用CPLD做最简单.
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

7
 
具體的定時間隔要看你的晶體的頻率的 看看手冊上關於定時器的幾個工作模式部分應該可以得出答案
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表