收藏 分销(赏)

单片机实验程序及作业流程图.doc

上传人:二*** 文档编号:4516025 上传时间:2024-09-26 格式:DOC 页数:43 大小:7.20MB 下载积分:5 金币
下载 相关 举报
单片机实验程序及作业流程图.doc_第1页
第1页 / 共43页
本文档共43页,全文阅读请下载到手机保存,查看更方便
资源描述
三.程序清单及程序步骤框图 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
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服