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

📄 数字频率计.asm

📁 用汇编语言实现了数字频率计。实验已经通过
💻 ASM
字号:
           ORG  0000H
           AJMP BEGIN
           ORG  0003H
           AJMP START
           ORG 0030H
   BEGIN:  MOV 10H,#0
           MOV 11H,#0
           MOV 12H,#0
           MOV 13H,#0
           MOV 14H,#0
           MOV 20H,#02H                  ;位控清零
           MOV DPTR,#8003H
           MOV A,#80H
           MOVX @DPTR,A
           MOV R1,#30H
           MOV SP,#50H                ;堆栈初试化
           MOV TMOD,#01H              ;计数器定时方式1
           MOV TH0,#0
           MOV TL0,#0
           MOV TCON,#01H              ;外中断int0,负边沿出触发
           SETB EA                    ;开所有中断




  RETURN: ACALL SCAN                  ;键盘扫描
          CJNE A,#0FFH,NEXT           ;如果有键按下则转移
          JNB 00H,RETURN              ;当00H中为0时动态显示响应!
          MOV @R1,#0E0H               ;动态显示数据显示输入时由右向左显示频率
          MOV A,10H
          XCHD A,@R1
          MOV DPTR,#6000H
          MOV A,@R1
          MOVX @DPTR,A
          MOV @R1,#0D0H
          MOV A,11H
          XCHD A,@R1
          MOV DPTR,#6000H
          MOV A,@R1
          MOVX @DPTR,A
          MOV @R1, #0B0H
          MOV A,12H
          XCHD A,@R1
          MOV DPTR,#6000H
          MOV A,@R1
          MOVX @DPTR,A
          MOV @R1,#70H
          MOV A,13H
          XCHD A,@R1
          MOV DPTR,#6000H
          MOV A,@R1
          MOVX @DPTR,A
          MOV A,#0F0H
          MOV DPTR,#6000H
          MOVX @DPTR,A
          MOV A,14H
          ACALL TEXT
          MOV A,R0
          MOV DPTR,#8000H
          MOVX @DPTR,A
          SJMP RETURN
  NEXT:   CJNE A,#00H,NEXT1       ;判断键型
          LCALL DELAY200MS        ;延时以待键盘反应
          JB 00H,TT1              ;开动态显示
          SETB 00H
          SETB EX0
   NEXT1: AJMP RETURN             ;继续扫描
   TT1:   CLR 00H
          CLR EX0
          AJMP RETURN             ;继续扫描




  START:   SETB TR0
           JB 01H,START1
           CLR TR0
           PUSH A
           PUSH 01H
           MOV A,TL0
           MOV 08H,A                   ;数据底8位放在 08h 中
           MOV A,TH0
           MOV 09H,A                  ;数据高8位放在 09h 中
           MOV A,08H                 ;数据底8位放在 08h 中
           JNZ CONTIN
           MOV A,09H
           JZ LAST
  CONTIN:  MOV R6,#0                   ;计算结果
           MOV R5,#0FH
           MOV R4,#42H                ;用此数除所测量的数据就是频率值
           MOV R3,#40H
           MOV R1,08H
           MOV R2,09H
           MOV R7,#16
   START1: JB 01H,START2               ;无实际意义,用来连接下面的START2
           SETB 01H
           ACALL LOOP0
           MOV 0DH,R3                  ;保护数据
           MOV 0EH,R4                  ;保护数据
           MOV A,R5                    ;余数乘10后再被除便得第一位小数
           MOV B,#10
           MUL AB
           MOV R3,A
           MOV R4,B
           MOV A,R6
           MOV B,#10
           MUL AB
           ADD A,R4
           MOV R4,A
           MOV R5,B
           MOV R6,#0
           MOV R7,#16
           MOV R1,08H
           MOV R2,09H
           MOV R7,#16
           ACALL LOOP0                 ;利用除法将小数第一位求出
           MOV 10H,R3                  ;小数放到动态显示小数位显示
           MOV R4,0EH                  ;取千位的数值
           MOV R3,0DH
           MOV R6,#0
           MOV R5,#0
           MOV R1,#0E8H                ;1000为除数
           MOV R2,#03H
           MOV R7,#16
           ACALL LOOP0
           MOV 14H,R3                  ;千位数字放到14H中保存先
           MOV A,R6                    ;接下来求百位数字
           MOV R4,A
           MOV A,R5
           MOV R3,A
           MOV R6,#0
           MOV R5,#0
           MOV R1,#64H
           MOV R2,#0
           MOV R7,#16
           ACALL LOOP0
           MOV 13H,R3                 ;百位数字进13H中,动态显示第4位
           MOV A,R5                   ;接下来求个位和十位数字
           MOV B,#10
           DIV AB
           MOV 12H,A
           MOV 11H,B
           MOV TH0,#0
           MOV TL0,#0

           SJMP LAST
  START2:  CLR 01H
   LAST1:  SJMP LAST2
   LAST:   SETB 01H
           POP 01H
           POP A
           CLR IE0
   LAST2:  RETI





  DISPLAY: MOV DPTR,#8000H
           MOVX @DPTR,A
           RET



  TEXT:   CJNE A,#00H,KK1               ; 查字型码子程序入口为A
           MOV R0,#3FH                  ; 出口为R0
           RET
       KK1:CJNE A,#01H,KK2
           MOV R0,#06H
           RET
       KK2:CJNE A,#02H,KK3
           MOV R0,#5BH
           RET
       KK3:CJNE A,#03H,KK4
           MOV R0,#4FH
           RET
       KK4:CJNE A,#04H,KK5
           MOV R0,#66H
           RET
       KK5:CJNE A,#05H,KK6
           MOV R0,#6DH
           RET
       KK6:CJNE A,#06H,KK7
           MOV R0,#7DH
           RET
       KK7:CJNE A,#07H,KK8
           MOV R0,#07H
           RET
       KK8:CJNE A,#08H,KK9
           MOV R0,#7FH
           RET
       KK9:CJNE A,#09H,JJ
           MOV R0,#6FH
        JJ:RET

  SCAN:   CLR P1.0              ;键盘扫描子程序**********************************************
          CLR P1.1              ;                 占用资源RO,A,字型码出口为
          CLR P1.2              ;                 数字出口为A. 堆栈2字节
          CLR P1.3              ;              **********************************************
          MOV A,P1

          ANL A,#0F0H
          CJNE A,#0F0H,KEYSCAN   ;如有键按下则转移
          SJMP EXIT
  KEYSCAN:ACALL DLY20MS          ;延时
          MOV R0,#00H            ;列数用R0来记录
          CLR P1.0
          SETB P1.1
          SETB P1.2
          SETB P1.3
          MOV A,P1
          ANL A,#0F0H
          CJNE A,#0F0H,TTTT1     ;若在本行则转移
  EXIT:   MOV A,#0FFH            ;如无键按下则推退出
          SJMP DONE
  TTTT1:  JB P1.4,TTTT2          ;如按键不在本行则转移
          MOV A,#00H             ;在则将0放热A 中
          AJMP TTTT5
  TTTT2:  JB P1.5,TTTT3          ;如按键不在本行则转移
          MOV A,#01H             ;在则将1放热A 中
          AJMP TTTT5
  TTTT3:  JB P1.6,TTTT4          ;如按键不在本行则转移
          MOV A,#02H             ;在则将2放热A 中
          AJMP TTTT5
  TTTT4:  JB P1.7,TTTT5          ;如按键不在本行则转移
          MOV A,#03H             ;在则将3放热A 中
          AJMP TTTT5
  TTTT5:  ADD A,R0
   DONE:  RET

DLY20MS: MOV 22H,#70H            ; 延时20毫秒子程序       *******占用资源22h,23h****************
    DY1: MOV 23H,#69H
    DY2: DJNZ 23H,DY2
         DJNZ 22H,DY1
         RET
DELAY200MS: MOV 22H,#25         ;延时0.5秒子程序         *****占用资源22h,23h,24h************
   DL333:   MOV 23H,#100
   DL222:   MOV 24H,#49
   DL111:   DJNZ 24H,DL111
            DJNZ 23H,DL222
            DJNZ 22H,DL333
            RET

  LOOP0:   CLR C                ;以下为将测量数据转换成数码管可显示的形式
           MOV A,R3
           RLC A
           MOV R3,A
           MOV A,R4
           RLC A
           MOV R4,A
           MOV A,R5
           RLC A
           MOV R5,A
           MOV A,R6
           RLC A
           MOV R6,A
           MOV A,R5
           MOV PSW.5,C
           CLR C
           SUBB A,R1
           MOV 0FH,A            ;余数送0Fh单元保护
           MOV A,R6
           SUBB A,R2
           JB PSW.5,LOOP2
           JC LOOP1
  LOOP2:   MOV R6,A             ;余数高字节进r6
           MOV R5,0FH           ;低字节进r5
           INC R3               ;结果进r3
    LOOP1: DJNZ R7,LOOP0        ;若没完成数据处理则继续
           CLR PSW.5
           RET


   DELAY600MS:MOV 22H,#50          ;延时0.6秒子程序         *****占用资源22h,23h,24h************
     DL33: MOV 23H,#100
     DL22: MOV 24H,#49
     DL11: DJNZ 24H,DL11

           DJNZ 23H,DL22

           DJNZ 22H,DL33
           RET



⌨️ 快捷键说明

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