TH0D DATA 33H ; 定时器T0初值高8位存放地址
TL0D DATA 34H ; 定时器T0初值低8位存放地址
ORG 0000H
LJMP START
ORG 000BH; 定时器0中断入口地址
LJMP INTTO; 中断跳转
ORG 0060H
START:MOV SP,#70H; 设置一个指针,用于中断时保护现场
MOV R3,#00H; 正弦波起始输出位
MOV R4,#00H; 三角波起始输出位
MOV TMOD,#01H; 定时器0工作方式
MOV TH0D,#0FFH
MOV TL0D,#00H; 设置初值,决定波形频率
MOV TH0,TH0D
MOV TL0,TL0D; 输入初值
CLR B.0 ; 波形切换判断位
SETB EA; 开中断
SETB ET0; 允许T0中断
SETB TR0; 启动T0
MAIN: JNB P3.0, INCKEY
JNB P3.1, DECKEY
JNB P3.2,CHKEY
ORL PCON,#01
LJMP MAIN
;按键,频率增加
INCKEY:LCALL DL10MS
JB P3.0,MAIN;P3.1=1→MAIN
MOV A,TL0D
CJNE A,#0FFH,INC1
LJMP MAIN
INC1: INC TL0D
LJMP MAIN
;按键,频率减少
DECKEY: LCALL DL10MS; 去抖动
JB P3.1,MAIN
MOV A,TL0D
CJNE A,#00H,DEC1; 设置频率范围
LJMP MAIN
DEC1: DEC TL0D
LJMP MAIN
;波形切换
CHKEY: LCALL DL10MS
JB P3.2,MAIN
CPL B.0
LJMP MAIN
INTTO: PUSH ACC; 中断,保护现场
CPL P3.7; 输出方波,作辅助功能。CPL→取反
MOV TH0,TH0D; 重置初值
MOV TL0,TL0D
JB B.0,OUTPUT2; 判断输出波形
OUTPUT1:MOV DPTR,#LIST ; 正弦波输出
MOV A,R3
MOVC A,@A+DPTR; 查表
MOV DPTR,#7FFFH
MOVX @DPTR,A; 从P0口输出正弦波
CJNE R3,#0FFH,L1
MOV R3,#00H
LJMP RE
L1: INC R3
LJMP RE
OUTPUT2:MOV DPTR,#LIST1 ; 三角波输出
MOV A,R4
MOVC A, @A+DPTR;
MOV DPTR,#7FFFH
MOVX @DPTR,A
CJNE R4,#0FFH,L2
MOV R4,#00H
LJMP RE
L2: INC R4
LJMP RE
RE: POP ACC; 恢复现场
RETI
;10延时程序
DL10MS:MOV R0,#20
DL2: MOV R1,#125
DL1: NOP
NOP
DJNZ R1,DL1
DJNZ R0,DL2
RET
;正弦波函数表[256点]
LIST: 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,76H,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,8H,7H,6H,5H,4H,3H,2H
DB 02H,1H,0H,0H,0H,0H,0H,0H
DB 00H,0H,0H,0H,0H,0H,1H,2H
DB 02H,3H,4H,5H,6H,7H,8H,9H
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,51H,55H,57H,5AH,5DH,60H,63H
DB 69H,6CH,6FH,72H,76H,79H,7CH,80H
; 三角波函数
LIST1:DB 80H,81H,82H,83H,84H,85H,86H,87H
DB 88H,89H,8AH,8BH,8CH,8DH,8EH,8FH
DB 90H,91H,92H,93H,94H,95H,96H,97H
DB 98H,99H,9AH,9BH,9CH,9DH,9EH,9FH
DB 0A0H,0A1H,0A2H,0A3H,0A4H,0A5H,0A6H,0A7H
DB 0A8H,0A9H,0AAH,0ABH,0ACH,0ADH,0AEH,0AFH
DB 0B0H,0B1H,0B2H,0B3H,0B4H,0B5H,0B6H,0B7H
DB 0B8H,0B9H,0BAH,0BBH,0BCH,0BDH,0BEH,0BFH
DB 0BFH,0BEH,0BDH,0BCH,0BBH,0BAH,0B9H,0B8H
DB 0B7H,0B6H,0B5H,0B4H,0B3H,0B2H,0B1H,0B0H
DB 0AFH,0AEH,0ADH,0ACH,0ABH,0AAH,0A9H,0A8H
DB 0A7H,0A6H,0A5H,0A4H,0A3H,0A2H,0A1H,0A0H
DB 9FH,9EH,9DH,9CH,9BH,9AH,99H,98H
DB 97H,96H,95H,94H,93H,92H,91H,90H
DB 8FH,8EH,8DH,8CH,8BH,8AH,89H,88H
DB 87H,86H,85H,84H,83H,82H,81H,80H
DB 7FH,7EH,7DH,7CH,7BH,7AH,79H,78H
DB 77H,76H,75H,74H,73H,72H,71H,70H
DB 6FH,6EH,6DH,6CH,6BH,6AH,69H,68H
DB 67H,66H,65H,64H,63H,62H,61H,60H
DB 5FH,5EH,5DH,5CH,5BH,5AH,59H,58H
DB 57H,56H,55H,54H,53H,52H,51H,50H
DB 4FH,4EH,4DH,4CH,4BH,4AH,49H,48H
DB 47H,46H,45H,44H,43H,42H,41H,40H
DB 40H,41H,42H,43H,44H,45H,46H,47H
DB 48H,49H,4AH,4BH,4CH,4DH,4EH,4FH
DB 50H,51H,52H,53H,54H,55H,56H,57H
DB 58H,59H,5AH,5BH,5CH,5DH,5EH,5FH
DB 60H,61H,62H,63H,64H,65H,66H,67H
DB 68H,69H,6AH,6BH,6CH,6DH,6EH,6FH
DB 70H,71H,72H,73H,74H,75H,76H,77H
DB 78H,79H,7AH,7BH,7CH,7DH,7EH,7FH
END
评论0