整理所学|单片机原理及应用-第三版-张毅刚(二:实验)

这篇博客主要记录了博主在学习单片机过程中进行的实验,包括实验目的、程序编译执行的步骤以及五个具体实验的内容。通过KEIL和PROTEUS软件,博主掌握了中断原理、定时计数器、非编码键盘、串口通信和存储器扩展。详细介绍了从创建工程、编写代码到在PROTEUS中仿真运行的整个过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

博主是2018级机械设计制造及自动化的学生,本来对结构颇为感兴趣,由于这学期课程接触到了单片机和编程,再加上对传统行业的落寞感到的心生倦怠和对自动化和芯片的浓厚兴趣,让我产生了对嵌入式行业产生了不小的兴趣,所以打算边学边写,看看能不能入得了这个行业槛。
当然作为整理所学,也不只是为了我自己日后方便回顾所学,也是为了刚开始接触这门学科的同学,因为我是比较崇尚B站大学的,很多学科也是托了B站才能够在课下多学点知识(主要是上课有时候确实会听漏),但是对于这门课网上的课程确实对于初学者实在是不太友好,所以想要写点,为了帮助和我遭遇一样的同学们。
(以上纯属废话)

一、实验目的

  • 软件部分:

    • 熟悉KEIL和PROTEUS软件的安装与使用方法,
    • 掌握基于PROTEUS的单片机系统仿真方法,
    • 以及实现KEIL和PROTEUS的联调。
  • 实验部分(硬件与编程):

    • 实验一:掌握中断原理,包括对中断源、中断向量、中断类型号、中断程序以及中断响应过程的理解;
    • 实验二:掌握51单片机定时计数器的原理,包括相关工作方式寄存器,控制寄存器,工作方式、计数初值的计算等内容;
    • 实验三:掌握非编码键盘的工作原理,包括利用扫描法和线反转法实现如何判断键盘按下,如何判断键号等基本内容;
    • 实验四:掌握串口通信的工作原理,包括串口通信工作方式,特殊功能寄存器的设置,波特率制定等内容;
    • 实验五:理解单片机的三总线结构,理解单片机存储器扩展常用的锁存器、译码器、RAM存储器以及ROM存储器;

二、记录程序从编译到执行的实验结果:

1:打开KEIL新建工程
在这里插入图片描述
2:为目标选择单片机型号
在这里插入图片描述
3:这里我们选择的是AT89C51,在画电路图的时候我们也需要用这个相同的单片机在这里插入图片描述
4:后面新建代码页,这时需要在后面加上.asm才能够被后面的选择到
在这里插入图片描述
5:然后双击原组,在里面选择刚刚所创建的文件
在这里插入图片描述
6:选择TARGET OPTIONS需要选择一些选项
在这里插入图片描述
7:在OUTPUT里面选择CREATE HEX FILE,因为PROTEUS里面,C51单片机的程序只能使用HEX格式的文件。
在这里插入图片描述
8:然后在DEBUG里面选择最后一项
在这里插入图片描述
9:在程序输入完成后,点击BUILT,和REBUILT,运行程序看是否有问题出现。
在这里插入图片描述
10:在程序调试完成后,就可以保存,然后来到PROTEUS的界面,选PROGRAM FILE 这一栏里面点击文件夹。
在这里插入图片描述
11:然后选择刚刚保存的那个HEX文件,点击确定。
在这里插入图片描述
12:点击左下角的那个仿真开始键,如果程序没问题,就可以开始进行操作了。
在这里插入图片描述

三、完整代码

实验一:当按下按键时,相邻2个LED灯从左向右移动。即先灯1,2亮,然后3,4亮,然后5,6,然后7,8亮。

ORG   0000H
LJMP  MAIN
ORG   0013H
LJMP  IT
ORG   0030H
MAIN: MOV   P1, #0C0H
SETB  EA
SETB  EX1
SETB  IT1
SJMP  $
IT:   MOV  A,P1
RR    A
RR    A
MOV   P1,A
RETI
END

实验二:采用T0作为定时器,T1作为计数器,实现1秒钟的定时,要求采用中断方法,定时时间到,在LED数码管上显示数字1。数码管所连接的I/O口自行设定。

           ORG    0000H
RESET:     LJMP   MAIN   
           ORG    000BH 
           LJMP   IT0P 
           ORG    1000H 

MAIN:      MOV    SP,#60H
           MOV    B,#0AH 
           MOV    TMOD,#01H
           MOV    TL0,#0B0H  
           MOV    TH0,#3CH 
           MOV    TH0,#3CH 
           SETB   ET0
           SETB   EA  
           SETB   TR0 
HERE:      SJMP   HERE
IT0P:      MOV    TL0,#0B0H   
           MOV    TH0,#3CH
           DJNZ   B,RTURN         
           CLR    TR0
           MOV    P0,#0F9H   
           SETB   F0
RTURN:     RETI
END

实验三:修改教材例7-10内容,采用中断查询扫描方式,完成4x4的矩阵式键盘设计,设16个按键分别为0~9, A~F, 并采用LED数码管显示所按下的按键。系统上电初始状态为熄灭状态

              ORG        0000H
              AJMP       MAIN
              ORG        0003H
              LJMP       KEY_INT0
              ORG        0100H
MAIN:         MOV        SP, #60H
              SETB       IT0
              MOV        IP, #01H
              MOV        P1, #0FH
              SETB       EA
              SETB       EX0
              SJMP       $

              ORG        0300H
KEY_INT0:     //PUSH     ACC
              // PUSH  	 PSW
              LCALL  	 KS
			  JNZ        S1
			  LCALL      D10ms
			  AJMP		 KEY_INT0		
S1:           LCALL      D10ms
              LCALL      KS
              JNZ        S2
			  AJMP	      KEY_INT0
S2:           MOV        R2, #0EFH
              MOV        R4, #00H
S3:           MOV        P1, R2
L6:           JB         P1.0, L1
              MOV        A,  #00H
              AJMP       LK
L1:           JB         P1.1,  L2
              MOV        A, #04H
              AJMP       LK
L2:           JB         P1.2, L3
              MOV        A,  #08H
              AJMP       LK
L3:           JB         P1.3, NEXT
              MOV        A,  #0CH
LK:           ADD        A, R4
              PUSH       ACC
S4:           LCALL      KS
              JNZ        S4
              POP        ACC
              LCALL      DISPLAY
NEXT:         INC        R4
              MOV        A, R2
              JNB        ACC.7 , KEY_INT0	 
              RL         A
              MOV        R2, A
              AJMP       S3
KS:           MOV        P1, #0FH
              MOV        A, P1
              XRL        A,  #0FH
			  RET
D10ms:		  MOV        R7,#25
D1:           MOV        R6,#200
              DJNZ       R6,$
			  DJNZ		 R7,D1
			  RET
DISPLAY:	  MOV        DPTR,#TABLE
			  MOVC  	 A,@A+DPTR
			  MOV	     P0,A
			  RET
TABLE:		  DB	     0C0H,0F9H,0A4H,0B0H,99H
              DB         92H,82H,0F8H,80H,90H
			  DB         88H,83H,0C6H,0A1H,86H
			  DB         8EH
              // POP	 ACC
			  // POP     PSW
			  // RETI
              END

实验四:基于实验四电路图,要求按下K1,K2,K3三个键,两个单片机分别同时显示数字1,2,3。

U1:
ORG     0000H
        LJMP    MAIN
        ORG     1000H

MAIN:   MOV     SP,#60H
        CLR     TI
        MOV     SCON,#40H
        MOV     P0, #0C0H
		
        MOV     TMOD,#20H
        MOV     TH1,#0F4H
        MOV     TL1,#0F4H
        MOV     PCON,#00H
        SETB    TR1

WAIT1:  JB      P1.0, WAIT2
            
        MOV     A, #0F9H
        MOV     P0,A
        MOV     SBUF,A
W1:     JNB     TI,W1
CLR     TI
            
WAIT2:  JB      P1.1,WAIT3
        MOV     A,#0A4H
	    MOV     P0,A
	    MOV     SBUF,A
W2:     JNB     TI,W2
        CLR     TI
WAIT3:  JB      P1.2,WAIT1
        MOV     A, #0B0H
	    MOV     P0,A
	    MOV     SBUF,A
W3:     JNB     TI,W3
        CLR     TI
	    AJMP    WAIT1
        END
U2:
        ORG     0000H
        LJMP    MAIN
        ORG     0023H
        LJMP    COM_INT
        ORG     1000H
MAIN:   MOV     SP,   #60H
        MOV     P0,   #0C0H
        MOV     TMOD, #20H
        MOV     TH1,  #0F4H
        MOV     TL1,  #0F4H
        MOV     PCON, #00H
        MOV     SCON,     #50H
        MOV       IE,   #90H
        CLR     RI
        SETB    TR1
WAIT:   SJMP    WAIT
COM_INT:MOV     A, SBUF
        CLR     RI
	    MOV     P0, A
        RETI
        END

实验五:启动调试模式,按F11键单步运行,根据左侧浏览器栏观察各寄存器值的变化过程,并记录如下:

ORG     0000H
        AJMP   MAIN

MAIN:   MOV    A,   #02H
        MOV    SP,  #52H
        MOV    51H, #0FFH
        MOV    52H, #0FFH
        LCALL  SUB
SJMP    $
SUB :   POP    DPH
        POP    DPL
        MOV    DPTR, #4000H
        RL     A
        MOV    B,A
        MOVC   A, @A+DPTR
        PUSH   ACC
        MOV    A,B
        INC    A
        MOVC   A, @A+DPTR
        PUSH   ACC  
	    RET 
   	    ORG    4000H
	    DB     10H, 80H, 30H, 50H, 30H, 50H

绘制电路图

  • 实验一
    • 选用AT89C51单片机,BUTTON按钮,LED-BLUE灯,RES电阻,SWITCH开关。电路,INT1为高优先级,连接BUTTON开关,可输入一个信号转而执行预先编号的程序,P1.0-P1.7分别连入一个LED-BLUE灯,利用程序让灯成流水灯运转。
      在这里插入图片描述
  • 实验二
    • 选用AT89C51单片机,7SEG-COM-AN-BLUE的七段数码管,晶振与电容,RES电阻在这里插入图片描述
  • 实验三
    • 选用AT89C51单片机,7SEG-MPX1-CA的七段数码管,RES电阻
      在这里插入图片描述
  • 实验四
    • 用了两块AT89C51单片机,三个BUTTON按钮,两块7SEG-COM-AN-BLUE的七段数码管
      在这里插入图片描述
  • 实验五
    • 选用AT89C51单片机,7SEG-MPX1-CC的数码管
      在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值