单片机学习实验报告_第1页
单片机学习实验报告_第2页
单片机学习实验报告_第3页
单片机学习实验报告_第4页
单片机学习实验报告_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

嵌入式系统实验报告

实验1KeilC51的使用(汇编语言)实验目的:初步掌握KeilC51(汇编语言)和ZY15MCU12BD型综合单片机实验箱的操作和使用,能够输入和运行简单的程序。实验设备:ZY15MCU12BD型综合单片机实验箱一台、具有一个RS232串行口并安装KeilC51的计算机一台。实验原理及环境:在计算机上已安装KeilC51软件。这个软件既可以与硬件(ZY15MCU12BD型综合单片机实验箱)连接,在硬件(单片机)上运行程序;也可以不与硬件连接,仅在计算机上以虚拟仿真的方法运行程序。如果程序有对硬件的驱动,就需要与硬件连接;如果没有硬件动作,仅有软件操作,就可以使用虚拟仿真。实验内容:1.掌握软件的开发过程:1)建立一个工程项目选择芯片确定选项。2)加入C源文件或汇编源文件。3)用项目管理器生成各种应用文件。4)检查并修改源文件中的错误。5)编译连接通过后进行软件模拟仿真。6)编译连接通过后进行硬件仿真。2.按以上步骤实现在P1.0输出一个频率为1Hz的方波。3.在2的基础上,实现同时在P1.0和P1.1上各输出一个频率同为1Hz但电平状态相反的方波。预习要求:1.熟悉使用KeilC51的步骤。2.理解实验内容2中程序的工作原理。3.编写实验内容3所需要的程序。实验步骤:以下假定你在E:\TEST文件夹下学习、运行Keil1.建立一个工程项目选择芯片确定选项如图1-1所示:=1\*GB3①Project→=2\*GB3②NewProject→=3\*GB3③输入工程名test→=4\*GB3④保存工程文件(鼠标点击保存按钮)弹出下一界面。如图1-2所示:=1\*GB3①选CPU厂家(Atmel)→=2\*GB3②选CPU型号(89C51),=3\*GB3③选好后确定接着选晶振频率及生成HEX文件等。如图1-3所示:=1\*GB3①Project→=2\*GB3②OptionsforTarget‘Target1’…→=3\*GB3③在Target中→=4\*GB3④更改CPU晶振频率为12MHz→⑤在Output中→⑥选择生成HEX格式其它采用缺省设置→⑦选好后确定。图1-1创建工程名图1-2选厂家,选CPU型号图1-3选晶振频率及生成HEX文件等窗口图1-4进入编辑源文件窗口2.建立汇编源文件如图1-4所示:=1\*GB3①File→=2\*GB3②New,=3\*GB3③弹出源文件编辑窗口。输入以下源文件: ORG0000HAGAIN: CPLP1.0MOVR0,#10 ;延时0.5秒LOOP1: MOVR1,#100LOOP2: MOVR2,#250DJNZR2,$DJNZR1,LOOP2DJNZR0,LOOP1SJMPAGAINEND源程序编写完后,=1\*GB3①File→=2\*GB3②SaveAs将文件以test.asm保存在E:\test目录下,获得汇编语言源程序。3.用项目管理器生成(编译)各种应用文件=1\*GB3①点击Target1前之+号→出现=2\*GB3②SourceGroup1→=3\*GB3③点击它并按鼠标右键会生弹出下拉菜单见图1-5编译文件文件窗口→选择=4\*GB3④AddFilestoGroup‘SourceGroup1’→=5\*GB3⑤点击add向项目中添加Test.asm源文件→⑥点击close关闭AddFilestoGroup‘SourceGroup1’窗口→=7\*GB3⑦在SourceGroup1前会出现一个+号→=8\*GB3⑧点击之弹出test.asm文件名点击该文件名→=9\*GB3⑨主窗口中会出现该程序图1-5进入编译文件文件窗口图1-5硬件实时仿真调试选项窗口编译:Project→Buildtarget就会生成一系列到文件如OBJ文件LST文件HEX文件等。4.检查并修改源文件中的错误如果在源文件中存在错误在Output窗口中会出现错误提示信息,你可以在源程序中进行修改,然后存盘后重新Build观察错误提示信息。5.编译连接通过后进行软件模拟仿真Debug→Start/StopDebugSession进入软件模拟的仿真窗口,可使用单步、设断点来进行调试和除错。6.编译连接通过后进行硬件仿真实验箱的仿真串口必须与PC机串口连接,通电,拨位开关K10必须拨在B端,连接P10和L00,连接P11和L01,设置硬件实时仿真调试选项:Project→OptionsforTarget‘Targetl’→Debug.硬件实时仿真调试选项窗口,见图1-5选硬件仿真选项,按确定按钮确定。进入硬件实时调试窗口后,可打开各种观察窗口,进行单步断点运行到光标连续执行等操作,无误后可连续运行观察LED发光管的显示效果。注意退出时须按单片机的复位按键SS10,在进行硬件连接前最好也先按单片机的复位按键SS10。7.修改以上程序,实现同时在P1.0和P1.1上各输出一个频率为1Hz但电平状态相反的方波。重要提示:1.指令中的“,:;”是西文字符,切不可使用中文符号;数字“0”与字符“o”2.以上菜单操作都可以点击工具栏中的相应图标快速实现。3.退出硬件连接可以按SS10,在进行硬件连接前最好也按一次SS10。4.生成源文件的方法:=1\*GB3①从键盘上输入源文件;=2\*GB3②用其他编辑软件(包括MicrosoftWord)编辑源文件,然后复制到KeilC51文件窗口中,使Word文档变为TXT文档,这种方法最好,可方便输入中文注释;=3\*GB3③也可装入在其它编辑软件中编辑的源文件如:*.asm/*.a51/*.c...等。

实验2十六进制与十进制的1.实验目的:实践汇编语言顺序结构的编程方法,掌握十六进制数转换成十进制数的编程实现,掌握单步运行程序的基本技巧。2.实验设备:ZY15MCU12BD型综合单片机实验箱一台、具有一个RS232串行口并安装KeilC51的计算机一台。3.实验原理及环境:将十六进制数转换成十进制数有多种方法,比较典型的是用待转换数除以权值的方法,即依次除以100、10,则各次的商和最后的余数就是所需要的十进制数。4.实验内容:将放在片内RAM30H中的2位十六进制数转换成3位十进制数,按照从高位到低位的顺序分别放入31H~33H中(即非压缩的BCD码)。在本实验中,要求使用单步方式运行,以便观察各单元的变化过程。5.程序清单ORG0000HMOVA,30HMOVB,#100HDIVABMOV31H,AMOVA,BMOVB,#10HDIVABMOV32H,AMOV33H,B6.实验步骤:1.建立一个工程,将在预习中做好的*.asm文件加入。2.调出存储器编辑窗口,将30H单元修改成某一值。3.在希望停下来的指令上设断点,然后运行,在断点处停下来后,再单步运行,可以看到各单元的变化情况。运行完最后一条指令后,在31H~33H中应获得30H中十六进制数对应的十进制数。7.实验结果及总结单步调试结果AB30H31H32H33H初始值00H00HDCH00H00H00H一DCH00HDCH00H00H00H二DCH64HDCH00H00H00H三02H14HDCH00H00H00H四02H14HDCH00H00H00H五14H14HDCH00H00H00H六0aH14HDCH00H00H00H七02H00HDCH02H00H00H八02H00HDCH02H02H00H九02H00HDCH02H02H00H总结:本次实验中最重要的是单步调试的结果,每次单步调试后的结果如上所示,可以看出进制间的转换。实验38段LED显示器动态显示1实验目的:掌握8段LED显示器的使用及显示程序的设计方法。2实验设备:ZY15MCU12BD型综合单片机实验箱一台、具有一个RS232串行口并安装KeilC51的计算机一台。3实验原理及环境:1.实验箱上有6位8段LED显示器,采用动态方式驱动。即使一位LED显示器显示内容一段时间,然后下一位LED显示器显示内容一段时间……,周而复始。只要刷新频率不小于50Hz,就可以获得清晰稳定的显示效果。2.MCS-51CPU通过一片8255对8段LED显示器进行段驱动和位驱动,8255的A口、B口、C口、控制口的地址分别为片外RAM的4000H、4001H、4002H、4003H。3.LED显示器的各段由8255的B口驱动,低电平对应段发光,高电平对应段熄灭。各段的驱动位如图3-1,各显示字的字形代码如下所示:显示字字形代码显示字字形代码显示字字形代码

0C0H0.40H-BFH1F9H1.79H灭FFH18段LED各段控制18段LED各段控制位D4D3D6D2D1D5D0D73B0H3.30H499H4.19H592H5.12H682H6.02H7F8H7.78H880H8.00H990H9.80HA88HA.08HB83HB.03HCC6HC.46HDA1HD.21HE86HE.06HF8EHF.0EH4.LED显示器的各位由8255的A口驱动,低电平对应位发光,高电平对应位熄灭。LED显示器对应位口位左起第一位D0左起第二位D1左起第三位D2左起第四位D3左起第五位D4左起第六位D5实验内容:1.编写一个6位LED显示器驱动子程序(在主程序中已对接口芯片8255做好必要的初始化)。字形表按0~F、0.~F.、-、灭的顺序排列。该子程序的要求如下:入口:待显示数(00H~1FH)放在20H~25H(分别对应显示器的左起第1~第6位)中。出口:每位LED显示0.5mS后返回。占用:R0、R1、R2、A、PSW、DPTR。2.子程序自身无法运行,为了运行这个子程序,另编写一个主程序。这个主程序的功能是首先对8255进行初始化,然后就反复调用显示子程序,显示20H~25H中的待显示内容。首先在20H起始的6个字节中置入00H~0FH,然后连续运行此程序,应显示0~F;在20H起始的6个字节中置入10H~1FH,然后连续运行此程序,应显示0.~F.;若置入20H、21H,则显示-、灭。3.编写一段程序,运行后会在显示器上应出现连续向左移动的0~F。实验程序:ORG0000H MOVSP,#6FH MOV20H,#00MOV21H,#00MOV22H,#00MOV23H,#00MOV24H,#00MOV25H,#00 MOVDPTR,#4003H;8255初始化MOVA,#10000001B;A口、B口方式0输出,C口高4位输出,低4位输入 MOVX@DPTR,A;ACALLDELAY500MS ;延时0.5秒LOOP3:LCALLDISP ;调用显示子程序 SJMPLOOP3DISP:MOVR0,#20HMOVR2,#0FEHDISP1:MOVA,@R0MOVDPTR,#TABMOVCA,@A+DPTRMOVDPTR,#4001HMOVX@DPTR,AMOVA,R2MOVDPTR,#4000HMOVX@DPTR,ACALLDELAY500USMOVA,#0FFHMOVX@DPTR,AMOVA,R2RLAMOVR2,AINCR0CJNER0,#26H,DISP1 RETDELAY500MS:PUSH00HMOVR0,#25 ;延时0.5秒NEXT:ACALLDELAY20MS DJNZR0,NEXT POP00H RETDELAY500US:PUSH03HMOVR3,#250DJNZR3,$ POP03HRETDELAY20MS:PUSH06HPUSH07H MOVR7,#99AGAIN:MOVR6,#100DJNZR6,$ DJNZR7,AGAIN POP07H POP06H RETTAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H;0,1,2,3,4,5,6,7DB80H,90H,88H,83H,0C6H,0A1H,86H,8EH;8,9,A,B,C,D,E,FDB40H,79H,24H,30H,19H,12H,2H,78H;0.,1.,2.,3.,4.,5.,6.,7.DB00H,10H,08H,03H,46H,21H,06H,0EH;8.,9.,A.,B.,C.,D.,E.,F.END实验4矩阵键盘的使用实验目的:掌握矩阵键盘的使用及键盘扫描程序的设计方法。实验设备:ZY15MCU12BD型综合单片机实验箱一台、具有一个RS232串行口并安装KeilC51的计算机一台。实验原理及环境:实验箱上有一个16键的矩阵键盘,分为4行×4列。4行分别连接到一片8255(与8段LED显示器的段驱动和位驱动共用)的PC0~PC3,4列分别连接到8255的PC4~PC7。8255的A口、B口、C口、控制口的地址分别为片外RAM的4000H、4001H、4002H、4003H。第4列(PC7)第3列(PC6)第2列(PC5)第1列(PC4)行输入PC300H01H02H03H第4行PC204H05H06H07H第3行PC108H09H0AH0BH第2行PC00CH0DH0EH0FH第1行00H01H02H03H列驱动图4-1键盘布置及键值图4-1键盘布置及键值选择列驱动码使某一列为低电平而其它列为高电平,再读取行输入,若该列有键按下则相应的位便是低电平。每个键均安排一个键值,如图4-1所示。实验内容:1.编写一个键盘扫描子程序(在主程序中已对接口芯片8255做好必要的初始化)。这个程序对键盘作一次扫描,若无键按下,返回时累加器A中为FFH,若有键按下,返回时A中为该键键值。其中,查键值子程序可以自行编写,也可以使用下面这个查键值子程序,这个子程序的参数如下:入口:行列关键值码放在累加器A中,高4位是列驱动码(被扫描列的对应位为0,其余位均为1),低4位是行状态(按下键的对应位为0,其余位均为1)。出口:键码放在A中带出。占用:R1、A、PSW、DPTR。程序清单如下:;查键值子程序,起始KEY20 KEY20:PUSHACC;暂存关键值MOVR1,#00H;查键值自变量清0KEY21:JNBACC.4,KEY22;计算列数RRAINCR1SJMPKEY21KEY22:MOVA,R1;按每列4个键计算MOVB,#4MULABMOVR1,APOPACC;恢复关键值KEY23:JNBACC.0,KEY24;计算行数RRAINCR1SJMPKEY23KEY24:MOVDPTR,#KEYTAB;读取键值MOVA,R1MOVCA,@A+DPTRRETKEYTAB: DB0FH,0BH,07H,03H DB0EH,0AH,06H,02H DB0DH,09H,05H,01H DB0CH,08H,04H,00H2.键盘扫描子程序自身无法运行,为了运行这个子程序,另编写以下程序: ORG0000HMOVSP,#6FHMOVR0,#5 ;延时0.5秒LOOP1: MOVR1,#200LOOP2: MOVR2,#250DJNZR2,$DJNZR1,LOOP2DJNZR0,LOOP1MOVDPTR,#4003H;8255初始化MOVA,#10000001B;A口、B口方式0输出,C口高4位输出,低4位输入MOVX@DPTR,ALOOP3: LCALLDISP ;调用显示子程序DIS,设显示子程序入口为DISP LCALLKEY ;调用键盘扫描子程序,设键盘扫描子程序入口为KEY CJNEA,#0FFH,LOOP4 ;如果有键按下转 SJMPLOOP3LOOP4: MOV20H,21H MOV21H,22H MOV22H,23H MOV23H,24H MOV24H,25H MOV25H,A SJMPLOOP3其中显示子程序使用实验3中的显示子程序。程序运行后,每按一键便从显示器的右端移入一个对应的数。实验5A/D转换实验目的:掌握用ADC0809实现A/D的方法。实验设备:ZY15MCU12BD型综合单片机实验箱一台、具有一个RS232串行口并安装KeilC51的计算机一台。实验原理及环境:电位器W1将+5V电压分压后送入ADC0809的输入IN4~IN7,调节电位器W1可以获得0~+5V的电压输入。ADC0809的接口参数如下:输入电压范围0~+5V启动IN4A/D转换写任意数到8004H

取转换结果读8004H

EOC通过一个反相器输出实验内容:设计一个程序,将IN4输入的0~+5V模拟电压转换成数字量,再将这个2位十六进制转换成3位十进制数,放在LED显示器的第四~六位显示。其中显示子程序可以用实验3中的子程序。判断转换是否结束可以将ADC0809的EOC(经反相器)引入到P1.0,然后查询P1.0的状态。程序清单 ADD_8255DATA4000H ORG0000H MOVSP,#6FH MOVR0,#5 ;延时0.5秒LOOP1: MOVR1,#200LOOP2: MOVR2,#250 DJNZR2,$ DJNZR1,LOOP2 DJNZR0,LOOP1 MOVDPTR,#(ADD_8255+3) MOVA,#10000001B MOVX@DPTR,ALOOP3: LCALLDIS SJMPLOOP3DIS: MOVR0,#20H MOVR2,#0FEHLOOP10:MOVA,@R0 MOVDPTR,#TAB MOVCA,@A+DPTRMOVDPTR,#(ADD_8255+1) MOVX@DPTR,A MOVA,R2 MOVDPTR,#ADD_8255 MOVX@DPTR,A MOVR1,#250 DJNZR1,$ MOVA,#0FFH MOVX@DPTR,A MOVA,R2 RLA MOVR2,A INCR0 MOVA,R0 CJNEA,#26H,LOOP10 RETTAB:DB0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8HDB080H,090H,088H,083H,0C6H,0A1H,086H,08EHDB040H,079H,024H,030H,019H,012H,002H,078HDB000H,080H,008H,003H,046H,021H,006H,00EH DB0BFH,0FFHEND实验结果:变化范围为17到255,最小值存在误差,由于电路自身存在误差。实验6D/A转换实验目的:掌握用DAC0832实现D/A转换的方法

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论