⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 a1.asm

📁 51单片机状态顺序编码,监控程序在主程序中
💻 ASM
📖 第 1 页 / 共 2 页
字号:
			 MOV     A,#90H                ;定数大于等于9500按9000进行测量
WK62:     ANL     A,#0F0H
          JNZ     WK63                  ;定数大于等于500且小于9500,百位四舍五入,按整千进行测量
			 MOV     A,#10H                ;定数大于等于100且小于500按1000进行测量
WK63:     MOV     TJH,A
          MOV     TJL,#0                ;按整千计算
			 SETB    DINS                  ;按定数方式进行测量
			 LJMP    WK6E
WK64:     MOV     A,TJL
          SETB    C
			 SUBB    A,#64H
			 JC      WK65
			 MOV     TJL,#64H              ;最长定时限定在64s
			 SJMP    WK66                  
WK65:     MOV     A,TJL
          SUBB    A,#3
			 JNC     WK66
			 MOV     TJL,#4                ;不得小于4s
WK66:     CLR     DINS                  ;按定时方式进行测量
WK6E:     CLR     SETTING
          MOV     SETP,#0
			 LJMP    WKE                   ;返回汇合点
WK7:      MOV     R0,#TJSZ              ;指向定时条件
          LJMP    WK90
WK8:      JNB     SETTING,WK8E          ;查询状态,暂不移位
          MOV     A,SETP                ;调整修改位置
			 INC     A
			 ANL     A,#3
			 MOV     SETP,A
WK8E:     SETB    SETTING               ;设置修改标志
          LJMP    WKE                   ;返回汇合点
WK9:      MOV     R0,#NOSZ              ;指向序号
WK90:     JNB     SETTING,WK9E          ;查询状态,暂不加1
          JNB     SETP1,WK91            ;字节定位
			 INC     R0
WK91:     MOV     A,@R0                 ;读取该字节
          JNB     SETP0,WK92            ;半字节定位
			 SWAP    A                     ;调整到高半位字节
WK92:     ADD     A,#10H                ;十进制加一
          DA      A
			 JNB     SETP0,WK93
			 SWAP    A
WK93:     MOV     @R0,A                 ;保存结果
WK9E:     SETB    SETTING                ;设立修改标志
WKE:      MOV     STATE,STATEN          ;各模块的汇合点,进入次态
          SETB    KEYP                  ;按键处理结束,设立响应标志
			 LJMP    LOOP

;读键子程序:
KIN:      ORL     P1,#0FH               ;从P1口读取键码
          MOV     A,P1
			 CPL     A
			 ANL     A,#0FH
			 INC     A
			 MOVC    A,@A+PC               ;将键码换成顺序码
			 RET
			 DB      0,1,2,0,3,0,0,0
			 DB      4,0,0,0,0,0,0,0

;延时子程序:(0.524s,6MHz晶体524295)
TIM2:     MOV     R5,#2
          MOV     R6,#0
			 MOV     R7,#0
WAT1:     DJNZ    R7,WAT1
          DJNZ    R6,WAT1
			 DJNZ    R5,WAT1
			 RET

;启动一次测量子程序:
BEG:      MOV     NH,#0                 ;计数器清零
          MOV     TH1,#0
			 MOV     TL1,#0
			 MOV     SEC,#0                ;时钟复位
			 MOV     SECD,#0
			 MOV     TL0,#0EEH
			 MOV     TH0,#85H
			 SETB    TR1                   ;开始计数
			 SETB    ET1
			 RET
;三字节除以一字节(R3R4R5/R7-->R4R5):
DV31:     MOV     R2,#10H
DM23:     CLR     C
          MOV     A,R5
			 RLC     A
			 MOV     R5,A
			 MOV     A,R4
			 RLC     A
			 MOV     R4,A
			 MOV     A,R3
			 RLC     A
			 MOV     R3,A			 
			 MOV     F0,C
			 CLR     C
			 SUBB    A,R7
			 ANL     C,/F0
			 JC      DM24
			 MOV     R3,A
			 INC     R5
DM24:     DJNZ    R2,DM23
          MOV     A,R3
			 ADD     A,R3
			 JC      DM25
			 SUBB    A,R7
			 JC      DM26
DM25:     INC     R5
          MOV     A,R5
			 JNZ     DM26
			 INC     R4
DM26:     RET

;双字节十六进制数(R6R7)转换为十进制数(R3R4R5):
HB2:      CLR     A
          MOV     R5,A
			 MOV     R4,A
			 MOV     R3,A
			 MOV     R2,#10H
			 CLR     C
HB3:      MOV     A,R7
          RLC     A
			 MOV     R7,A
			 MOV     A,R6
			 RLC     A
			 MOV     R6,A
			 MOV     A,R5
			 ADDC    A,R5
			 DA      A
			 MOV     R5,A
			 MOV     A,R4
			 ADDC    A,R4
			 DA      A
			 MOV     R4,A
			 MOV     A,R3
			 ADDC    A,R3
			 DA      A
			 MOV     R3,A
			 DJNZ    R2,HB3
			 RET

;显示模块:
DISP:     SETB   DISPLY                 ;执行显示
          MOV    A,STATE                ;按状态进行显示
			 JNZ    DSP0
			 SETB   LED                    ;测量休止期,发光二极管灭
			 MOV    R0,#CPSSZ              ;显示CPS
			 SJMP   DSPN
DSP0:     CJNE   A,#1,DSP1
          CLR    LED                    ;测量中,发光二极管亮
			 MOV    R0,#NOSZ               ;显示测点序号
			 SJMP   DSPN
DSP1:     CJNE   A,#2,DSP2
          MOV    C,SECD2                ;条件状态,发光二极管慢闪
			 MOV    R0,#TJSZ               ;显示测量条件
			 SJMP   DSP3
DSP2:     MOV    C,SECD8                ;序号状态,发光二极管快闪
          MOV    R0,#NOSZ               ;显示测点序号
DSP3:     MOV    LED,C                  ;发光二极管闪烁
DSPN:     MOV    A,@R0                  ;将待显示的数据分解后送显示缓冲区
          ANL    A,#0F0H
			 SWAP   A
			 MOV    BUF1,A
			 MOV    A,@R0
			 ANL    A,#0FH
			 MOV    BUF2,A
			 INC    R0
			 MOV    A,@R0
			 ANL    A,#0F0H
			 SWAP   A
			 MOV    BUF3,A
			 MOV    A,@R0
			 ANL    A,#0FH
			 MOV    BUF4,A                 
			 JNB    SETTING,SHOW           ;修改状态?
			 JNB    SECD8,SS               ;亮1/8s
			 MOV    A,SETP                 ;指向闪烁位
          ANL    A,#3
			 ADD    A,#BUFSZ
			 MOV    R0,A
			 MOV    @R0,#0AH               ;灭1/8s
			 SJMP   SS
SHOW:     MOV    A,BUF1                 ;灭0处理
          JNZ    SS
			 MOV    BUF1,#0AH
			 MOV    A,BUF2
			 JNZ    SS
			 MOV    BUF2,#0AH
			 MOV    A,BUF3
			 JNZ    SS
			 MOV    BUF3,#0AH
			 MOV    A,BUF4                 ;取个位数据
SS:       MOV    DPTR,#LST4             ;取个位数据的笔型表
          MOVC   A,@A+DPTR              ;查表
			 LCALL  OUT                    ;输出个位数据的笔形码
			 MOV    A,BUF3            
			 MOV    DPTR,#LST3
			 MOVC   A,@A+DPTR
			 LCALL  OUT                    ;输出十位数据的笔型码
			 MOV    A,BUF2
			 MOV    DPTR,#LST2
			 MOVC   A,@A+DPTR
			 LCALL  OUT                    ;输出百位数据的笔型码
			 MOV    A,BUF1
			 MOV    DPTR,#LST1        
			 MOVC   A,@A+DPTR              ;输出千位数据的笔型码           
OUT:      MOV    SCON,#0                ;从串行口输出笔型码
          MOV    SBUF,A
WAIT:     JNB    TI,WAIT
          CLR    TI
			 RET
LST1:     DB     12H,0DBH,31H,51H       ;千位笔形码
          DB     0D8H,54H,14H,5BH
			 DB     10H,50H,0FFH,0FFH
LST2:     DB     50H,0D7H,61H,0C1H      ;百位笔型码
          DB     0C6H,0C8H,48H,0D3H
			 DB     40H,0C0H,0FFH,0FFH
LST3:     DB     60H,7BH,0C1H,49H       ;十位笔型码
          DB     5AH,4CH,44H,6BH
			 DB     40H,48H,0FFH,0FFH
LST4:     DB     50H,0DBH,31H,19H       ;个位笔型码
          DB     9AH,1CH,14H,0D9H
			 DB     10H,18H,0FFH,0FFH
			 END      




  
















⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -