单片机实验报告3.docx
《单片机实验报告3.docx》由会员分享,可在线阅读,更多相关《单片机实验报告3.docx(44页珍藏版)》请在冰点文库上搜索。
单片机实验报告3
《单片机应用系统设计》
实验报告
姓名:
院系:
仪器科学与工程学院专业:
测控技术与仪器
实验室:
机械楼5楼同组人员:
评定成绩:
审阅教师:
硬件实验五串行口实验
Ⅰ、串行数据转换并行数据实验
一、实验目的
1、掌握MCS-51串行口,掌握MCS-51串行口方式0工作方式及编程方法;
2、掌握利用串行口扩展I/O口通道的方法。
二、实验内容
利用单片机的串行口和I/O端口串行输出,利用板上的74HC164串转并电路,移位转换成并行数据,接在LED灯上显示。
三、实验步骤
1、硬件连接
连线
连接孔1
连接孔2
1
L0
164-Q0
2
L1
164-Q1
3
L2
164-Q2
4
L3
164-Q3
5
L4
164-Q4
6
L5
164-Q5
7
L6
164-Q6
8
L7
164-Q7
9
RXD(P3.0)
164-AB
11
TXD(P3.1)
164-CLK
2、实验说明
串行口工作在方式0时,可通过外接移位寄存器实现串并行转换。
在这种方式下,数据为8位,只能从RXD端输入输出,TXD端总是输出移位同步时钟信号,其波特率固定为Fosc/12。
3、分析并执行程序,观察记录结果。
四、提高要求
将串行数据转换成并行数据,驱动并行八段LED显示器,即利用串行口扩展LED显示器,画出线路图并说明工作过程。
五、程序框图
六、实验程序
MOVSCON,#0;串口方式0
MOVA,#0AAH
MOVSBUF,A;输出55H
JNBT1,$
CLRT1
LJMP$
END
七、实验结果
LED灯的L0,L2,L4,L6亮,L1,L3,L5,L7灭。
八、实验提高
将串行数据转换成并行数据,驱动八段LED显示器,即利用串行口扩展LED显示器,画出线路图并说明工作过程。
将接线改为:
连线
连接孔1
连接孔2
1
A
164-Q0
2
B
164-Q1
3
C
164-Q2
4
D
164-Q3
5
E
164-Q4
6
F
164-Q5
7
G
164-Q6
8
H
164-Q7
九、实验思考
串口工作方式0是同步串口通讯。
其特点是:
在有效数据信息开始传输前需用同步字符来指示有效数据信息传输的开始,其接收/发送的数据信息必须由时钟信号来进行严格的同步。
Ⅱ、并行数据转换串行数据实验
一、实验目的
掌握并行数据转换为串行数据的方法。
二、实验内容
利用板上的74HC165并转串电路,读入外部的并行数据,移位转换成串行数据,再利用单片机串行口读入。
三、实验步骤
1、硬件连接
连线
连接孔1
连接孔2
1
K0
165-P0
2
K1
165-P1
3
K2
165-P2
4
K3
165-P3
5
K4
165-P4
6
K5
165-P5
7
K6
165-P6
8
K7
165-P7
9
P1.1
165-Q7
10
P1.2
165-CLK
11
P1.0
165-LOAD
2、实验说明
串行口工作在方式0时,可通过外接移位寄存器实现串并行转换。
在这种方式下,数据为8位,只能从RXD端输入输出,TXD端总是输出移位同步时钟信号,其波特率固定为晶振频率Fosc/12。
可利用P1.0控制74HC165护具输入/锁存。
3、分析并执行程序,观察记录结果。
四、实验流程图
五、实验程序
LDEQUP1.0
CLRLD
SETBLD
MOVSCON,#00010000B
WAIT:
JNBRI,WAIT
MOVA,SBUF
CLRRI
LJMP$
END
六、实验结果
通过改变开关的开闭情况使累加器输出此时的开关值。
当使开关的输入为10011001B时,累加器A的值为1。
七、实验思考
74HC165是8位并行输入串行输出移位寄存器,只要把Q7输出绑定到下一级的DS输入,即可实现并转串扩展。
Ⅲ、串行口通讯实验
一、实验目的
1、掌握单片机串行口工作方式的程序设计方法;
2、了解实现串行通讯的硬环境、数据格式的协议、数据交换的协议。
二、实验内容
利用单片机串行口,实现两个实验台之间的串行通讯。
其中一个实验台作为发送方,另一侧为接收方。
发送方读入按键值,并发送给接收方,接收方收到数据后在LED上显示。
甲方乙方
三、实验步骤
1、硬件连接
连线
连接孔1
连接孔2
1
甲方TXD
乙方RXD
2
甲方RXD
乙方TXD
3
甲方GND
乙方GND
4
KEY/LED_CS
CS0
2、实验说明
1、MCS51的RXD、TXD接线柱在POD51/96仿真板上。
2、通讯双方的RXD、TXD信号本应经过电平转换后再行交叉连接,本实验中为减少连线可将电平转换电路略去,而将双方的RXD、TXD直接交叉连接。
也可以将本机的TXD接到RXD上,这样按下的键,就会在本机LED上显示出来。
3、若想与标准的RS232设备通信,就要做电平转换,输出时要将TTL电平换成RS232电平,输入时要将RS232电平换成TTL电平。
可以将仿真板上的RXD、TXD信号接到实验板上的“用户串口接线”的相应RXD和TXD端,经过电平转换,通过“用户串口”接到外部的RS232设备。
可以用实验仪上的逻辑分析仪采样串口通信的波形
3、分析并执行程序,观察记录结果。
四、高级要求
1、先实现单机通讯,再实现双机通讯。
2、查询资料,了解RS-485串口功能及使用方法。
五、实验程序
OUTBITEQU08002H
OUTSEGEQU08004H
INEQU08001H
HASRCVEQU20H.0
LEDBUFEQU40H
RCVBUFEQU50H
ORG0000H
LJMPSTART
ORG0023H
JNBTI,SO_R
CLRTI
NOP
SJMPSO_RET
SO_R:
CLRRI
MOVRCVBUF,SBUF
SETBHASRCV
NOP
SO_RET:
RETI
LEDMAP:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB7FH,6FH,77H,7CH,39H,5EH,79H,71H
DELAY:
MOVR7,#0
DELAYLOOP:
DJNZR7,DELAYLOOP
DJNZR6,DELAYLOOP
RET
DISPLAYLED:
MOVR0,#LEDBUF
MOVR1,#6
MOVR2,#00100000B
LOOP:
MOVDPTR,#OUTBIT
MOVA,#0
MOVX@DPTR,A
MOVA,@R0
MOVDPTR,#OUTSEG
MOVX@DPTR,A
MOVDPTR,#OUTBIT
MOVA,R2
MOVX@DPTR,A
MOVR6,#1
CALLDELAY
MOVA,R2
RRA
MOVR2,A
INCR0
DJNZR1,LOOP
RET
TESTKEY:
MOVDPTR,#OUTBIT
MOVA,#0
MOVX@DPTR,A
MOVDPTR,#IN
MOVXA,@DPTR
CPLA
ANLA,#0FH
RET
KEYTABLE:
DB16H,15H,14H,0FFH
DB13H,12H,11H,10H
DB0DH,0CH,0BH,0AH
DB0EH,03H,06H,09H
DB0FH,02H,05H,08H
DB00H,01H,04H,07H
GETKEY:
MOVDPTR,#OUTBIT
MOVP2,DPH
MOVR0,#LOW(IN)
MOVR1,#00100000B
MOVR2,#6
KLOOP:
MOVA,R1
CPLA
MOVX@DPTR,A
CPLA
RRA
MOVR1,A
MOVXA,@R0
CPLA
ANLA,#0FH
JNZGOON1
DJNZR2,KLOOP
MOVR2,#0FFH
SJMPEXIT
GOON1:
MOVR1,A
MOVA,R2
DECA
RLA
RLA
MOVR2,A
MOVA,R1
MOVR1,#4
LOOPC:
RRCA
JCEXIT
INCR2
DJNZR1,LOOPC
EXIT:
MOVA,R2
MOVDPTR,#KEYTABLE
MOVCA,@A+DPTR
MOVR2,A
WAITRELEASE:
MOVDPTR,#OUTBIT
CLRA
MOVX@DPTR,A
MOVR6,#10
CALLDELAY
CALLTESTKEY
JNZWAITRELEASE
MOVA,R2
RET
START:
MOVSP,#60H
MOVIE,#0
MOVTMOD,#020H
MOVTH1,#0F3H
MOVTL1,#0F3H
ANLPCON,#07FH
ORLPCON,#80H
MOVSCON,#050H
MOVLEDBUF,#0FFH
MOVLEDBUF+1,#0FFH
MOVLEDBUF+2,#0FFH
MOVLEDBUF+3,#0FFH
MOVLEDBUF+4,#0
MOVLEDBUF+5,#0
SETBTR1
SETBES
SETBEA
;MOVSBUF,A
;JNBTI,$
MLOOP:
JBHASRCV,RCVDATA
CALLDISPLAYLED
CALLTESTKEY
JZMLOOP
CALLGETKEY
ANLA,#0FH
MOVSBUF,A
LJMPMLOOP
RCVDATA:
CLRHASRCV
MOVA,RCVBUF
MOVB,A
ANLA,#0FH
MOVDPTR,#LEDMAP
MOVCA,@A+DPTR
MOVLEDBUF+5,A
MOVA,B
SWAPA
ANLA,#0FH
MOVDPTR,#LEDMAP
MOVCA,@A+DPTR
MOVLEDBUF+4,A
LJMPMLOOP
END
六、实验结果
甲方按下键盘,乙方的数码管上将显示出键盘的值,反之同样如此。
七、实验提高
1、先实现单机通讯,再实现双机通讯。
2、查询资料,了解RS-485串口功能及使用方法。
答:
RS-485为半双工,采用一对平衡差分信号线。
对于多站互连是十分方便的。
允许最多并联32台驱动器和32台接收器。
RS-485的信号传输采用两线间的电压来表示逻辑“1”和逻辑“0”,由于收发方需要两根传输线。
数据采用差分传输,所以干扰抑制性好。
又因无接地问题,所以传输距离可达1200米,传输速率可达10Mbit/s。
硬件实验六计数器/定时器实验
Ⅰ、计数器实验
一、实验目的
学习单片机内部定时/计数器使用方法。
二、实验内容
利用MCS-51内部定时/计数器T0,按计数器模式和方式1工作,对P3.4(T0)引脚进行计数。
将其数值按二进制数在P1口驱动LED灯上显示出来。
三、实验步骤
1、硬件连接
连线
连接孔1
连接孔2
1
P1.0
L0
2
P1.1
L1
3
P1.2
L2
4
P1.3
L3
5
单脉冲输出
P3.4(T0)
2、实验说明
本实验中内部计数器起计数器的作用。
外部事件计数脉冲由P3.4引入定时器T0。
单片机在每个机器周期采样一次输入波形,因此单片机至少需要两个机器周期才能检测到一次跳变。
这就要求被采样电平至少维持一个完整的机器周期,以保证电平在变化之前即被采样。
这就决定了输入波形的频率不能超过机器周期频率。
3、分析并执行程序,观察记录结果。
四、提高要求
1、修改程序,连接八个LED灯用于计数显示。
2、修改程序,要求将计数器中的数值以十进制数的形式显示。
五、程序框图
六、实验程序
MOVTMOD,#00000101B;方式1,计数器
MOVTH0,#0
MOVTL0,#0
SETBTR0;开始计数
LOOP:
MOVP1,TL0;将计数结果送P1口
LJMPLOOP
END
七、实验结果
按一下脉冲输入,计数加1,并在LED上反映出来。
八、实验提高
1、修改程序,连接八个LED灯用于计数显示;
答:
在原有的连线基础上将P1.4~P1.7与L4~L7连接
2、修改程序,要求将计数器中的数值以十进制的形式显示。
扩展主程序:
START:
movtmod,#00000101b
movth0,#0
movtl0,#0
setbtr0
movr0,#LEDBUF
loop:
movp1,tl0
MOVA,tl0;数码管显示开始
ANLA,#0FH
MOVDPTR,#LEDMAP
MOVCA,@A+DPTR
mov@r0,a
CALLDISPLAYLED
LJMPloop
END
使用了之前数码管实验的程序
九、实验思考
在每个机器周期采样一次输入波形,因此单片机至少需要两个机器周期才能检测到一次跳变。
这就要求被采样电平至少维持一个完整的机器周期,以保证电平在变化之前即被采样。
同时这就决定了输入波形的频率不能超过机器周期频率。
Ⅱ、定时器(秒脉冲发生器)实验
一、实验目的
1、学习单片机内部计数器/定时器的使用和编程方法;
2、进一步掌握中断处理程序的编程方法。
二、实验内容
用CPU内部定时器中断方式计时,实现每一秒钟输出状态发生一次反转。
三、实验步骤
1、硬件连接
连线
连接孔1
连接孔2
1
P1.0
L0
2、实验说明
1、内部定时/计数器的编程主要是相关寄存器的设置和计数常数的设置。
内部计数器在单片机中主要有定时器和计数器两个功能。
本实验使用的是定时器。
2、定时器有关的寄存器有工作方式寄存器TMOD和控制寄存器TCON。
TMOD用于设置定时器/计数器的工作方式0-3,并确定用于定时还是用于计数。
TCON主要功能是为定时器在溢出时设定标志位,并控制定时器的运行或停止等。
3、内部计数器用作定时器时,是对机器周期计数。
每个机器周期的长度是12个振荡器周期。
因为实验系统的晶振是6MHZ,本程序工作于方式2,即8位自动重装方式定时器,定时器100us中断一次,所以定时常数的设置可按以下方法计算:
机器周期=12÷6MHZ=2uS
(256-定时常数)×2uS=100us
定时常数=206.然后对100us中断次数计数10000次,就是1秒钟.
4、在例程的中断服务程序中,因为中断定时常数的设置对中断程序的运行起到关键作用,所以在置数前要先关对应的中断,置数完之后再打开相应的中断。
如果定时/计数器工作方式不是方式2(8位自动重装方式),则在中断服务子程序中,还要重新装入定时/计数常数。
3、分析并执行程序,观察并记录结果。
四、提高要求
修改程序,使定时器工作在方式1,定时器50ms中断一次,完成以上功能。
五、程序框图
六、实验程序
TICKEQU5000
T100USEQU256-100
C100USEQU30H
LEDBUFEQU0
LEDEQUP1.0
LJMPSTART
ORG000BH
TOINT:
PUSHPSW
MOVA,C100US+1
JNZGOON
DECC100US
GOON:
DECC100US+1
MOVA,C100US
ORLA,C100US+1
JNZEXIT
MOVC100US,#HIGH(TICK)
MOVC100US+1,#LOW(TICK)
CPLLEDBUF
EXIT:
POPPSW
RETI
START:
MOVTMOD,#02H
MOVTH0,#T100US
MOVTL0,#T100US
MOVIE,#10000010B
SETBTR0
CLRLEDBUF
CLRLED
MOVC100US,#HIGH(TICK)
MOVC100US+1,#LOW(TICK)
LOOP:
MOVC,LEDBUF
MOVLED,C
LJMPLOOP
END
七、实验结果
LED灯呈亮、灭、亮、灭的循环。
八、实验提高
TICKEQU5000
C100USEQU30H
LEDBUFEQU0
LEDEQUP1.0
LJMPSTART
ORG000BH
TOINT:
PUSHPSW
MOVTL0,#9CH
MOVTH0,#0FFH
MOVA,C100US+1
JNZGOON
DECC100US
GOON:
DECC100US+1
MOVA,C100US
ORLA,C100US+1
JNZEXIT
MOVC100US,#HIGH(TICK)
MOVC100US+1,#LOW(TICK)
CPLLEDBUF
EXIT:
POPPSW
RETI
START:
MOVTMOD,#01H
MOVTH0,#0FFH
MOVTL0,#9CH
MOVIE,#10000010B
SETBTR0
CLRLEDBUF
CLRLED
MOVC100US,#HIGH(TICK)
MOVC100US+1,#LOW(TICK)
LOOP:
MOVC,LEDBUF
MOVLED,C
LJMPLOOP
END
九、实验小结
该实验让我了解了定时器的不同工作方式,开始时工作于方式2,这是一个8位重装的定时器,所以在中段服务程序中不必要在置初值,而提高中的方式1,是一个16位的计数器,高位和低位初值不同,且需要在中断服务子程序中重置初值。
硬件实验七:
外部中断(交通灯控制)实验
一、实验目的
1.了解外部中断技术的基本使用方法;
2.掌握中断处理程序的编程方法。
二、实验内容
本实验模拟交通信号灯控制。
一般情况下正常显示,当有急救车到达时,两个方向交通信号灯全红,以便让急救车通过。
设急救车通过路口时间为10秒,急救车通过后,交通恢复正常。
本实验用单次脉冲申请外部中断,表示有急救车通过。
三、实验步骤
1.硬件连接
连线
连接孔1
连接孔2
1
P1.0
L7
2
P1.1
L6
3
P1.2
L5
4
P1.3
L4
5
P1.4
L3
6
P1.5
L2
7
单脉冲输出
/INT0(P3.2)
2.实验说明
中断服务程序的关键是:
1、保护进入中断时的状态,并在退出中断之前恢复进入时的状态。
2、必须在中断程序中设定是否允许中断重入,即重新设置中断允许位。
参考程序中使用了/INTO中断,一般中断程序进入时应保护PSW、ACC及其它非中断程序专用的寄存器。
参考程序中保护了PSW、ACC等三个寄存器并且在退出中断前恢复了这三个寄存器。
另外中断程序涉及到关键数据的设置时应关中断,即设置该数据时不允许重入。
参考程序中没有涉及到这种情况。
MCS51CPU外部中断/INTO由P3.2端接入,中断信号由单次脉冲发生器产生。
3.分析并执行程序,观察并记录结果。
四、提高要求
1、修改程序,延长急救车通过实践为20秒。
2、8051单片机5个中断源的中断矢量入口地址?
哪些中断申请标志由CPU自动清除?
哪些中断申请标志必须由软件清除?
五、实验程序
FLASHEQU0;
STOPEQU1
SREQUP1.0
SYEQUP1.1
SGEQUP1.2
EREQUP1.3
EYEQUP1.4
EGEQUP1.5
LJMPSTART
ORG3
SETBSTOP
RETI
START:
MOVSP,#70
MOVTCON,#01H
MOVIE,#81H
SETBSR
CLRSY
CLRSG
SETBER
CLREY
CLREG
CLRSTOP
LOOP:
JBSTOP,ALLRED
SETBSR
CLRSY
CLRSG
CLRER
CLREY
CLREG
MOVA,#20
CALLDELAY
JBSTOP,ALLRED
SETBSR
CLRSY
CLRSG
CLRER
CLREY
CLREG
CLRFLASH
MOVR7,#9
LOOP1:
MOVC,FLASH
MOVEY,C
MOVA,#1
CALLDELAY
CPLFLASH
DJNZR7,LOOP1
JBSTOP,ALLRED
CLRSR
CLRSY
SETBSG
SETBER
CREY
CLREG
MOVA,#20H
CALLDELAY
JBSTOP,ALLRED
CLRSR
CLRSY
CLRSG
SETBER
CLREY
CLREG
CLRFLASH
MOVR7,#9
LOOP2:
MOVC,FLASH
MOVSY,C
MOVA,#1
CALLDELAY
CPLFLASH
DJNZR7,LOOP2
LJMPLOOP
ALLRED:
SETBSR
CLRSY
CLRSG
SETBER
CLREY
CLREG
CLRSTOP
MOVA,#10
CALLDELAY
LJMPLOOP
DELAY:
MOVR1,#80H
MOVR0,#0
DELAYLOOP:
JBSTOP,EXITDELAY
DJNZR0,DELAYLOOP
DJNZR1,DELAYLOOP
DJNZACC,DELAY
EXITDELAY:
RET
END
六、提高要求
1.修改程序,延长急救车通过时间为20秒。
改变ALLRED中寄存器A的值,改变DELAY延时函数的延时时间,即可改变通过时