博主是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单片机,BUTTON按钮,LED-BLUE灯,RES电阻,SWITCH开关。电路,INT1为高优先级,连接BUTTON开关,可输入一个信号转而执行预先编号的程序,P1.0-P1.7分别连入一个LED-BLUE灯,利用程序让灯成流水灯运转。
- 实验二
- 选用AT89C51单片机,7SEG-COM-AN-BLUE的七段数码管,晶振与电容,RES电阻
- 选用AT89C51单片机,7SEG-COM-AN-BLUE的七段数码管,晶振与电容,RES电阻
- 实验三
- 选用AT89C51单片机,7SEG-MPX1-CA的七段数码管,RES电阻
- 选用AT89C51单片机,7SEG-MPX1-CA的七段数码管,RES电阻
- 实验四
- 用了两块AT89C51单片机,三个BUTTON按钮,两块7SEG-COM-AN-BLUE的七段数码管
- 用了两块AT89C51单片机,三个BUTTON按钮,两块7SEG-COM-AN-BLUE的七段数码管
- 实验五
- 选用AT89C51单片机,7SEG-MPX1-CC的数码管
- 选用AT89C51单片机,7SEG-MPX1-CC的数码管