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

📄 plj8279.asm

📁 基于51单片机的频率计设计
💻 ASM
字号:
DisplayBuffer   EQU  40H   ;设置显示缓冲区的地址为40h-45h共6个字节
Disp1  EQU  55H            ;转换后的数据10(高位)
Disp2  EQU  56H
Disp3  EQU  57H

DIN1   EQU  51H             ;待转换的数据BCD(高位)
DIN2   EQU  52H
DIN3   EQU  53H    
       ORG 0000H
       AJMP MAIN
       ORG 000BH       ;T0中断入口
       AJMP T0INT
       ORG 001BH       ;T1中断入口
       AJMP T1INT
       ORG 0100H

MAIN:  MOV SP,#70H              ;8279初始化
       MOV P2,#0A0H
       MOV R6,#0FFH
       NOP
LOO14: DJNZ R6,LOO14
       MOV  R0,#01H
       MOV  A,#00H
       MOVX @R0,A
       MOV  A,#32H
       MOVX @R0,A
       MOV  A,#0DFH
       MOV  R0,#01H
       MOVX @R0,A
     
       MOV IE,#8AH     ;开放T0、T1中断
       MOV TMOD,#51H ;T0定时,T1计数
       MOV TH0,#0D8H
       MOV TL0,#0FAH    ;定时10ms
       MOV 50H,#100    ;100*10ms=1s
       MOV TH1,#00H
       MOV TL1,#00H
       MOV DIN1,#0
       MOV DIN2,#0
       MOV DIN3,#0;存放采集到的频率
       MOV 40H,#0
       MOV 41H,#0
       MOV 42H,#0
       MOV 43H,#0
       MOV 44H,#0
       MOV 45H,#0
       SETB TR1
       SETB TR0
WAIT:  AJMP WAIT ;等待中断
T1INT: INC DIN1;计数器溢出则23H单元自增1
       RETI 
T0INT:               ;定时10ms产生中断
       DJNZ 50H,NEXT1
       CLR TR1
       CLR TR0
       MOV DIN2,TH1 ;1s时间到则采集数据
       MOV DIN3,TL1
       MOV TH1,#00H
       MOV TL1,#00H
       LCALL TRANS
       LCALL DIS
       AJMP EXIT
NEXT1: MOV TH0,#0D8H ;继续定时
       MOV TL0,#0FAH
EXIT:  RETI

TRANS:CLR A
      MOV Disp1,A
      MOV Disp2,A
      MOV Disp3,A
      MOV 3AH,#18H         ;转换3字节十六进制整数
LOOP: MOV A,DIN3            ;移出待转换数的一位到CY中
      RLC A
      MOV DIN3,A
      MOV A,DIN2
      RLC A
      MOV DIN2,A
      MOV  A,DIN1
      RLC  A
      MOV  DIN1,A
      MOV  A,Disp3         ;BCD码带进位自身相加,相当于乘2 
      ADDC A,Disp3
      DA   A
      MOV  Disp3,A
      MOV  A,Disp2
      ADDC A,Disp2
      DA  A
      MOV Disp2,A
      MOV A,Disp1
      ADDC A,Disp1
      DA  A
      MOV Disp1,A          ;双字节十六进制数的万位数不超过6,不用调整
      DJNZ 3AH,LOOP        ;处理完16BIT
      RET

DIS:   SETB RS0;                           选择工作寄存器组1,
       CLR  RS1;                           这样可保护原工作寄存器组(0
       MOV R0,#DisplayBuffer       ;分别取出每一位,放到DisplayBuffer
       MOV A,Disp1
       ANL A,#0F0H
       SWAP A
       MOV @R0,A
       INC R0
       MOV A,Disp1
       ANL A,#0FH
       MOV @R0,A
       INC R0
       MOV A,Disp2
       ANL A,#0F0H
       SWAP A
       MOV @R0,A
       INC R0
       MOV A,Disp2
       ANL A,#0FH
       MOV @R0,A
       INC R0
       MOV A,Disp3
       ANL A,#0F0H
       SWAP A
       MOV @R0,A
       INC R0
       MOV A,Disp3
       ANL A,#0FH
       MOV @R0,A

DISPLAY:
       MOV 30H,#80H
       MOV 31H,#DisplayBuffer 
       MOV R7,#06H  
LOOP4: MOV DPTR,#0A001H            
       MOV A,30H
       MOVX @DPTR,A
       MOV R1,31H
       MOV A,@R1
       MOV DPTR,#sedz
       MOVC A,@A+DPTR
       MOV DPTR,#0A000H
       MOVX @DPTR,A
       INC 31H
       INC 30H
       DJNZ R7,LOOP4
       RET
sedz:  DB  0C0H,0F9H,0A4H,0B0H,99H,92H
       DB  82H,0F8H,80H,90H,88H,83H
       DB  0C6H,0A1H,86H,8CH,40H,79H
       DB  24H,30H,19H,12H,02H,78H
       DB  00H,10H,0FFH
       RET     
  
       END

⌨️ 快捷键说明

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