找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4018|回复: 0
打印 上一主题 下一主题
收起左侧

单片机原理实验总结(word格式文档下载)

[复制链接]
跳转到指定楼层
楼主
ID:356472 发表于 2018-8-15 12:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机实验原理包含八个基础实验
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)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表