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

📄 pinlvji.asm

📁 基于51单片机的频率计设计
💻 ASM
字号:
DisplayBuffer   EQU  40H   ;设置显示缓冲区的地址为40h-45h共6个字节
Disp1  EQU  21H
Disp2  EQU  22H
Disp3  EQU  23H

       ORG 0000H
       AJMP START
       ORG 000BH       ;T0中断入口
       AJMP T0INT
       ORG 0013H       ;INT1中断入口
       AJMP INT_1
       ORG 0100H
START:
       MOV SP,#70H
       MOV IE,#86H     ;开放T0、INT1中断
       MOV TMOD,#01H ;T0定时
       MOV TH0,#0D8H
       MOV TL0,#0F0H    ;定时10ms
       MOV 20H,#100    ;100*10ms=1s
       MOV Disp1,#0
       MOV Disp2,#0
       MOV Disp3,#0;存放采集到的频率
       SETB TR0
WAIT:  AJMP WAIT ;等待中断

T0INT:               ;定时10ms产生中断
       DJNZ 20H,NEXT1
       MOV Disp2,TH1 ;1s时间到则采集数据
       MOV Disp1,TL1
       ACALL ConvertoBuffer
       ACALL DISPLAY
       AJMP EXIT
NEXT1: MOV TH0,#0D8H ;继续定时
       MOV TL0,#0F0H
EXIT:  RETI

INT_1: CLR C
       MOV A,Disp1
       ADD A,#01H
       DA A
       MOV Disp1,A
       MOV A,Disp2
       ADDC A,#00H
       DA A
       MOV Disp2,A
       MOV A,Disp3
       ADDC A,#00H
       DA A
       MOV Disp3,A
       RETI

DISPLAY:
       MOV   R1,#DisplayBuffer       ;指向显示数据首址
       MOV   R4,#11111110b      ;扫描控制字初值
PLAY:  MOV   A,R4          ;扫描字放入A
       MOV   P2,A          ;从P2口输出
       MOV   A,@R1         ;取显示数据到A
       MOV   DPTR,#TAB     ;取段码表地址
       MOVC  A,@A+DPTR     ;查显示数据对应段码
       MOV   P1,A          ;段码放入P1口
       LCALL  Delay
       INC   R1            ;指向下一地址
       MOV   A,R4            ;扫描控制字放入A
       JNB   ACC.5,ENDOUT    ;扫到第六位时结束
       RL   A               ;A中数据循环左移
       MOV   R4,A            ;放回R5内
       AJMP  PLAY            ;跳回PLAY循环
ENDOUT:
       RET                      ;子程序返回
TAB: DB 3FH,06H,5BH,4FH,66H,6DH 
     DB 7DH,07H,7FH,6FH,77H,7CH            ;"0""1""2" "3""4""5""6""7" "8""9""
     DB 39H,5EH,79H,71H,40H,00H
Delay:
       MOV R6,#2
Del:
       MOV R7,#249
       DJNZ R7,$
       DJNZ R6,Del
       RET

ConvertoBuffer:
          MOV R1,#DisplayBuffer      ;R1指向显示缓冲区,存储要显示的六位
Convert:
          MOV A,Disp1
          MOV B,#10       ;                十位,个位分开,个位放在B中,十位放在A中
          DIV AB
          MOV @R1,B;
          INC R1;                          缓冲寄存器的地址加1
          MOV @R1,A;                       存入缓冲区
          ;
          INC R1
          MOV A,Disp2
          MOV B,#10
          DIV AB
          MOV @R1,B;
          INC R1;                          缓冲寄存器的地址加1
          MOV @R1,A;                       
          ;
          INC R1
          MOV A,Disp3
          MOV B,#10
          DIV AB
          MOV @R1,B
          INC R1;                       缓冲寄存器的地址加1
          MOV @R1,A;                       
          ;
          RET
	  END

⌨️ 快捷键说明

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