南昌大学单片机实验报告DOC.docx
《南昌大学单片机实验报告DOC.docx》由会员分享,可在线阅读,更多相关《南昌大学单片机实验报告DOC.docx(47页珍藏版)》请在冰豆网上搜索。
南昌大学单片机实验报告DOC
实验一I/O口输入输出实验
一、实验目的
掌握单片机P1口、P3口的使用方法。
二、实验内容
以P1口为输出口,接八位逻辑电平显示,LED显示跑马灯效果。
以P3口为输入口,
接八位逻辑电平输出,用来控制跑马灯的方向。
三、实验要求
根据实验内容编写一个程序,并在实验仪上调试和验证。
四、实验步骤
1)系统各跳线器处在初始设置状态。
用导线连接八位逻辑电平输出模块的K0到CPU模块的RXDP3.0口);用8位数据线连接八位逻辑电平显示模块的JD4B到CPU模块JD8(P1口)。
2)启动PC机,打开THGMW-51软件,输入源程序,并编译源程序。
编译无误后,下载程序运行。
3)观察发光二极管显示跑马灯效果,拨动K0可改变跑马灯的方向。
五、实验参考程序
;〃******************************************************************
;文件名:
PortforMCU51
;功能:
I/O口输入、输出实验
;接线:
用导线连接八位逻辑电平输出模块的K0到CPU模块的RXD(P3.0口);;用8位数据线连接八位逻辑电平显示模块的JD2B到CPU模块的JD8(P1口)。
;//******************************************************************
DIRBITP3.0
ORG0000H
LJMPSTART
ORG0100H
START:
OUTPUT1:
MOVA,#0FEH
MOVR5,#8
LOOP1:
CLRC
MOVC,DIR
JC0UTPUT2
MOVP1,A
RLA
ACALLDELAY
DJNZR5,LOOP1
SJMPOUTPUT1
OUTPUT2:
MOVA,#07FH
MOVR5,#8
LOOP2:
CLRC
MOVC,DIR
JNCOUTPUT1
MOVP1,A
RRA
ACALLDELAY
DJNZR5,LOOP2
SJMPOUTPUT2
DELAY:
MOVR6,#0
DELAYLOOP1:
MOVR7,#0
DELAYLOOP2:
NOP
NOP
DJNZR7,DELAYLOOP2
DJNZR6,DELAYLOOP1
RET
END
六、实验结果
当八位逻辑电平的K0拨到上方,即输出高电平时,实验箱B5区的八个LED灯从左至右循环点亮,当K0拨到下方,即输出低电平时,八个LED灯从右至左循环点亮。
七、结果分析
程序通过查询方式不断检测P3.0口的输入状态,当P3.0输入为0时,由P1口通过左
移指令RL轮流输出低电平驱动LED发光,在左移时通过软件延时控制LED亮的时间;当
P3.0输入为1时,由P1口通过右移指令RR轮流输出低电平驱动LED发光,在右移时同样通过软件延时控制LED亮的时间,如此循环扫描查询,便可实现流水灯的效果。
实验二外部中断实验
一、实验目的
学习外部中断技术的基本使用方法。
二、实验内容
INTO端接单次脉冲发生器。
按一次脉冲产生一次中断,CPU使P1.0状态发生一次反
转,P1.0接LED灯,以查看信号反转。
三、实验要求
根据实验内容编写一个程序,并在实验仪上调试和验证。
四、实验步骤
1)系统各跳线器处在初始设置状态,用导线连接单次脉冲模块的输出端到CPU模块的P32;CPU模块的P10接八位逻辑电平显示模块的灯。
2)启动PC机,打开THGMW-51软件,输入源程序,并编译源程序。
编译无误后,下载程序运行。
3)连续按动单次脉冲产生电路的按键,发光二极管L0每按一次状态取反,即隔一次点
五、实验参考程序
;〃*************************************************
;文件名:
EXintforMCU51
;功能:
外部中断实验
;接线:
导线连接单次脉冲模块的输出端到CPU模块的P32,
;CPU模块的P10接八位逻辑电平显示模块的L0灯。
;〃*************************************************
LEDBITP1.0
LEDBUFBIT20H
ORG0
LJMPSTART
ORG3
INTERRUPT0:
PUSHPSW;保护现场
CPLLEDBUF;取反LED
MOVC,LEDBUF
MOVLED,C
POPPSW;恢复现场
RETI
START:
CLRLEDBUF
CLRLED
MOVTCON,#01H;外部中断0下降沿触发
MOVIE,#81H;打开外部中断允许位(EX0)及总中断允许位(EA)
OK:
LJMPOK
END
六、实验结果
每按下E3区的单次脉冲触发按钮时,B5区的发光二极管状态取反一次,即原来是亮按
下时灭,原来是灭则按下时亮。
七、结果分析
程序由外部中断0实现,外部中断0由下降沿触发,外部输入由单次脉冲触发器输入,每次按下按钮时会触发单次脉冲,产生一个下降沿,从而使程序产生中断,在中断服务函数
的程序里面对P1.0取反,由P1.0驱动LED,就可实现本实验的功能。
实验三定时/计数器实验
一、实验目的
学习MCS-51内部计数器的使用和编程方法。
二、实验内容
使用MCS-51内部定时/计数器,定时一秒钟,CPU运用定时中断方式,实现每一秒钟输
出状态发生一次反转,即发光管每隔一秒钟亮一次。
三、实验要求
根据实验内容编写一个程序,并在实验仪上调试和验证。
四、实验步骤
1)系统各跳线器处在初始设置状态,用导线连接CPU模块P10到八位逻辑电平显示模块的L0。
2)启动PC机,打开THGMW-51软件,输入源程序,并编译源程序。
编译无误后,下载程序运行。
3)运行程序观察发光二极管隔一秒点亮一次,点亮时间为一秒。
五、实验参考程序
;//*************************************************
;文件名:
TIMERFORMCU51
;功能:
定时/计数器实验
;接线:
导线连接CPU莫块P10到八位逻辑电平显示模块的L0.
;//*************************************************
TICKEQU10000;10000X100US=1S
T100USEQU156;100US时间常数(6M)
C100USEQU30H;100US记数单元
LEDBUFBIT20H
ORG0
LJMPSTART
ORG000BH
T0INT:
PUSHPSW
MOVA,C100US+1
JNZGOON
DECC100US
GOON:
DEC
C100US+1
MOV
A,C100US
ORL
A,C100US+1
JNZ
EXIT;100US
记数器不为
0,返回
MOV
C100US,#27H;#HIGH(TICK)
MOV
C100US+1,#10H;#LOW(TICK)
CPL
LEDBUF;100US
记数器为0,
重置记数器
取反LED
EXIT:
POP
RETI
PSW
START:
MOV
TMOD,#02H
;方式2,定时器
MOV
TH0,#T100US
MOV
TL0,#T100US
MOV
IE,#10000010B
;EA=1,IT0=1
SETB
TR0;
开始定时
CLR
LEDBUF
CLR
P1.0
MOV
C100US,#27H
;#HIGH(TICK)
MOV
C100US+1,#10H
;#LOW(TICK)
LOOP:
MOV
C,LEDBUF
MOV
P1.0,C
LJMP
LOOP
END
六、实验结果
运行程序之后,B5区的发光二极管L0隔一秒点亮一次,每次点亮时间为一秒。
七、结果分析
本实验通过定时器0的方式2实现精确定时,但定时器的最长定时时间达不到一秒,所以通过一个时间变量实现,总的定时时间等于定时器定时时间乘以时间变量初值,这样就可
实现一秒的定时,程序通过扫描不断检测时间变量的值,当定时时间一秒到时,对P1.0的
状态取反,实现L0每隔一秒亮一次。
实验四交通灯控制实验
一、实验目的
掌握十字路口交通灯控制方法。
二、实验内容
利用系统提供的双色LED显示电路,和四位静态数码管显示电路模拟十字路口交通信号灯。
4位LED数码管显示时间,LED显示红绿灯状态。
三、实验要求
根据实验内容编写一个程序,并在实验仪上调试和验证。
四、实验步骤
1)系统各跳线器处在初始设置状态。
P10同时接G1、G3;P11同时接R1、R3;P1.2同时接G2G4;P1.3同时接R2R4;P1.6、P1.7分别接静态数码显示的DIN、CLK
2)启动PC机,打开THGMW-51软件,输入源程序,并编译源程序。
编译无误后,下载程序运行。
3)观察十字路口交通灯效果。
五、实验参考程序
・〃*******************************************************************
;文件名:
交通灯程序FORMCU51
;功能:
双色LED模拟交通灯信号,并通过调用静态数码显示状态时间。
;接线:
P1.0同时接G1、G3,P1.1接R1、R3,P1.2接G2、G4,P1.3同时接R2、R4,;P1.6、P1.7接静态数码显示的DIN、CLK
・/]*******************************************************************
SECOND1EQU30H;
东西秒寄存器
SECOND2EQU31H;
南北秒寄存器
DBUFEQU40H;
显示缓冲1
TEMPEQU44H;
显示缓冲2
LED_G1BITP1.0;
东西绿灯
LED_R1BITP1.1;
东西红灯
LED_G2BITP1.2;
南北绿灯
LED_R2BITP1.3;
南北红灯
DINBITP1.6;
串行显示数据
CLKBITP1.7;
串行显示时钟
ORG0000H
LJMPSTART
ORG0100H
START:
LCALLSTATE0;
调用状态0
LCALLDELAY;
调用延时
MOVTMOD,#01H;
置T0工作方式1
MOVTH0,#3CH;
置T0定时初值50MS
MOVTL0,#0B0H
SETBTR0;
启动T0
CLREA
LOOP:
MOVR2,#20;
置1S计数初值50MS*20=1S
MOVR3,#20;
红灯20S
MOVSECOND1,#25;
东西秒显示初值25S
MOVSECOND2,#25;
南北秒显示初值25S
LCALLDISPLAY
LCALLSTATE1;
调用状态1
WAIT1:
JNBTF0,WAIT1;
查询50M倒否
CLRTF0
MOVTH0,#3CH;
恢复T0定时初值50MS
MOVTL0,#0B0H
SETBTR0;
启动T0
DJNZR2,WAIT1;
判1S到否?
未到继续状态1
MOVR2,#20;
置50MS十数初值
DECSECOND1
东西秒显示减一
南北秒显示减一
DECSECOND2
LCALLDISPLAY
DJNZR3,WAIT1;
MOVR2,#5;
MOVR3,#3;
MOVR4,#4;
MOVSECOND1,#5
MOVSECOND2,#5
LCALLDISPLAY
WAIT2:
LCALLSTATE2
JNBTF0,WAIT2;
CLRTF0
MOVTH0,#3CH;
MOVTL0,#0B0H
DJNZR4,WAIT2;
CPLLED_G1;
MOVR4,#4;
DJNZR2,WAIT2;
MOVR2,#5;
DECSECOND1
状态1维持20S
置50MS+数初值5*4=20
绿灯闪3S
闪烁间隔200MS
东西秒显示初值5S
南北秒显示初值5S
调用状态2
查询50M倒否
恢复TO定时初值50MS
判200MS1U否?
未到继续状态2
东西绿灯闪
闪烁间隔200MS
判1S到否?
未到继续状态2
置50MS十数初值
东西秒显示减一
南北秒显示减一
DECSECOND2
LCALLDISPLAY
DJNZ
R3,WAIT2;
状态2维持3S
MOV
R2,#20;
置50MS十数初值
MOV
R3,#2;
黄灯2S
MOV
SECOND1,#2;
东西秒显示初值
2S
MOV
SECOND2,#2;
南北秒显示初值
2S
LCALL
.DISPLAY
WAIT3:
LCALLSTATE3;
调用状态3
JNB
TF0,WAIT3;
查询30M倒否
CLR
TF0
MOV
TH0,#3CH;
恢复TO定时初值
50MS
MOV
TL0,#0B0H
DJNZ
R2,WAIT3;
判1S到否?
未到继续状态3
MOV
R2,#20;
置50MS十数初值
DEC
SECOND1;
东西秒显示减一
DEC
SECOND2;
南北秒显示减一
LCALL
.DISPLAY
DJNZ
R3,WAIT3;
状态3维持2S
MOV
R2,#20;
置50MS十数初值
MOV
R3,#20;
红灯20S
MOV
SECOND1,#25;
东西秒显示初值
25S
MOV
SECOND2,#25;
南北秒显示初值
25S
LCALL
.DISPLAY
WAIT4:
LCALLSTATE4;
调用状态4
JNB
TF0,WAIT4;
查询50M倒否
CLR
TF0
MOV
TH0,#3CH;
恢复T0定时初值
50MS
MOV
TL0,#0B0H
DJNZ
R2,WAIT4;
判1S到否?
未到继续状态4
MOV
R2,#20;
置50MS十数初值
DEC
SECOND1;
东西秒显示减一
DEC
SECOND2;
南北秒显示减一
LCALL
.DISPLAY
DJNZ
R3,WAIT4;
状态4维持20S
MOV
R2,#5;
置50MS十数初值
5*4=20
MOV
R4,#4;
闪烁间隔200MS
MOV
R3,#3;
绿灯闪3S
MOV
SECOND1,#5;
东西秒显示初值
5S
MOV
SECOND2,#5;
南北秒显示初值
5S
LCALL
.DISPLAY
WAIT5:
LCALLSTATE5;
调用状态5
JNB
TF0,WAIT5;
查询50M倒否
CLR
TF0
MOV
TH0,#3CH;
恢复T0定时初值
100MS
MOV
TL0,#0B0H
DJNZ
R4,WAIT5;
判200MS1U否?
未到继续状态
CPL
LED_G2;
南北绿灯闪
MOV
R4,#4;
闪烁200MS
DJNZ
R2,WAIT5;
判1S到否?
未到继续状态5
MOV
R2,#5;
置100MS十数初值
DEC
SECOND1;
东西秒显示减一
DEC
SECOND2;
南北秒显示减一
LCALL
DISPLAY
DJNZ
R3,WAIT5;
状态5维持3S
MOV
R2,#20;
置50MS十数初值
MOV
R3,#2;
黄灯2S
MOV
SECOND1,#2;
东西秒显示初值2S
MOV
SECOND2,#2;
南北秒显示初值2S
LCALLDISPLAY
WAIT6:
LCALLSTATE6;调用状态6
JNB
TF0,WAIT6;
查询100M倒否
CLR
TF0
MOV
TH0,#3CH;
恢复TO定时初值100MS
MOV
TL0,#0B0H
DJNZ
R2,WAIT6;
判1S到否?
未到继续状态6
MOV
R2,#20;
置100MS十数初值
DEC
SECOND1;
东西秒显示减一
DEC
SECOND2;
南北秒显示减一
LCALLDISPLAY
DJNZ
R3,WAIT6;
状态6维持2S
LJMP
LOOP;
大循环
STATE0:
J
状态0
MOV
P1,#0
CLR
LED_G1
SETB
LED_R1;
东西红灯亮
CLR
LED_G2
SETB
LED_R2;
南北红灯亮
RET
STATE1:
J
状态1
SETB
LED_G1;
东西绿灯亮
CLR
LED_R1
CLR
LED_G2
SETB
LED_R2;
南北红灯亮
RET
STATE2:
J
状态2
CLR
LED_R1
CLR
LED_G2
SETB
LED_R2;
南北红灯亮
STATE3:
SETB
J
LED_G1
状态3
SETB
LED_R1;
东西黄灯亮
CLR
LED_G2
SETB
LED_R2;
南北红灯亮
RET
STATE4:
J
状态4
CLR
LED_G1
SETB
LED_R1;
东西红灯亮
SETB
LED_G2;
南北绿灯亮
CLR
LED_R2
RET
STATE5:
J
状态5
CLR
LED_G1
SETB
LED_R1;
东西红灯亮
CLR
LED_R2
RET
STATE6:
J
状态6
CLR
LED_G1
SETB
LED_R1;
东西红灯亮
SETB
LED_G2
SETB
LED_R2;
南北黄灯亮
RET
DISPLAY:
J
数码显示
MOV
A,SECOND1;
东西秒寄存器
MOV
B,#10;16
进制数拆成两个
DIV,
AB
MOV
DBUF+1,A
MOV
A,B
MOV
DBUF,A
MOV
A,SECOND2;
南北秒寄存器
MOV
B,#10;16
进制数拆成两个
DIV,
AB
MOV
DBUF+3,A
MOV
A,B
MOV
DBUF+2,A
MOV
R0,#DBUF
RET
10进制数
10进制数
MOVR1,#TEMP
MOVR7,#4
DP10:
MOVDPTR,#LEDMAP
MOVA,@R0
MOVCA,@A+DPTR
MOV@R1,A
INCRO
INCR1
DJNZR7,DP10
MOV
R0,#TEMP
MOV
R1,#4
DP12:
MOV
R7,#8
MOV
A,@R0
DP13:
RLC
A
MOV
DIN,C
CLR
CLK
SETB
CLK
DJNZ
R7,DP13
INC1
R0
DJNZ
R1,DP12
RET
LEDMAP:
DB3FH,6,5BH,4FH,66H,6DH;O,1,2,3,4,5
DB7DH,7,7FH,6FH,77H,7CH;6,7,8,9,A,B
DB58H,5EH,7BH,71H,0,40H;C,D,E,F,,-
DELAY:
MOVR5,#5
DL00P0:
M0VR6,#0
DLOOP1:
MOVR7,#0
DLOOP2:
NOP
NOP
DJNZR7,DLOOP2
DJNZR6,DLOOP1
DJNZR5,DLOOP0
RET
END
六、实验结果
程序开始运行后,B5区模拟的东西红灯亮,南北绿灯亮,同时两个方向的数码管分别
从25秒开始倒计时,当倒计时到5秒时,南北绿灯闪亮3秒后变黄,再过2秒,即倒计时到0时,变为东西绿灯亮,南北红灯亮,同时两个方向的数码管分别同时从25秒开始倒计
时,但倒计时到5秒时,东西绿灯闪亮3秒后变黄,再过2秒之后又回到初始状态,继续循环运行。
七、结果分析
本实验通过双色的LED模拟交通灯的显示状态,并用静态数码管结合定时器实现定时及显示功能,将交通灯的显示分为六个不同的状态,程序运行之后进行计数显示,当计时时
间到达某一个状态之后,跳转进入相应的状态执行,执行完之后继续进入下一个状态,实验
通过程序模拟了交通灯的显示。
实验五串转并与并转串实验
一、实验目的
1.掌握使用74LS164扩展输出的方法。
2.掌握使用74LS165扩展输入的方法。
二、实验内容
使用74LS165扩展输入数据,使用74LS164扩展输出数据。
74LS165的并行口接八位逻辑电平输出(开关),CPU使用P1.0、P1.1和P1.2串行读入开关状态;74LS164的并行口接一只数码管,CPU使用P1.3和P1.4串行输出刚读入的开关状态,使之在数码管上显示出
来。
三、实验要求
根据实验内容编写一个程序,并在实验仪上调试和验证。
四、实验步骤
1)系统各跳线器处在初始设置状态。
用导线对应连接八位逻辑电平输出模块的QH165CLK165SH/LD到CPU模块的P10、P11、P12。
用导线对应连接静态数码管显示模块的DIN、CLK到CPU模块的P13P14。
2)启动PC机,打开THGMW-51软件,输入源程序,并编译源程序。
编译无误后,下载程序运行。
3)观察数码(八段码)管的亮灭与拨动开关的状态是否一致。
拨动开关拨下输出为低电平,