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

📄 shukongdianyuan.asm

📁 该程序是数控电源中的,D/A芯片是DAC0832
💻 ASM
字号:



      ORG 0000H
      LJMP MAIN
      ORG 000BH
      LJMP TOF
      ORG 001BH
      LJMP T1F
      ORG 0040H ;主程序存放地址
      TAB1:DB 00H,03H,05H,08H,0AH,0DH,0FH ;对应3.3-3.9V
           DB 12H,15H,17H,1AH,1CH,1FH,21H,24H,26H,29H ;对应4.0-4.9V
           DB 2CH,2EH,31H,33H,36H,38H,3BH,3DH,40H,43H ;对应5.0-5.9V
           DB 45H,48H,4AH,4DH,4FH,52H,55H,57H,5AH,5CH ;对应6.0-6.9V
           DB 5FH,61H,64H,66H,69H,6CH,6EH,71H,73H,76H ;对应7.0-7.9V
           DB 78H,7BH,7DH,80H,83H,85H,88H,8AH,8DH,8FH ;对应8.0-8.9V
           DB 92H,95H,97H,9AH,9CH,9FH,0A1H,0A4H,0A6H,0A9H ;对应9.0-9.9V
           DB 0ACH,0AEH,0B1H,0B3H,0B6H,0B8H,0BBH,0BDH,0C0H,0C3H ;对应10.0-10.9V
           DB 0C5H,0C8H,0CAH,0CDH,0CFH,0D2H,0D5H,0D7H,0DAH,0DCH ;对应11.0-11.9V
           DB 0DFH,0E1H,0E4H,0E6H,0E9H,0ECH,0EEH,0F1H,0F3H,0F6H ;对应12.0-12.9V
           DB 0F8H,0FBH,0FDH,0FFH                     ;对应13.0-13.3V
      TAB2:DB 0EEH,28H,0CDH,6DH,2BH,67H,0E7H,2CH,0EFH,6FH ;对应十位和小数位的数码0-9
      TAB3:DB 0FEH,38H,0DDH,7DH,3BH,77H,0F7H,3CH,0FFH,7FH ;对应个位的数码0-9
MAIN:MOV SCON,#00H ;设置窜行口方式0
      MOV 28H,#00H  ;28H作为TAB1的数据跟表首的距离,TAB1存放的是Dn值
      MOV 27H,#00H  ;27H作为数码显示器的十位的字符跟TAB2表首的距离
      MOV 26H,#00H  ;26H作为数码显示器的个位的字符跟TAB3表首的距离
      MOV 25H,#00H  ;25H存放数码显示器的小数位的字符跟TAB2表首的距离  
                    ;初始显示输出9V
      MOV 26H,#09H  ;个位的字符数据"9"的偏移量存放入26H单元
      MOV 28H,#39H  ;9V对应的Dn值的偏移量存放入28H单元
      SETB EA       ;CPU开中断
      ;SETB ES       ;开串行口中断
      ACALL OUTPUT  ;调用输出子程序
      MOV TMOD,#66H ;定时/计数器T0,T1方式2
      MOV TL0,#0FFH ;装载T0的初值
      MOV TH0,#0FFH
      MOV TL1,#0FFH ;装载T1的初值
      MOV TH1,#0FFH
      SETB TR0      ;启动T0
      SETB ET0      ;开定时/计数器T0的中断
      SETB TR1      ;启动T1
      SETB ET1      ;开定时/计数器T1的中断
      SETB EA       ;CPU开中断
      SJMP $        ;等待
;输出子程序
OUTPUT:MOV DPTR,#TAB1
       MOV A,28H        ;装载表TAB1的数据的偏移量
       MOVC A,@A+DPTR   ;输出
       MOV P1,A
       ACALL DISPLAY    ;嵌套调用显示子程序
       RET              ;子程序返回
DISPLAY:MOV R3,#03H     ;设定显示字符的个数
        MOV R1,#25H     ;R1存放直接地址25H
        MOV A,25H       ;发送小数位
        MOV DPTR,#TAB2  ;装载表TAB2数据(十位和个位)指针
SEND:   MOVC A,@A+DPTR
        MOV SBUF,A      ;装入发送缓冲
WAIT:   JNB TI,WAIT     ;未发完一帧,等等
        CLR TI          ;清发送中断标志
       	DJNZ R3,NEXT1   ;未显示完字符,继续
        JMP END1        ;显示完
NEXT1:  CJNE R3,#02H,NEXT2 ;是十位,转
        MOV DPTR,#TAB3  ;是个位,装载表TAB3数据指针
	JMP NEXT2

NEXT2:  CJNE R3,#01H,NEXT3 ;数据指针没有更改过,转
        MOV DPTR,#TAB2     ;数据指针改回来
NEXT3:  INC R1
        MOV A,@R1
        JMP SEND
END1:   RET          ;子程序返回
 ; "+"键按下(对应T0)处理程序
TOF:    CLR EA       ;CPU关中断
        MOV A,25H    ;取小数位当前偏移量
        CJNE A,#09H,L1  ;距离不为10,转L1
        MOV 25H,#00H   ;距离为10,有进位,偏移量归零
        MOV A,26H     ;取个位当前偏移量
        CJNE A,#09H,L2  ;距离不为10,转L2
        MOV 26H,#00H    ;距离为10,有进位,偏移量归零
        INC 27H         ;十位增1
        JMP END2
L1:     INC 25H         ;小数位增1
        JMP END2
L2:     INC 26H         ;个位增1
        JMP END2
END2:   INC 28H
        ACALL OUTPUT    ;调用输出子程序
        SETB EA         ;CPU开中断
        RETI            ;中断返回
; "-"键按下(对应T1)处理程序
T1F:     
        CLR EA       ;CPU关中断
        MOV A,25H    ;取小数位当前偏移量
        CJNE A,#00H,L3 ;偏移量不是零,转L3
        MOV 25H,#09H   ;有借位,偏移量应是最大
        MOV A,26H      ;取个位当前偏移量
        CJNE A,#00H,L4 ;偏移量不是零,转L4
        MOV 26H,#09H   ;有借位,偏移量应是最大
        DEC 27H      ;十位减1
        JMP END3
L3:     DEC 25H      ;小数位减1
        JMP END3
L4:     DEC 26H      ;个位减1
        JMP END3
END3:   DEC 28H
        ACALL OUTPUT ;调用输出子程序
        SETB EA      ;CPU开中断
        RETI         ;中断返回
END

⌨️ 快捷键说明

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