1、同样可调试拼字程序。五、 实验结果及分析(附上编写的程序、执行的截屏及分析)1、实验的源程序如下: ORG 0000H LJMP MAIN ORG 30HMAIN: MOV DPTR,#7000H MOV A,#68H MOVX DPTR,A MOVX A,DPTR ANL A,#0F0H SWAP A INC DPTR MOV DPTR,#7000H ANL A,#0FH MOV DPTR,#7002H SJMP $ END2、执行的截屏如下:(1)新建工程: (2)选择Atmel:(3)选择AT89C51型号的单片机: (4)将编写的程序添加到工程中:(5)在keil中的编译及执行结果如下
2、:3.实验分析:(3)实验分析单片机是一门非常重视实践的技术,不能总是看书,但要学习它首先应看书,对单片机引脚、内部结构、寄存器和原理有一定地了解和感官认识,是开发工具和开发环境的选择。在对单片机有了一定了解之后就可以学会使用它了。但是单片机能完成的功能太多了,尤其是对外围器件的控制,综合起来能设计出许多意想不到的产品。因此通过此次实验虽然我对单片机的编程和仿真入了门,但离精通还很远,需要不断地努力学习。此次实验不仅让我熟练掌握和应用了单片机的编程和引脚,熟悉了单片机方面的硬件,但还是不能自己设计电路,为了能达到会自己运用单片机实现它的功能,我要不断的积累经验,不断地学习。通过此次拆字、拼字实
3、验我更加熟悉了汇编语言,而且让自己更有目的的学习单片机,除此之外我还知道了以后单片机实验之前都需要好好准备,这样才能打有准备之战,更好地实现学习单片机的目的。IP口彩灯控制系统 一、实验目的1、通过实验了解单片机最小系统2、掌握P0口作为输入、输出方式使用时,CPU对P0口的操作方法。二、实验器材3、实验内容控制要求为:(1)正常情况下,8个发光二极管顺序点亮。(2)按下K1时,第1个和第8个发光二极管闪烁,闪烁间隔时间为1s。(3)按下K2时,8个发光二极管闪烁,闪烁间隔时间为0.5s。(4)发光二极管有单片机P0口控制。参照参考程序结构,但必须添加修改程序内容,并调试、正确运行。(5)用p
4、roteus仿真软件运行硬件电路仿真设计。四、实验步骤1、打开Keil程序,执行菜单命令“Project”“New Project”创建“P口彩灯控制实验”项目,并选择单片机型号为AT89C51。2、执行菜单命令“File”“New”创建文件,输入源程序,保存为“P口彩灯控制实验.c”。在“Project”栏的File项目管理窗口中右击文件组,选择“Add Files to Group Source Group1”将源程序“P口彩灯控制实验.c”添加到项目中。3、执行菜单命令“Project”“Options for Target Target 1”,在弹出的对话框中选择“Output”选项卡
5、,选中“Greate HEX File”。4、执行菜单命令“Project”“Biuld Target”,编译源程序。如果编译成功,则在“Output Window”窗口中显示没有错误,并创建了“P口彩灯控制实验.HEX”文件。5、在Proteus仿真平台上建立参考图系统,并将程序上载到虚拟芯片上运行。五、实验结果及分析(附上编写的程序、执行的截屏及分析)1.实验程序如下:#include reg51.h#define unit unsigned int#define uchar unsigned char/tab=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f
6、;tab=0x01,0x02,0x04,0x08,0x10,0x20,0x80;void delay(void) int i; for(i=0;i32780;i+) i=0;void int0() interrupt 0 tab0=0x01; tab1=0x02; tab2=0x04; tab3=0x08; tab4=0x10; tab5=0x20; tab6=0x40; tab7=0x80;void int1() interrupt 2 int a; a=-100; if(a0) a=0;void main(void) uchar x; EX0=1; IT0=1; EX1=1; IT1=1;
7、 EA=1; while(1) for(x=0;x8;x+) P0=tabx; deplay(); 2.执行时的截屏如下各图所示:(5)在keil中程序的执行及运行如下:(6)在proteus中仿真执行的结果如下图所示:1.初始化程序包括定时器初始化和中断系统初始化主要是对IP、IE、TCON、TMOD的相应位进行正确的设置并将时间常数送入定时器中。由于只有定时器中断P不必设置。 设计中断服务程序和主程序时中断服务程序除了要完成计数减一工作外还要将时间常数重新送入定时器中为下一次中断做准备。使用定时器中断时往往在主程序中赋初值的寄存器在中断服务程序中也要重新赋初值。例如本例中的TH1、TL1还
8、有控制P1口的累加寄存器A。因为在主程序中涉及全亮和全灭这两个配合使用了两次一般的延时子程序但是大部分的延时还是依靠定时器中断完成的。虽然实验开始我只能调用老师给出的实验程序,在此基础上加以修改和理解,但整个实验还是加强了我思考问题的完整性和实际生活联系的可行性的能力,也培养了我们综合应用单片机的能力,对单片机的各个管脚的功能也有了进一步的认识,熟悉了单片机编程和仿真的连接实验。由于本实验是基于proteus和keil软件,所以我对这两款软件都有了更深刻的理解和更加熟悉了这些单片机模拟软件和硬件的仿真。加深了自己对单片机功能的理解和运用能力。 数 码 管 显 示 实 验 2014.12.14
9、实验成绩:通过实验掌握数码管,显示数据的方法;熟悉有关元器件的使用方法。计算机、Keil软件、Proteus软件、组合实验板最小系统,16 脚插座,四块数码管,5V 电源一台,仿真器一台或固化器一台。图中,74LS47 是七段译码器。它是将BCD 码翻译成七段驱动码,驱动数码管显示数据,数码管为共阴普亮数码管,型号为LTS547R,BCD码由P0口的低四位输出,P2 口作为位选口,P2.0 对应左(右)边那块是首显示块,P2.3 对应右(左)边的那块是末显示块。工作时,先送BCD 码,再选位,使选中的数码管点亮,往复循环。循环显示“1”,“2”,“3”,“4”。右循环显示“1”,“2”,“3”
10、,“4”。先四个显示块显示1,2,3,4,1 秒后四个显示块同时显示5,6,7,8。1.打开Keil程序,执行菜单命令“Project”“New Project”创建“数码管显示”项目,并选择单片机型号为AT89C51。2.执行菜单命令“File”“New”创建文件,输入源程序,保存为“数码管显示.c”。3.在“Project”栏的File项目管理窗口中右击文件组,选择“Add Files to Group SourceGroup1”将源程序“数码管显示.c”添加到项目中。4.执行菜单命令“Project”“Options for Target Target 1”,在弹出的对话框中选择“Out
11、put”选项卡,选中“Greate HEX File”。5.执行菜单命令“Project”“Build Target”,编译源程序。如果编译成功,则在“OutputWindow”窗口中显示没有错误,并创建了“数码管显示.HEX”文件。6.在proteus仿真平台上建立参考图系统,并将程序上载到虚拟芯片上运行,注意修改4LS47输入脚与数码管的引脚连接。#define uint unsigned intcode uchar tab=0x01,0x02,0x03,0x04;code uchar tab1=0x05,0x06,0x07,0x08;code uchar tab2=0x01,0x02,0
12、x04,0x08;unsigned int i;for(i=0;63535;i+) unsigned int i;4;i+)P0 = tabi;P2 = tab2i;delay(); (4)在Keil中编程并保存:(5)生成hex文件: (6)在proteus仿真软件中运行的:3.实验分析运行电路时开始数码管有点乱码 ,不能达到设计电路的目的,但在我反复检查电路之后,发现了程序中扫描信号端口错误,于是我将扫描信号的端口顺序调换,并重新运行之后。电路就能正常显示,并符合设计要求。通过本次的实验在前两个实验的基础上让我复习了知识点,也让我掌握了新的知识。在完成这次实验后让我想到可以用多个按键控制多
13、个数码管实现加减和暂停和开始。我觉得这次的课程实验从开始时的一次次的失败,到反复摸索不断修改,不断地去发现问题,从而解决问题,完成更深入的探索。也让我明白理论知识的重要性 并且与实际相结合,多动手,努力让自己在实践中成长。由于本实验是基于proteus和keil软件,所以我对这两款软件都有了更深刻的理解和更加熟悉了这些单片机模拟软件和硬件的仿真,同时也加深了自己对单片机功能的理解和运用能力。 双 单 片 机 串 口 通 信 实 验 掌握单片机串口通信的设计方法,了解双单片机通信的原理。已知8051的串行口采用方式1进行通信,晶振频率为11.0592MHz,选用定时器T1作为波特率发生器,T1工
14、作于方式2,要求通信的波特率为9600,计算T1的初值。设SMOD=0,根据式定时方式:X=M-要求的定时值/(12/fosc),计算T1的初值如下:X=28-11.0592*106/9600*32*12=253=FDH选用11.0592MHZ晶振的目的就是为了使计算得到的初值为整数,选用定时器T1工作于方式2作为波特率发生器,只需要在初始化编程的时候,将计算得到的初值写入TH1和TL1,当T1溢出时会自动重新装入初值,从而产生精确的波特率真。如果将T1工作于方式0或方式1,则当T1溢出时需要由中断服务程序重装初值,这时中断响应时间和中断服务程序指令的执行时间将导致波特率产生一定的误差。因此采
15、用T1作为串行口的波特率真发生器时,通常都将T1设置为工作方式2。1打开Keil程序,执行菜单命令“Project” “New Project”创建“双单片机串口通信”项目,并选择单片机型号为AT89C51。2执行菜单命令“File”“New”创建文件,输入源程序,保存为“双单片机串口通信.A51”。Group1”将源程序“双单片机串口通信.A51”添加到项目中。4.执行菜单命令“Project”“Options for Target Target 1”,在弹出的对话框中选择“Output”选项卡,选中“Greate HEX File”。Window”窗口中显示没有错误,并创建了“双单片机串口
16、通信.HEX”文件。6.在proteus仿真平台上建立参考图系统,并将程序上载到虚拟芯片上运行。在proteus仿真平台上建立参考图系统,并将程序上载到虚拟芯片上运行。实验结果及分析(附上编写的程序、执行的截屏及分析)发送程序:ORG 0000HLJMP TRSORG 0030HTRS: MOV R7,#10HMOV R0,#40HMOV A,#0TRS1: MOV R0,AINC AINC R0DJNZ R7,TRS1MOV SCON, #90H ;设置串行口工作方式2MOV PCON, #80H ;波特率为FOSC/32MOV R0, #40H ;设置片内数据指针MOV R2, #10H
17、;数据长度送R2LOOP: MOV A, R0 ;取数据送AMOV C, P ;奇偶位送TB8MOV TB8, CMOV SBUF, A ;启动发送MOV P1,ALCALL DELAYWAIT: JBC TI, CONT ;判发送完标志SJMP WAITCONT: JBC RI,RE ;准备接收回送标志SJMP CONTRE: MOV A,SBUF ;接收回送标志CJNE A,#00H,L ;回送标志错误,结束INC R0 ;回送标志正确,继续DJNZ R2, LOOP ;发送16个数据L: SJMP LDELAY: MOV R7,#3DD1: MOV R6,#0FFHDD2: MOV R5
18、,#0FFHDJNZ R5,$DJNZ R6,DD2DJNZ R7,DD1RETEND接收方程序:LJMP REVORG 30HREV: MOV SCON, #90H ;设置串行口工作方式2,允许接收波特率为fosc/32MOV R7,#10H JBC RI, READ ;等待接收数据并清0标志位RISJMP LOOPREAD: MOV A, SBUF ;读入一帧数据JB PSW.0, ONE ;判接收端奇偶位JB RB8, RIGHT ;判发送端奇偶位SJMP RIGHTONE: JB RB8, ERRRIGHT: SWAP A ;接收正确,高低位交换MOV P1,A ;送往P1显示LCAL
19、L DELAY ;延时MOV SBUF,#00H ;回送正确标志DJNZ R7,LOOP ;接收未完,继续ERR: MOV P1,#0FFH ;接收出错,显示FFMOV SBUF,#0FFH ;回送出错标志LL: SJMP LL(1)新建工程双单片机串口通信: (2)在keil中编程后将文件加入到工程中:(3)生成hex文件: (4)在keil软件中编译并运行:(5)在proteus软件中仿真运行:本次实验需要完成两个程序,发送发和接受方,但是并没有要求加入奇偶校验,因此难度不大,从实验结果中可以看出,当发送方数码管显示要发送的数值时,接收方数码管也几乎同时显示出此数值,证明接收无误,实验结果
20、正确。两个单片机都使用串口方式1进行通信,并且必须保证两单片机通信的波特率完全一致,否则接收不到正确的数。通过此次双单片机串口通信实验,我对单片机的各个管脚的功能也有了进一步的认识,熟悉了单片机编程和仿真的连接实验,深刻理解了单片机通信的原理。并加深了自己对单片机功能的理解和运用能力。 A/D 转换实验 2014.12.24 实验成绩:了解ADC0809/ADC0808 的工作原理;掌握单片机与ADC0809/ADC0808接口原理;熟悉CPU中断方式和查询方式读取A/D转换结果的程序设计方法。计算机、keil软件、proteus软件用中断方式编写并调试出一个程序;用查询方式编写并调试出一个程
21、序;用调用显示子程序方法,将转换结果在显示块上显示出来。1. 打开Keil程序,执行菜单命令“Project”“New Project”创建“0808AD转换”项目,并选择单片机型号为AT89C51。2. 执行菜单命令“File”“New”创建文件,输入源程序,保存为“0808AD转换.A51”。3. 在“Project”栏的File项目管理窗口中右击文件组,选择“Add Files to Group Source4. Group1”将源程序“0808AD转换.A51”添加到项目中。5. 执行菜单命令“Project”“Options for Target Target 1”,在弹出的对话框中
22、6. 选择“Output”选项卡,选中“Greate HEX File”。7. 执行菜单命令“Project”“Build Target”,编译源程序。8. Window”窗口中显示没有错误,并创建了“0808AD转换.HEX”文件。9.在proteus仿真平台上建立参考图系统,并将程序上载到虚拟芯片上运行。1.实验源程序如下所示:ORG 0000H ;主程序入口LJMP MAIN MOV R0,#30HMOV R4,#08HMOV R1,#00HMOV R2,#7FHMOV A,#00HMOVX R1,A MOV A,30HJNB P3.3,LPLCALL RDADLP: SJMP LOOP
23、RDAD: MOVX A,R1MOV R0,AINC R1DJNZ R4,LOOP1MOV R0,#30HMOV R1,#00H;LOOP1: RET2.执行的截屏如下:(1)工程的新建图,选择Atmal、AT89C51,在keil中编程及运行与上各图类似,此处不再重复。(2)在keil中编译及运行的结果是:(2)在proteus中仿真运行的结果如下图所示:A/D转换器大致有三类一是双积分A/D转换器优点是精度高抗干扰性好价格便宜但速度慢二是逐次逼近A/D转换器精度速度价格适中三是并行A/D转换器速度快价格也昂贵。实验用的ADC0809属第二类是八位A/D转换器。每采集一次一般需100us。本程序是用延时查询方式读入A/D转换结果,也可以用中断方式读入结果,在中断方式下A/D转换结束后会自动产生EOC信号将其与CPU的外部中断相接,有兴趣的同学可以试
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1