单片机实验指导书C语言文档格式.docx
- 文档编号:21385201
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:39
- 大小:979.59KB
单片机实验指导书C语言文档格式.docx
《单片机实验指导书C语言文档格式.docx》由会员分享,可在线阅读,更多相关《单片机实验指导书C语言文档格式.docx(39页珍藏版)》请在冰豆网上搜索。
三、实验设计及调试:
(1)实验分析及内容。
(2)实验电路:
画出与实验内容有关的简单实验电路。
(3)实验设计及调试步骤:
根据内容写出实验程序。
调试程序,观察结果。
(4)实验调试过程中所遇到的问题、解决问题的思路和解决的方法。
四、实验后的经验教训总结。
五、对实验课的建议
实验一实验板使用,KeilC51软件使用
1.熟悉单片机实验版、KeilC51软件使用
二、实验说明
本实验指定某块存储器的起始地址和长度,要求能将其内容置1。
通过该实验学生可以了解单片机读写存储器的方法,同时也可以了解单片机编程、调试方法。
三、实验内容及步骤
1.启动PC机,安装好ISP驱动,用ISP数据通信线连接计算机与实验板(USB线)。
2.打开KeiluVision2仿真软件,首先建立本实验的项目文件,接着建立源程序,编译无误后,全速运行程序。
3.可把源程序编译成可执行文件,用ISP烧录器烧录到89S52芯片中。
四、KeilC51软件使用步骤
1.使用Keil前必须先安装。
安装过程简单,这里不在叙述。
2.安装好了Keil软件以后,我们打开它。
打开以后界面如下:
3.我们先新建一个工程文件,点击“Project->
New
Project…”菜单,如下图:
3.选择工程文件要存放的路径,输入工程文件名LED,最后单击保存。
4.在弹出的对话框中选择CPU厂商及型号
5.选择好Atmel公司的AT89S52后,单击确定
1.在接着出现的对话框中选择“是”。
5.新建一个C51文件,单击左上角的NewFile如下图所示:
6.保存新建的文件,单击SAVE如下图:
2.在出现的对话框中输入保存文件名MAIN.C(注意后缀名必须为.C),再单击“保存”,如下图;
7.保存好后把此文件加入到工程中方法如下:
用鼠标在SourceGroup1上单击右键,然后再单击AddFilestoGroup‘SourceGroup1'
如下图:
8.选择要加入的文件,找到MAIN.C后,单击Add,然后单击Close
9.在编辑框里输入如下代码:
10.到此我们完成了工程项目的建立以及文件加入工程,现在我们开始编译工程如下图所示:
我们先单击编译,如果在错误与警告处看到0Error(s)表示编译通过;
11.生成.hex烧写文件,先单击OptionsforTarget,如图;
12.在下图中,我们单击Output,选中CreateHEXF。
再单击“确定”。
13.打开文件夹‘实验1’,查看是否生成了HEX文件。
如果没有生成,在执行一遍步骤10到步骤12,直到生成。
以上是Keil软件的基本应用,更多的高级应用请大家去查找资料.
五、思考题
如何将存储器块的内容移动到另一位置。
实验二单片机控制LED灯点亮
1.进一步熟悉编程和程序调试
2.学习P1口的使用方法
3.学习延时子程序的编写和使用
P1口是准双向口,它作为输出口时与一般的双向口使用方法相同。
由准双向口结构可知当P1口用作输入口时,必须先对口的锁存器写“1”,若不先对它写“1”,读入的数据是不正确的。
三、实验步骤及参考例子
实验步骤说明:
本实验需要用到单片机最小应用系统和十六位逻辑电平显示模块。
用P1口做输出口,接十六位逻辑电平显示,程序功能使发光二极管点亮。
1.使用单片机最小应用系统。
用扁平数据线连接单片机P1口与LED灯相连。
2.用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:
缺口朝上。
3.打开KeiluVision2仿真软件,首先建立本实验的项目文件,输入源程序(实验
(一)),进行编译,直到编译无误。
生成hex文件。
5.打开实验板总电源,将hex文件下载到实验板内,观察发光二极管显示情况。
参考例子:
1)点亮板子上的第一个灯D0
2)点亮板子上的D0、D2、D4、D6灯,与D1、D3、D5、D7灯交替闪烁
3)流水灯:
从D0---D7依次点亮
注:
在做完实验时记得养成一个好习惯:
把相应单元的短路帽和电源开关还原到原来的位置!
以下将不再重述。
四、参考程序
1)
#include<
reg52.h>
voidmain()
{
P1=0xfd;
}
2)
#defineuintunsignedint
#defineucharunsignedchar
voiddelay();
while
(1)
{
P1=0xaa;
delay();
P1=0x55;
}
voiddelay()
uintx,y;
for(x=100;
x>
0;
x--)
for(y=600;
y>
y--)
;
3)
#include<
intrins.h>
uchartemp;
voiddelay(uint);
temp=0xfe;
for(num=0;
num<
8;
num++)
{
P1=temp;
delay(100);
temp=_crol_(temp,1);
P1=0xff;
}
voiddelay(uintz)
for(x=z;
for(y=110;
五、电路图
六、实验内容
请在keil环境下编写一下程序:
1)点亮最后一个LED
2)点亮1、2、5、6这四个LED
3)让第三个LED闪烁
4)设计出流水灯程序,从D7—D0
实验四单片机控制数码管实验
1.掌握数码管是如何显示出字符
2.掌握数码管动态显示原理
二、实验原理
1.数码管两种接法
2.共阴极数码管编码
▪0x3f,0x06,0x5b,0x4f,0x66,0x6d,
▪012345
▪0x7d,0x07,0x7f,0x6f,0x77,0x7c,
▪6789AB
▪0x39,0x5e,0x79,0x71,0x00
▪CDEF无显示
3.动态显示原理
动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。
选亮数码管采用动态扫描显示。
所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。
动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。
三、参考例子
1)让第一个数码管显示一个8字
让第一个数码管显示8字,那么别的数码管的位选就要关闭,即只打开第一个数码管的位选。
控制位选的P2口要输出的数据位0xfe(二进制为11111110)。
位选确定后,在确定段选,要显示的是8,那么只有dp段为0,其余段为1,所以P0口要输出0x7f(二进制01111111)
2)在四个数码管上显示1,2,3,4
位选:
接P2口
左边四个数码管DS3DS2DS1DS0
对应的P2口:
0x7f0xbf0xdf0xef
右边四个数码管DS3DS2DS1DS0
0xf70xfb0xfd0xfe
段选:
接P0口
3)在八个数码管上显示0、1,2……7.
4)在8个数码管上显示0---9这十个数字,且从右到左动态变化。
具体的现象见单片机的学习板。
voidmain(void)
{
while
(1)
{
P2=0xfe;
P0=0x7f;
}
#defineuintunsignedint
#defineucharunsignedchar
P0=0x66;
delay();
P2=0xfd;
P0=0x4f;
P2=0xfb;
P0=0x5b;
P2=0xf7;
P0=0x06;
}
voiddelay()//延时程序1
for(x=2;
for(y=112;
;
ucharnum1;
ucharnum2;
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
ucharcodewei[]={
0x7f,0xbf,0xdf,0xef,
0xf7,0xfb,0xfd,0xfe};
for(num1=0;
num1<
num1++)
{
P2=wei[num1];
P0=table[num1];
delay();
y--);
4)
ucharnum3;
uintcount;
for(count=0;
count<
100;
count++)
num3=num2;
P2=wei[num1];
if(num3<
9)num3++;
elsenum3=0;
P0=table[num3];
delay
(1);
if(num2<
10)
num2=num2+1;
else
num2=0;
五、原理图
1)用数码管动态显示,实现00-999计数器;
2)用数码管动态显示,实现00-59秒计时器。
实验四中断系统应用实验
1.掌握外部中断技术的基本使用方法
2.掌握中断处理程序的编写方法
1.外部中断的初始化设置共有三项内容:
中断总允许即EA=1,外部中断允许即EXi=1(i=0或1),中断触发方式设置。
中断触发方式设置一般有两种方式:
电平触发方式和脉冲(边沿)触发方式,本实验选用后者,其前一次为高电平后一次为低电平时为有效中断请求。
因此高电平状态和低电平状态至少维持一个周期,中断请求信号由引脚INT0(P3.2)和INT1(P3.3)引入,本实验由INT0(P3.2)引入。
2.中断控制原理:
中断控制是提供给用户使用的中断控制手段。
实际上就是控制一些寄存器,51系列用于此目的的控制寄存器有四个:
TCON、IE、SCON及IP。
3.中断响应的过程:
首先中断采样然后中断查询最后中断响应。
采样是中断处理的第一步,对于本实验的脉冲方式的中断请求,若在两个相邻周期采样先高电平后低电平则中断请求有效,IE0或IE1置“1”;
否则继续为“0”。
所谓查询就是由CPU测试TCON和SCON中各标志位的状态以确定有没有中断请求发生以及是那一个中断请求。
中断响应就是对中断请求的接受,是在中断查询之后进行的,当查询到有效的中断请求后就响应一次中断。
4.8051的中断系统
8051的中断系统包括5个中断源,并提供两个优先级,允许用户对中断源进行独立控制和中断优先级设置.8051支持的5个中断源分别为外部中断0、定时器0溢出中断、外部中断1、定时器1溢出中断和串口中断。
对应的中断号为0、1、2、3、4;
寄存器有4个工作组可以切换,为0-3;
C51中,中断服务程序是以中断函数的方式来时实现的。
5.中断函数格式如下:
void函数名()interrupt中断号using工作组
{中断服务程序内容;
1)右边的三个数码管从“000”开始进行加法计数。
按动S2键时计数暂停,再按继续计数。
ucharcodetable[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
ucharcodewei[4]={0xfe,0xfd,0xfb,0xf7};
/***************************************************************/
uintcnt;
bitflag;
/**********************************************/
voidinit(void)
{
bitflag=0;
//设置标志
EA=1;
//开中断
EX0=1;
//外部中断0开中断
IT0=1;
//外部中断0的触发方式
}
/**************************************************/
voiddelay(uintk)
uintdatai,j;
for(i=0;
i<
k;
i++)
{
for(j=0;
j<
121;
j++){;
}
}
voidmain(void)
{uchari;
init();
while
(1)
if(flag)cnt++;
if(cnt>
999)cnt=0;
for(i=0;
i++)
{
P0=table[cnt/100];
P2=wei[2];
P0=table[(cnt%100)/10];
P2=wei[1];
P0=table[cnt%10];
P2=wei[0];
}
/************************************************/
voidextern_int0(void)interrupt0using0
flag=!
flag;
五、原理图
实验五定时器/计数器使用
1.学习89C51内部定时计数器的使用和编程方法
2.进一步掌握中断处理程序的编写方法
1、51单片机有。
两个16位内部定时器/计数器(T/C,Timer/Counter)。
若是计数内部晶振驱动时钟,则是定时器;
若是计数8051的输入引脚的脉冲信号,则它是计数器。
定时器实际上也是工作在计数方式下,只不过对固定频率的脉冲计数。
由于脉冲周期固定由计数值可以计算出时间,有定时功能。
定时器有关的寄存器有工作方式寄存器TMOD和控制寄存器TCON。
TMOD用于设置定时器/计数器的工作方式0-3,并确定用于定时还是用于计数。
TCON主要功能是为定时器在溢出时设定标志位,并控制定时器的运行或停止等。
2、TMOD
1)M1M0工作方式控制位
2)C/T定时器方式或计数器方式选择位
若C/T=1时,为计数器方式;
C/T=0时,为定时器方式。
3)GATE定时器/计数器运行门控标志位
当GATE=1时,T/C的启动受双重控制,即要求INT0(或INT1)引脚为高电平且TR0(或TR1)置1时,相应的T/C才被选通工作。
若GATE=0,T/C的启动仅受TR0(或TR1)控制,即置1,T/C就被选通,而不管INT0(或INT1)的电平是高还是低。
3、TCON
TF0、TF1分别是定时器/计数器T0、T1的溢出中断标志位,加法计数器计满溢出时置1,申请中断,在中断响应后自动复0。
TF产生的中断申请是否被接受,还需要由中断是否开放来决定。
TR1、TR0分别是定时器/计数器T1、T0的运行控制位,通过软件置1后,定时器/计数器才开始工作,在系统复位时被清0。
4、初始化
1)初始化步骤
在使用51系列单片机的T/C前,应对它进行编程初始化,主要是对TCON和TMOD编程,还需要计算和装载T/C的计数初值。
一般完成以下几个步骤:
(1)确定T/C的工作方式——编程TMOD寄存
(2)计算T/C中的计数初值,并装载到TH和TL;
(3)T/C在中断方式工作时,必须开CPU中断和源中断——编程IE寄存器;
(4)启动定时器/计数器——编程TCON中TR1或TR0位。
2)计数初值的计算
(1)定时器的计数初值:
在定时器方式下,T/C是对机器周期脉冲计数的,fOSC=6MHZ,一个机器周期为12/fOSC=2us,则
方式013位定时器最大定时间隔=213*2us=16.384ms
方式116位定时器最大定时间隔=216*2us=131.072ms
方式28位定时器最大定时间隔=28*2us=512us
若T/C工作在定时器方式1时,要求定时1ms,求计数值。
如设计数初值为x,则有:
(216-x)*2us=1000us推出x=216-500
因此,TH,TL可置65536-500
(2)计数器的计数初值
在计数器方式下:
方式013位计数器的满计数值=213=8192
方式116位计数器的满计数值=216=65536
方式28位计数器的满计数值=28=256
若T/C工作在计数器方式2时,则要求计数10个脉冲的计数初值,如设计数初值为x。
则有
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 实验 指导书 语言