资源描述
三.程序清单及程序步骤框图
ORG 0000H
LJMP MAIN
MAIN: MOV R0,#30H
MOV R2,#10H
CLR A
A1: MOV @R0,A
INC R0
INC A
DJNZ R2,A1
MOV R0,#30H
MOV R1,#40H
MOV R2,#10H
A2: MOV A, @R0
MOV @R1,A
INC R0
INC R1
DJNZ R2, A2
MOV R1,#40H
MOV DPTR ,#4800H
MOV R2, #10H
A3: MOV A,@R1
MOVX @DPTR ,A
INC R1
INC DPTR
DJNZ R2,A3
MOV SP,#60H
MOV R2,#10H
MOV DPTR ,#4800H
PUSH DPL
PUSH DPH
MOV DPTR,#5800H
MOV R3,DPL
MOV R4,DPH
A4: POP DPH
POP DPL
MOVX A,@DPTR
INC DPTR
PUSH DPL
PUSH DPH
MOV DPL,R3
MOV DPH,R4
MOVX @DPTR,A
INC DPTR
MOV R3,DPL
MOV R4,DPH
DJNZ R2,A4
MOV R0,#50H
MOV DPTR,#5800H
MOV R2,#10H
A5: MOVX A,@DPTR
MOV @R0,A
INC R0
INC DPTR
DJNZ R2,A5
POP DPH
POP DPL
HERE: LJMP HERE
END
三.试验电路
四.程序清单及步骤图
程序一
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP IPTO
MAIN: MOV SP, #30H
MOV TMOD, #01H
CLR 00H
SETB EA
SETB ET0
MOV TH0, #3CH
MOV TL0, #0B0H
MOV R1, #14H
SETB TR0
MOV A, #0feH
MOV P1, A
NT: JNB 00H, NT
RL A
MOV P1, A
CLR 00H
LJMP NT
IPTO: MOV TH0, #3CH
MOV TL0, #0B0H
DJNZ R1, TIO
MOV R1, #14H
SETB 00H
TIO: RETI
END
程序二只需将程序一中“RL A”改为“RR A”即可实现其功效。
程序三
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP IPTO
MAIN: MOV SP, #30H
MOV TMOD, #01H
CLR 00H
SETB EA
SETB ET0
MOV TH0, #3CH
MOV TL0, #0B0H
MOV R2, #0AH
MOV R1, #02H
SETB TR0
MOV A, #0feH
MOV P1, A
NT: SETB P3.0
NT0:JNB 01H, NT0
CLR P3.0
CLR 01H
NT1:JNB 00H, NT1
CLR 01H
RL A
MOV P1, A
CLR 00H
LJMP NT
IPTO:MOV TH0, #3CH
MOV TL0, #0B0H
DJNZ R2, TIO
MOV R2, #0AH
SETB 01H
DJNZ R1, TIO
MOV R1, #02H
SETB 00H
TIO: RETI
END
程序四(思索题程序)
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP IPTO
MAIN: MOV SP, #30H
MOV P1, #0ffH
MOV TMOD, #01H
CLR 00H
SETB EA
SETB ET0
MOV TH0, #3CH
MOV TL0, #0B0H
MOV R1, #14H
SETB TR0
MOV A, #00H
NT:JNB 00H, NT
INC A
MOV R3, A
CPL A
MOV P1, A
CLR 00H
MOV A, R3
LJMP NT
IPTO:MOV TH0, #3CH
MOV TL0, #0B0H
DJNZ R1, TIO
MOV R1, #14H
SETB 00H
TIO: RETI
END
三.电路原理图
四.程序清单及步骤图
程序一ORG 0000H
LJMP MAIN
MAIN: MOV TMOD, #02H
MOV TH0, #9CH
MOV TL0, #9CH
SETB TR0
SETB P1.0
HERE:JNB TF0, HERE
CPL P1.0
CLR TF0
LJMP HERE
END
程序二 ORG 0000H
LJMP MAIN
ORG 000BH
LJMP IPTO
MAIN: MOV SP, #60H
MOV TMOD, #02H
MOV IE, #82H
MOV TH0, #88H
MOV TL0, #88H
SETB TR0
SETB P1.1
HERE: LJMP HERE
IPTO: CPL P1.1
RETI
END
程序三(思索题)
ORG 0000H
LJMP MAIN
MAIN: MOV TMOD, #11H
MOV TH0, #0FEH
MOV TL0, #0D4H
MOV TH1, #0FFH
MOV TL1, #38H
SETB TR1
SETB P1.0
HERE: JNB TF1, HERE
CPL P1.0
SETB TR0
CLR TF1
CLR TR1
MOV TH1, #0FFH
MOV TL1, #38H
HERE1: JNB TF0, HERE1
CPL P1.0
SETB TR1
CLR TF0
CLR TR0
MOV TH0, #0FEH
MOV TL0, #0D4H
LJMP HERE
END
五.试验结果
周期为200us方波 周期为240us方波
周期为500us占空比为2:5方波
三、电路原理图
四、程序清单及步骤图
程序1:ORG 0000H
LJMP MAIN
MAIN: MOV TMOD, #06H
MOV TH0, #9CH
MOV TL0, #9CH
SETB TR0
HERE:JNB TF0, HERE
CPL P1.0
CLR TF0
LJMP HERE
END
程序2:ORG 0000H
LJMP MAIN
ORG 000BH
LJMP ITPO
MAIN: MOV SP, #60H
MOV TMOD, #06H
MOV TH0, #38H
MOV TL0, #38H
MOV IE, #82H
SETB TR0
HERE:LJMP HERE
ITPO:CPL P1.0
RETI
END
程序3(思索题):
ORG 0000H
LJMP MAIN
ORG 001BH
LJMP ITPO
MAIN: MOV SP, #60H
MOV TMOD, #62H
MOV TH0, #9CH
MOV TL0, #9CH
MOV TH1, #0CEH
MOV TL1, #0CEH
MOV IE, #88H
SETB TR0
SETB TR1
SETB P1.0
HERE:JNB TF0, HERE
CPL P1.0
CLR TF0
LJMP HERE
ITPO:CPL P1.1
RETI
END
五、试验结果
程序1和程序2从T0接入1000Hz方波,思索题从P1.0口线产生方波从T1接入
计100次脉冲 计200次脉冲
思索题波形
三、电路原理图
四、程序清单及步骤图
程序一:ORG 0000H
LJMP MAIN
ORG 0003H
LJMP EXTER0
ORG 000BH
LJMP IPTO
ORG 00013H
LJMP EXTER1
MAIN: MOV SP, #60H
MOV TMOD, #11H
MOV IE, #87H
MOV IP, #02H
MOV TH0, #9EH
MOV TL0, #58H
MOV TH1, #0D8H
MOV TL1, #0F0H
HERE:LJMP HERE
DELAY:SETB TR1
HEREY:JNB TF1, HEREY
CLR TR1
CLR TF1
MOV TH1, #0D8H
MOV TL1, #0F0H
RET
EXTER0:LCALL DELAY
JB P1.0, LOOP0
HERE0:JNB P1.0, HERE0
SETB TR0
LOOP0:RETI
EXTER1:LCALL DELAY
JB P1.1, LOOP1
HERE1:JNB P1.1, HERE1
CLR TR0
LOOP1:RETI
IPTO:CPL P1.2
MOV TH0, #9EH
MOV TL0, #58H
RETI
END
程序二(思索题)
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP EXTER0
ORG 000BH
LJMP IPTO
MAIN: MOV SP, #60H
MOV TMOD, #11H
MOV IE, #83H
MOV IP, #02H
MOV TH0, #0B1H
MOV TL0, #0E0H
MOV TH1, #0D8H
MOV TL1, #0F0H
MOV R1, #02H
HERE:LJMP HERE
DELAY:SETB TR1
HEREY:JNB TF1, HEREY
CLR TR1
CLR TF1
MOV TH1, #0D8H
MOV TL1, #0F0H
RET
EXTER0:LCALL DELAY
JB P1.0, LOOP0
HERE0:JNB P1.0, HERE0
CPL TR0
OOP0:RETI
IPTO: DJNZ R1, LOOP
CPL P1.2
CPL 00H
JNB 00H, LOOP2
MOV R1, #03H
LJMP LOOP
LOOP2: MOV R1, #02H
LOOP: MOV TH0, #0B1H
MOV TL0, #0E0H
RETI
END
五、试验结果
1、基础要求部分:将程序产生十六进制代码加载到proteus中,运行仿真开始无波形输出,按下K0键输出周期为50mS连续方波,图5.1所表示,当按下K1键波形消失,反复操作结果一样。
2、思索题部分:将程序产生十六进制代码加载到proteus中,运行仿真开始无波形输出,按下K0键输出周期为100mS占空比为2:5连续矩形波,图5.2所表示,当再次按下K0键波形消失,反复操作结果一样。
图5.1 图5.2
三、电路原理图
四、程序清单及步骤图
程序一:ORG 0000H
LJMP MAIN
ORG 000BH
LJMP INTO
MAIN:LCALL DELY
MOV SP, #60H
MOV TMOD, #02H
MOV IE, #82H
MOV TH0, #9CH
MOV TL0, #9CH
MOV DPTR, #7FFFH
MOV A, #81H
MOVX @DPTR, A
MOV R3, #0FFH
SETB TR0
LOOP0: MOV DPTR, #7FFEH
MOVX A, @DPTR
SWAP A
MOVX @DPTR, A
LJMP LOOP0
INTO:PUSH DPL
PUSH DPH
PUSH ACC
MOV DPTR, #7FFCH
MOV A, R3
MOVX @DPTR, A
CPL A
MOV R3, A
POP ACC
POP DPH
POP DPL
RETI
DELY:MOV R4, #0FFH
LOOP:NOP
NOP
DJNZ R4, LOOP
RET
END
程序二(思索题):
ORG 0000H
LJMP MAIN
MAIN:LCALL DELY
MOV DPTR, #7FFFH
MOV A, #80H
MOVX @DPTR, A
MOV R3, #08H
MOV DPTR, #7FFEH
MOV A, #0FFH
MOVX @DPTR, A
LOOP0: MOV DPTR, #7FFFH
MOV A, #00H
LOOP1: MOVX @DPTR, A
LCALL DELY
CPL ACC.0
MOVX @DPTR, A
LCALL DELY
CPL ACC.0
INC ACC
INC ACC
DJNZ R3, LOOP1
MOV R3, #08H
LJMP LOOP0
DELY:MOV R4,#0FFH
LOOP3:MOV R5,#0FFH
LOOP:NOP
NOP
NOP
NOP
NOP
DJNZ R5,LOOP
DJNZ R4,LOOP3
RET
END
五、试验结果
1、基础要求部分:将程序产生十六进制代码加载到proteus中,运行仿真能够在示波器中看到图6.1所表示波形,当按下k0键时能够看到D4点亮,同理按下K1键,D5点亮,按下K2键,D6点亮,按下K3键,D7点亮。
2、思索题部分:将程序产生十六进制代码加载到proteus中,运行仿真开始二极管全部熄灭,然后从上倒下依次循环点亮。
图6.1
三、试验电路
四、程序清单及步骤图
程序一:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit smg0=P2^0; sbit smg1=P2^1; sbit smg2=P2^2; sbit smg3=P2^3;
unsigned char code smg_we[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
uchar zs,xs,ad_data;
void ad(void);
void delay(uint t);
void delay_1ms(void);
void display(void);
/******************************主函数************************************/
void main()
{while(1)
{uchar xdata *dr_ad;
uint ad_data;
dr_ad=0xfff7;
*dr_ad=0;
delay(15);//延时100us
ad_data=*dr_ad;
ad_data=ad_data*1.963125;
zs=ad_data/100;
xs=ad_data%100;
display() ;
}
}
/*****************************延时1ms函数********************************/
void delay_1ms(void)
{
uchar j,t;
for(t=100;t>0;t--)
{
for(j=19;j>0;j--);
}
}
/******************************延时子函数*********************************/
void delay(uint t)
{ while(t--); }
/******************************显示子函数**********************************/
void display(void)
{
P1=smg_we[xs%10];
smg0=1;
smg1=0;
smg2=0;
smg3=0;
delay_1ms();
P1=smg_we[xs/10];
smg0=0;
smg1=1;
smg2=0;
smg3=0;
delay_1ms();
P1=smg_we[zs%10]&0x7f;
smg0=0;
smg1=0;
smg2=1;
smg3=0;
delay_1ms();
smg0=0;
smg1=0;
smg2=0;
smg3=0;
delay_1ms();
}
程序二:查询方法只需将主函数中延时改为一个while循环语句,条件为AD中EOC引脚接单片口线为1即可。
程序三:主函数中将总中止和外部中止0开启,将取数据部分放到中止服务程序中,中止服务程序以下。
/************************中止服务函数************************************/
void ad(void)interrupt 0 using 0
{ uchar xdata *dr_ad;
dr_ad=0xfff7;
ad_data=ad_data*1.963125;
*dr_ad=0;
}
五、试验结果
将程序产生十六进制代码加载到proteus中,运行仿真,调整滑动变阻器改变AD输入电压,能够到图7.1—7.4所表示试验结果。
图7.1
图7.2
图7.3
图7.4
三、试验原理电路图
四、程序清单及步骤图
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar jz;
unsigned char code zxb_daima[]={0x7F,0x85,0x8B, 0x92,0x98,0x9E,0xA4,0xAA,0xB0,0xB6, 0xBB, 0xC1, 0xC6, 0xCB,0xD0,0xD5, 0xD9,0xDD,0xE2,0xE5,0xE9,0xEC,0xEF, 0xF2,0xF5, 0xF7, 0xF9,0xFB, 0xFC,0xFD,0xFE,0xFE, 0xFE,0xFE,0xFE,0xFD,0xFC,0xFB,0xF9,0xF7, 0xF5, 0xF2,0xEF,0xEC,0xE9,0xE5,0xE2,0xDD, 0xD9,0xD5,0xD0,0xCB, 0xC6,0xC1, 0xBB, 0xB6, 0xB0,0xAA,0xA4,0x9E,0x98,0x92,0x8B,0x85,0x7F,0x79,0x73,0x6C,0x66,0x60,0x5A,0x54,0x4E,0x48,0x43,0x3D,0x38,0x33,0x2E,0x29, 0x25, 0x21,0x1C,0x19,0x15,0x12,0x0F,0x0C, 0x09, 0x07,0x05,0x03,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x05,0x07,0x09,0x0C,0x0F,0x12,0x15,0x19,0x1C,0x21,0x25,0x29,0x2E,0x33,0x38,0x3D,0x43,0x48,0x4E,0x54,0x5A,0x60,0x66,0x6C,0x73,0x79};//正弦波数据代码
/****************************延时10ms函数**********************************/
void delay_10ms(void)
{ uchar j,t;
for(t=100;t>0;t--)
{for(j=190;j>0;j--);
}
}
/********************************延时子函数***********************************/
void delay(uint t)
{ while(t--); }
/
*******************************取键值子函数*********************************/
uchar key_data(void)
{
uchar i;
i=P1;
i=~i;
i=i&0x1f;
return (i);
}
/**********************判键子函数*****************************************/
uchar key(void)
{
uchar i,d;
i=key_data();
if(i!=0)
{delay_10ms();
i=key_data();
if(i!=0)
{i=key_data();
d=i;
while(i!=0)
{delay_10ms();
i=key_data();
}
delay_10ms();
i=key_data();
while(i!=0)
{delay_10ms();
i=key_data();
}
i=d;
}
}
return (i);
}
/************************方波产生函数*****************************************/
void fangbo(void)
{uchar xdata *dr_da;
uchar i,j=0;
for(i=63;i>0&&jz!=1;i--)
{dr_da=0xfffe;
*dr_da=j;
j=0;
jz=key();
}
for(i=63;i>0&&jz!=1;i--)
{dr_da=0xfffe;
*dr_da=j;
j=255;
jz=key();
}
}
/********************锯齿波产生函数*******************************************/
void juchibo(void)
{uchar xdata *dr_da;
uchar i,j=0;
for(i=63;i>0&&jz!=2;i--)
{dr_da=0xfffe;
*dr_da=j;
j=j+4;
jz=key();
}
}
/********************三角波产生函数*******************************************/
void sanjiaobo(void)
{uchar xdata *dr_da;
uchar i,j=0;
for(i=63;i>0&&jz!=4;i--)
{dr_da=0xfffe;
*dr_da=j;
j=j+4;
jz=key();
}
for(i=63;i>0&&jz!=4;i--)
{dr_da=0xfffe;
*dr_da=j;
j=j-4;
jz=key();
}
}
/**************************正弦波产生函数*************************************/
void zhengxianbo(void)
{uchar xdata *dr_da;
uchar i,j=0;
for(i=128;i>0&&jz!=8;i--)
{dr_da=0xfffe;
*dr_da=zxb_daima[j];
j++;
jz=key();
}
}
/**************************梯形波产生函数*************************************/
void tixingbo(void)
{uchar xdata *dr_da;
uchar i,j=0;
for(i=63;i>0&&jz!=16;i--)
{dr_da=0xfffe;
*dr_da=j;
j=j+4;
jz=key();
}
for(i=63;i>0&&jz!=16;i--)
{dr_da=0xfffe;
*dr_da=j;
j=255;
jz=key();
}
for(i=63;i>0&&jz!=16;i--)
{dr_da=0xfffe;
*dr_da=j;
j=j-4;
jz=key();
}
for(i=63;i>0&&jz!=16;i--)
{dr_da=0xfffe;
*dr_da=j;
j=0;
jz=key();
}
}
/********************************主函数*************************************/
void main()
{
uchar xdata *dr_da;
while(1)
{jz=key();
switch(jz)
{case 0:break;
case 1:jz=0;while(jz==0){fangbo();}break;
case 2:jz=0;while(jz==0){juchibo();}break;
case 4:jz=0;while(jz==0){sanjiaobo();}break;
case 8:jz=0;while(jz==0){zhengxianbo();}break;
case 16:jz=0;while(jz==0){tixingbo();}break;
default:break;
}
}
}
五、试验结果
将程序产生十六进制代码加载到proteus中,运行仿真按下K0键得到图8.1所表示方波,按下K1键得到图8.2所表示锯齿波,按下K2键得到图8.3所表示三角波,按下K3键得到图8.4所表示正弦波,按下K4键得到图8.5所表示梯形波。
图8.1 图8.2
图8.3 图8.4
图8.5
展开阅读全文