实验7.1 实现D/A接口设计,编写程序输出方波、锯齿波、正弦波,使用示波器观察波形。
该试验必须要配合示波器才能验证,所以我在寝室的话并不能验证正确性,而且这个实验做的也是云里雾里的,因为理论的时候明明学了很多可以接的接口呀,但是实验时却什么都不用接,因为实验箱内部已经接好了。
锯齿波程序:汇编代码
D_1 EQU 8140H
D_2 EQU 81C0H
ORG 0000H
JMP START
START:
MOV SP,#30H
MOV A,#00H
BB:
MOV DPTR,#D_1
MOVX @DPTR,A
MOV DPTR,#D_2
MOVX @DPTR,A
INC A
SJMP BB
END
C语言代码:
#include<reg51.h>
#include<absacc.h>
#define D_1 XBYTE[0x8140]
#define D_2 XBYTE[0x81c0]
uchar a=0;
main(){
while(1){
D_1=a;
D_2=a;
a++;
}
}
方波:汇编代码:
D_1 EQU 8140H
D_2 EQU 81C0H
ORG 0000H
JMP START
START:
MOV SP,#30H
MOV A,#00H
BB:
MOV DPTR,#D_1
MOVX @DPTR,A
MOV DPTR,#D_2
MOVX @DPTR,A
CPL A
CALL D500
SJMP BB
D500: ;延时500ms子程序
MOV R7,#17H
DL1:
MOV R6,#98H
DL0:
MOV R5,#46H
DJNZ R5,$
DJNZ R6,DL0
DJNZ R7,DL1
RET
END
C语言代码:
#include<reg51.h>
#include<absacc.h>
#define D_1 XBYTE[0x8140]
#define D_2 XBYTE[0x81c0]
uchar a=0;
void delay500ms(void)
{
unsigned char a,b,c;
for(c=23;c>0;c--)
for(b=152;b>0;b--)
for(a=70;a>0;a--);
}
main(){
while(1){
D_1=a;
D_2=a;
a=~a;
delay500ms();
}
}
正弦波:汇编代码 利用查表法 太麻烦啦,我日后加上
C语言代码:
#include<reg51.h>
#include<absacc.h>
#include<math.h>
#define D1 XBYTE[0x8140]
#define D2 XBYTE[0x81C0]
#define pi acos(-1)
main(){
unsigned int a=0;
unsigned char f=0;
SP=0x30;
while(1){
f=sin(a*pi/180)*100;
D1=f+100;
D2=f+100;
a++;
if(a==360)
a=0;
}
}