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

📄 数控信号发生器.asm

📁 能产生正弦波、三角波、锯齿波和方波
💻 ASM
📖 第 1 页 / 共 2 页
字号:

;******************信号发生器****************************
;F<512Hz时,每周期输出128点,F>=512Hz时,每周期输出64点
;********************************************************
        FLAG     DATA    20H    ;辅助标志字节
        T        DATA    21H    ;自变量
        STATE    DATA    22H    ;状态标志字节
        OUT      BIT     STATE.7;输出状态标志位
        FF       DATA    23H    ;布尔运算区
        TL0_     DATA    31H
        TH0_     DATA    32H

        DBUF     EQU     38H     ;显示缓冲区(共6位)首地址
        DSP      DATA    3EH    ;显示扫描指针
        KEYC     DATA    3FH    ;键码
        KEYOK    BIT     FLAG.0 ;按键已响应(0)标志位
        KEYX     BIT     FLAG.1 ;已消抖(0)标志位

        DACA2    EQU     7FFFH   ;提供参考电压DAC地址
        DACA1    EQU     0BFFFH   ;
        CTRL     EQU     0FE00H   ;8155控制字地址
        PRA      EQU     0FE01H   ;8155A口地址
        PRB      EQU     0FE02H   ;8155B口地址
        PRC      EQU     0FE03H   ;8155C口地址
;*********************************************************
        ORG      0000H
        AJMP     MAIN
        ORG      0003H
        RETI
        ORG      000BH
        RETI
       ; AJMP     TIMER0
        ORG      0013H
        AJMP     INT1
        ORG      001BH
        AJMP     TIMER1

        ORG      0030H
MAIN:   MOV      R0,#20H           ;数据区初始化
        MOV      @R0,#0
        INC      R0
        CJNE     R0,#61H,$-3
        ACALL    MIELING           ;灭0处理
        MOV      R6,#150
MAIN1:  MOV      R7,#0
MAIN2:  MOV      DPTR,#CTRL       ;自检
        MOV      A,#0FH           ;A,B,C输出
        MOVX     @DPTR,A
        INC      DPTR             ;A
        CLR      A
        MOVX     @DPTR,A
        INC      DPTR             ;B
        MOV      A,#0FH
        MOVX     @DPTR,A
        INC      DPTR             ;C
        MOV      A,#0FFH
        MOVX     @DPTR,A
        DJNZ     R7,MAIN2
        DJNZ     R6,MAIN1
        MOV      DPTR,#PRB        ;8155初始化
        MOV      A,#4
        MOVX     @DPTR,A
        CLR      A                ;DAC0832初始化
        MOV      DPTR,#DACA1
        MOVX     @DPTR,A
        MOV      DPTR,#DACA2
        MOVX     @DPTR,A

        MOV      SP,#60H
        MOV      TMOD,#11H             ;定时器初始化
        MOV      TL1,#LOW(65536-2000)
        MOV      TH1,#HIGH(65536-2000)
        SETB     EA
        SETB     TR0
        SETB     TR1
        SETB     ET1
        SETB     EX1
        SETB     IT1
;---------------------------------------------------
OUTPUT: CLR     A             ;在设置状态时停止输出
        MOV     DPTR,#DACA2
        MOVX    @DPTR,A
        JNB      OUT,$
;输出电压最大值
        MOV      R0,#DBUF+1
        MOV      A,@R0
        MOV      B,#50
        MUL      AB
        MOV      DPTR,#DACA2
        MOVX     @DPTR,A
;选择输出波形
        DEC      R0
        MOV      A,@R0
        RL       A
        MOV      B,A
        MOV      DPTR,#BOXING
        MOVC     A,@A+DPTR
        PUSH     ACC
        MOV      A,B
        INC      A
        MOVC     A,@A+DPTR
        MOV      DPL,A
        POP      DPH
;判断频率范围
        ACALL   RDF            ;R6F7=F
        MOV     A,R6
        ORL     A,R7
        JZ      OP0
        MOV     A,R6
        JZ      OP1       ;0<F<256Hz
        CJNE    R6,#2,$+3
        JC      OP1       ;256<=F<512Hz
        SJMP    OP3       ;F>=512Hz
;---------------------------------------------
;F=0,输出直流信号
;---------------------------------------------
OP0:    MOV     P2,#HIGH(DACA1)
        MOV     R0,#LOW(DACA1)
        MOV     A,#0FFH
OP0LP:  MOVX    @R0,A
        JB      OUT,OP0LP
        AJMP    OUTPUT
;---------------------------------------------
;0<F<256Hz,每个周期输出128个点,T0方式1
;---------------------------------------------
OP1:    MOV     TMOD,#11H
        MOV	R2,#00H		;1E6/128=(1E84)h
	MOV	R3,#00H
	MOV	R4,#1EH
	MOV	R5,#84H
	ACALL	DIVD       ;双字节二进制无符号数除法(商在R2R3中)
        MOV     R4,#00H
        MOV     R5,#02H
        ACALL   DSUB       ;R4R5=R4R5-R2R3
        MOV     TL0_,R5
        MOV     TH0_,R4
        MOV     TH0,R4
        MOV     TL0,R5
        MOV     P2,#HIGH(DACA1)
        MOV     R0,#LOW(DACA1)
OP1LP:  MOV     A,T
        MOVC    A,@A+DPTR
        MOVX    @R0,A
        JNB     TF0,$
        MOV     TL0,TL0_
        MOV     TH0,TH0_
        CLR     TF0
        INC     T
        CLR     T.7
        JB      OUT,OP1LP
        AJMP    OUTPUT
;---------------------------------------------
;256<=F<512Hz,每个周期输出128个点,T0方式2
;---------------------------------------------
OP2:    MOV     TMOD,#12H
        MOV	R2,#00H		;1E6/128=(1E84)h
	MOV	R3,#00H
	MOV	R4,#1EH
	MOV	R5,#84H
	ACALL	DIVD       ;双字节二进制无符号数除法(商在R2R3中)
        MOV     R4,#00H
        MOV     R5,#00H
        ACALL   DSUB       ;R4R5=R4R5-R2R3
        MOV     TH0,R5
        MOV     TL0,R5
        MOV     P2,#HIGH(DACA1)
        MOV     R0,#LOW(DACA1)
OP2LP:  MOV     A,T
        MOVC    A,@A+DPTR
        MOVX    @R0,A
        JNB     TF0,$
        CLR     TF0
        INC     T
        CLR     T.7
        JB      OUT,OP2LP
        AJMP    OUTPUT
;---------------------------------------------
;F>=512Hz,每个周期输出64个点,T0方式2
;---------------------------------------------
OP3:    MOV     TMOD,#12H
        MOV	R2,#00H		;1E6/64=(3D09)h
	MOV	R3,#00H
	MOV	R4,#3DH
	MOV	R5,#09H
	ACALL	DIVD       ;双字节二进制无符号数除法(商在R2R3中)
        MOV     R4,#00H
        MOV     R5,#00H
        ACALL   DSUB       ;R4R5=R4R5-R2R3
        MOV     TH0,R5
        MOV     TL0,R5
        MOV     P2,#HIGH(DACA1)
        MOV     R0,#LOW(DACA1)
OP3LP:  MOV     A,T
        MOVC    A,@A+DPTR
        MOVX    @R0,A
        JNB     TF0,$
        CLR     TF0
        INC     T
        INC     T
        CLR     T.7
        JB      OUT,OP3LP
        AJMP    OUTPUT
;----------------波形量化表-------------------
BOXING: ;目录
DW    FANTAB,SANTAB,JUTAB,SINTAB
FANTAB: ;方波
DB    000H,000H,000H,000H,000H,000H,000H,000H
DB    000H,000H,000H,000H,000H,000H,000H,000H
DB    000H,000H,000H,000H,000H,000H,000H,000H
DB    000H,000H,000H,000H,000H,000H,000H,000H
DB    000H,000H,000H,000H,000H,000H,000H,000H
DB    000H,000H,000H,000H,000H,000H,000H,000H
DB    000H,000H,000H,000H,000H,000H,000H,000H
DB    000H,000H,000H,000H,000H,000H,000H,000H
DB    0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB    0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB    0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB    0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB    0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB    0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB    0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB    0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
SANTAB: ;三角波
DB    07FH,083H,087H,08BH,08FH,093H,097H,09BH
DB    09FH,0A3H,0A7H,0ABH,0AFH,0B3H,0B7H,0BBH
DB    0BFH,0C3H,0C7H,0CBH,0CFH,0D3H,0D7H,0DBH
DB    0DFH,0E3H,0E7H,0EBH,0EFH,0F3H,0F7H,0FBH
DB    0FFH,0FBH,0F7H,0F3H,0EFH,0EBH,0E7H,0E3H
DB    0DFH,0DBH,0D7H,0D3H,0CFH,0CBH,0C7H,0C3H
DB    0BFH,0BBH,0B7H,0B3H,0AFH,0ABH,0A7H,0A3H
DB    09FH,09BH,097H,093H,08FH,08BH,087H,083H
DB    07FH,07BH,077H,073H,06FH,06BH,067H,063H
DB    05FH,05BH,057H,053H,04FH,04BH,047H,043H
DB    03FH,03BH,037H,033H,02FH,02BH,027H,023H
DB    01FH,01BH,017H,013H,00FH,00BH,007H,003H
DB    000H,004H,008H,00CH,010H,014H,018H,01CH
DB    020H,024H,028H,02CH,030H,034H,038H,03CH
DB    040H,044H,048H,04CH,050H,054H,058H,05CH
DB    060H,064H,068H,06CH,070H,074H,078H,07CH
JUTAB: ;锯齿波
DB    000H,002H,004H,006H,008H,00AH,00CH,00EH
DB    010H,012H,014H,016H,018H,01AH,01CH,01EH
DB    020H,021H,024H,026H,028H,02AH,02CH,02EH
DB    030H,032H,034H,036H,038H,03AH,03CH,03EH
DB    040H,042H,044H,046H,048H,04AH,04CH,04EH
DB    050H,052H,054H,056H,058H,05AH,05CH,05EH
DB    060H,062H,064H,066H,068H,06AH,06CH,06EH
DB    070H,072H,074H,076H,078H,07AH,07CH,07EH
DB    080H,082H,084H,086H,088H,08AH,08CH,08EH
DB    090H,092H,094H,096H,098H,09AH,09CH,09EH
DB    0A0H,0A2H,0A4H,0A6H,0A8H,0AAH,0ACH,0AFH
DB    0B0H,0B2H,0B4H,0B6H,0B8H,0BAH,0BCH,0BEH
DB    0C0H,0C2H,0C4H,0C6H,0C8H,0CAH,0CCH,0CEH
DB    0D0H,0C2H,0D4H,0D6H,0D8H,0DAH,0DCH,0DEH
DB    0E0H,0E2H,0E4H,0E6H,0E8H,0EAH,0ECH,0EEH
DB    0F0H,0F2H,0F4H,0F6H,0F8H,0FAH,0FCH,0FEH
;DB    000H,004H,008H,00CH,010H,014H,018H,01CH
;DB    020H,024H,028H,02CH,030H,034H,038H,03CH
;DB    040H,044H,048H,04CH,050H,054H,058H,05CH
;DB    060H,064H,068H,06CH,070H,074H,078H,07CH
;DB    080H,084H,088H,08CH,090H,094H,098H,09CH
;DB    0A0H,0A4H,0A8H,0ACH,0B0H,0B4H,0B8H,0BCH
;DB    0C0H,0C4H,0C8H,0CCH,0D0H,0D4H,0D8H,0DCH
;DB    0E0H,0E4H,0E8H,0ECH,0F0H,0F4H,0F8H,0FCH
SINTAB:;正弦波
DB    07FH,085H,08BH,092H,098H,09EH,0A4H,0AAH
DB    0B0H,0B5H,0BBH,0C0H,0C6H,0CBH,0D0H,0D4H
DB    0D9H,0DDH,0E1H,0E5H,0E9H,0ECH,0EFH,0F2H
DB    0F4H,0F7H,0F9H,0FAH,0FCH,0FDH,0FDH,0FEH
DB    0FEH,0FEH,0FDH,0FDH,0FCH,0FAH,0F9H,0F7H
DB    0F4H,0F2H,0EFH,0ECH,0E9H,0E5H,0E1H,0DDH
DB    0D9H,0D4H,0D0H,0CBH,0C6H,0C0H,0BBH,0B5H
DB    0B0H,0AAH,0A4H,09EH,098H,092H,08BH,085H
DB    07FH,079H,073H,06CH,066H,060H,05AH,054H
DB    04EH,049H,043H,03EH,038H,033H,02EH,02AH
DB    025H,021H,01DH,019H,015H,012H,00FH,00CH
DB    00AH,007H,005H,004H,002H,001H,001H,000H
DB    000H,000H,001H,001H,002H,004H,005H,007H
DB    00AH,00CH,00FH,012H,015H,019H,01DH,021H
DB    025H,02AH,02EH,033H,038H,03EH,043H,049H
DB    04EH,054H,05AH,060H,066H,06CH,073H,079H
;*************************外部中断1***********************
INT1:   JB       P3.3,INT1E
        JB       P3.3,INT1E
        JB       P3.3,INT1E
        MOV      P1,#0FFH
        SETB     TR1
        CLR      EX1
INT1E:  RETI
;********************T1中断服务子程序(每2ms中断一次)************************
TIMER1: ORL     TL1, #LOW(65536-2000)
        MOV     TH1, #HIGH(65536-2000)
        PUSH    ACC
        PUSH    PSW
        PUSH    DPL
        PUSH    DPH
        SETB    RS1
        CLR     RS0
;------------显示扫描-------------
        MOV     DPTR,#CTRL
        MOV     A,#0FH
        MOVX    @DPTR,A
        MOV     DPTR,#PRC
        CLR     A
        MOVX    @DPTR,A   ;关显示器
        INC     DSP
        MOV     A,DSP
        CJNE    A,#6,TM1
        MOV     DSP,#0FFH

⌨️ 快捷键说明

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