📄 ex8-6.sdi
字号:
,,, ORG 0000H
0000,02 00 30,START,START: LJMP MAIN
,,, ORG 0003H ;外部中断 入口
0003,02 00 47,, LJMP INSER ;转到中断服务程序
,,, ORG 0030H
0030,90 7F FF,MAIN,MAIN: MOV DPTR,#7FFFH ;DAC0832地址
0033,D2 A8,, SETB EX0 ;允许 中断
0035,D2 88,, SETB IT0 ;负边沿触发方式
0037,D2 AF,, SETB EA ;开中断
0039,20 00 3A,HERE,HERE: JB 20H.0,ST ;阶梯波处理
003C,20 01 41,, JB 20H.1,TRI ;三角波处理
003F,20 02 50,, JB 20H.2,SQ ;方波处理
0042,20 03 5D,, JB 20H.3,SIN ;正弦波处理
0045,80 F2,, SJMP HERE ;等待中断
,,,
0047,30 90 02,INSER,INSER: JNB P1.0, LL1 ;中断服务程序,查询按键
004A,80 07,, SJMP L1
004C,75 20 00,LL1,LL1: MOV 20H,#00H
004F,D2 00,, SETB 20H.0 ;设置阶梯波标志
0051,80 22,, SJMP RT
0053,30 92 02,L1,L1: JNB P1.2, LL2
0056,80 07,, SJMP L2
0058,75 20 00,LL2,LL2: MOV 20H,#00H
005B,D2 01,, SETB 20H.1 ;设三角梯波标志
005D,80 16,, SJMP RT
005F,30 94 02,L2,L2: JNB P1.4, LL3
0062,80 07,, SJMP L3
0064,75 20 00,LL3,LL3: MOV 20H,#00H
0067,D2 02,, SETB 20H.2 ;设置方波标志
0069,80 0A,, SJMP RT
006B,30 96 02,L3,L3: JNB P1.6, LL4
006E,80 05,, SJMP RT
0070,75 20 00,LL4,LL4: MOV 20H,#00H
0073,D2 03,, SETB 20H.3 ;设置正弦波标志
0075,32,RT,RT: RETI ;中断返回
,,,
0076,74 00,ST,ST: MOV A,#00H ;阶梯波
0078,F0,LOOPP,LOOPP: MOVX @DPTR,A ;启动D/A转换
0079,04,, INC A
007A,20 00 FB,, JB 20H.0,LOOPP ;连续输出波形
007D,02 00 39,, LJMP HERE
,,,
0080,74 00,TRI,TRI: MOV A,#00H ;三角波
0082,F0,UP,UP: MOVX @DPTR,A ;启动D/A转换
0083,04,, INC A ;上升沿
0084,B4 FF FB,, CJNE A,#0FFH,UP
0087,F0,DOWN,DOWN: MOVX @DPTR,A ;启动D/A转换
0088,14,, DEC A ;下降沿
0089,B4 00 FB,, CJNE A,#00H,DOWN
008C,20 01 F3,, JB 20H.1, UP ;连续输出波形
008F,02 00 39,, LJMP HERE
,,,
0092,74 00,SQ,SQ: MOV A,#00H ;方波
0094,F0,, MOVX @DPTR,A ;DAC输出低电平
0095,11 E7,, ACALL DELAY ;延时1
0097,74 FF,, MOV A,#0FFH
0099,F0,, MOVX @DPTR,A ;DAC输出高电平
009A,11 E7,, ACALL DELAY ;延时2
009C,20 02 F3,, JB 20H.2, SQ ;连续输出波形
009F,02 00 39,, LJMP HERE
,,,
00A2,90 00 D4,SIN,SIN: MOV DPTR,#SINTAB ;正弦波
00A5,78 6D,, MOV R0,#6DH
00A7,E4,LOOP,LOOP: CLR A
00A8,93,, MOVC A,@A+DPTR
00A9,F6,, MOV @R0,A
00AA,A3,, INC DPTR
00AB,08,, INC R0
00AC,B8 80 F8,, CJNE R0,#80H,LOOP
00AF,90 7F FF,, MOV DPTR,#7FFFH ;DAC0832端口地址
00B2,78 6D,, MOV R0,#6DH
00B4,E6,LOOP1,LOOP1: MOV A,@R0 ;取得第一个1/4周期的数据
00B5,F0,, MOVX @DPTR,A ;送往DAC0832
00B6,08,, INC R0
00B7,B8 7F FA,, CJNE R0,#7FH,LOOP1
00BA,E6,LOOP2,LOOP2: MOV A,@R0 ;取得第二个1/4周期的数据
00BB,F0,, MOVX @DPTR,A ;送往DAC0832
00BC,18,, DEC R0
00BD,B8 6D FA,, CJNE R0,#6DH,LOOP2
00C0,E6,LOOP3,LOOP3: MOV A,@R0 ;取得第三个1/4周期的数据
00C1,F4,, CPL A ;数据取反
00C2,F0,, MOVX @DPTR,A ;送往DAC0832
00C3,08,, INC R0
00C4,B8 7F F9,, CJNE R0,#7FH,LOOP3
00C7,E6,LOOP4,LOOP4: MOV A,@R0 ;取得第四个1/4周期的数据
00C8,F4,, CPL A ;数据取反
00C9,F0,, MOVX @DPTR,A ;送往DAC0832
00CA,18,, DEC R0
00CB,B8 6D F9,, CJNE R0,#6DH,LOOP4
00CE,20 03 E3,, JB 20H.3, LOOP1 ;输出连续波形
00D1,02 00 39,, LJMP HERE
00D4,7F 89 94 9F,SINTAB,SINTAB: DB 7FH,89H,94H,9FH,0AAH,0B4H,0BEH,0C8H,0D1H,0D9H
00DE,E0 E7 ED F2,, DB 0E0H,0E7H,0EDH,0F2H,0F7H,0FAH,0FCH,0FEH,0FFH
,,,
00E7,7C 0F,DELAY,DELAY: MOV R4,#0FH ;延时子程序
00E9,7D 10,LOOP11,LOOP11: MOV R5,#10H
00EB,00,LOOP22,LOOP22: NOP
00EC,00,,NOP
00ED,00,,NOP
00EE,DD FB,,DJNZ R5,LOOP22
00F0,DC F7,,DJNZ R4,LOOP11
00F2,22,,RET
,,,
000E,,, END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -