单片机实验报告汇总.docx
- 文档编号:10501107
- 上传时间:2023-02-14
- 格式:DOCX
- 页数:37
- 大小:674.45KB
单片机实验报告汇总.docx
《单片机实验报告汇总.docx》由会员分享,可在线阅读,更多相关《单片机实验报告汇总.docx(37页珍藏版)》请在冰豆网上搜索。
单片机实验报告汇总
南昌大学
实验报告
课程名称:
单片机原理及运用
学生姓名:
学号:
专业班级:
卓越(通信)
2012年12月30日
实验一I/O口输入、输出实验
一、实验目的
掌握单片机P1口、P3口的使用方法。
二、实验内容
以P1口为输出口,接八位逻辑电平显示,LED显示跑马灯效果。
以P3口为输入口,接八位逻辑电平输出,用来控制跑马灯的方向。
三、实验要求
根据实验内容编写一个程序,并在实验仪上调试和验证。
四、实验说明和电路原理图
P1口是准双向口,它作为输出口时与一般的双向口使用方法相同。
由准双向口结构可知当P1口作为输入口时,必须先对它置高电平使内部MOS管截止。
因为内部上拉电阻阻值是20K~40K
,故不会对外部输入产生影响。
若不先对它置高,且原来是低电平,则MOS管导通,读入的数据是不正确的。
本实验需要用到CPU模块(F3区)和八位逻辑电平输出模块(E4区)和八位逻辑电平显示模块(B5区),八位逻辑电平输出电路原理图参见图1-1。
八位逻辑电平显示电路原理图参见图1-2。
图1-1八位逻辑电平输出
图1-2八位逻辑电平显示
五、实验程序及分析
程序流程图如下:
(此处,Output1、Output2子程序是在原程序中剔除了判断语句的子程序)
实验程序如下:
DIRBITP3.0
ORG0000H
LJMPSTART
地址ORG0100H
0100HSTART:
movP3,0ffH;P3端口做输入口,初始化要置1
0103HOutput1:
;LED从右向左2、4、6、8,然后从左向右7、5、3、
;1依次循环点亮
mova,#0fEH;用低电平输出,获得较大的驱动能力
movr5,#4
movr4,#4
0109Hloop1:
rla
clrC
movC,DIR;判断循环方向
jcOutput2
movP1,a;P1端口输出,点亮LED
rla
acallDelay
djnzr5,loop1
0116Hloop3:
rra
rra
movP1,a
acallDelay
djnzr4,loop3
SjmpOutput1
0120HOutput2:
;LED从左向右依次循环点亮
mova,#07fH
movr5,#8
0124Hloop2:
clrC
movC,DIR
jncOutput1;判断循环方向
movP1,a;P1端口输出,点亮LED
rra
acallDelay
djnzr5,loop2
SjmpOutput2
0138HDelay:
;延时子程序,T={[4*256+2+1]*256+1+2}*1us=262915us
movr6,#0
013AHDelayLoop1:
movr7,#0
013CHDelayLoop2:
NOP
NOP
djnzr7,DelayLoop2
djnzr6,DelayLoop1
ret
六、实验步骤及实验现象
1)系统各跳线器处在初始设置状态。
用导线连接八位逻辑电平输出模块的K0到CPU模块的RXD(P3.0口);
用8位数据线连接八位逻辑电平显示模块的JD4B到CPU模块的JD8(P1口)。
2)启动PC机,打开THGMW-51软件,输入源程序,并编译源程序。
编译无误后,下载程序运行。
3)观察发光二极管显示跑马灯效果,拨动K0可改变跑马灯的方向。
实验现象:
K0开关拨下,LED从右向左2、4、6、8,然后从左向右7、5、3、1依次循环点亮;K0开关拨上,LED从左向右依次循环点亮。
七、问题分析及实验心得
这次实验是我们的第一次实验,其实就是熟悉实验仪器而已,老师也没有做什么要求。
但是做实验过程中也遇到了不少的问题,比如实验下载运行时每次都要复位,究其原因是因为在程序中少了“movP3,0ffH”这条语句。
P3端口用作I/O输入口时,要先输出高电平,这是由P3端口的结构决定的。
从看懂程序到修改程序也要花些时间的,首先是要弄清楚别人的思路,再结合自己的想法修改。
大体上讲,老师给的那个程序还是比较简洁的,条理清晰。
通过此次实验很好的复习了课本知识。
实验二定时/计数器实验
一、实验目的
学习MCS-51内部计数器的使用和编程方法。
二、实验内容
使用MCS-51内部定时/计数器,定时一秒钟,CPU运用定时中断方式,实现每一秒钟输出状态发生一次反转,即发光管每隔一秒钟亮一次。
三、实验要求
根据实验内容编写一个程序,并在实验仪上调试和验证。
四、实验说明
关于内部计数器的编程主要是定时常数的设置和有关控制寄存器的设置。
内部计数器在单片机中主要有定时器和计数器两个功能。
本实验使用的是定时器,定时为一秒钟。
定时器/计数器有关的寄存器有工作方式寄存器TMOD和控制寄存器TCON。
TMOD用于设置定时器/计数器的工作方式0-3,并确定用于定时还是用于计数。
TCON主要功能是为定时器在溢出时设定标志位,并控制定时器的运行或停止等。
内部计数器用作定时器时,是对机器周期计数。
每个机器周期的长度是12个振荡器周期。
假设实验系统的晶振是12MHZ,程序工作于方式2,即8位自动重装方式定时器,定时器100uS中断一次,所以定时常数的设置可按以下方法计算:
机器周期=12÷12MHz=1uS
(256-定时常数)×1uS=100uS
定时常数=156。
然后对100uS中断次数计数10000次,就是1秒钟。
内部计数器用作计数器时,是对外部负脉冲进行计数。
其中,负脉冲从P3.4、P3.5端口输入的。
每有一个负脉冲,计数器就加一。
在本实验的中断处理程序中,因为中断定时常数的设置对中断程序的运行起到关键作用,所以在置数前要先关对应的中断,置数完之后再打开相应的中断。
本实验需要用到CPU模块(F3区)和八位逻辑电平显示模块(B5区)。
五、实验程序及分析
程序流程图如下:
主程序流程图
T1中断服务子程序
T0中断服务子程序
实验程序如下:
Tickequ10000;10000x100us=1s
T100usequ156;100us时间常数(6M)
C100usequ30h;100us、50us记数单元
Tuckequ5000;5000x100us=0.5s
LEDBufbit20h
DIRbitP3.0
org0000h
ljmpStart
org000bh
ljmpT0Int;T0定时器中断入口:
0138H
org001bh;T1中断入口地址:
001BH
cplP1.1;T1中断服务子程序
reti
地址org0100h
0100HStart:
movP3,0ffh;P3端口做输入口,初始化要置1
movTMOD,#62h;T0为方式2,定时器,T1为方式2,计数器
clrEA;关中断,置定时器的初值
movTH0,#T100us
movTL0,#T100us
movTH1,#0fdh
movTL1,#0fdh
movIE,#10001010b;EA=1,IT0=1,IT1=1
setbTR0;开始定时
setbTR1;开始计数
clrLEDBuf
clrP1.0
clrP1.1
movC100us,#27H;#high(Tick)
movC100us+1,#10H;#low(Tick)
0125HLoop:
clrC
movC,DIR
jncLoop1
setbF0;F0=1,T=0.5s
ljmpLoop3
012FHLoop1:
clrF0;F0=0,T=1s
0131HLoop3:
movc,LEDBuf
movP1.0,c
ljmpLoop
0138HT0Int:
;T0定时器中断子程序
pushPSW
mova,C100us+1
jnzGoon
decC100us
0140HGoon:
decC100us+1
mova,C100us
orla,C100us+1
jnzExit;记数器不为0,返回
jbF0,Loop2
movC100us,#27H;#high(Tick),记数器为0,重置记数器
movC100us+1,#10H;#low(Tick)
ljmpLoop4
0154HLoop2:
movC100us,#13H;#high(Tuck),记数器为0,重置记数器
movC100us+1,#88H;#low(Tuck)
015AHLoop4:
cplLEDBuf;取反LED
015CHExit:
popPSW
reti
End
六、实验步骤及实验现象
1)系统各跳线器处在初始设置状态,用导线连接CPU模块P10到八位逻辑电平显示模块的L0;用导线连接八位逻辑电平输出模块的K0到CPU模块的RXD(P3.0口)。
2)启动PC机,打开THGMW-51软件,输入源程序,并编译源程序。
编译无误后,下载程序运行。
3)运行程序观察发光二极管隔一秒点亮一次,点亮时间为一秒。
4)拨动K0,观察发光二极管隔0.5秒点亮一次,点亮时间为0.5秒。
实验现象:
K0开关拨上,LED灯L0闪亮的时间为0.5s,K0开关拨下,LED灯L0闪亮的时间为1s。
K1开关拨上、拨下3次,则LED灯L1改变状态。
(若前一个状态为灭,则变为亮;若前一个状态为亮,则变为灭)
七、实验心得
这个程序我做了小小的改动,我加入了I/O端口实验的内容,可以实现改变LED亮、灭的时间。
另一个是参考程序只有T0定时器的内容,而没有计数器的内容。
因此,我又在原程序中加入了T1计数器的内容,使得这次实验变得更加的完整。
由于T1的中断子程序只有2条指令,不超过8字节,因此进入T1中断服务程序入口后,立马就执行这2条指令,而没有选择再跳转。
这次实验让我好好复习了T0、T1定时\计数器。
感觉忘记了好多,所以我们应该及时复习,不然就会彻底的忘掉了。
到时候想捡回来都难了。
实验三交通灯控制实验
一、实验目的
掌握十字路口交通灯控制方法。
二、实验内容
利用系统提供的双色LED显示电路,和四位静态数码管显示电路模拟十字路口交通信号灯。
4位LED数码管显示时间,LED显示红绿灯状态。
三、实验要求
根据实验内容编写一个程序,并在实验仪上调试和验证。
四、实验说明和电路原理图
交通信号灯控制逻辑如下:
假设一个十字路口为东西南北走向。
开始为四个路口的红灯全部亮之后,东西路口的绿灯亮,南北路口的红灯亮,东西路口方向通车,延时一段时间后(10秒),东西路口的绿灯,闪烁若干次后(3秒),东西路口的绿灯熄灭,同时东西路口的黄灯亮,延时一段时间后(2秒),东西路口的红灯亮,南北路口的绿灯亮,南北路口方向通车,延时一段时间后(10秒),南北路口的绿灯闪烁若干次后(3秒),南北路口的绿灯熄灭,同时南北路口的黄灯亮,延时一段时间后(2秒),再切换到东西路口的绿灯亮,南北路口的红灯亮,之后重复以上过程。
双色LED是由一个红色LED管芯和一个绿色LED管芯封装在一起,共用负极,当红色正端加高电平,绿色正端加低电平时,红灯亮;红色正端加低电平,绿色正端加高电平时,绿灯亮;两端都加高电平时,黄灯亮。
本实验需要用到CPU模块(F3区)、静态数码管/双色LED显示模块(B4区)。
双色LED
显示电路原理参见图18-1。
五、实验程序及分析
程序流程图如下:
T0中断子程序
数码管显示子程序
实验程序如下:
SECOND1EQU30H;东西秒寄存器
SECOND2EQU31H;南北秒寄存器
DBUFEQU40H;显示缓冲1,装载原码
TEMPEQU44H;显示缓冲2,装载译码
LED_G1BITP1.0;东西绿灯
LED_R1BITP1.1;东西红灯
LED_G2BITP1.2;南北绿灯
LED_R2BITP1.3;南北红灯
DinBITP1.6;串行显示数据
CLKBITP1.7;串行时钟
ORG0000H
LJMPSTART
ORG0000BH
LJMPINT0;T0中断地址:
0289H
地址ORG0100H
0100HSTART:
LCALLSTATE0;调用状态0
LCALLDELAY;调用延时
CLRF0;定时标志位
MOVTMOD,#01H;置T0工作方式1
MOVTH0,#3CH;置T0定时初值50mS
MOVTL0,#0B0H
SETBTR0;启动T0
SETBEA;允许中断
SETBET0
0117HLOOP:
MOVR2,#20;置1S计数初值50mS*20=1S
MOVR3,#10;红灯10S
MOVSECOND1,#15;东西秒显示初值15S
MOVSECOND2,#15;南北秒显示初值15S
LCALLDISPLAY
LCALLSTATE1;调用状态1
0127HWAIT1:
JNBF0,WAIT1;查询1S到否
CLRF0
MOVR2,#20;置1S计数初值
DECSECOND1;东西秒显示减一
DECSECOND2;南北秒显示减一
LCALLDISPLAY
DJNZR3,WAIT1;状态1维持10S
;***************************************************
MOVR4,#5;置1S计数初值5*200ms=1s
MOVR3,#3;绿灯闪3S
MOVR2,#4;闪烁间隔200mS
MOVSECOND1,#5;东西秒显示初值5S
MOVSECOND2,#5;南北秒显示初值5S
LCALLDISPLAY
0146HWAIT2:
LCALLSTATE2;调用状态2
JNBF0,WAIT2;查询200mS到否
CLRF0
CPLLED_G1;东西绿灯闪
MOVR2,#4;闪烁间隔200mS
DJNZR4,WAIT2;判1S到否?
未到继续状态2
MOVR4,#5;置50mS计数初值
DECSECOND1;东西秒显示减一
DECSECOND2;南北秒显示减一
LCALLDISPLAY
DJNZR3,WAIT2;状态2维持3S
;***************************************************
MOVR2,#20;置1S计数初值
MOVR3,#2;黄灯2S
MOVSECOND1,#2;东西秒显示初值2S
MOVSECOND2,#2;南北秒显示初值2S
LCALLDISPLAY
016CHWAIT3:
LCALLSTATE3;调用状态3
JNBF0,WAIT3;查询1S到否
CLRF0
MOVR2,#20;置1S计数初值
DECSECOND1;东西秒显示减一
DECSECOND2;南北秒显示减一
LCALLDISPLAY
DJNZR3,WAIT3;状态3维持2S
;***************************************************
MOVR2,#20;置1S计数初值
MOVR3,#10;红灯10S
MOVSECOND1,#15;东西秒显示初值15S
MOVSECOND2,#15;南北秒显示初值15S
LCALLDISPLAY
018BHWAIT4:
LCALLSTATE4;调用状态4
JNBF0,WAIT4;查询1S到否?
CLRF0
MOVR2,#20;置1S计数初值
DECSECOND1;东西秒显示减一
DECSECOND2;南北秒显示减一
LCALLDISPLAY
DJNZR3,WAIT4;状态4维持10S
;***************************************************
MOVR4,#5;置1S计数初值5*200ms=1s
MOVR2,#4;闪烁间隔200mS
MOVR3,#3;绿灯闪3S
MOVSECOND1,#5;东西秒显示初值5S
MOVSECOND2,#5;南北秒显示初值5S
LCALLDISPLAY
01ACHWAIT5:
LCALLSTATE5;调用状态5
JNBF0,WAIT5;查询200mS到否
CLRF0
CPLLED_G2;南北绿灯闪
MOVR2,#4;闪烁200mS
DJNZR4,WAIT5;判1S到否?
未到继续状态5
MOVR4,#5;置1S计数初值
DECSECOND1;东西秒显示减一
DECSECOND2;南北秒显示减一
LCALLDISPLAY
DJNZR3,WAIT5;状态5维持3S
;***************************************************
MOVR2,#20;置1S计数初值
MOVR3,#2;黄灯2S
MOVSECOND1,#2;东西秒显示初值2S
MOVSECOND2,#2;南北秒显示初值2S
LCALLDISPLAY
01D2HWAIT6:
LCALLSTATE6;调用状态6
JNBF0,WAIT6;查询1S到否
CLRF0
MOVR2,#20;置1S计数初值
DECSECOND1;东西秒显示减一
DECSECOND2;南北秒显示减一
LCALLDISPLAY
DJNZR3,WAIT6;状态6维持2S
LJMPLOOP;大循环
01E8HSTATE0:
;状态0
MOVP1,#0
CLRLED_G1
SETBLED_R1;东西红灯亮
CLRLED_G2
SETBLED_R2;南北红灯亮
RET
01F4HSTATE1:
;状态1
SETBLED_G1;东西绿灯亮
CLRLED_R1
CLRLED_G2
SETBLED_R2;南北红灯亮
RET
01FDHSTATE2:
;状态2
CLRLED_R1
CLRLED_G2
SETBLED_R2;南北红灯亮
RET
0204HSTATE3:
;状态3
SETBLED_G1
SETBLED_R1;东西黄灯亮
CLRLED_G2
SETBLED_R2;南北红灯亮
RET
020DHSTATE4:
;状态4
CLRLED_G1
SETBLED_R1;东西红灯亮
SETBLED_G2;南北绿灯亮
CLRLED_R2
RET
0216HSTATE5:
;状态5
CLRLED_G1
SETBLED_R1;东西红灯亮
CLRLED_R2
RET
021DHSTATE6:
;状态6
CLRLED_G1
SETBLED_R1;东西红灯亮
SETBLED_G2
SETBLED_R2;南北黄灯亮
RET
0226HDISPLAY:
;数码显示
MOVA,SECOND1;东西秒寄存器
ADDA,#00H
DAA;十进制调整
MOVB,A
ANLA,#0FH
MOVDBUF+1,A;低位
MOVA,B
SWAPA;A高四位与低四位互换
ANLA,#0FH
MOVDBUF,A;高位
MOVA,SECOND2;南北秒寄存器
MOVB,#10;16进制数拆成两个10进制数
DIVAB
MOVDBUF+3,A;低位
MOVA,B
MOVDBUF+2,A;高位
MOVR0,#DBUF
MOVR1,#TEMP
MOVR7,#4
024AHDP10:
MOVDPTR,#LEDMAP;查表译码
MOVA,@R0
MOVCA,@A+DPTR
MOV@R1,A
INCR0
INCR1
DJNZR7,DP10
MOVR0,#TEMP
MOVR1,#4;四个数
0258HDP12:
MOVR7,#8;数的八位
MOVA,@R0;第一个数
025BHDP13:
RLCA
MOVDIN,C;位输出
CLRCLK;形成一个脉冲,移位
SETBCLK
DJNZR7,DP13;R7=0,一个数已经输出完毕
INCR0
DJNZR1,DP12;R1=0,四个数已经输出完毕
RET
0268HLEDMAP:
DB3FH,6,5BH,4FH,66H,6DH;0,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,,-
027AHDelay:
movr5,#5;延时时间:
;T={1+{[1+[(1+4*256)+2]*256]+2}*5+2}*1us=1314578us=1.314578s
DLoop0:
movr6,#0
DLoop1:
movr7,#0
DLoop2:
NOP
NOP
djnzr7,DLoop2
djnzr6,DLoop1
djnzr5,DLoop0
RET
0289HINT0:
MOVTH0,#3CH;T0中断服务子程序
MOVTL0,#0B0H
DJNZR2,RUTEN
SETBF0
RUTEN:
RETI
END
六、实验步骤及实验现象
1)系统各跳线器处在初始设置状态。
P10同时接G1、G3;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 实验 报告 汇总