电子大赛低频功率放大器程序_honguo526的空间_百度空间

共同学习,2009年电子大赛低频功率放大器程序。主要是功率测量。

MY MSN:

;5DH,5EH,5FH显示缓存区
        DATA1 EQU P0
        RS EQU P2.2
        RW EQU P2.3
        E   EQU P2.4
        PSB EQU P2.1
        RST EQU P2.0

        CS EQU P2.6

        OL EQU 54H
        OM EQU 55H
        OH EQU 56H
        IL EQU 57H
        IM EQU 58H
        IH EQU 59H
        EL EQU 5AH
        EML EQU 5BH
        EMH EQU 5CH
        EH EQU 5DH


        ORG 00H
        LJMP START
        ORG 030H

START:MOV SP,#6FH
        MOV PSW,#00H
        MOV P0,#0FFH
        LCALL LCDINT      ;LCD初始化程序
        LCALL YDELAY
        LCALL DISP_0      ;主屏显示,初始化显示
        SETB PSB
        SETB RST
        MOV 50H,#0E8H
        MOV 51H,#03H     ;F X 1000显示
        MOV 52H,#01H
        MOV 53H,#00H     ;OUT 的乘数
        MOV 40H,#01H
        MOV 41H,#00H      ;OUT 的除数
        MOV 42H,#01H
        MOV 43H,#00H     ;IN 的乘数
        MOV 44H,#01H
        MOV 45H,#00H      ;IN 的除数

STA: MOV 30H,#00H
        MOV 31H,#00H
        MOV 36H,#00H
        MOV 35H,#00H

        CLR CS      ;选择OUT功率通道
       ; LCALL DELAY
        LCALL JISHU
        MOV A,TL1
        MOV 30H,A    ;将TL1存入固定地址
        MOV A,TH1
        MOV 31H,A    ;将TH1存入固定地址
        SETB CS      ;选择IN功率通道
        LCALL JISHU
        MOV A,TL1
        MOV 35H,A    ;将TL1存入固定地址
        MOV A,TH1
        MOV 36H,A    ;将TH1存入固定地址
     

;*********CESHI******
       ; MOV 30H,#96H
       ;    MOV 40H,30H
       ; MOV 31H,#01H
        ;   MOV 41H,31H
       ; MOV 35H,#46H
        ;   MOV 45H,35H
       ; MOV 36H,#02H
        ;   MOV 46H,36H

;====================================================
;          O,I,F显示
;
;====================================================
        LCALL OJISUAN

        LCALL ODISP


        LCALL IJISUAN
        LCALL IDISP
       ; LJMP $

        LCALL EJISUAN
        LCALL EDISP

        LJMP STA

;*************************
;T1计数   压频
;======================================
JISHU: MOV R2,#14H ;定时20个0.05秒
        MOV TMOD,#51H ;设置T0定时T1计数
        MOV TH0,#3CH;置定时器初值
        MOV TL0,#0B0H
        MOV TH1,#00H;置计数器初值
        MOV TL1,#00H
        SETB TR0 ;启动定时
        SETB TR1 ;启动计数

XX:     JBC TF0,LOOP ;定时溢出则转移
        SJMP XX ;否则继续查询
LOOP:   MOV TH0,#3CH ;置定时初值
        MOV TL0,#0B0H
        DJNZ R2,XX ;R2不等于0则转移
        CLR TR1 ;停止计数
        RET


OJISUAN: MOV R0,#30H
         MOV R2,#02H
         MOV R1,#52H
         MOV R3,#02H
         LCALL MMUL
         MOV R0,#30H
         MOV R1,#40H
         MOV R3,#2
         LCALL MDIV

         MOV 46H,#00H
         MOV 47H,#00H
         MOV 48H,#00H
         MOV R0,#30H
         MOV R1,#46H
ODTB5: MOV A,@R0
       MOV @R1,A
       INC R0
       INC R1
       DJNZ R2,ODTB5

         MOV R4,46H
         MOV R3,47H
         MOV R2,48H
         MOV R6,#03H
         MOV R0,#54H
         LCALL MBTD
         RET


IJISUAN: MOV R0,#35H
         MOV R2,#02H
         MOV R1,#42H
         MOV R3,#02H
         LCALL MMUL
         MOV R0,#35H
         MOV R1,#44H
         MOV R3,#2
         LCALL MDIV

         MOV 60H,#00H
         MOV 61H,#00H
         MOV 62H,#00H
         MOV R0,#35H
         MOV R1,#60H
IDTB5: MOV A,@R0
       MOV @R1,A
       INC R0
       INC R1
       DJNZ R2,IDTB5

         MOV R4,60H
         MOV R3,61H
         MOV R2,62H
         MOV R6,#03H
         MOV R0,#57H
         LCALL MBTD
         RET


EJISUAN: MOV R0,#46H
         MOV R2,#2
         MOV R1,#50H
         MOV R3,#2
         LCALL MMUL
     ;    LJMP $
         MOV R0,#46H
         MOV R1,#60H
         MOV R3,#2
         LCALL MDIV
       ; LJMP $
       MOV 60H,#00H
       MOV 61H,#00H
       MOV 62H,#00H
       MOV R0,#46H
       MOV R1,#60H
EDTB5: MOV A,@R0
       MOV @R1,A
       INC R0
       INC R1
       DJNZ R2,EDTB5

         MOV R4,60H
         MOV R3,61H
         MOV R2,62H
         MOV R6,#04H
         MOV R0,#5AH
         LCALL MBTD
         RET


;----------------------------------------


ODISP: MOV R2,#95H
        LCALL WRC
        MOV DPTR,#TAB5

        MOV A,OH
        MOVC A,@A+DPTR
        MOV R2,A
        LCALL WRD

        MOV A,#10
        MOVC A,@A+DPTR
        MOV R2,A
        LCALL WRD

        MOV A,OM
        MOVC A,@A+DPTR
        MOV R2,A
        LCALL WRD

        MOV A,OL
        MOVC A,@A+DPTR
        MOV R2,A
        LCALL WRD

        RET

IDISP: MOV R2,#08DH       ;写入显示缓冲区起始地址为第?行第?列
        LCALL WRC
        MOV DPTR,#TAB5

        MOV A,IH
        MOVC A,@A+DPTR
        MOV R2,A
        LCALL WRD


        MOV A,#10
        MOVC A,@A+DPTR
        MOV R2,A
        LCALL WRD

        MOV A,IM
        MOVC A,@A+DPTR
        MOV R2,A
        LCALL WRD


        MOV A,IL
        MOVC A,@A+DPTR
        MOV R2,A
        LCALL WRD


        RET

EDISP: MOV R2,#09DH       ;写入显示缓冲区起始地址为第?行第?列
        LCALL WRC
        MOV DPTR,#TAB5

        MOV A,EH
        MOVC A,@A+DPTR
        MOV R2,A
        LCALL WRD

        MOV A,#10
        MOVC A,@A+DPTR
        MOV R2,A
        LCALL WRD

        MOV A,EMH
        MOVC A,@A+DPTR
        MOV R2,A
        LCALL WRD

        MOV A,EML
        MOVC A,@A+DPTR
        MOV R2,A
        LCALL WRD

        MOV A,EL
        MOVC A,@A+DPTR
        MOV R2,A
        LCALL WRD
        RET


;--------------------------------------------------
MMUL: MOV A,R3
      MOV   R5,A
      MOV   A,R2
      MOV   R4,A
      SWAP A
      RR    A
      INC   A      ;求累加移位次数
      MOV   R6,A
      MOV   A,R0
      ADD   A,R2
      MOV   R0,A
      CLR   A
MUL1: MOV   @R0,A
      INC   R0
      DJNZ R3,MUL1;清计算区
MUL5: MOV   A,R5
      MOV   R3,A
      PUSH PSW
      MOV   A,R4
      ADD   A,R3
      MOV   R2,A
      POP   PSW
MUL2: DEC   R0
      MOV   A,@R0
      RRC   A
      MOV   @R0,A
      DJNZ R2,MUL2;被乘数连同中间结果右移,
      JNC   MUL3   ;得出被乘数相应位是否为1
      MOV   A,R4
      ADD   A,R0
      MOV   R0,A
;     CLR   C
MUL4: MOV   A,@R0
      ADDC A,@R1
      MOV   @R0,A
      INC   R0
      INC   R1
      DJNZ R3,MUL4;是1,在中间结果上加乘数
      PUSH PSW
      CLR   C
      MOV   A,R1
      SUBB A,R5
      MOV   R1,A
      POP   PSW
      DJNZ R6,MUL5;进入下一循环
      SJMP YUI0
MUL3: MOV   A,R0   ;非1,移指针
      ADD   A,R4
      ADD   A,R5
      MOV   R0,A
      DJNZ R6,MUL5;进入下一循环
YUI0: MOV   A,R4
      ADD   A,R5
      MOV   R2,A
MUL7: DEC   R0
      DEC   R2
      CJNE @R0,#0H,MUL6
      CJNE R2,#0H,MUL7 ;检出结果长度
MUL6: MOV   A,R0
      SUBB A,R2
      MOV   R0,A        ;设置结果指针
      INC   R2
      RET               ;返回

;-----------------------------
MDIV: MOV   A,R3
      MOV   R5,A
      MOV   A,R2
      MOV   R4,A
      SWAP A
      RR    A
      INC   A   ;求出移位减次数
      MOV   R6,A
      MOV   A,R0
      ADD   A,R2
      MOV   R0,A
      CLR   A
DIV1: MOV   @R0,A
      INC   R0
      DJNZ R3,DIV1;清计算区
DIV6: MOV   A,R5
      MOV   R3,A
      MOV   A,R4
      MOV   R2,A
      PUSH PSW
      CLR   C
      MOV   A,R0
      SUBB A,R3
      SUBB A,R2
      MOV   R0,A
      MOV   A,R2
      ADD   A,R3
      MOV   R2,A
      POP   PSW
DIV2: MOV   A,@R0
      RLC   A
      MOV   @R0,A
      INC   R0
      DJNZ R2,DIV2;被除数连同结果一起左移
      MOV   F0,C   ;溢出位保存于F0
      CLR   C
      MOV   A,R0
      SUBB A,R3
      MOV   R0,A
      SETB C
DIV3: MOV   A,@R1
      CPL   A
      ADDC A,@R0
      MOV   @R0,A
      INC   R0
      INC   R1
      DJNZ R3,DIV3
      JC    DIV4   ;移出值减除数,
      SETB C
      JBC   F0,DIV4
      CLR   C      ;不够减
      MOV   A,R5
      MOV   R3,A
      MOV   A,R0
      SUBB A,R3
      MOV   R0,A
      MOV   A,R1
      SUBB A,R3
      MOV   R1,A
DIV5: MOV   A,@R0
      ADDC A,@R1
      MOV   @R0,A
      INC   R0
      INC   R1
      DJNZ R3,DIV5;加上除数,恢复原移出值
      CLR   C      ;并设结果为0
DIV4: JBC   F0,EDIV;结果溢出错
      PUSH PSW    ;够减,保存1结果
      CLR   C
      MOV   A,R1
      SUBB A,R5
      MOV   R1,A   ;恢复指针
      POP   PSW
      DJNZ R6,DIV6;进入下一循环
      PUSH PSW
      CLR   C
      MOV   A,R0
      SUBB A,R5
      SUBB A,R4
      MOV   R0,A
      MOV   A,R4
      MOV   R2,A
      POP   PSW
DIV7: CLR   A
      ADDC A,@R0
      MOV   @R0,A
      INC   R0
      DJNZ R4,DIV7;四舍五入
      JC    EDIV   ;溢出错
DIV9: DEC   R0
      DEC   R2
      CJNE @R0,#0H,DIV8
      CJNE R2,#0H,DIV9;求结果位数
DIV8: MOV   A,R0
      SUBB A,R2
      MOV   R0,A   ;设置结果指针
      INC   R2
      MOV   A,R5
      MOV   R3,A
      CLR   C      ;清C,表示计算正确
      RET          ;返回
EDIV: SETB C      ;设C,表示计算有误
      RET         ;返回

;---------------------MBTD-----------------------
MBTD:   MOV R7,#0AH
        LCALL CHU
        MOV A,R7

        MOV @R0,A
        INC R0
        DJNZ R6,MBTD
        RET

;三字节无符号除法程序(R2R3R4/R7)=(R2)R3R4 余数R7
;入口    :R2,R3,R4,R7
;占用资源:ACC,B,F0
;堆栈需求:3字节
;出口    :(R2),R3,R4,R7,OV
CHU      :MOV    A,R2
          MOV    B,R7
          DIV    AB
          PUSH   A
          MOV    R2,B
          MOV    B,#10H
NDV311   :CLR    C
          MOV    A,R4
          RLC    A
          MOV    R4,A
          MOV    A,R3
          RLC    A
          MOV    R3,A
          MOV    A,R2
          RLC    A
          MOV    R2,A
          MOV    F0,C
          CLR    C
          SUBB   A,R7
          JB     F0,NDV312
          JC     NDV313
NDV312   :MOV    R2,A
          INC    R4
NDV313   :DJNZ   B,NDV311
          POP    A
          CLR    OV
          JZ     NDV314
          SETB   OV
NDV314   :XCH    A,R2
          MOV    R7,A
          RET

;====================================================================
LCDINT: MOV R2,#38H       ;功能设置:DL=1 8位,N=1 双行显示,F=0 5X7点阵
        LCALL WRC
        MOV R2,#01H       ;清屏,AC=0
        LCALL WRC
        MOV R2,#06H       ;字符进入模式:光标右移,AC+1,字符不动
        LCALL WRC
        MOV R2,#0CH       ;D=1,开显示;C=0,关光标;B=0,字符不闪烁
        LCALL WRC
        RET

;------------------------------------------------------------
DISP_0: MOV DPTR,#TAB1    ;使用数据表TAB1
        MOV R2,#80H       ;写入显示缓冲区起始地址为第1行第1列
        LCALL WRC
        LCALL YDELAY
        MOV R4,#15       ;N位数据
        LCALL WRN         ;

        MOV DPTR,#TAB2    ;使用数据表TAB2
        MOV R2,#090H      ;写入显示缓冲区起始地址为第2行第1列
        LCALL WRC
        LCALL YDELAY
        MOV R4,#15        ;N位数据
        LCALL WRN

        MOV DPTR,#TAB3    ;使用数据表TAB3
        MOV R2,#088H       ;写入显示缓冲区起始地址为第3行第1列
        LCALL WRC
        LCALL YDELAY
        MOV R4,#15       ;N位数据
        LCALL WRN         ;

        MOV DPTR,#TAB4    ;使用数据表TAB4
        MOV R2,#098H      ;写入显示缓冲区起始地址为第4行第1列
        LCALL WRC
        LCALL YDELAY
        MOV R4,#15      ;N位数据
        LCALL WRN
        RET
; -------查询忙碌标志BF位-------------
BUSY:
        CLR RS           ;RS=0
        SETB RW          ;RW=1
        MOV DATA1,#0FFH ;读取
        CLR E            ;E=0
        NOP
        SETB E           ;E=1
        NOP
        MOV A,DATA1
        CLR E
        JB ACC.7,BUSY    ;BF=1则等待,表示忙
        RET
;-------写控制指令-------------------
WRC:    LCALL BUSY       ;先查询BF位
        CLR RS           ;RS=0
        CLR RW           ;RW=0
        SETB E           ;E=1
        NOP
        MOV DATA1,R2      ;指令存入A
        CLR E            ;E=0 信号下降 写信号
        RET

;-------写一个字符数据---------------
WRD:    LCALL BUSY       ;先查询BF位
        ;CLR E
        SETB RS          ;RS=1
        CLR RW           ;RW=0
        SETB E           ;E=1
        NOP
        MOV DATA1,R2      ;数据存入A
        CLR E            ;E=0
        RET
;-------读一个字符数据---------------
RDD:    LCALL BUSY       ;先查询BF位
        SETB RS          ;RS=1
        SETB RW          ;RW=1
        MOV DATA1,#0FFH ;读入DATA1
        SETB E           ;E=1
        NOP
        NOP
        CLR E            ;E=0
        MOV A,DATA1      ;读数据存入A
        RET
;-------连续读入N个字符数据并写入DDRAM-------
;寄存器:R2:数据寄存器,调用时,发送至DATA1
;       R4:数目N寄存器
;--------------------------------------------
WRN:    CLR A            ;A清零
        MOVC A,@A+DPTR   ;查表
        INC DPTR         ;查表指针加1
        MOV R2,A         ;存入R2寄存器,等待发送至DATA1
        LCALL WRD
        DJNZ R4,WRN      ;连续写N位数据
        RET

TAB1: DB '低频功率放大器 '
TAB2: DB '输出功率:     W'
TAB3: DB '供给功率:     W'
TAB4: DB '整机效率:      '

TAB5: DB '0123456789. '

YDELAY: MOV R6,#20
   YD1: MOV R7,#250
        DJNZ R7,$
        DJNZ R6,YD1
        RET
;******显示子程序******



郑重声明:资讯 【电子大赛低频功率放大器程序_honguo526的空间_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——