上课做的一个仿真,有电路图也有程序,可以实现三个功能的切换
第一个是ad,把模拟量变成数字量来显示
第二个是da,把数字量变成模拟量来表示,通过电机转速来实现
第三个是adda,先把模拟量变成数字量,然后再把数字量变成模拟量,通过双极性电机来表示出来
汇编的程序和C语言的程序都有,hex文件也有
单片机源程序如下:
- #include<reg52.h>
- sbit CLK=P3^1;
- sbit ST=P3^0;
- sbit EOC=P3^2;
- int a,b,c,d,sj=5000;
- void timer0() interrupt 1
- {
- CLK=~CLK;
- }
- void choose() interrupt 2
- {a++;
- if(a==4)
- a=1;
- }
- void gn1()
- {
- ST=0;
- ST=1;
- ST=0;
- while(!EOC);
- P2=0xff;
- b=P2;
- P1=b;
- }
- void gn2()
- { WR=0;
- if(d==0)
- {c++;
- P0=c;
- P1=c;
- if(c==0xff)d=1;
- }
- if(d==1)
- {c--;
- P0=c;
- P1=c;
- if(c==0x00)d=0;
- }
- while(--sj);
- sj=5000;
-
- }
- void gn3()
- {WR=0;
- gn1();
- P0=b;
- }
- void main()
- {
- IE=0x82;
- IT1=1;
- EX1=1;
- EA=1;
- ET0=1;
- TR0=1;
- TMOD=0x02;
- TH0=0x14;
- TL0=0x00;
- TR0=1;
- a=0;
- d=0;
- while(1)
- {switch(a)
- {case 1: gn1();continue;
- case 2: gn2();continue;
- case 3: gn3();continue;
- default : continue;
- }
- }
- }
复制代码
汇编语言源码:
- ORG 0000H
- LJMP START
- ORG 0013H
- LJMP ANJIAN
- ORG 1000H
- START:
- SETB EA
- SETB EX1
- SETB IT1
- MOV SP,#60H
- MOV R0,#00H
- XUANZE:
- CJNE R0,#01H,Z1
- LJMP GN1
- Z1: CJNE R0,#02H,Z2
- LJMP GN2
- Z2: CJNE R0,#03H,Z3
- LJMP GN3
- Z3: SJMP XUANZE
- ANJIAN:
- CJNE R0,#03H,Z4
- MOV R0,#00H
- SETB P3.6
- Z4: INC R0
- RETI
- GN1:
- SETB P3.0
- CLR P3.0
- ZZ: MOV SBUF,#00H
- JNB P3.2,ZZ
- MOV P2,#0FFH
- MOV A,P2
- MOV P1,A
- LJMP XUANZE
- GN2:
- MOV A,#00H
- Z6: CLR P3.6
- MOV P0,A
- MOV P1,A
- INC A
- LCALL DELAY
- JNB P3.3,ZY
- CJNE A,#0FFH,Z6
- Z7: MOV P0,A
- MOV P1,A
- DEC A
- LCALL DELAY
- JNB P3.3,ZY
- CJNE A,#00H,Z7
- ZY: LJMP XUANZE
- GN3:
- MOV P1,#00H
- SETB P3.0
- CLR P3.0
- Z5: MOV SBUF,#0FFH
- JNB P3.2,Z5
- MOV P2,#0FFH
- MOV A,P2
- MOV P0,A
- LJMP XUANZE
- DELAY:
- MOV R6,#12
- D1: MOV R5,#20
- D2: MOV R4,#50
- D3: DJNZ R4,D3
- DJNZ R5,D2
- DJNZ R6,D1
- RET
- END
复制代码
所有资料51hei提供下载:
adda.zip
(32.88 KB, 下载次数: 81)
|