微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 求汇编语言高手

求汇编语言高手

时间:10-02 整理:3721RD 点击:
求大师帮我看一下这个程序怎么实现,主站要求显示从站的数据


现有程序          ORG 0000H
      JMP MAIN
          ORG 0003H
          JMP INT_0
          ORG 000BH
          JMP T0_INT
          ORG 0013H
          JMP INT_1
          ORG 001BH
          JMP T1_INT
          ORG 0023H
          JMP _SBUF                  
MAIN: SETB EA                 //开中断 ,
      SETB ET0
          SETB ET1
          SETB EX0
          SETB IT0
          SETB EX1
          SETB IT1
          MOV TMOD,#52H
          MOV TH0,#106
          MOV TL0,#106
          MOV TH1,#0F8H
          MOV TL1,#30H
          SETB TR0
          SETB TR1
          MOV 20H,#30  //报警下限
          MOV 21H,#120  //报警上限
          MOV SCON,#60H//开串口通信

          clr p3.6
          clr p3.7
LOOP: JB P1.7,$                 //3秒内计数,模拟传感器采集数据
          INC R5
          JNB P1.7,$
          JMP LOOP
INT_0: INC R4
           MOV A,R4      // 与测试值比较
           MOV B,R5                 //保存实测滴速
           SUBB A,R5
           Jc LOOP1
       MOV A,R4
           LCALL DISPLAY
           MOV P0,A
           jmp out0
           loop1:
           out0:
           RETI
INT_1:
       DEC R4                //设定值
           MOV A,R4            //与测试值比较
           MOV B,R5                                          //保存实测滴速
           SUBB A,R5
           Jc LOOP2            
                                  
       MOV A,R4
           LCALL DISPLAY
           MOV P0,A
           jmp out2
           LOOP2:
           out2:
           RETI                         
T0_INT:
       CPL P3.4
       RETI
     
T1_INT:
      MOV TH1,#0F8H
          MOV TL1,#30H
          INC R6
          CJNE R6,#3,OUT
          MOV A,R5                           //3秒采集的次数传入累加器A
       
          MOV B,#20                           //3秒中的滴数乘以20就是一分钟的数
          MUL AB                         //采集到(计算出)1分钟点滴速度
          //MOV R1,B                        //保存数据高八位
          //MOV R2,A                   //保存低八位
          SUBB A,R4       //设置好的滴速 //AB寄存器中怎么和在一起?
          Jc LOOP3
         
       
           LCALL DISPLAY   //调用显示程序
           mov p0,a
           clr p3.6
           SETB P3.7
          MOV R6,#0           //中断次数清零
          MOV R5,#0         //         测试到点滴速度清零
          LOOP3:
              //电机
           OUT:
       RETI            
          
_SBUF:
          
      
          
          RETI
DISPLAY:
         MOV B,#10
         div AB
         SWAP A
         ADD A,B
         RET

WARN:SETB P2.4                 //激发报警器
     SETB P3.7                   //点亮红灯
         LCALL BUJIN          //驱动步进电机
         JB P1.7,WARN          //判断是否按取消报警键
         CLR P2.4
         CLR P3.6
          SETB P3.7
          RET
BUJIN:MOV A,B
SUBB A,R5
  
          END
          

急救啊!请高手帮忙看一下

          ORG 0000H
      JMP MAIN
          ORG 0003H
          JMP INT_0
          ORG 000BH
          JMP T0_INT
          ORG 0013H
          JMP INT_1
          ORG 001BH
          JMP T1_INT
          ORG 0023H
          JMP _SBUF                  
MAIN: SETB EA                 //开中断 ,
      SETB ET0
          SETB ET1
          SETB EX0
          SETB IT0
          SETB EX1
          SETB IT1
          MOV TMOD,#52H
          MOV TH0,#106
          MOV TL0,#106
          MOV TH1,#0F8H
          MOV TL1,#30H
          SETB TR0
          SETB TR1
          MOV 20H,#30  //报警下限
          MOV 21H,#120  //报警上限
          MOV SCON,#60H//开串口通信

          clr p3.6
          clr p3.7
LOOP: JB P1.7,$                 //3秒内计数,模拟传感器采集数据
          INC R5
          JNB P1.7,$
          JMP LOOP
INT_0: INC R4
           MOV A,R4      // 与测试值比较
           MOV B,R5                 //保存实测滴速
           SUBB A,R5
           Jc LOOP1
       MOV A,R4
           LCALL DISPLAY
           MOV P0,A
           jmp out0
           loop1:
           out0:
           RETI
INT_1:
       DEC R4                //设定值
           MOV A,R4            //与测试值比较
           MOV B,R5                                          //保存实测滴速
           SUBB A,R5
           Jc LOOP2            
                                  
       MOV A,R4
           LCALL DISPLAY
           MOV P0,A
           jmp out2
           LOOP2:
           out2:
           RETI                         
T0_INT:
       CPL P3.4
       RETI
     
T1_INT:
      MOV TH1,#0F8H
          MOV TL1,#30H
          INC R6
          CJNE R6,#3,OUT
          MOV A,R5                           //3秒采集的次数传入累加器A
          //MOV SBUF,R5                   //传向sbuf通信
          MOV B,#20                           //3秒中的滴数乘以20就是一分钟的数
          MUL AB                         //采集到(计算出)1分钟点滴速度
          //MOV R1,B                        //保存数据高八位
          //MOV R2,A                   //保存低八位
          SUBB A,R4       //设置好的滴速 //AB寄存器中怎么和在一起?
          Jc LOOP3
         
          //MOV A,R2
          //MOV B,R1
          //MOV P1,R1           //B中为高八位不可能超过九直接输出
           LCALL DISPLAY   //调用显示程序
           mov p0,a
           clr p3.6
           SETB P3.7
          MOV R6,#0           //中断次数清零
          MOV R5,#0         //         测试到点滴速度清零
          LOOP3:
              //电机
           OUT:
       RETI            
          
_SBUF:
          
      
          
          RETI
DISPLAY:
         MOV B,#10
         div AB
         SWAP A
         ADD A,B
         RET
/*LOOP1:MOV A,B                //判断滴速是否在上限与下限之外
      SUBB A,20H
          JNC WARN
          MOV A,B
          SUBB A,#21H
          JC WARN
          LCALL DISPLAY
          LCALL BUJIN        //设定速度与测得速度不等且不超过范围
          RET */
WARN:SETB P2.4                 //激发报警器
     SETB P3.7                   //点亮红灯
         LCALL BUJIN          //驱动步进电机
         JB P1.7,WARN          //判断是否按取消报警键
         CLR P2.4
         CLR P3.6
          SETB P3.7
          RET
BUJIN:MOV A,B
SUBB A,R5
      //JC  LOOP2//跳到反转
          //JNC LOOP3//跳到正转
                   
          END
          

          ORG 0000H
      JMP MAIN
          ORG 0003H
          JMP INT_0
          ORG 000BH
          JMP T0_INT
          ORG 0013H
          JMP INT_1
          ORG 001BH
          JMP T1_INT
          ORG 0023H
          JMP _SBUF                  
MAIN: SETB EA                 //开中断 ,
      SETB ET0
          SETB ET1
          SETB EX0
          SETB IT0
          SETB EX1
          SETB IT1
          MOV TMOD,#52H
          MOV TH0,#106
          MOV TL0,#106
          MOV TH1,#0F8H
          MOV TL1,#30H
          SETB TR0
          SETB TR1
          MOV 20H,#30  //报警下限
          MOV 21H,#120  //报警上限
          MOV SCON,#60H//开串口通信

          clr p3.6
          clr p3.7
LOOP: JB P1.7,$                 //3秒内计数,模拟传感器采集数据
          INC R5
          JNB P1.7,$
          JMP LOOP
INT_0: INC R4
           MOV A,R4      // 与测试值比较
           MOV B,R5                 //保存实测滴速
           SUBB A,R5
           Jc LOOP1
       MOV A,R4
           LCALL DISPLAY
           MOV P0,A
           jmp out0
           loop1:
           out0:
           RETI
INT_1:
       DEC R4                //设定值
           MOV A,R4            //与测试值比较
           MOV B,R5                                          //保存实测滴速
           SUBB A,R5
           Jc LOOP2            
                                  
       MOV A,R4
           LCALL DISPLAY
           MOV P0,A
           jmp out2
           LOOP2:
           out2:
           RETI                         
T0_INT:
       CPL P3.4
       RETI
     
T1_INT:
      MOV TH1,#0F8H
          MOV TL1,#30H
          INC R6
          CJNE R6,#3,OUT
          MOV A,R5                           //3秒采集的次数传入累加器A
          //MOV SBUF,R5                   //传向sbuf通信
          MOV B,#20                           //3秒中的滴数乘以20就是一分钟的数
          MUL AB                         //采集到(计算出)1分钟点滴速度
          //MOV R1,B                        //保存数据高八位
          //MOV R2,A                   //保存低八位
          SUBB A,R4       //设置好的滴速 //AB寄存器中怎么和在一起?
          Jc LOOP3
         
          //MOV A,R2
          //MOV B,R1
          //MOV P1,R1           //B中为高八位不可能超过九直接输出
           LCALL DISPLAY   //调用显示程序
           mov p0,a
           clr p3.6
           SETB P3.7
          MOV R6,#0           //中断次数清零
          MOV R5,#0         //         测试到点滴速度清零
          LOOP3:
              //电机
           OUT:
       RETI            
          
_SBUF:
          
      
          
          RETI
DISPLAY:
         MOV B,#10
         div AB
         SWAP A
         ADD A,B
         RET
/*LOOP1:MOV A,B                //判断滴速是否在上限与下限之外
      SUBB A,20H
          JNC WARN
          MOV A,B
          SUBB A,#21H
          JC WARN
          LCALL DISPLAY
          LCALL BUJIN        //设定速度与测得速度不等且不超过范围
          RET */
WARN:SETB P2.4                 //激发报警器
     SETB P3.7                   //点亮红灯
         LCALL BUJIN          //驱动步进电机
         JB P1.7,WARN          //判断是否按取消报警键
         CLR P2.4
         CLR P3.6
          SETB P3.7
          RET
BUJIN:MOV A,B
SUBB A,R5
      //JC  LOOP2//跳到反转
          //JNC LOOP3//跳到正转
                   
          END
          

          ORG 0000H
      JMP MAIN
          ORG 0003H
          JMP INT_0
          ORG 000BH
          JMP T0_INT
          ORG 0013H
          JMP INT_1
          ORG 001BH
          JMP T1_INT
          ORG 0023H
          JMP _SBUF                  
MAIN: SETB EA                 //开中断 ,
      SETB ET0
          SETB ET1
          SETB EX0
          SETB IT0
          SETB EX1
          SETB IT1
          MOV TMOD,#52H
          MOV TH0,#106
          MOV TL0,#106
          MOV TH1,#0F8H
          MOV TL1,#30H
          SETB TR0
          SETB TR1
          MOV 20H,#30  //报警下限
          MOV 21H,#120  //报警上限
          MOV SCON,#60H//开串口通信

          clr p3.6
          clr p3.7
LOOP: JB P1.7,$                 //3秒内计数,模拟传感器采集数据
          INC R5
          JNB P1.7,$
          JMP LOOP
INT_0: INC R4
           MOV A,R4      // 与测试值比较
           MOV B,R5                 //保存实测滴速
           SUBB A,R5
           Jc LOOP1
       MOV A,R4
           LCALL DISPLAY
           MOV P0,A
           jmp out0
           loop1:
           out0:
           RETI
INT_1:
       DEC R4                //设定值
           MOV A,R4            //与测试值比较
           MOV B,R5                                          //保存实测滴速
           SUBB A,R5
           Jc LOOP2            
                                  
       MOV A,R4
           LCALL DISPLAY
           MOV P0,A
           jmp out2
           LOOP2:
           out2:
           RETI                         
T0_INT:
       CPL P3.4
       RETI
     
T1_INT:
      MOV TH1,#0F8H
          MOV TL1,#30H
          INC R6
          CJNE R6,#3,OUT
          MOV A,R5                           //3秒采集的次数传入累加器A
          //MOV SBUF,R5                   //传向sbuf通信
          MOV B,#20                           //3秒中的滴数乘以20就是一分钟的数
          MUL AB                         //采集到(计算出)1分钟点滴速度
          //MOV R1,B                        //保存数据高八位
          //MOV R2,A                   //保存低八位
          SUBB A,R4       //设置好的滴速 //AB寄存器中怎么和在一起?
          Jc LOOP3
         
          //MOV A,R2
          //MOV B,R1
          //MOV P1,R1           //B中为高八位不可能超过九直接输出
           LCALL DISPLAY   //调用显示程序
           mov p0,a
           clr p3.6
           SETB P3.7
          MOV R6,#0           //中断次数清零
          MOV R5,#0         //         测试到点滴速度清零
          LOOP3:
              //电机
           OUT:
       RETI            
          
_SBUF:
          
      
          
          RETI
DISPLAY:
         MOV B,#10
         div AB
         SWAP A
         ADD A,B
         RET
/*LOOP1:MOV A,B                //判断滴速是否在上限与下限之外
      SUBB A,20H
          JNC WARN
          MOV A,B
          SUBB A,#21H
          JC WARN
          LCALL DISPLAY
          LCALL BUJIN        //设定速度与测得速度不等且不超过范围
          RET */
WARN:SETB P2.4                 //激发报警器
     SETB P3.7                   //点亮红灯
         LCALL BUJIN          //驱动步进电机
         JB P1.7,WARN          //判断是否按取消报警键
         CLR P2.4
         CLR P3.6
          SETB P3.7
          RET
BUJIN:MOV A,B
SUBB A,R5
      //JC  LOOP2//跳到反转
          //JNC LOOP3//跳到正转
                   
          END
          

这是protues电路图

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top