. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->C/C++语言
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  紧急求救汇编(中断程序部分  [待解决] 回复[ 1次 ]   点击[ 548次 ]  
123456554145
[帖 主]   [ 发表时间:2013-04-13 11:57 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2013-04-13 11:45
;系统主程序
;系统译码器地址分配
P8255        EQU      0F103H
R6116        EQU      0F102H
P74LS373     EQU      0F101H
P80C51       EQU      0F100H

;外部RAM地址分配
CDATA       EQU      00H          ;数据采集单元首地址
SETTEMP    EQU      40H          ;设定速度首地址
TEMPMAX   EQU      80H          ;报警给定值首地址
TAB         EQU      0C0H         ; 字型码表首地址
;内部RAM地址分配
ALARMAX   EQU       00H         ;限报警标志首地址
BUFF        EQU       24H         ; 数据缓冲区
DPLBUFF    EQU       25H         ;显示缓冲区
COUNT      EQU      -10          ;定时量0.1s
             ORG              0000H
             JMP       MAIN
             ORG      0003H
             LJMP      INTT0
             ORG      000BH
             LJMP      INTT1
;主程序
             ORG       0100H
MAIN:       MOV       SP,      #60H
             MOV       A,      #80H        ;设置80C51工作方式
             MOV       DPTR,  #P80C51
             MOVX     @DPTR,  A
             MOV       20H,     #00H        ;清报警标志单元
;清数据采集单元
             MOV       R0,     #00H
             MOV       R1,     #50H
             MOV       A,      #00H
             MOV       P2,     #0F0H
             CLEAR1:   MOVX   @R0,A
             INC        R0
;清显示及缓冲区 
             MOV       A,       #00H       ;清显示缓冲单元
             MOV      CHADDR,  A
             MOV      COUNT,    A
             MOV       BUFF,     A
             MOV       TMOD,   #15H   ;设T0,T1工作方式
             MOV       TH1,    #3CH    ;装入T1时间常数
             MOV       TL1,     #0BH
             SETB       TR1
             MOV       TH0,     #00H   ;装入T0时间常数
             MOV       TL0,     #00H
             SETB       TR0
             SETB       ET0
             SETB       ET1
             SETB       EA                ;调用数据采样子程序 
             LCALL     DESPLAY          ;调显示子程序
             LCALL     ALARM            ;输出报警指示灯 
HERE:                 AJMP       HERE        
;主要子程序清单
;调用键盘子程序
START:        MOV       R0,   #0
                 MOV       R1,  #4
                 MOV       R2,  #FEH
SCAN:          MOV       A,   R2
                 MOV       P2,    A
;ROW0
                 JNB        P2.0, KEYIN
                 INC        R0
;ROW1
                 JNB        P2.1,KEYIN
                 INC  R0
;ROW2
                 JNB        P2.2,KEYIN
                 INC        R0
;NEXT COLUMN
                 MOV       A,    R2
                 RL         A
                 MOV       R2,   A
                 DJNZ       R1,   SCAN
                 JMP        START
KEYIN:        CALL       DEBOUNCE
                 MOV       A ,   R0
                 DA         A
                 MOV       P1,   A
                 JMP        STRAT
DEBOUNCE:    MOV       R7,  #40
D1:             MOV       R6,  #200
                 DJNZ       R6,  $
                 DJNZ       R7,   D1
                 RET  
                 END
;显示子程序
ORG         0300H
DESPLAY:    MOV       SCON,  #00H    ;设定串行工作模式为0
             MOV              R1,    #04H      ;数码管显示的位数4
             MOV            R0,   #00H       ;字型码首地址偏移量
             MOV       DPTR,  #TAB     ;字型码表首地址
 LOOP:      MOV       A,    R0
             MOVC     A,   @A+DPTR    ;取出字型码
             MOV       SBUF, A          ;发送
WAIT:        JNB        TI,  WAIT        ;等待一帧发送完毕
             CLR        TI
              INC       R0                ;指向下一字型码
             ACALL     DL10              ;延时
             DJNZ       R1,  LOOP
ROUT2:    
             MOVX      A,  @DPTR      ;读入高8位
             MOV       P2, #0F0H
             MOVX     @R0,  A          ;存放高8位
             INC        DPTR              ;使A0=1
             INC        R0                ;求低4位存放地址
             MOVX     A,  @DPTR       ;读低4位
             MOVX     @R0, A           ;存放低4位
             MOV       A,    R0         ;求存放下一个通道数据地址
              ADD      A,  #09H
              MOV      R0,  A
              MOV      A,  CHADDR
              MOV     TH0, #3CH    ;重新装入定时器0时间常数
              MOV     TL0, #0B0H
              SETB     TR0
              RET
DL10:         MOV R7, #01H
BRANCH:     MOV      R0, BUFF    ;计数下一次采样地址
              INC       R0
              INC       R0
             AJMP       ROUT0
             ORG        0400H
;1.2.2 超速报警程序清单
;根据在图4-7中所示的报警电路部分所叙述的那样,可写出超速报警程序如下:
ALARM:             LCALL   TMAXCOMP        ;超速报警检查
               MOV     A,    20H        ;输出超速度报警信号模型
               CPL      A                 ;求正常信号模型
               MOV     DPTR,  #P80C51
               MOVX   @DPTR, A
         RET 
;超速报警比较子程序
TMAXCOMP:   MOV     R0 , #TEMPMAX   ;取超速报警首地址
               MOV     R1,   #CDATA
               MOV     R3,    #08H
               MOV     R2,   #02H
COMP1:        MOVX    A,   @R1
               MOV     BUFF,  A
               MOVX    A,    @R0
                CJNE    A, BUFF,COMP2   ;判断上限报警值与采样
;高8位是否相等
              INC        R0                 ;求低8位数地址
              INC        R1
              DJNZ      R2,     COMP1
              SETB      SETTEMP           ;相等,置报警标志
COMP4:       MOV       A,     20H
              RL         A
              MOV       20H,    A         ;存入报警标志单元
              RET                           ;清报警标志位
COMP3:       CLR TEMPMAX
AJMP         COMP4
COMP2:       JNC    COMP3                 ;置报警标志位
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved