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

📄 noname1.asm

📁 基于8051单片机的频率计设计(汇编源码)
💻 ASM
字号:
     TIME1S    BIT  20H.0
     TIME2MS  BIT  20H.1
     DISTEMP   DATA 60H     ;60h~65h显示缓冲区
     DISWORK   DATA 66H     ;显示工作指示
     LEDBIT    DATA 67H
     LEDCOUNT  DATA 68H     ;数码管个数
     TIME1H    DATA 69H
     TIME1M    DATA 6AH
     TIME1L    DATA 6BH
     TIME1HTEMP DATA 70H
     TIMECOUNT DATA 6CH
     TIMECOUNT1 DATA 6DH
     TIME0H    DATA 6EH
     TIME0L    DATA 6FH
     ORG  0000H
     LJMP MAIN
     ORG  000BH
     LJMP INT0
     ORG  001BH
     LJMP INT1
     ORG 30H
MAIN:MOV SP,#31H
     LCALL INIT_DEVICES
L3:  CPL P1.0
     JNB TIME2MS,L3   ;判断定时2ms
     CLR TIME2MS
     CALL DIS
     JNB TIME1S,L3   ;判断定时1s到标志
     CLR TIME1S      ;清标志
     MOV R5,TIME1H
     MOV R6,TIME1M
     MOV R7,TIME1L
     CALL HB2        ;定时到进行计算
     CALL DBCD
     SJMP L3
;************************************************************AT89S51初始化
INIT_DEVICES:
     CLR TIME1S
     SETB TIME2MS
     MOV 60H,#00H
     MOV 61H,#00H
     MOV 62H,#00H
     MOV 63H,#00H
     MOV 64H,#00H
     MOV 65H,#00H
     MOV TIME1HTEMP,#00H
     MOV TIME1H,#00H
     MOV TIME1M,#00H
     MOV TIME1L,#00H
     MOV LEDCOUNT,#06H
     MOV DISWORK,#00H
     MOV LEDBIT,#0FEH
     MOV TIMECOUNT,#100  ;
     MOV TIMECOUNT1,#05
     MOV TMOD,#51H  ;定时器0方式1定时,定时器1方式1计数
     MOV TH0,#0FCH  ;定时10毫秒
     MOV TL0,#18H
     MOV TH1,#00H   ;定时器1用于计数
     MOV TL1,#00H
     MOV IE,#8AH    ;CPU开中断,T0开中断,T1开中断
     SETB TR1
     SETB TR0
     ret
;************************************************************
;HB2 : 功能:双字节十六进制整数转换成双字节BCD码整数
;入口条件:待转换的双字节十六进制整数在R5,R6、R7中。
;出口信息:转换后的三字节BCD码整数在R1,R2,R3,R4中。
;影响资源:PSW、A、R2~R7 堆栈需求: 2字节
HB2: CLR A ;BCD码初始化
     MOV R1,A
     MOV R2,A
     MOV R3,A
     MOV R4,A
     MOV R0,#18H ;转换双字节十六进制整数
HB3: MOV A,R7 ;从高端移出待转换数的一位到CY中
     RLC A
     MOV R7,A
     MOV A,R6
     RLC A
     MOV R6,A
     MOV A,R5
     RLC A
     MOV R5,A
     MOV A,R4 ;BCD码带进位自身相加,相当于乘2
     ADDC A,R4
     DA A ;十进制调整
     MOV R4,A
     MOV A,R3
     ADDC A,R3
     DA A
     MOV R3,A
     MOV A,R2
     ADDC A,R2
     DA A
     MOV R2,A
     MOV A,R1
     ADDC A,R1
     MOV R1,A;双字节十六进制数的万位数不超过6,不用调整
     DJNZ R0,HB3 ;处理完16bit
     RET
;DBCD 功能:拆分BCD码整数
;入口条件:R3、R4.R5。
;出口信息:转换后从高位到低位分别在60H~65H中。
;影响资源:A、B
DBCD:MOV A,R2
     MOV B,#10H
     DIV AB
     MOV 60H,A
     MOV 61H,B
     MOV A,R3
     MOV B,#10H
     DIV AB
     MOV 62H,A
     MOV 63H,B
     MOV A,R4
     MOV B,#10H
     DIV AB
     MOV 64H,A
     MOV 65H,B
     RET

;*************************************************************
;;DIS 功能:显示子程序
;入口条件:待转换的双字节十六进制整数在60H~65H中。
;出口信息:
;影响资源:PSW、A、R0
DIS:
     MOV  DPTR,#TAB
     MOV A,#5FH
     ADD A,LEDCOUNT   ;LEDCOUNT从左到右543210
     MOV R0,A
     MOV A,@R0 ;当地址大于等于66H显示
     MOVC A,@A+DPTR
     MOV  P0,A
     MOV  A,LEDBIT
     MOV  P2,A
     RL   A
     MOV  LEDBIT,A
     DJNZ LEDCOUNT,DISOUT
     MOV LEDCOUNT,#06H
     MOV LEDBIT,#0FEH
DISOUT:RET
;****************************************************中断子程序
INT1:PUSH A                                         ; 增加扩展位
     PUSH PSW
     PUSH DPH
     PUSH DPL
     MOV TH1,#00H   ;定时器1用于计数
     MOV TL1,#00H
     INC TIME1HTEMP  ;扩展计数范围
     POP DPL
     POP DPH
     POP PSW
     POP A
     RETI

INT0:
      MOV TH0,#0FCH  ;定时2毫秒
      MOV TL0,#18H
      SETB TIME2MS
      DJNZ TIMECOUNT,INT01
      MOV TIMECOUNT,#100
      DJNZ TIMECOUNT1,INT01
      MOV TIMECOUNT1,#05
      MOV TIME1H,TIME1HTEMP
      MOV TIME1M,TH1
      MOV TIME1L,TL1
      MOV TH1,#00H
      MOV TL1,#00H
      MOV TIME1HTEMP,#00H
      SETB TIME1S
INT01:RETI



;0~10断码表
TAB:db 0c0h,0f9h,0a4h
    db 0b0h,99h,92h,82h
    db 0f8h,80h,90h

⌨️ 快捷键说明

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