单片机实验报告修改.docx
- 文档编号:15681628
- 上传时间:2023-07-06
- 格式:DOCX
- 页数:18
- 大小:105.38KB
单片机实验报告修改.docx
《单片机实验报告修改.docx》由会员分享,可在线阅读,更多相关《单片机实验报告修改.docx(18页珍藏版)》请在冰点文库上搜索。
单片机实验报告修改
单
片
机
技
术
实
验
报
告
院系:
机电工程学院
班级:
11级电信一班
姓名:
宋帅杨家喻
学号:
1104101021
1104101028
实验一:
P1口输入,输出实验
一、实验目的
1.学习Pl口的使用方法。
2.学习延时子程序的编写和使用。
二、实验内容
1.P1口做输出口,接八只发光二极管(其输入端为高电平时发光二极管点亮),编写程序,使发光二极管循环点亮。
2.P1.0、P1.1作输入口接两个拨动开关S0、S1;P1.2,P1.3作输出口,接两个发光二极管,编写程序读取开关状态,将此状态在发光二极管上显示出来。
编程时应注意P1.0、P1.1作为输入口时应先置1,才能正确读入值。
三、实验电路连线
P1.0●-----------------------●LED0P1.0●-----------------------●S0
P1.1●-----------------------●LED1P1.1●-----------------------●S1
P1.2●-----------------------●LED2P1.2●-----------------------●LED2
P1.3●-----------------------●LED3P1.3●-----------------------●LED3
P1.4●-----------------------●LED4
P1.5●-----------------------●LED5
P1.6●-----------------------●LED6
P1.7●-----------------------●LED7
实验1:
P1口循环点灯实验2:
P1口输入输出
四、实验说明
1.P1口是准双向口。
它作为输出口时与一般的双向口使用方法相同。
由准双向口结构可知当P1口用作输入口时必须先对它置“1”。
若不先对它置“1”,读入的数据是不正确的。
五、实验仪器和设备
PC机、WAVE软件、E2000/S仿真器+POD8X5X仿真头、MULT1A用户板、实验板、开关电源等。
六、参考程序框图
P1口循环P1口输入
点灯框图输出框图
P1口循环点灯程序:
C语言:
#include
#defineuintunsignedint
#defineucharunsignedchar
uchara;
voiddelayms(uint);
voidmain()
{
a=0x01;
while
(1)
{
P1=a;
delayms(1000);
a=a<<1;
}
}
voiddelayms(uintxms)
{
uinti,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
P1口输入输出程序:
C语言:
#include
sbitS0=P1^0;
sbitS1=P1^1;
sbitled2=P1^2;
sbitled3=P1^3;
voidmain()
{
P1=0x00;
S0=1;
S1=1;
led2=S0;
led3=S1;
while
(1);
}
实验二交通灯控制(定时器延时法)
一、实验目的
1.进一步理解单片机内部定时器/计数器的工作原理和使用方法。
2.学习模拟交通灯控制的方法。
3.学习数据输出程序的设计方法。
4.学习中断处理程序的编程方法。
二、实验内容
用CPU的P1口输出控制信号,控制六个LED灯(红,绿,黄),模拟交通灯管理。
三、实验电路连接
P1.0●-----------------------●LED0
P1.1●-----------------------●LED1
P1.2●-----------------------●LED2
P1.3●-----------------------●LED3
P1.4●-----------------------●LED4
P1.5●-----------------------●LED5
四、实验说明
l.因为本实验是交通灯控制实验,所以要先了解实际交通灯的变化规律。
假设一个十字路口为东西南北走向。
初始为状态0。
状态0:
东西红灯,南北红灯;然后转入
状态1:
南北绿灯通车,东西红灯;过一段时间转入
状态2:
南北绿灯闪几次转黄灯亮,延时几秒,东西仍然红;再转入
状态3:
东西绿灯通车,南北红灯;过一段时间转入
状态4:
东西绿灯闪几次转黄灯亮,延时几秒,南北仍然红灯;最后循环至状态1。
2.各用一组红、黄、绿色LED分别表示南北方向和东西方向。
3.由定时器来产生通车延时时间,时间长短1秒以上(由同学自己确定)。
提示:
内部计数器用作定时器时,是对机器周期计数。
每个机器周期的长度是12个振荡器周期。
因为实验系统的晶振是12MHZ,本程序定时器工作于方式1(16位方式)时,最大定时时间为:
216*1μs=65536μs=65.536ms
所以需要配合软件记数。
如要延时2秒,则需要T0中断32次,所
用时间为
65536*32=2097120μs≈2s
因此在T0中断处理程序中,要判断中断次数是否到32次,若不到32次,则只使中断次数加1,然后返回,若到了32次,定时2秒时间到。
4.用软件延时方法产生“闪”延时时间(参考硬件实验一)。
五、实验仪器和设备
PC机、WAVE软件、E2000/S仿真器+POD8X5X仿真头、MULT1A用户板、实验板、开关电源等。
六、参考程序框图
主程序框图
中断处理程序框图
C语言:
#include
#defineGPIO_TRAFFICP2
sbitdx_red=P2^2;
sbitdx_yellow=P2^3;
sbitdx_green=P2^4;
sbitnb_red=P2^5;
sbitnb_yellow=P2^6;
sbitnb_green=P2^7;
unsignedcharTime,Second;
voidTimer0Cofig(void);//定时器to初始化
voidDelay10ms(unsignedintc);//延时函数
voidmain(void)
{
Second=1;
Timer0Cofig();//初始化to
dx_red=0;
nb_red=0;
Delay10ms(100);
while
(1)
{
if(Second==20)
{
Second=1;
}
//状态一
if(Second<6)
{
GPIO_TRAFFIC=0xFF;
nb_green=0;
dx_red=0;
}
//状态二
elseif(Second<11)
{
GPIO_TRAFFIC=0xFF;
dx_red=0;
while(Second<8)
{
nb_green=~nb_green;
Delay10ms(30);
}
nb_yellow=0;
}
//状态三
elseif(Second<16)
{
GPIO_TRAFFIC=0xFF;
dx_green=0;
nb_red=0;
}
//状态四
else
{
GPIO_TRAFFIC=0xFF;
nb_red=0;
while(Second<18)
{
dx_green=~dx_green;
Delay10ms(30);
}
dx_yellow=0;
}
}
}
voidTimer0Cofig(void)//定时器to初始化
{
TMOD=0x01;
TH0=0x3C;
TL0=0xB0;
EA=1;
ET0=1;
TR0=1;
}
voidTimer0()interrupt1
{
TH0=0x3C;
TL0=0xB0;
Time++;
if(Time==20)
{
Second++;
Time=0;
}
}
voidDelay10ms(unsignedintc)
{
unsignedchara,b;
for(;c>0;c--)
for(a=130;a>0;a--)
for(b=38;b>0;b--);}
实验三6LED动态扫描显示实验
一、实验目的
1.掌握数字、字符转换成显示段码的软件译码方法
2.动态显示的原理和相关程序的编写
二、实验说明
动态显示,也称动态扫描显示,其特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。
所谓动态扫描显示即轮流向各位数码管送出段形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示资料,不会有闪烁感,使人的感觉好像各位数码管同时都在显示。
三、实验内容及步骤
单片机P0输出段码,P1口输出位控码,输出6个字符
1.使用实验开发板上89C51单片机最小应用系统模块,用导线连接P0、P1到动态扫描显示模块的段码口和位码口。
2.用串行数据通信线连接计算机与实验开发板,把仿真芯片插到实验开发板上。
3.启动计算机,打开KeilC51软件,进入仿真环境,选择仿CPU类型,选择通信端口,测试串行口。
4.编写程序代码,编译无误后,全速运行程序。
6LED显示“168168”。
程序停止运行后,显示随之变化,说明运态扫描显示模块不具有数据锁存的功能。
四、实验框图以及源程序
1.流程图
2、源程序
C语言:
如下
#include
unsignedcharcodeDIG_PLACE[6]={
0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
unsignedcharcodeDIG_CODE[6]=
{0x06,0x7d,0x7f,0x06,0x7d,0x7f};
voidmain(void)
{
unsignedchari;
unsignedintj;
while
(1)
{
for(i=0;i<6;i++)
{
P1=DIG_PLACE[i];//发送位选
P0=DIG_CODE[i];//发送段码
j=10;//扫描间隔时间设定
while(j--);
P0=0x00;//消隐
}
}
}
五、电路图
实验四外部中断实验
一、实验目的
1.学习外部中断技术的基本使用方法。
2.学习中断处理程序的编程方法。
二、实验内容
用单次脉冲申请中断,在中断处理程序中对信号进行反转输出。
三、实验电路连线
P1.0●-----------------------●LED0
●------------------------●INT0
四、实验说明
编写中断处理程序需要注意的问题是:
1.保护进入中断时的状态,并在退出中断之前恢复进入时的状态。
2.必须在中断处理程序中设定是否允许中断重入,即设置EX0位。
本例中使用了INT0中断,一般进入中断处理程序时应保护PSW,ACC以及中断处理程序使用但非其专用的寄存器(保护现场)。
本例的INT0中断处理程序保护了PSW,ACC等三个寄存器并且在退出前恢复了这三个寄存器(恢复现场)。
另外中断处理程序中涉及到关键数据的设置时应关中断,即设置时不允许中断重入。
本例中没有涉及这种情况。
3.INT0端接单次脉冲发生器。
P1.0接LED灯,以查看信号反转.
五、实验仪器和设备
PC机、WAVE软件、E2000/S仿真器+POD8X5X仿真头、MULT1A用户板、实验板、开关电源等。
六、参考程序框图
主程序框图INT0中断处理程序框图
外部中断实验
#include
#defineuintunsignedint
sbitled=P1^0;
voiddelay(uintxms)
{
uinti,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
voidmain()
{
EA=1;
EX0=1;
TR0=1;
while
(1)
{
led=0;
}
}
voidINT_0()interrupt0
{
led=1;
delay(500);
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 实验 报告 修改