《单片机试验源程序(10页).doc》由会员分享,可在线阅读,更多相关《单片机试验源程序(10页).doc(10页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-单片机实验指导书(实验源程序)实验二、三 I/O接口实验1、 输出实验例1:ORG0000HAJMPSTART;跳转到初始化程序ORG0033H;- 主程序开始 -START:MOV P1,#0FFH ;是所有LED熄灭ACALL DELAY ;调用延时子程序CLR P1.0 ;P1.0输出低电平,使LED3点亮 ACALL DELAY ;调用延时子程序 SETB P1.0 ;P1.0输出高电平,使LED3熄灭 CLR P1.1 ;P1.1输出低电平,使LED4点亮 ACALL DELAY ;调用延时子程序 SETB P1.1 ;P1.1输出高电平,使LED4熄灭 CLR P1.2 ;P1.
2、2输出低电平,使LED5点亮 ACALL DELAY ;调用延时子程序 SETB P1.2 ;P1.2输出高电平,使LED5熄灭 CLR P1.3 ;P1.3输出低电平,使LED6点亮 ACALL DELAY ;调用延时子程序 MOV P1, #0F0H ;LED3LED6全部发光ACALL DELAY ;调用延时子程序AJMP START ;返回到标号START处再循环;- 延时子程序 -DELAY: MOV R5,#10LOOP: MOV R6,#200LOOP1: MOV R7,#250LOOP2: DJNZ R7,LOOP2 DJNZ R6,LOOP1 DJNZ R5,LOOP RET
3、例2:ORG0000HAJMPSTART ;跳转到初始化程序ORG0033H;- 主程序开始 -START:MOV P1,#0FFH ;是所有LED熄灭ACALL DELAY ;调用延时子程序MOVACC,#0FEH ;ACC中先装入LED3亮的数据(二进制的11111110) MOV P1,ACC ;将ACC的数据送P1口 ACALL DELAY ;调用延时子程序MOV R0,#03H ;上句送到P1口的数据就点亮了LED1,所以将数据再移动3次就完成一个4位流水过程 LOOP3: RL A ;将ACC中的数据左移一位 MOV P1,A ;把ACC移动过的数据送p1口显示 ACALL DEL
4、AY ;调用延时子程序 DJNZ R0,LOOP3 ;没有移动够4次继续移动 MOV P1, #0F0H ;LED3LED6全部发光ACALL DELAY ;调用延时子程序AJMP START ;返回到标号START处再循环;- 延时子程序 -DELAY: MOV R5,#10LOOP: MOV R6,#200LOOP1: MOV R7,#250LOOP2: DJNZ R7,LOOP2 DJNZ R6,LOOP1 DJNZ R5,LOOP RET2、 输入实验例1:;*;* K1控制LED3亮灭交替 *;*org 0star: mov p1,#0h mov p3,#0ffhst1: jb p3
5、.2,$ jnb p3.2,$ cpl p1.0 sjmp st1 end例2:;*;* 按压实验板上的按钮K1,控制P1.0的LED亮灭 *;* 按压K1,LED点亮,再次按压K1,LED熄灭 *;* 程序没有进行按键消抖动处理,控制结果会因为按键抖动而出错 *;* 按压K1十次,大概有35次输出会因为按键抖动而发生错误 *;* 实验时请多按几次,观察一下效果,加深对按键消抖动重要性的认识 *;*ORG0000HAJMPSTART;跳转到初始化程序ORG0033HSTART:MOVSP,#60H;SP初始化MOVP3,#0FFH;端口初始化MAIN:JBP3.2,MAIN;检测按键K1有没有
6、按下 CPLP1.0;执行按键命令,改变P1.0指示灯状态 JNBP3.2,$;等待按键K1释放 AJMPMAIN;返回重新检测按键 END例3:;*;* 按压实验板上的按钮K1,控制P1.0的LED亮灭 *;* 按压K1,LED点亮,再次按压K1,LED熄灭 *;* 程序进行了按键消抖动处理,不会出现控制结果出错的现象 *;* 由此可以看出按键软件消抖动的功效 *;*ORG0000HAJMPSTART;跳转到初始化程序ORG0033HSTART: MOVSP,#60H;SP初始化MOVP3,#0FFH;端口初始化MAIN:JBP3.2,MAIN;检测按键P3.2有没有按下ACALLYS20m
7、s;消前沿抖动延时,实现软件去抖动JBP3.2,MAIN;再次检测按键,如果为高电平,则是抖动CPLP1.0;执行按键命令,改变P1.0指示灯状态JNBP3.2,$;等待按键释放AJMPMAIN;返回重新检测按键YS20ms:MOVR7,#40;延时20ms子程序YS1: MOVR6,#229 DJNZR6,$ DJNZR7,YS1 RET实验四 多级外部中断控制实验例程:;*;* INT0,INT1为边沿触发方式,INT1为高级中断 *;* 主程序中8个LED轮流闪烁 *;* 外中断程序0中,8个指示灯同时闪烁8次 *;* 外中断程序1中,左右4个指示灯交替闪烁 *;* 因为INT1为高级中
8、断,所以INT1中断可以中断INT0中断程序 *;* 即当按压K1进入外中断0时,8个LED同时闪烁,此时按压K2可以中断 *;* TIN0的执行。相反,当INT1中断后,按压K1则不能中断INT1的执行 *;* ORG 0000H AJMP START ORG 0003H JMP PGINT0 ORG 0013H JMP PGINT1 ORG 0033HSTART: MOV P0,#0FFH MOV P1,#0FFH MOV P2,#0FFH MOV P3,#0FFHMAIN: MOV IE,#10000101B;INT0,INT1中断使能 MOV IP,#00000100B;INT1中断优
9、先 MOV TCON,#00000000B;INT0,INT1为电平触发 MOV SP,#60H MOV A,#0FEHLOOP: MOV P1,A CALL DELAY RL A JMP LOOP JMP MAIN PGINT0: PUSH ACC MOV R2,#8LOOP0: MOV P1,#00H CALL DELAY MOV P1,#0FFH CALL DELAY DJNZ R2,LOOP0 POP ACC RETI PGINT1: PUSH ACC MOV R3,#8LOOP1: MOV P1,#0FH CALL DELAY MOV P1,#0F0H CALL DELAY DJNZ
10、 R3,LOOP1 POP ACC RETI ;* 延时子程序 *DELAY:MOVR4,#80D1:MOVR5,#10D2:MOVR6,#228DJNZR6,$DJNZR5,D2DJNZR4,D1RETEND实验五 定时器/计数器实验程序一:ORG0000HAJMPSTARTORG000BH ;定时器0的中断向量地址AJMPTIME0;跳转到真正的定时器程序处ORG0030HSTART:MOVP1,#0FFH ;关所有灯MOVTMOD,#00000001B ;定时/计数器0工作于方式1MOVTH0,#15HMOVTL0,#0A0H ;即数5536SETBEA;开总中断允许SETBET0;开定
11、时/计数器0允许SETBTR0 ;定时/计数器0开始运行LOOP:AJMPLOOP;真正工作时,这里可写任意程序TIME0:;定时器0的中断处理程序PUSHACC PUSHPSW;将PSW和ACC推入堆栈保护CPLP1.0MOVTH0,#15HMOVTL0,#0A0H;重置定时常数POPPSWPOPACCRETIEND程序二:ORG 0000HAT0: MOV P1,#0FFH MOV TMOD,#61H ;设置T1为计数器,工作于方式2;设置T0为定时器,工作于方式1 MOV TL1,#246 MOV TH1,#246 SETB TR1AT1: CPL P1.7 AT2: MOV TL0,#
12、00H ; MOV TH0,#4CH ;即数15536 SETB TR0 JNB TF0,$ CLR TF0 CPL P1.0 JNB TF1,AT2 CLR TF1 SJMP AT1 END实验六 数码管显示实验 ;*数码管显示6的程序1 *MAIN: CLR P0.0 ;P0.0输出低电平,点亮数码管段码a SETB P0.1 ;P0.1输出高电平,熄灭数码管段码b CLR P0.2 ;P0.2输出低电平,点亮数码管段码c CLR P0.3 ;P0.3输出低电平,点亮数码管段码d CLR P0.4 ;P0.4输出低电平,点亮数码管段码e CLR P0.5 ;P0.5输出低电平,点亮数码管段
13、码f CLR P0.6 ;P0.6输出低电平,点亮数码管段码g SETB P0.7 ;P0.7输出高电平,熄灭数码管段码dp CLR P2.0 ;P2.0输出低电平,选通数码管DG1 SETB P2.1 ;P2.1输出高电平,不选通数码管DG2 SETB P2.2 ;P2.2输出高电平,不选通数码管DG3 SETB P2.3 ;P2.3输出高电平,不选通数码管DG4 SETB P2.4 ;P2.4输出高电平,不选通数码管DG5 SETB P2.5 ;P2.5输出高电平,不选通数码管DG5 AJMPMAIN;跳转到开始重新进行 END ;程序结束 ;*数码管显示6的程序2 *MAIN: MOVP
14、0,#82H ;将数字6的段码输出到P0口MOVP2,#0FEH ;从P2口输出数码管选通代码,让DG1显示,其它数码管关闭 AJMPMAIN ;跳转到开始重新进行 END ;程序结束;*;* - 在数码管上动态显示89C51 - *;*MAIN:MOVP0,#80H;第1位数码管显示“8”CLR P2.5 ;允许第1位数码管显示ACALLDELAY;显示延时一段时间MOVP0,#0FFH;清除P0口字形码MOVP2,#0FFH;停止所有数码管显示选通,关闭所有显示MOVP0,#90H;第2位数码管显示“9”CLR P2.4 ;允许第2位数码管显示ACALLDELAY;显示延时一段时间MOVP
15、0,#0FFH;清除P0口字形码MOVP2,#0FFH;停止所有数码管显示选通,关闭所有显示MOVP0,#0C6H;第3位数码管显示“C”CLR P2.3 ;允许第3位数码管显示ACALLDELAY;显示延时一段时间MOVP0,#0FFH;清除P0口字形码MOVP2,#0FFH;停止所有数码管显示选通,关闭所有显示MOVP0,#92H;第4位数码管显示“5”CLR P2.2 ;允许第4位数码管显示ACALLDELAY;显示延时一段时间MOVP0,#0FFH;清除P0口字形码MOVP2,#0FFH;停止所有数码管显示选通,关闭所有显示MOVP0,#0F9H;第5位数码管显示“1”CLR P2.1 ;允许第5位数码管显示ACALLDELAY;显示延时一段时间MOVP0,#0FFH;清除P0口字形码MOVP2,#0FFH;停止所有数码管显示选通,关闭所有显示AJMPMAIN;跳转到开始重新进行;* 延时子程序 *DELAY:MOVR1,#10Y1: MOVR2,#100 DJNZR2,$ DJNZR1,Y1 RETEND-第 10 页-
限制150内