单片机实验原理包含八个基础实验
1.LED灯循环点亮
2.外部中断计数,BCD码转换
3.四位一体数码管动态静态显示
4.四位秒表
5.脉冲宽度与周期测量
6.串行口和异步通信
7.外部RAM扩展
8.自主设计点阵字符
附件中包含protues仿真设计,程序流程图,汇编代码,以及实验心得体会。
实验一
本实验要求在P1端口接8个LED,并编程依次循环点亮。要求用软件延时程序控制LED的亮灭时间,并能精确地计算和用软件测量延时时间。 图1.1.1 仿真原理图 图1.1.2 仿真原理图细节 Protues中已默认添加了复位电路,其中R1-R8是限流电阻,将普通二极管的正极接到VCC,负极接到P0口,运行结果:D1-D8依次导通,导通时方点变红。 图1.1.3 程序流程图 ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV A,#10000000B LOOP0:MOV P1,A MOV R0,#0FFH LOOP1:MOV R1,#0FFH LOOP2:NOP NOP DJNZ R1,LOOP2 DJNZ R2,LOOP1 RR A SJMP LOOP0 END
(1)number1和number2的作用是什么; R0=number1,R1=number2是设置循环次数,其中,R1为LOOP2循环的次数,R0为LOOP1循环的次数。 (2)灯相邻两次变化之间的延迟时间是多少,如何控制,如何计算? R1为LOOP2循环的次数,即t1=255*2=510us,R0为LOOP1循环的次数,t2=255*2*255=130050us,所以总的延迟时间为T=t1+t2=130560us。 控制延迟时间可通过增加循环次数或者增加循环层数实现,又因为80C52中Rn寄存器最大值为255,所以在此实验基础上,可增加循环层数: MOV R3,#07H LOOP1:MOV R2,#0FFH LOOP2:MOV R1,#0FFH LOOP3:NOP NOP DJNZ R1,LOOP3 DJNZ R2,LOOP2 考虑到单片机的晶振为11.0592MHz,及一个机器周期为1.085us,经过计算当第三层循环次数为7时,延迟约等于1s。 初次使用实验箱和相关软件还不甚熟练,应加强练习。 实验前,应先在Protues软件上进行仿真,能很大程度上增大实验成功概率;插电路的过程中要小心导线间是否短路,导线非绝缘部分不应剪得过长,对待实验要有耐心,按照一定的顺序从源头和细节处检查电路,比如单片机是否和实验箱共地,是否有导线脱落等等。 若烧入程序出现问题,可先关闭实验箱电源再次烧录,或者重新插入串口。 总之,实验过程中会遇到各种意想不到的情况,一定要沉心静气,不然就浪费了时间,又难以发现错误。
实验二 1.功能要求 本实验要求: (1)P0口接8个灯,INT0引脚接一下开关K0。 (2)K0用于引发外部中断,在外部中断子程序中,对K0按下的次数进行计数,然后以BCD码形式,通过P0口的8个灯输出计数结果。
2.硬件原理 图1.2.1 仿真原理图 此时按键16次,红色发光二极管从左到右前四位表示十进制数的十位,后四位表示十进制数的各位,从仿真结果和试验结果看,当按键99次,计数清零,重新开始计数。 3.软件程序流程 图1.2.2 程序流程图 4.程序清单 ORG 0000H LJMP MAIN ORG 0003H LJMP INT0P ORG 0013H LJMP INT1P ORG 0020H MAIN: MOV P0,#00H MOV R0,#00H MOV A,#00H SETB IT0 SETB IT1 SETB EX0 SETB EX1 SETB PX0 CLR PX1 SETB EA SJMP $ ORG 0050H INT0P: INC A DA A MOV P0,A RETI END 5.实验的问题及讨论 关于Protues使用的一些问题: (1)在Protues仿真时,若要用到P0口,要记得加上拉电阻,否则发光二极管不会发光,而实验箱中已加可不考虑; (2)排阻使用时,应注意其使用条件,及阻值的设置。 6.实验心得及建议 单片机能实现的某种功能有多种编程方法,我觉得作为初学者,应该先尝试自己编程,哪怕编出来程序冗长,至少在这个过程中练习了汇编语言的使用,自己编完之后,可以查阅相关资料,看看网上成熟的程序的优点;多和同学们讨论思路,有时间的情况下互相看以下程序,能学到很多知识,拓宽思考问题的角度。
建议:做Protues仿真时,如果没有系统地学习过Protues,遇到问题要努力尝试解决,并记录下来这些问题和解决办法,有利于今后的学习。
实验三 1.功能要求 本实验要求P1口通过驱动芯片控制断码输出信号线,P0口通过驱动芯片控制位选线,并实现以下功能: (1)当开关K0接低电平时,第一位依次显示0~F,然后第二位、第三位、第四位,再循环回第一位。 (2)当开关K0接高电平时,四位动态显示“HELP”。 2.硬件原理 图1.3.1 74LS244引脚图及功能表 在光学元件(optoelectronics)分类里,有各种数码管和液晶。7段对应英文是7SEG,4位一体的英文是MPX4,共阴极CC,共阳极CA,最后的英文是颜色的意思。所以7SEG-MPX4-CA-BLUE为7段4位一体共阳极蓝色数码管显示器。
图1.3.2 仿真原理图 P2.2接地时,每位均依次显示0,1,2,3,4,5,6,7,8,9,A,b,C,d,E,F 图1.3.3 仿真原理图 P2.2接高电平时,显示“HELP” 3.软件程序流程 图1.3.4 程序流程图 4.程序清单 ORG 0000H LJMP MAIN ORG 0010H MAIN: MOV P0,#10001000B JNB P2.2,LOOP4 JB P2.2,NEXT0 NEXT0:LJMP LOOP5 LOOP4:MOV P1,#0C0H LCALL DELAY JB P2.2,NEXT0 MOV P1,#0F9H LCALL DELAY JB P2.2,NEXT0 MOV P1,#0A4H LCALL DELAY JB P2.2,NEXT0 MOV P1,#0B0H LCALL DELAY JB P2.2,NEXT0 MOV P1,#99H LCALL DELAY JB P2.2,NEXT0 MOV P1,#92H LCALL DELAY JB P2.2,NEXT0 MOV P1,#82H LCALL DELAY JB P2.2,NEXT0 MOV P1,#0F8H LCALL DELAY JB P2.2,NEXT0 MOV P1,#80H LCALL DELAY JB P2.2,NEXT0 MOV P1,#90H LCALL DELAY JB P2.2,NEXT0 MOV P1,#88H LCALL DELAY JB P2.2,NEXT0 MOV P1,#83H LCALL DELAY JB P2.2,NEXT0 MOV P1,#0C6H LCALL DELAY JB P2.2,NEXT0 MOV P1,#0A1H LCALL DELAY JB P2.2,LOOP5 MOV P1,#86H LCALL DELAY JB P2.2,LOOP5 MOV P1,#8EH LCALL DELAY JB P2.2,LOOP5 MOV A,P0 RL A MOV P0,A LJMP LOOP4 ORG 0100H DELAY:MOV R0,#10H LOOP1:MOV R1,#10H LOOP2:MOV R2,#0FFH LOOP3:NOP NOP DJNZ R2,LOOP3 DJNZ R1,LOOP2 DJNZ R0,LOOP1 ;2*255+50*255*2+10*50*255*2us RET LOOP5:MOV R5,P0 MOV P0,#10001000B MOV P1,#89H LCALL DELAY1 JNB P2.2,NEXT1 MOV P1,#86H LCALL DELAY1 JNB P2.2,NEXT1 MOV P1,#0C7H LCALL DELAY1 JNB P2.2,NEXT1 MOV P1,#8CH LCALL DELAY1 JNB P2.2,NEXT1 LJMP LOOP5 ORG 0150H DELAY1:MOV R3,#05H LOOP7:MOV R4,#0FFH LOOP6:NOP NOP DJNZ R4,LOOP6 DJNZ R3,LOOP7 MOV A,P0 RR A MOV P0,A RET NEXT1:MOV P0,R5 LJMP LOOP4 END 5.实验的问题及讨论 (1)由于程序中没有使用DB查表命令,导致程序冗长,由高到低的变化时还不能紧接着上一字母读数,仅能实现由低到高的自然变化。 (2)在和同学们的讨论中,使用DB指令,缩短了程序长度;在不使用查表指令的条件下,若将HELP循环放入子程序中,由于子程序执行完成后返回之前的节点,可继续读数。 6. 实验心得及建议 尽快熟记以及熟练使用汇编指令,写程序前应先把思路捋顺,做好程序流程图,这样程序写起来就会得心应手一些。
实验四 1.功能要求 (1) 用T0定时器实现1秒定时,控制一个LED亮1秒,灭1秒,并不断循环。 (2) 实现一个4位秒表: ① 用开关K0模拟秒表的启动、停止、清零功能,K0触发外部中断INT0,按一次启动计时,按一次停止,再按一次清零,在三个状态中循环。 ②定时采用T0定时器中断完成,最低位按1/10秒计数,依次计数单位为1分、10秒、1秒、1/10秒。 ③要求外部中断INT0的优先级高于T0的优先级。 2.硬件原理 图1.4.1 硬件原理图(仿真显示) 3.软件程序流程 图1.4.2 程序流程图
4.程序清单 ;刚开始未显示,当第一次按K0时,开始计时; ;进一次中断是1/20秒 50MS 问题在于用51输入的无符号整数最大实现255然后清零,所以显示一直为零。 ORG 0000H LJMP MAIN ORG 0003H LJMP INT0P ORG 000BH LJMP T0P ORG 0050H MAIN: MOV P0,#00000001B MOV TMOD,#00000001B MOV TL0,#0B0H ;循环2次最佳,误差小 ,1/10 second MOV TH0,#3CH SETB ET0 SETB IT0 SETB EX0 SETB EA MOV R1,#00H MOV R2,#00H MOV R3,#00H MOV R4,#00H MOV R5,#00H MOV R6,#00H MOV R7,#00H MOV DPTR,#0400H W: LCALL XIANSHI SJMP W ;在主程序中一直显示 T0P: INC R3 MOV TL0,#0B0H ;循环2次最佳,误差小 ,1/10 second MOV TH0,#3CH CJNE R3,#2,BACK INC R2 MOV R3,#00H CJNE R2,#10,BACK INC R4 MOV R2,#00H CJNE R4,#10,BACK INC R5 MOV R4,#00H CJNE R5,#06,BACK INC R7 MOV R5,#00H CJNE R7,#10,BACK MOV R7,#00H BACK: RETI INT0P: INC R6 CJNE R6,#01H,CLR0 SETB TR0 CLR0: CJNE R6,#03H,TIMER MOV R1,#00H MOV R2,#00H MOV R3,#00H MOV R4,#00H MOV R5,#00H MOV R6,#00H MOV R7,#00H LJMP STOP1 TIMER: CJNE R6,#02H,STOP1 CLR TR0 MOV TH1,#3CH MOV TL1,#0B0H STOP1: RETI ORG 0250H XIANSHI: MOV A,R2 MOVC A,@A+DPTR MOV P1,A LCALL DELAY MOV P0,#00000010B MOV A,R4 MOVC A,@A+DPTR MOV P1,A LCALL DELAY MOV P0,#00000100B MOV A,R5 MOVC A,@A+DPTR MOV P1,A LCALL DELAY MOV P0,#00001000B MOV A,R7 MOVC A,@A+DPTR MOV P1,A LCALL DELAY MOV P0,#00000001B RET ORG 0350H DELAY: MOV R0,#05H ;2*255+2*255*5=3060US LOOP0: MOV R1,#0FFH LOOP1: NOP NOP DJNZ R1,LOOP1 DJNZ R0,LOOP0 RET ORG 0400H DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H DB 80H,90H ;0~9 END (1)实验通过计时器0工作方式一实现四位秒表计时功能,使TH0、TL0初始值尽可能小,减少跳入计时器中断的次数,以减少误差。 (2)应注意晶振频率,尽可能精确计时。 实验前捋清思路很重要,注意中断不可写的过长,过长可能会导致单片机运行错误。 实验五 1.功能要求 ① 自主设计测量方法,编程连续测量输入脉冲宽度,并用七段LED显示结果。 ② 自主设计测量方法,编程连续测量输入脉冲周期,并用七段LED显示结果。 ③ 自主设计测量方法,同时测量脉冲宽度和周期,由开关K0选择显示脉冲宽度还是显示脉冲周期。 2.硬件原理 图1.5.1 硬件原理图 图1.5.2 硬件原理图 3.软件程序流程 图1.5.3 程序流程图 4.程序清单 ORG 0000H LJMP MAIN ORG 0003H LJMP INT0P ORG 000BH LJMP T0P ORG 0100H MAIN: MOV R1,#0 MOV R2,#0 MOV R3,#0 MOV R4,#0 MOV R5,#0 MOV R6,#0 MOV R7,#0 MOV 30H,#0C0H MOV 31H,#0C0H MOV 32H,#0C0H MOV 33H,#0C0H MOV 21H,#0 SETB IT0 SETB EX0 SETB ET0 SETB EA XIAN0: LCALL XIANSHI LJMP XIAN0 T0P: INC R3 CJNE R3,#10,BACK MOV R3,#0 INC R4 CJNE R4,#10,BACK MOV R4,#0 INC R5 CJNE R5,#10,BACK MOV R5,#0 INC R6 CJNE R6,#10,BACK MOV R6,#0 INC R7 BACK: RETI INT0P: INC 21H MOV A,21H CJNE A,#1,ER2 JB P3.3,WIDTH TIME: MOV TMOD,#02H SJMP START WIDTH: JNB P3.3,TIME MOV TMOD,#0AH START: MOV TH0,#164 MOV TL0,#164 SETB TR0 ER2: CJNE A,#2,BACK1 CLR TR0 MOV A,TL0 SUBB A,TH0 MOV B,#10 DIV AB MOV R2,A MOV R1,B CJNE R7,#0,DDIAN3 CJNE R6,#0,DDIAN2 CJNE R5,#0,DDIAN1 MOV R0,#1 LJMP CUN DDIAN3: MOV R0,#4 LJMP CUN DDIAN2: MOV R0,#3 LJMP CUN DDIAN1: MOV R0,#2 CUN: LCALL CHA MOV 30H,A INC R0 LCALL CHA MOV 31H,A INC R0 LCALL CHA MOV 32H,A INC R0 LCALL CHA MOV 33H,A MOV 21H,#0 MOV R3,#0 MOV R4,#0 MOV R5,#0 MOV R6,#0 MOV R7,#0 BACK1: RETI XIANSHI:MOV DPTR,#TAB MOV P0,#01H MOV P1,30H LCALL DELAY MOV P0,#02H MOV P1,31H LCALL DELAY MOV P0,#04H MOV P1,32H LCALL DELAY MOV P0,#08H MOV P1,33H LCALL DELAY RET CHA: MOV A,@R0 MOVC A,@A+DPTR CJNE R0,#4,BACK2 ADD A,#0AH ;加十,加小数点 BACK2: RET DELAY: MOV 23H,#03H LOP1: MOV 22H,#0FFH LOOP: NOP DJNZ 22H,LOOP DJNZ 23H,LOP1 RET TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H END 5.实验的问题及讨论 用查询法发现数码管的显示会受测量脉冲频率的影响,然后选用中断法,在检测到脉冲下降沿时开始计时,利用门控位方式二测脉冲宽度,方式二测脉冲周期。 6.实验心得及建议 实验中遇到测量脉冲周期为100us的倍数时,会出现较大误差,分析发现是因为当计时达到100us时由于误差造成跳入中断失败,100微秒位计数少一,为解决这一问题,适当加大微秒位误差以减小总体误差。
实验六 ①利用串行口方式0实现一个七段数码管的显示控制,轮流显示0~9十个数码。 ②两人一组,利用异步通信功能将一方的8个按键的高低电平状态传到另一方,并利用另一方的8个LED显示其开关状态,要求双向通信,互相显示。 2.硬件原理 图1.6.1 硬件原理图 图1.6.2 硬件原理图 图1.6.3 74LS164引脚图 表1.6.1 74LS164功能表 3.软件程序流程 图1.6.4 实验1流程图图1.6.5 实验2流程图 4.程序清单 实验1:轮流显示0-9 ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV SCON,#00H ;SM0,SM1,SM2,REN,TB8,RB8,TI,RI MOV DPTR,#TAB TRAM1: MOV R3,#00H TRAM: MOV A,R3 MOVC A,@A+DPTR MOV SBUF,A CJNE R3,#0AH,WAIT MOV R3,#00H LJMP TRAM1 WAIT: JBC TI,NEXT SJMP WAIT NEXT: INC R3 LCALL DELAY LJMP TRAM ORG 0200H DELAY: MOV R2,#03H LOOP2: MOV R0,#09FH LOOP0: MOV R1,#0FFH LOOP1: NOP NOP DJNZ R1,LOOP1 DJNZ R0,LOOP0 DJNZ R2,LOOP2 ;2*255+2*255*255+2*255*255*8~1S RET ORG 0300H TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H END 实验2:双向通信,互相显示 ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV SCON,#50H ;方式1,且接收到的数据均要保存 MOV TMOD,#20H ;T1做波特率发生器 MOV PCON,#80H ;波特率加倍 MOV TH1,#0F4H ;bps:(2^1/32)*1/(2^8-244)*12/11.0592=4800 MOV TL1,#0F4H SETB TR1 SETB EA TRAN: MOV SBUF,P1 WAIT: JBC TI,NEXT SJMP WAIT NEXT: JNB RI,TRAN MOV P2,SBUF CLR RI LJMP TRAN END 5.实验的问题及讨论 - 实验1的难点在于对74LS164的掌握,使用串口方式0时,单片机TXD接芯片时钟脉冲端CLK,而CLR为低电平有效清零端,在本实验中可直接接高电平。
- 串口传输先输出最低位,通过移位寄存器在QH端输出。
- 实验2要注意单片机发送和接收的条件,当TI置1时,发送完毕;当RI置1时,开始接收。此外,在搭建硬件电路时要注意两个单片机相互共地。
6.实验心得及建议 做实验不可眼高手低,即使仿真成功,在实际电路中仍会遇到各种问题,要不断总结经验,提高动手能力。
实验七 1.功能要求 本实验要求利用74LS573进行总线扩展,连接两片62256,并用74LS138完成地址分配;将一片62256的前10个字节的内容加1后存入另一片62256中,读出并用8个LED显示。 2.硬件原理 给出实验的硬件原理图,并分析电路原理(用仿真代替硬件电路设计) 1.74LS138引脚图 图1.7.1 74LS138引脚图表1.7.1 74LS138功能
2.62系列SRAM引脚 图1.7.2 62系列SRAM引脚
3.74LS573 图1.7.3 74LS573引脚图表1.7.2 74LS573功能表 4.Protues仿真 图1.7.4 仿真全图 图1.7.5 仿真部分细节图 3.软件程序流程 图1.7.6 程序流程图 4.程序清单 ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV R0,#00H MOV DPTR,#0000H WRITE: MOV A,R0 MOVX @DPTR,A MOV @R0,A INC R0 INC DPTR CJNE R0,#0AH,WRITE ;第一片62256,写入0~9 MOV DPTR,#8000H ;62256 32K*8,第二片622556 READ: MOV P2,#00H MOV R0,#00H LOOP0: MOV A,@R0 INC A MOVX @DPTR,A INC R0 INC DPTR CJNE R0,#0AH,LOOP0 ;将第一片的前10个字节加一存入第二片 MOV DPTR,#8000H ;显示1 2 3 4 5 6 7 8 9 10 MOV R0,#00H LOOP3: MOVX A,@DPTR MOV P1,A LCALL DELAY INC DPTR INC R0 CJNE R0,#0AH,LOOP3 LJMP MAIN ORG 0200H DELAY: MOV 50H,#06H LOOP1: MOV 51H,#0FFH LOOP2: MOV 52H,#0FFH DJNZ 52H,$ DJNZ 51H,LOOP2 DJNZ 50H,LOOP1 RET END 5.实验的问题及讨论 实验室没有622569(32K*8)芯片,选用了6264(8K*8)芯片,只需将程序中的第二片6264外部扩展地址改为2000H,将A13(P2.5)接译码器的1脚且译码器2、3脚接地,A14(P2.6)、A15(P2.7)也接地即可。 6.实验心得及建议 本实验程序的编写并不困难,难点在于线路的搭建,搭线时一定要细心,反复检查,搭线前应先规划好器件的摆放,有利于实验的快速进行。
实验八 1.功能要求 本实验控制LED点阵模块动态地显示自设字符或图形,设计循环显示数字0-9。 2.硬件原理 图1.8.1 硬件原理图(用软件仿真显示) 图1.8.2 硬件原理细节图(用软件仿真显示) 图1.8.3 SD411988内部结构 图1.8.4 CD4049引脚图及内部结构 3.软件程序流程图 图1.8.5 程序流程图 4.程序清单 ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV P0,#0FFH MOV P2,#0FFH MOV R0,#00H ;显示的幕次(即每一幕显示的数)值0-9 MOV R1,#00H ;列码序列号置0 MOV R2,#00H ;行码序列号置初值 MOV R3,#00H LOOP3:MOV 52H,#0FH XIANS:MOV DPTR,#ROW ;取行码表 首地址 MOV A,R2 MOVC A,@A+DPTR MOV P2,A ;输出行号 MOV DPTR,#COL ;取列码表 首地址 MOV A,R1 MOVC A,@A+DPTR MOV P0,A LCALL DL0 INC R1 INC R2 CJNE R1,#08H,XIANS MOV R1,#00H MOV A,R3 MOV R2,A DJNZ 52H,XIANS INC R0 ;第R0个数 MOV A,R0 MOV B,#08H MUL AB MOV R3,A MOV R2,A CJNE R0,#10,LOOP3 LJMP MAIN ORG 0650H DL0: MOV 50H,#03H LOOP0:MOV 51H,#0FFH LOOP1:NOP NOP DJNZ 51H,LOOP1 DJNZ 50H,LOOP0 ;2*255+2*255*3=2040US RET ORG 0800H COL: DB 01H,02H,04H,08H,10H,20H,40H,80H ;列值 ORG 0850H ROW: DB 00H,00H,3EH,41H,41H,41H,3EH,00H ;0 DB 00H,00H,00H,00H,21H,7FH,01H,00H ;1 DB 00H,00H,27H,45H,45H,45H,39H,00H ;2 DB 00H,00H,22H,49H,49H,49H,36H,00H ;3 DB 00H,00H,0CH,14H,24H,7FH,04H,00H ;4 DB 00H,00H,72H,51H,51H,51H,4EH,00H ;5 DB 00H,00H,3EH,49H,49H,49H,26H,00H ;6 DB 00H,00H,40H,40H,40H,4FH,70H,00H ;7 DB 00H,00H,36H,49H,49H,49H,36H,00H ;8 DB 00H,00H,32H,49H,49H,49H,3EH,00H ;9 END 5.实验的问题及讨论 (1)实验室使用的SD411988LED点阵是行高列低,即编写程序过程中应先给每一行赋值,当行为高对应列为低时,对应的发光二极管被点亮。 (2)实验时遇到点阵最后一列不会被点亮的情况,经检查后发现,在连接时,器件引脚被折进端口下方并未插入端口。 (3)在仿真时,点阵亮度很暗,在加入了驱动74LS244后,情况得到明显改善。 6. 实验心得及建议 事实证明,实验过程中不能局限于实验讲义列写的器件,应根据实际情况调整电路以达到预期效果。
第二部分 单片机接口实验 实验一 基于8255的并口扩展实验 1.功能要求 ①了解8255芯片结构、工作方式。 ②学习使用8255芯片实现单片机与外部设备传输。 2.硬件原理 图2.1.1 硬件原理图 3.软件程序流程 图2.1.2 程序流程图 4.程序清单 ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV A,#90H ;1 0010 000 A方式0输入,B方式0输出 MOV DPTR,#7FFFH ;A0 A1均置1选择控制口 MOVX @DPTR,A MOV DPTR,#7CFFH MOVX A,@DPTR ;A输入 MOV DPTR,#7DFFH ;指向端口B MOVX @DPTR,A LCALL DELAY LJMP MAIN ORG 0200H DELAY: MOV R0,#05FH LOOP0: MOV R1,#0FFH LOOP1: NOP NOP DJNZ R1,LOOP1 DJNZ R0,LOOP0 RET END 5.实验的问题及讨论 注意应先选择控制口,规定输入输出端口和输入输出方式。DPTR为I/O寻址16位寄存器,没有用到的引脚赋1。 6.实验心得及建议 在做接口实验时,应充分学习和理解外部芯片作用以及连接方式。 尝试尽量记忆芯片类型功能以及各引脚功能。
实验十一 LCM控制实验 1.功能要求 完成与LCM1602的接口,并尝试各种显示控制功能。 2.硬件原理 图2.11.1 硬件原理图 3.软件程序流程 图2.11.2 程序流程图 4.程序清单 ORG 0000H LJMP MAIN ORG 0030H MAIN: LCALL CSH MOV R2,#00H MOV R3,#00H MOV R0,#80H LCALL WRI MOV DPTR,#TAB FIRST:MOV A,R2 MOVC A,@A+DPTR MOV R1,A LCALL WRD MOV 50H,#0FFH LCALL DELAY INC R2 CJNE R2,#14,FIRST MOV R0,#0C0H LCALL WRI MOV DPTR,#TAB1 SEC: MOV A,R3 MOVC A,@A+DPTR MOV R1,A LCALL WRD MOV 50H,#0FFH LCALL DELAY INC R3 CJNE R3,#16,SEC LJMP MAIN ;********延时子程序****** ORG 0200H DELAY:MOV 51H,#0FFH DJNZ 51H,$ DJNZ 50H,DELAY RET ;********写指令代码子程序****** ORG 0250H WRI: CLR P2.0 ;RS=0 指令 SETB P2.1 ;RW=1,忙标志和地址计数器读出, LOP0: SETB P2.2 ;E=1,读写使能,高电平有效 MOV P0,#0FFH ;读P0口状态 MOV A,P0 ;读P0口状态,读IR CLR P2.2 ANL A,#80H CJNE A,#0,LOP0 ;D7脚为高时,忙于内部操作,一直检测 CLR P2.0 CLR P2.1 SETB P2.2 MOV P0,R0 MOV 50H,#2 ;延时约510Us LCALL DELAY CLR P2.2 ;RS=0,RW=0,E下降沿,写指令代码 RET ;********写数据子程序****** ORG 0450H WRD: CLR P2.0 ;RS=0 指令 SETB P2.1 ;RW=1,忙标志和地址计数器读出, LOP1: SETB P2.2 ;E=1,读写使能,高电平有效 MOV P0,#0FFH ;读P0口状态 MOV A,P0 ;读P0口状态,读IR CLR P2.2 ANL A,#10000000B CJNE A,#0,LOP1 ;D7脚为高时,忙于内部操作,一直检测 SETB P2.0 CLR P2.1 MOV P0,R1 MOV 50H,#2 LCALL DELAY SETB P2.2 MOV 50H,#2 LCALL DELAY CLR P2.2 RET ;********初始命令子程序****** ORG 0600H CSH: MOV R0,#38H LCALL WR ;L L L L H H(DL 8位数据接口模式) H(双N) L(F) L L 双列显示,字形5*7 MOV R0,#0FH LCALL WRI ;LL L L L L H H H H 开显示,光标闪烁 MOV R0,#01H LCALL WRI ;清除LCD显示屏 RET ORG 0800H TAB: DB 57H,78H,79H,20H,69H,73H,20H,61H,20H,67H,69H,72H,6CH,2EH ;Wxy is a girl. ORG 0850H TAB1: DB 57H,61H,6EH,67H,78H,79H,32H,30H,31H,36H,30H,31H,32H,33H,31H,32H ;Wangxy2016012312 END 5.实验的问题及讨论 (1)考虑到使程序方便用户设置显示功能,方便程序员执行写指令、写数据操作;将初始化显示设置和写指令数据程序编写为子程序,在主程序中直接调用即可。 (2)注意在每次执行写操作过程时,应先检测部件是否正忙,若不忙执行相关指令,若忙循环检测直至不忙。 (3)每次读写引脚前,应先置位E读写使能端。 6.实验心得及建议 外部设备功能较多,指令也较复杂,实验前要先捋清思路,仔细读外部设备的相关功能介绍。 建议更新实验中部分硬件以方便仿真,而且更有利于实验的进行。
课程心得及建议 整个学期下来很难忘的一堂课就是《微机原理及接口技术》,自己上课很少跑神,一方面是知识点比较细碎,需要集中精神学习,另一方面在王老师的带动下,课堂氛围积极活跃,感觉每个同学都在很认真的思考,自己想不到或者刚想到的问题,也总会有同学及时提出来,下课更是有很多同学围着老师问东问西,很感谢王老师一年来的认真授课,我们真的学到很多东西,当实验做完后,成就感是难以言表的。 建议实验室和实验指导书能更新一些器件,淘汰一些老化不常用的芯片,扩展一些趣味实验,可以是对基础实验知识的进一步运用,以增强同学们的学习兴趣,激发同学们的实验热情。
完整的Word格式文档51黑下载地址:
单片机原理实验总结.doc
(1.24 MB, 下载次数: 10)
|