实 验 报 告
课程名称: 单片机原理实验 姓 名: 学 号: 专 业: ___ 学 期:
任课教师:
实验(1)名称:置数、拆字及拼字
指导老师:
实验人员:实验地点: 实验时间:
实验内容(实验要求、实验原理、程序设计、现象及结果):片外RAM置数,以及拆字与拼字 程序设计包括:程序流程图、源代码以及必要的说明(对流程图和源代码的说明)
一、实验要求 (1)置数
将70-8FH和2000-20FFH单元内容置数。 (2)拆字程序
把2000H内容拆开,高4位送2001H低4位,低4位送2002H地4位,2001H、2002H、高位清零。 (3)拼字
把2000H、2001H的低4位分别送入2002高4位和低4位。 二、实验原理 (1) 置数
置数1 程序开始 R1赋值70H,R2赋值32(循环次数) 0FFH赋给R1指向 的内部RAM存储单 元 R1自增1 R1=0? N R1=R1-1 Y 程序结束 置数2 程序开始 R1赋值2000H,R2赋值00(循环次数) 第 1 页
0FFH赋给R1指向 的内部RAM存储单 元 R1自增1 R1=0? N R1=R1-1 Y 程序结束 (2)拆字程序 开始 2000H内容送A 高地位交换 屏蔽高4位后送2001H A内容送2000H 屏蔽高四位后送2001H 结束
(3)拼字
开始
2000H内容送A,屏蔽高4 第 2 页
高低位交换,送B
三、程序设计 (1)置数(1)
MOV R0,#70H MOV R1,#20H
LOOP: MOV @R0,#0FFH
INC R0
DJNZ R1,LOOP
END 置数(2)
MOV DPTR, #2000H MOV R1,#00H
LOOP: MOV A,#0FFH
MOVX @DPTR,A INC DPTR
DJNZ R1,LOOP
END
(2)拆字程序 ORG 00H AJMP MAIN ORG 0030H
MAIN: MOV DPTR,#2000H MOV A,#12H
MOVX @DPTR,A CLR A
MOVX A,@DPTR SWAP A
ANL A,#0FH
第 3 页
INC DPTR
MOVX @DPTR,A MOV DPTR,#2000H MOVX A,@DPTR ANL A,#0FH
MOV DPTR,#2002H MOVX @DPTR,A
END
(3)拼字 ORG 000H AJMP MAIN ORG 30H
MAIN: MOV DPTR,#2000H MOV A,#12H MOVX @DPTR,A INC DPTR MOV A,#34H MOVX @DPTR,A
PINZI: MOV DPTR,#2000H MOVX A,@DPTR ANL A,#0FH SWAP A MOV B,A INC DPTR
MOVX A,@DPTR ANL A,#0FH ORL A,B INC DPTR
MOVX @DPTR,A END
四、现象及结果
第 4 页
置数:1.程序编译通过后,70-8FH单元的内容全部显示为
0FFH。
2.程序编译通过后,2000-20FFH单元的内容全部显
示为0FFH。
拆字:程序运行编译通过后,2000H单元显示12,2001H单元
显示2,2002H单元显示1。
拼字:程序运行编译通过后,2000H单元显示12,2001H单元
显示34,2002H单元显示24。
实验(2)名称:数据传送、排序与查找
实验内容:数据传送、排序与相同数据的查找 一、 实验要求 (1)数据传送
现将0000-1FFFH单元置数,再将0000-1FFFH单元内的内容传送到3000-4FFFH单元. (2)数据排序
将50H-5AH的数用冒泡排序法排序后结果依然放入50-5AH中。
(3)查找相同数
查找2000-200FH中为零的数的个数,把个数放在2001H中。
二、 实验原理 (1) 数据传送
第 5 页
(2)数据排序
开始 字节数送R0,查找字节送R1` 相同否? R1+1 第 6 页
DPTR+1 查找相同
(3)数
三、 程序设计 (1)数据传送
MOV DPTR,#0000H MOV A,#11H MOV R3,#00H MOV R0,#20H LOOT: LOOP:
MOVX @DPTR,A INC DPTR INC R3
CJNE R3,#00H,LOOP DJNZ R0,LOOT MOV R1,#00H MOV R2,#20H
MOV DPTR,#3000H LOOA: LOOB:
MOV A,DPH SUBB A,#30H MOV DPH,A
第 7 页
MOVX A,@DPTR MOV R7,A MOV A,DPH ADD A,#30H MOV DPH,A
MOV A,R7
MOVX @DPTR,A INC DPTR
INC R1
CJNE R1,#00H,LOOB DJNZ R2,LOOA END
(2)数据排序
MOV R0,#50H
MOV R7,#0AH LOOP2:
MOV A,R0 MOV R1,A MOV A,R7 MOV R2,A LOOP:
MOV 40H,@R0 INC R1
MOV A,@R1 MOV 41H,A CLR C
SUBB A,40H JNC LOOP1 MOV @R1,40H MOV @R0,41H LOOP1:
DJNZ R2,LOOP INC R0
DJNZ R7,LOOP2
第 8 页
END
(3)查找相同数
MOV DPTR,#2000H MOV R0,#20H MOV R1,#0H LOOP:
MOVX A,@DPTR CJNE A,#0H,LOOP1 INC R1 LOOP1:
INC DPTR
DJNZ R0,LOOP MOV DPTR,#2100H MOV A,R1
MOVX @DPTR,A AJMP $ END
四、现象及结果
(1)数据传送
当程序运行通过后,查看0000-1FFFH单元时内容被置数0FFH,此时3000-4FFFH单元内容为空,当数据传送完毕,0000-1FFFH单元内容为空,而3000-4FFFH内容为0FFH,数据传送成功。 (2) 数据排序
当程序编译通过后,在50-5AH单元内输入任意十个数据,运行后50-5AH单元内数据会按照从小到大依次排序。
(3)查找相同数
当程序编译通过后,在2000-200FH单元内输入16个任意数(包括0),然后运行后,在2001H中会显示在2000-200FH单元内输入的0的个数。
第 9 页
实验(3)名称:I/O控制
实验内容:外部中断的使用,以及Timer定时器的使用 一、实验要求
(1)外部中断的使用
八个灯,当输入外部中断时,中断一次亮一个,依次亮完后,再来中断时有反向依次亮回去,无限循环下去。
(2)Timer定时器的使用
八个灯,中断一次八个灯依次亮(中间相隔一秒),再来中断,八个灯同灭同亮三次,再来中断时,八个灯反向逐一亮(中间相隔一秒),再来中断时八个灯同灭同亮三次,无限循环下去。
二、实验原理
(1)外部中断的使用
在主程序开始前设置INT0 ORG 0003H
AJMP INT
主程序中设置
SETB EA 开总中断 SETB EX0 允许外部中断
SETB PX0 外部中断设置为高优先级 SETB IT0 边沿触发方式 INT:中断子程序
(2)Timer定时器的使用 延时子程序开始 R7赋20 初始化定时器T1工作方式1 赋计数初值3CB0H,启动定时
第 10 页
TF1=1?
N 原地等待 Y
清零TF1
R7=0 ? N r7-1 Y
RETI
三、程序设计
(1)外部中断的使用 ORG 0000H
AJMP START ORG 0003H LJMP INT START:
SETB EA SETB EX0 CLR PX0 SETB IT0
MOV A,#0FEH MOV R1,#0H MOV R0,#0H MOV P1,#0FFH AJMP $ INT:
CJNE R0,#0H,LOOP MOV P1,A RL A DEC A
第 11 页
INC R1
CJNE R1,#7H,LOOP1 INC R0 LOOP1: RETI LOOP: MOV P1,A INC A RR A
CJNE R1,#0H,LOOP2 DEC R0 LOOP2: DEC R1 RETI END
(2)Timer定时器的使用 ORG 0000H AJMP MAIN ORG 000BH AJMP INT ORG 0003H AJMP INTI ORG 0030H MAIN:
MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H SETB ET0 CLR PX0 SETB IT0 SETB EX0 SETB EA
MOV A,#0FFH MOV R1,#0H MOV R0,#0H
第 12 页
MOV P1,A MOV R5,A AJMP $ INT:
DJNZ R7,LOOP5 CJNE R5,#0H,LOOP4 CPL A MOV P1,A
DJNZ R6,LOOP3 AJMP OUT LOOP4:
CJNE R0,#0H,LOOP RL A DEC A MOV P1,A INC R1
CJNE R1,#8H,LOOP3 INC R0 AJMP OUT LOOP:
DEC A RR A
MOV P1,A
CJNE R1,#0H,LOOP2 DEC R0 LOOP2:
DEC R1
CJNE R0,#0H,LOOP3 OUT:
MOV R5,A CLR TR0 SETB EX0 MOV A,0FFH RETI LOOP3:
MOV R7,#20
第 13 页
LOOP5:
MOV TH0,#3CH MOV TL0,#0B0H RETI INTI:
MOV R7,#20 MOV R6,#7H CLR EX0 SETB TR0 RETI END
四、现象及结果
中断:当程序编译通过后,将程序导入MONITOR当中,与试
验箱相连接,当外部中断时,中断一次亮一个,依次亮完后,再来中断时又反向依次亮回去(中断一次亮一个),无限循环下去。
定时器:当程序编译通过后,将程序导入MONITOR当中,与
试验箱相连接,当外部中断时,中断一次,八个灯依次亮(中间相隔1秒),再来中断时,八个灯同灭同亮三次,再来中断时,八个灯反向逐一亮(中间相隔一秒),再来中断时八个灯同灭同亮三次,无限循环下去。
实验(4)名称:串口通讯
第 14 页
实验内容:单片机与PC机通讯方法
一、实验要求
利用串行通信将程序当中的一串数字或字母送入MONITOR当中 ,再由MONITOR送给计算机,并显示出来。 二、实验原理
MCS-51单片机串行口发送接受数据时,通过两个穿行缓冲器SBUF进行,这2个缓冲器采用一个地址(98H),但在物理上是的。其中接收缓冲器只能读出不能写入,发送缓冲器只能写入不能读出。 1. 发送过程
由MOV SBUF,A启动,此时待传送的数据由累加器传入串行发送缓冲器SBUF,由硬件自动在发送字符的始末加上起始位、停止位及其他控制位,而后在移位脉冲控制下低位在前高位在后诸位从TXD端发出。 2接收过程:
串行口接受与否受制于REN状态,当REN被置1后,允许接受,当接收完停止位时,控制电路使中断标志R1的值置为1,此时程序可通过MOV A ,SBUF指令将接收到的字符从送入累加器A,从而完成一帧数据的接收工作。
三、程序设计
ORG 0000H
AJMP MAIN ORG 0023H AJMP INT
ORG 0030H MAIN:
MOV TMOD,#20H
MOV TH1, #0F4H MOV TL1, #0F4H MOV SCON,#50H MOV R0, #30H SETB EA SETB ES
SETB TR1 AJMP $
第 15 页
INT: CLR RI
MOV A, SBUF MOV SBUF,A JNB TI, $ CLR TI MOV @R0, A ajmp out OUT: RETI END
四、现象及结果
程序编译通过后,将程序导入MONITOR当中,打开DPFLASH串口通行窗口,从键盘上输入任意一串数字、字符或字母等,按下发送后,在串口通行窗口下会显示相同的一串数字、字符或字母。
第 16 页