; Main.asm file generated by New Project wizard
; Created: 周五 5月 24
; Processor: AT89C52
; Compiler:ASEM-51 (Proteus)
;=====================================
$NOMOD51
$INCLUDE (80C52.MCU)
;======================================
; DEFINITIONS
; VARIABLES
; RESET and INTERRUPT VECTORS
;======================================
; Reset Vector
org 0000h
jmp Start
;=======================================
; CODE SEGMENT
;=======================================
org 0100h
Start:
;***R4=0锯齿波R4=1三角波R4=2正弦波R4=3方波R4=梯形波***
;***********************
; 锯齿波
;***********************
MOV R4,#0
J0: MOV A,#0
J0next: CJNER4,#0,S1 ;判断R4,不等0跳转产生三角波
MOVP2,A;P2赋值
LCALLdelay;延时
INCA ;增加A的值,产生锯齿波上升沿
JBP1.0,J0p11 ;扫描检测按键给R4赋值选择输出信号波形
MOVR4,#0;产生锯齿波信号
J0p11: JBP1.1,J0p12
MOVR4,#1;产生三角波信号
J0p12: JBP1.2,J0p13
MOVR4,#2;产生正弦波信号
J0p13: JBP1.3,J0p14
MOVR4,#3;产生方波信号
J0p14: JB P1.4,J0p15
MOVR4,#4;产生梯形波信号
J0p15: SJMP J0next
;***************************
; 三角波
;***************************
S1: MOVA,#0
S1n1: CJNER4,#1,Z3;判断R4,不等于1则跳转正弦波发生
MOVP2,A;产生三角波的上升沿
LCALLdelay;调用延时
INCA;增加A
JBP1.0,S11p11 ;扫描检测按键确定输出信号种类
MOV R4,#0;产生锯齿波信号
S11p11:JB P1.1,S11p12
MOV R4,#1 ;产生三角波信号
S11p12:JB P1.2,S11p13
MOV R4,#2 ;产生正弦波信号
S11p13:JB P1.3,S11p14
MOV R4,#3 ;产生方波信号
S11p14: JB P1.4,S1p1
MOV R4,#4 ;产生梯形波信号
S1p1: CJNEA,#255,S1n1
S1n2: CJNER4,#1,Z3
MOVP2,A ;产生三角波的下降沿
LCALL delay
DECA ;减小A
JBP1.0,S12p11 ;扫描检测按键状态确定输出信号波形
MOVR4,#0 ;产生锯齿波信号
S12p11:JBP1.1,S12p12
MOV R4,#1 ;产生三角波信号
S12p12:JBP1.2,S12p13
MOV R4,#2 ;产生正弦波信号
S12p13: JB P1.3,S12p14
MOVR4,#3;产生方波信号
S12p14: JB P1.4,S1p2
MOV R4,#4;产生梯形波信号
S1p2: CJNE A,#0,S1n2
SJMP S1n1
;**********************************
; 正弦波
;**********************************
Z3: MOVR0,#0
Z3NEXT: CJNE R4,#2,F4 ;判断R4,不等于2跳转输出方波
MOVA,R0
MOVDPTR,#TAB ;将正弦波的表头给DPTR,转到表格去查表
MOVC A,@A+DPTR
MOVP2,A
LCALL DELAY
INCR0
JBP1.0,Z3p11
MOVR4,#0
Z3p11:JB P1.1,Z3p12 ;扫描检测按键选择输出波形
MOVR4,#1
Z3p12:JB P1.2,Z3p13
MOV R4,#2
Z3p13:JB P1.3,Z3p14
MOV R4,#3
Z3p14:JB P1.4,Z3next
MOV R4,#4
SJMP Z3NEXT
;*******************************
;方波
;*******************************
F4: CJNER4,#3,T5 ;判断R4,不等于3则跳转梯形波
MOVA,#0
MOVP2,A
CALL FBDELAY
MOVA,#255
MOVP2,A
CALL FBDELAY
F40: JB P1.0,F41 ;扫描检测按键分别选择输出波形
MOV R4,#0
F41: JB P1.1,F42
MOV R4,#1
F42: JB P1.2,F43
MOV R4,#2
F43: JB P1.3,F44
MOV R4,#3
F44: JB P1.4,F4
MOV R4,#4
JMP F4
;*******************************
; 梯形波
;*******************************
T5: MOV A,#0
T5b: CJNE R4,#4,T51b ;判断R4,不等4则跳转
JMP T51b1
T51b: JMP J0 ;跳转到锯齿波那一步
T51b1:MOV P2,a
LCALL delay
INC A;产生梯形波的上升沿;
JB P1.0,T5b0 ;扫描检测按键选择输出波形
MOV R4,#0
T5b0: JB P1.1,T5b1
MOV R4,#1
T5b1: JB P1.2,T5b2
MOV R4,#2
T5b2: JB P1.3,T5b3
MOV R4,#3
T5b3: JB P1.4,T5b10
MOV R4,#4
T5b10: CJNEA,#255,T5b
LCALLfbdelay
T5b11: CJNE R4,#4,T52b
JMPT52b2
T52b: JMPJ0
T52b2: MOV P2,a
LCALL delay
DEC A;产生梯形波的下降沿
JBP1.0,T5b12 ;扫描检测按键选择输出波形
MOV R4,#0
T5b12: JBP1.1,T5b13
MOV R4,#1
T5b13: JBP1.2,T5b14
MOV R4,#2
T5b14: JBP1.3,T5b15
MOVR4,#3
T5b15: JBP1.4,T5b16
MOV R4,#4
T5b16: CJNEA,#0,T5b11
JMPT5
DELAY: MOV R6,#2 ;延时函数
D1:MOV R7,#20
DJNZR7,$
DJNZR6,D1
RET
fbdelay: MOVR1,#40 ;方波延时函数
D2: MOVR2,#255
DJNZ R2,$
DJNZ R1,D2
RET
;正弦波波形表
TAB:
DB 80H,83H,86H,89H,8DH,90H,93H,96H
DB 99H,9CH,9FH,0A2H,0A5H,0A8H,0ABH,0AEH
DB 0B1H,0B4H,0B7H,0BAH,0BCH,0BFH,0C2H,0C5H
DB 0C7H,0CAH,0CCH,0CFH,0D1H, 0D4H,0D6H,0D8H
DB 0DAH,0DDH,0DFH,0E1H,0E3H, 0E5H,0E7H,0E9H
DB 0EAH,0ECH,0EEH,0EFH,0F1H, 0F2H,0F4H,0F5H
DB 0F6H,0F7H,0F8H,0F9H,0FAH, 0FBH,0FCH,0FDH
DB 0FDH,0FEH,0FFH,0FFH,0FFH, 0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH, 0FFH,0FEH,0FDH
DB 0FDH,0FCH,0FBH,0FAH,0F9H, 0F8H,0F7H,0F6H
DB 0F5H,0F4H,0F2H,0F1H,0EFH, 0EEH,0ECH,0EAH
DB 0E9H,0E7H,0E5H,0E3H,0E1H, 0DEH,0DDH,0DAH
DB 0D8H,0D6H,0D4H,0D1H,0CFH, 0CCH,0CAH,0C7H
DB 0C5H,0C2H,0BFH,0BCH,0BAH, 0B7H,0B4H,0B1H
DB 0AEH,0ABH,0A8H,0A5H,0A2H, 9FH, 9CH, 99H
DB 96H, 93H, 90H, 8DH, 89H, 86H, 83H, 80H
DB 80H, 7CH, 79H, 78H, 72H, 6FH, 6CH, 69H
DB 66H, 63H, 60H, 5DH, 5AH, 57H, 55H, 51H
DB 4EH, 4CH, 48H, 45H, 43H, 40H, 3DH, 3AH
DB 38H, 35H, 33H, 30H, 2EH, 2BH, 29H, 27H
DB 25H, 22H, 20H, 1EH, 1CH, 1AH, 18H, 16H
DB 15H, 13H, 11H, 10H, 0EH, 0DH, 0BH, 0AH
DB 09H, 08H, 07H, 06H, 05H, 04H, 03H, 02H
DB 02H, 01H, 00H, 00H, 00H, 00H, 00H, 00H
DB 00H, 00H, 00H, 00H, 00H, 00H, 01H, 02H
DB 02H, 03H, 04H, 05H, 06H, 07H, 08H, 09H
DB 0AH, 0BH, 0DH, 0EH, 10H, 11H, 13H, 15H
DB 16H, 18H, 1AH, 1CH, 1EH, 20H, 22H, 25H
DB 27H, 29H, 2BH, 2EH, 30H, 33H, 35H, 38H
DB 3AH, 3DH, 40H, 43H, 45H, 48H, 4CH, 4EH
DB 51H, 55H, 57H, 5AH, 5DH, 60H, 63H, 66H
DB 69H, 6CH, 6FH, 72H, 75H, 78H, 7bH, 7eH
Loop:
jmp Loop
;=============================================
END