51单片机kell学习初步和Protues仿真.docx
- 文档编号:9537978
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:22
- 大小:243.18KB
51单片机kell学习初步和Protues仿真.docx
《51单片机kell学习初步和Protues仿真.docx》由会员分享,可在线阅读,更多相关《51单片机kell学习初步和Protues仿真.docx(22页珍藏版)》请在冰豆网上搜索。
51单片机kell学习初步和Protues仿真
51单片机kell学习初步和Protues仿真
单片机实验
指导书
前沿
单片机实验是学习单片机原理及应用课程的一个重要环节。
通过实验加深单片机原理的认识,训练学生单片微型计算机应用及开发的基本技能,培养学生合理选择单片微型计算机和接口芯片、正确设计单片微型计算机的接口电路、学会程序调试的基本方法以及解决实验中所遇到问题的能力,同时,培养学生理论联系实际、严谨认真的科学态度和良好的工作作风。
本实验指导书就是基于软件完全仿真单片机系统的单片机实验指导书,单片机软件系统开发用的是KEIL51软件,单片机硬件系统仿真用的是PROTEUS中的ISIS软件,如果软件和硬件都正确,最后在ISIS中能看到相应结果,就像在实际的硬件实验设备上一样,而且在实验中,不仅软件系统需要学生开发,硬件系统也要学生自己组建,这样更能让学生完整的体会单片机系统开发过程。
2
实验一KEIL51软件实验----------------------------------------------------------------------------------------------------------4实验二乘法运算实验--------------------------------------------------------------------------------------------------------------10实验三并行接口实验--------------------------------------------------------------------------------------------------------------12实验四单片机定时/计数器实验--------------------------------------------------------------------------------------------------17实验五单片机串行通信实验-----------------------------------------------------------------------------------------------------18实验六键盘和数码管显示实验--------------------------------------------------------------------------------------------------19实验七D/A转换实验--------------------------------------------------------------------------------------------------------------22实验八A/D转换实验--------------------------------------------------------------------------------------------------------------23
3
实验一KEIL51软件实验
实验目的:
1、掌握KEIL集成开发环境的使用
2、掌握算术运算程序
实验设备:
计算机、KEIL51软件
实验内容:
编程实现把片人RAM30H单元和40H单元两个16字节数相加,结果放于30H单元开始的位置处。
在KEIL51编译、连接、仿真调试。
实验步骤:
一、运行KEIL51软件,出现图1所示KEIL51主界面。
图1KEIL51主界面
首先用Project菜单下的NewProject命令建立项目文件,过程如下。
(1)选择Project菜单下的NewProject命令,弹出如图2所示的CreatenewProject对话框。
图2CreateNewProject对话框
(2)在CreateNewProject对话框中选择新建项目文件的位置(最好一个项目建立一个文件夹如E:
\project),
输入新建项目文件的名称,例如,项目文件名为example,单击【保存】按钮将弹出如图3所示的Select
4
DeviceforTarget‘Target1’对话框,用户可以根据使用情况选择单片机型号。
KeiluVision2IDE几乎支持
所有的51核心的单片机,并以列表的形式给出。
选中芯片后,在右边的描述框中将同时显示选中的芯
片的相关信息以供用户参考。
图3SelectDeviceforTarget‘Target1’对话框
(3)这里选择atmel公司的AT89c51。
单击【确定】按钮,这时弹出如图4所示的CopyStandard8051Startup
CodetoProjectFolderandAddFiletoProject确认框,C语言开发选择【是】,汇编语言开发选择【否】。
单击后,项目文件就创建好了。
项目文件创建后,在主界面的左侧的项目窗口可以看到项目文件的内容。
这时只有一个框架,紧接着需向项目文件中添加程序文件内容。
图4CopyStandard8051StartupCodetoProject
FolderandAddFiletoProject确认框
二、给项目添加程序文件
当项目文件建立好后,就可以给项目文件加入程序文件了,KeiluVision2支持C语言程序,也支持汇编语言程序。
这些程序文件可以是已经建立好了的程序文件,也可以是新建的程序文件,这里我们新建的汇编程序文件后再添加。
(1)选择文件菜单上的new命令,出现新建文本窗口,如图5所示。
5
图5新建文本窗口在文本编辑窗口中输入加法程序。
存盘,假设文件名为add16.asm。
注意汇编程序文件扩展名为.asm,这时
默认路径为工程文件夹。
参考程序如下:
ORG0000H
LJMPMAIN
ORG1000H
MAIN:
MOVR0,#30H
MOVR1,#40H
MOVR2,#16
CLRC
LOOP:
MOVA,@R0
ADDCA,@R1
MOV@R0,A
INCR0
INCR1
DJNZR2,LOOP
SJMP$
END
(2)添加文件到项目中。
在项目管理器窗口中,展开Target1项,可以看到SourceGroup1子项。
右击SourceGroup1,
在出现菜单中选择AddFilestoGroup‘SourceGroup1’命令。
出现添加文件的窗口,加程序add16.asm如到项
目中。
如图6所示。
注意文件类型要选择为*.a*。
6
图5添加程序文件到项目
三、编译、连接项目,形成目标文件
当把程序文件添加到项目文件中,并且程序文件已经建立好存盘后,就可以进行编译、连接,形成HEX目标文件(只在keil51中软件仿真可以不形成目标文件)
(1)选择Project菜单下的BuiltTarget命令(或快捷键F7)编译、连接当前项目,编译、连接时,如果程序有错,则编译不成功,并在下面的信息窗口给出相应的出错提示信息,以便用户进行修改,修改后再编译、连接,这个过程可能会重复多次。
如果没有错误,则编译、连接成功,并且在信息窗口给出提示信息。
如图6所示。
图6编译、连接后的显示图
(2)如果要做硬件下载可硬件仿真,则要形成HEX目标文件,须先对输出选项进行相应的设置,设置后再进行编译连接。
方法如下:
右击项目管理器窗口的Target1项,在右键菜单中选择下面的OptionsforTarget‘Target1’
命令,在OptionsforTarget‘Target1’对话框选择Output选项卡,在该选项卡选中CreateHEXFile选项,选择生成HEX文件。
如图7所示。
7
图7OptionsforTarget‘Target1’对话框
四、运行调试观察结果
当项目编译、连接成功后,就可以运行它来观察结果,运行调试过程如下。
先用Debug菜单下的Start/StopDebugSession命令(快捷键Ctrl+F5)启动调试过程,启动后可用Debug菜单下Go连续运行命令、Step单步运行、Stoprunning停止运行命令等运行程序观察结果。
本实验中进入启动调试后,先用View菜单下的memorywindow打开存储器窗口,在address框输入d:
0x30,在存储器窗口中显示片内数据存储器30h单元开始的数据。
如图8所示。
Memorywindow
窗口
图8启动调试过程结果图
在片内数据存储器窗口中右击30h单元,在右键菜单中选择modifymemoryatD:
0x30,从30h单元开始修改数据,在弹出的窗口中输入30h,3fh单元的数据,如图9和图10所示。
8
图9修改片内数据存储器的内容
图10输入30h,3fh单元的数据
用相同的方法修改40h,4fh单元的数据。
修改后选择run命令运行,运行后在存储器窗口可看到该程序运行的结果。
在存储器窗口的address框中还可输入c:
0x地址显示程序存储器,x:
0x地址显示片外数据存储器。
另外,可用View菜单下的symbolswindow命令查看特殊功能寄存器,用peripherals菜单下面的命令来查看并口、串口、定时/计数器和中断的相关内容。
实验结论与问题:
简要介绍KEIL51使用过程。
9
实验二乘法运算实验实验目的:
1、掌握KEIL集成开发环境的使用
2、掌握多字节乘法运算程序实验设备:
计算机、KEIL51软件
实验内容:
编程实现把R2R1(R2为高字节,R1为低字节)和R0中的无符号数相乘,结果放于R7R6R5(R7为最高
位)。
在KEIL51编译、连接、仿真调试实验步骤:
ORG0000H
LJMPMAIN
ORG0030H
MAIN:
MOVR1,#0FFHMOVR2,#0FFH
MOVR0,#11H
MOVA,R1
MOVB,R0
MULAB
MOVR6,B
MOVR5,A
CLRC
MOVA,R2
MOVB,R0
MULAB
MOVR7,B
ADDCA,R6
MOVR6,A
MOVA,R7
ADDCA,#00H
MOVR7,A
SJMP$
END
实验结论及问题:
给R2R1和R0赋值方法有哪些,MOVRn,A
MOVRn,01H立即数寻址
MOVRn,#01H直接赋值。
三种情况
10
11
实验三并行接口实验
实验目的:
1、掌握KEIL集成开发环境的使用
2、掌握Proteus仿真软件的使用
3、学会使用Proteus和KEIL软件进行系统仿真调试
4、掌握单片机并行接口的结构与使用
实验设备:
计算机、KEIL51软件、PROTEUS软件
实验内容:
在80C51单片机的P2口连接8个发光二极管指示灯,编程实现流水灯的控制,轮流点亮指示灯。
在KEIL51
中编程序,形成HEX文件,在PROTEUS中设计硬件,下载程序,运行看结果。
实验步骤:
一、打开PROTEUS的ISIS软件,如图10所示。
新建电路图文件,设文件保存到e:
\projectio下面,文件基本
名为io,扩展名默认。
选择元件
图10ISIS窗口图
二、在componentmode模式下单击选择元件按钮P,打开元件选择对话框,如图11所示。
12
图11元件选择窗口
在元件选择对话框的keywords窗口中输入元件关键字可换搜索元件,找到元件后,双击元件则可选中元件,添加元件到图10的device列表栏。
在这里依次添加元件单片机80c51、电阻RES、电容CAP、按键BUTTON、晶振CRYSTAL、发光二极管LED-RED。
如图12所示。
图12添加元件的device列表栏
三、选择devices元件列表中的元件放到工作窗口,注意放置在工作窗口合适的位置,在元件放置时可对元件进行移动、旋转等操作。
电源与地在工具按钮的Terminalsmode中选取。
如图13所示。
13
图13放置元件图四、连接导线,如图14所示。
连接后存盘。
图14连接元件图五、在keil51中设计软件程序,形成HEX文件。
保存软件项目到电路文件相同的文件夹e:
\projectio。
设
计软件程序如内容一,过程略。
参考程序如下:
ORG0000H
LJMPMAIN
ORG0100H
MAIN:
MOVA,#01H
LOOP:
MOVP2,A
14
LCALLDELAY
RLA
SJMPLOOP
SJMP$
DELAY:
MOVR2,#10H
DELAY1:
MOVR3,#0FFH
DJNZR3,$
DJNZR2,DELAY1
RET
END
六、在PROTEUS电路图中,单击单片机80C51芯片,选中,再次单击打开单片机80C51的属性对话框,
在属性对话框中的programfile框中选择下载到80C51芯片中的程序。
这里是同一个文件夹下面的io.hex
文件。
如图14所示。
图14下载程序到单片机
七、单击仿真运行按钮play,运行程序。
可通过LED二极管看到相应的结果。
如图15所示。
15
图15仿真结果图实验结论与问题:
如果要改变LED显示的循序,该怎么办,
16
实验四单片机定时/计数器实验实验目的:
1、了解定时/计数器的结构
2、熟练掌握定时/计数器的使用方法
3、掌握利用定时/计数器产生方波的方法
4、掌握中断的使用
实验设备:
计算机、KEIL51软件、PROTEUS软件实验内容:
利用单片机,计数器0工作于方式1,从P1.1产生周期为100ms的方波,从P1.2产生周期为500us的
方波,要求定时器溢出用中断方式处理,在仿真环境上实现,用示波器测量产生的方波周期。
(参考原理图
与程序见附录)
实验步骤:
(略)
实验结论与问题:
怎样改变输出信号的周期,改变方式对输出波形有什么影响,
参考电路图,
C1
1nF
X1U1CRYSTAL1939XTAL1P0.0/AD038P0.1/AD1C237P0.2/AD21836XTAL2P0.3/AD335P0.4/AD4341nFP0.5/AD5C333P0.6/AD6932RSTP0.7/AD7214.7uFP2.0/A822P2.1/A923P2.2/A102924PSENP2.3/A113025R1ALEP2.4/A123126300EAP2.5/A1327P2.6/A1428P2.7/A15110P1.0P3.0/RXDA211P1.1P3.1/TXD312P1.2P3.2/INT0B413P1.3P3.3/INT1514P1.4P3.4/T0C615P1.5P3.5/T1716P1.6P3.6/WRDD1D2817P1.7P3.7/RDLED-REDLED-RED80C51
程序参考教材。
17
实验五单片机串行通信实验
实验目的:
1、了解串行口的结构与功能
2、掌握串行通信的方法
3、学习串行通信程序的设计
实验设备:
计算机、KEIL51软件、PROTEUS软件实验内容:
实现甲与乙两台单片机点对点的双机通信,将甲机的片内RAM中30H~3FH单元的内容传送到乙机的
片内RAM的40H~4FH单元中,内容自定。
在仿真环境上实现。
实验步骤:
(略)
实验结论与问题:
通信时,应先启动发送还是先启动接收,为什么,
18
实验六键盘和数码管显示实验
实验目的:
1、了解矩阵键盘的基本原理
2、了解数码管软件译码动态显示的基本原理
3、掌握利用51单片机使用矩阵键盘和数码管显示器方法
实验设备:
计算机、KEIL51软件、PROTEUS软件实验内容:
实现2,8矩阵键盘和8个LED数码管显示,要求按键编码在数码管上轮流显示,在仿真软件中设计硬件电
路,编写转换程序,仿真运行。
实验步骤:
(略)
实验结论与问题:
如果从左向右显示,如何处理,
参考电路图
ABCDEPC0FGH
PC1
A
U1U2U3D0193932XTAL1P0.0/AD0D0Q0D1D0D0A3834445P0.1/AD1D0PA0D1Q1D2D1B3733376BP0.2/AD2D1PA1D2Q2D3D2C183632289XTAL2P0.3/AD3D2PA2D3Q3D4D3D353111312P0.4/AD4D3PA3D4Q4D5D4E3430401415P0.5/AD5D4PA4D5Q5D6D5F3329391716P0.6/AD6D5PA5D6Q6D7D6G93228381819RSTP0.7/AD7D6PA6D7Q7D7H2737D7PA7211P2.0/A8OECALE12251811P2.1/A9RDPB0LE2233619P2.2/A10WRPB13292474LS373920PSENP2.3/A11A0PB2ALE43025821ALEP2.4/A12A1PB3531263522EAP2.5/A13RESETPB462723P2.6/A14PB5728624DP2.7/A15CSPB6825PB7110P1.0/T2P3.0/RXDPC021114P1.1/T2EXP3.1/TXDPC0PC131215P1.2P3.2/INT0PC141316P1.3P3.3/INT1PC251417P1.4P3.4/T0PC361513EP1.5P3.5/T1PC471612P1.6P3.6/WRPC581711P1.7P3.7/RDPC610PC7AT89C52128255A3F4561978
G
H
参考程序:
#include
#include
#defineucharunsignedchar#defineuintunsignedintvoiddelay(uint);//延时函数声明
voiddisplay(void);//声明显示函数
ucharcheckkey();//声明检测按键函数
ucharkeyscan(void);//声明键扫描函数
uchardisbuffer[8]={0,1,2,3,4,5,6,7};//定义显示缓冲区voidmain(void)//主函数
{
ucharkey;
XBYTE[0x7f03]=0x81;//8255A初始化
while
(1)
{
key=keyscan();//检测按键
if(key!
=0xff)
{disbuffer[0]=disbuffer[1];
disbuffer[1]=disbuffer[2];
disbuffer[2]=disbuffer[3];
disbuffer[3]=disbuffer[4];
disbuffer[4]=disbuffer[5];
disbuffer[5]=disbuffer[6];
disbuffer[6]=disbuffer[7];
disbuffer[7]=key;//显示缓冲区左移,按键放入显示缓冲区最后
}
display();//调用显示函数
}
}
//************延时函数************
voiddelay(uinti)//延时函数
{uintj;
for(j=0;j
}
//***********显示函数***********
voiddisplay(void)//定义显示函数
{ucharcodevalue[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0,F的字段码表
ucharchocode[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位选码表
uchari,p,temp;
for(i=0;i<8;i++)
{
XBYTE[0x7f01]=0xff;
p=disbuffer[i];//取当前显示的字符
temp=codevalue[p];//查得显示字符的字段码
XBYTE[0x7f00]=temp;//送出字段码
temp=chocode[i];//取当前的位选码
20
XBYTE[0x7f01]=temp;//送出位选码
delay(20);//延时1ms
}
}
//************检测有无键按下函数************ucharcheckkey()//检测有无键按下函数,有返回0xff,无返回0{uchari;
XBYTE[0x7f00]=0x00;
i=XBYTE[0x7f02];
i=i&0x0f;
if(i==0x0f)return(0);elsereturn(0xff);
}
//************键盘扫描函数************ucharkeyscan()//键盘扫描函数,如果有键按下,则返回该键的编码,如果无键按下,则返回0xff
{ucharscancode;//定义列扫描码变量
ucharcodevalue;//定义返回的编码变量
ucharm;//定义行首编码变量
uchark;//定义行检测码
uchari,j;
if(checkkey()==0)return(0xff);//检测有无键按下,无返回0xff
else
{delay(20);//延时
if(checkkey()==0)return(0xff);//检测有无键按下,无返回0xff
else
{
scancode=0xfe;m=0x00;//列扫描码,行首码赋初值
for(i=0;i<8;i++)
{k=0x01;
XBYTE[0x7f00]=scancode;//送列扫描码
for(j=0;j<2;j++)
{if((XBYTE[0x7f02]&k)==0)//检测当前行是否有键按下
{codevalue=m+j;//按下,求编码
while(checkkey()!
=0);//等待键位释放
return(codevalue);//返回编码
}
elsek=k<<1;//行检测码左移一位
}
m=m+2;//计算下一行的行
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 单片机 kell 学习 初步 Protues 仿真