ORG 0000H
LJMP MAIN ;主程序
ORG 0003H
LJMP INT01
ORG 0030H
MAIN: MOV P0,#0FFH ;給P0口高電平
MOV SP,#60H ;設置堆棧指針
ZC : MOV R6,#01H
MOV R7,#0FH
CLR IT0 ;外部中斷設置為低電平觸發
SETB EX0 ;開啟外部中斷0
SETB EA ;開啟總中斷
START: ;確保每個波形能夠循環輸出
CJNE R7,#00H,LLL0
SJMP ZX
SJMP START
LLL0: CJNE R7,#01H,LLL1
SJMP FB
SJMP START
LLL1: CJNE R7,#02H,LLL2
SJMP SJ
SJMP START
LLL2: CJNE R7,#03H,LLL3
LJMP JUC
LLL3: SJMP START
INT01: ;產生外部中斷0,檢測對應的按鈕輸出對應的波形
JB P2.1,LL0
MOV R7,#00H
SJMP LL3
LL0: JB P2.2,LL1
MOV R7,#01H
SJMP LL3
LL1: JB P2.3,LL2
MOV R7,#02H
第 25 頁 共 30 頁
25/30頁
SJMP LL3
LL2: JB P2.4,LL3
MOV R7,#03H
SJMP LL3
LL3: RETI
ZX: MOV R3,#00H ;產生正弦波
LOOP0: MOV A,R3
MOV DPTR,#TABLE ;查表
MOVC A,@A+DPTR
MOV DPTR,#0FEFFH ;定義DAC0832地址
MOVX @DPTR,A ;讀數據
INC R3
JB P2.5,LOOP1 ;正弦波調頻
LCALL D50US
LOOP1: CJNE R3,#255,LOOP0
MOV R3,#00H
CJNE R7,#00H,START ;檢測鍵是否按下
AJMP ZX
FB: MOV DPTR,#0FEFFH;產生方波
JB P2.6,LOOP2 ;檢測調幅按鈕調幅
MOV A,#0CCH ;方波高電平幅值1
SJMP LOOP3
LOOP2: MOV A,#055H ;方波高電平幅值2 LOOP3: MOVX @DPTR,A
LCALL D200US ;延時
JB P2.5,LOOP4 ;方波前半周期調頻
LCALL D200US
LOOP4: MOV A,#5 ;方波低電平幅值
MOVX @DPTR,A
LCALL D200US ;延時
JB P2.5,LOOP5 ;方波后半周期調頻
LCALL D200US
LOOP5: CJNE R7,#01H,START ;檢測鍵是否按下
AJMP FB
第 26 頁 共 30 頁
26/30頁
SJ: MOV R3,#00H;產生三角波
LOOP6: MOV A,R3
MOV DPTR,#0FEFFH
MOVX @DPTR,A
INC R3 ;波形上升
MOV A,R3
JB P2.5,LOOP7 ;三角波前半周期調頻
LCALL D50US
LOOP7: JB P2.6,LOOP8 ;三角波調幅
CJNE A,#0FFH,LOOP6 ;幅值1
SJMP LOOP9
LOOP8: CJNE A,#055H,LOOP6 ;幅值2 LOOP9: DEC R3 ;波形下降
JB P2.5,LOOP10 ;三角波后半周期調頻
LCALL D50US
LOOP10: MOV A,R3
MOV DPTR,#0FEFFH
MOVX @DPTR,A
CJNE R3,#00H,LOOP9
CJNE R7,#02H,SJOUT ;檢測鍵是否按下
AJMP SJ
SJOUT: LJMP START
JUC: MOV R3,#00H;產生鋸齒波
LOOP11: MOV A,R3
MOV DPTR,#0FEFFH
MOVX @DPTR,A
INC R3 ;波形上升
MOV A,R3
JB P2.5,LOOP12 ;鋸齒波調頻
LCALL D50US
LOOP12: JB P2.6,LOOP13 ;鋸齒波調幅
CJNE A,#0FFH,LOOP11 ;幅值1
SJMP LOOP14
LOOP13: CJNE A,#055H,LOOP11 ;幅值2 LOOP14: CJNE R7,#03H,JUCOUT ;檢測鍵是否按下
AJMP JUC
第 27 頁 共 30 頁
27/30頁
JUCOUT: LJMP START
D200US: MOV R1,#2 ;200μs延時
MOV R2,#50
L5: DJNZ R2,$
DJNZ R1,L5
RET
D50US: MOV R1,#1 ;50μs延時
MOV R2,#23
L6: DJNZ R2,$
DJNZ R1,L6
RET
TABLE:DB
080h,083h,086h,089h,08ch,090h,093h,096h,099h,09ch,09fh,0a2h,0a5h,0a8h,0abh,0aeh ;產生正弦波代碼
DB
0b1h,0b3h,0b6h,0b9h,0bch,0bfh,0c1h,0c4h,0c7h,0c9h,0cch,0ceh,0d1h,0d3h,0d5h,0d8h
DB
0dah,0dch,0deh,0e0h,0e2h,0e4h,0e6h,0e8h,0eah,0ebh,0edh,0efh,0f0h,0f1h,0f3h,0f4h
DB
0f5h,0f6h,0f8h,0f9h,0fah,0fah,0fbh,0fch,0fdh,0fdh,0feh,0feh,0feh,0ffh,0ffh,0ffh
DB
0ffh,0ffh,0ffh,0ffh,0feh,0feh,0feh,0fdh,0fdh,0fch,0fbh,0fah,0fah,0f9h,0f8h,0f6h
DB
0f5h,0f4h,0f3h,0f1h,0f0h,0efh,0edh,0ebh,0eah,0e8h,0e6h,0e4h,0e2h,0e0h,0deh,0dch
DB
0dah,0d8h,0d5h,0d3h,0d1h,0ceh,0cch,0c9h,0c7h,0c4h,0c1h,0bfh,0bch,0b9h,0b6h,0b3h
DB
0b1h,0aeh,0abh,0a8h,0a5h,0a2h,09fh,09ch,099h,096h,093h,090h,08ch,089h,086h,083h
第 28 頁 共 30 頁
28/30頁
DB
080h,07dh,07ah,077h,074h,070h,06dh,06ah,067h,064h,061h,05eh,05bh,058h,055h,052h
DB
04fh,04dh,04ah,047h,044h,041h,03fh,03ch,039h,037h,034h,032h,02fh,02dh,02bh,028h
DB
026h,024h,022h,020h,01eh,01ch,01ah,018h,016h,015h,013h,011h,010h,00fh,00dh,00ch
DB
00bh,00ah,008h,007h,006h,006h,005h,004h,003h,003h,002h,002h,002h,001h,001h,000h
DB
000h,000h,001h,001h,002h,002h,002h,003h,003h,004h,005h,006h,006h,007h,008h,00ah
DB
00bh,00ch,00dh,00fh,010h,011h,013h,015h,016h,018h,01ah,01ch,01eh,020h,022h,024h
DB
026h,028h,02bh,02dh,02fh,032h,034h,037h,039h,03ch,03fh,041h,044h,047h,04ah,04dh
DB
04fh,052h,055h,058h,05bh,05eh,061h,064h,067h,06ah,06dh,070h,074h,077h,07ah,07dh
END
|