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

下载本文档

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

文档简介

单片机实验报告学院:信息工程学院专业:电子信息工程班级:学号:姓名:实验一存储器块清零一、实验要求1.指定存储器中某块的起始地址和长度,要求能将其内容清零。二、实验目的1.掌握存储器读写方法2.了解存储器的块操作方法三、实验说明通过本实验,学生可以了解单片机读写存储器的读写方法,同时也可以了解单片机编程,调试方法。如何将存储器块的内容置成某固定值(例全填充为0FFH)?请学生修改程序,完成此操作。程序框图程序设计:MOVDPTR,#1000H;MOVB,#64H;CLRALOOP:MOVX@DPTR,A;INCDPTR;DJNZB,LOOP;LJMP$END遇到的问题及解决方法问题:直接给存储器清零解决方法:在给存储器赋值时只有一条语句即:MOVX@DPTR,A不存在MOVX@DPTR,#data所以要实现给存储器清零则需要首先将累加器A清零,然后通过A给存储器清零。实验二内存块移动一、实验要求将指定源地址和长度的存储块移到指定目标位置二、实验目的1.了解内存的移动方法。2.加深对存储器读写的认识。三、实验说明块移动是计算机常用操作之一,多用于大量的数据复制和图象操作。本程序是给出起始地址,用地址加一方法移动块,请思考给出块结束地址,用地址减一方法移动块的算法。另外,若源块地址和目标块地址有重叠,该如何避免?程序框图程序:MOVDPTR,#1000H;MOVB,#64H;MOVA,#09HLOOP:MOVX@DPTR,A;INCDPTR;DJNZB,LOOP;MOVR0,#10HMOVR1,#00HMOVR2,#30HMOVR3,#00HMOVB,#64HLOOP1:MOVDPH,R0MOVDPL,R1MOVXA,@DPTRMOVDPH,R2MOVDPL,R3MOVX@DPTR,ACJNER1,#0FFH,Goon1INCR0Goon1:INCR1CJNER3,#0FFH,Goon2INCR2Goon2:INCR3DJNZB,LOOP1LJMP$END遇到的问题及解决方法。问题:使用一个8位寄存器,若移动的数据超出256个会出现数据丢失。解决方法:如果是一个寄存器,如:INCR1一旦R1为0FFH再增加1后就会清零从新由1000H处移动数据而1100H后的数据就会丢失。所以增加一个8位寄存器后,依然如上例当R1加到0FFH后将高8位地址加1即R0为11H就实现了1100H后的数据移动。

硬件实验三外部中断实验一、实验要求用单次脉冲申请中断,在中断处理程序中对输出信号进行反转。二、实验目的1、学习外部中断技术的基本使用方法。2、学习中断处理程序的编程方法。三、实验电路及连线四、实验说实明中断服务程序的关键是:1.保护进入中断时的状态,并在退出中断之前恢复进入时的状态。2.必须在中断程序中设定是否允许中断重入,即设置EXO位。3.对于80C196,要选择相应的中断源,并设置中断屏蔽寄存器的相应位。本例中使用了INTO中断(80C196为EXTINT中断),一般中断程序进入时应保护PSW,ACC以及中断程序使用但非其专用的寄存器。本例的中断程序保护了PSW,ACC等三个寄存器并且在退出前恢复了这三个寄存器。另外中断程序中涉及到关键数据的设置时应关中断,即设置时不允许重入。本例中没有涉及这种情况。INTO(P32)端(80C196为EINT端)接单次脉冲发生器。P1.0接LED灯,以查看信号反转.实验框图程序:ORG0000HLJMPMAINORG0003HLJMPINTORG0100HMAIN:SETBEX0SETBIT0SETBEAHERE:AJMPHEREINT:CLREAPUSHPSWPUSHAccSETBEACPLP1.0CLREAPOPAccPOPPSWSETBEARETIEND遇到的问题及解决方法问题:等待中断指令混淆如将LJMP$中的$与AJMP组成AJMP$.解决方法:使用LJMP$或者HERE:AJMPHERE等规定的指令。

硬件实验四定时器实验一、实验要求用CPU内部定时器中断方式计时,实现每一秒钟输出状态发生一次反转.二、实验目的1、学习8031内部计数器的使用和编程方法。2、进一步掌握中断处理程序的编程方法。三、实验电路及连线四、实验说明1、关于内部计数器的编程主要是定时常数的设置和有关控制寄存器的设置。内部计数器在单片机中主要有定时器和计数器两个功能。本实验使用的是定时器。2、定时器有关的寄存器有工作方式寄存器TMOD和控制寄存器TCON。TMOD用于设置定时器/计数器的工作方式0-3,并确定用于定时还是用于计数。TCON主要功能是为定时器在溢出时设定标志位,并控制定时器的运行或停止等。3、内部计数器用作定时器时,是对机器周期计数。每个机器周期的长度是12个振荡器周期。因为实验系统的晶振是6MHZ,本程序工作于方式2,即8位自动重装方式定时器,定时器100us中断一次,所以定时常数的设置可按以下方法计算:机器周期=12÷6MHZ=2uS(256-定时常数)×2uS=100us定时常数=206.然后对100us中断次数计数10000次,就是1秒钟.4、在例程的中断服务程序中,因为中断定时常数的设置对中断程序的运行起到关键作用,所以在置数前要先关对应的中断,置数完之后再打开相应的中断。5、对于80C196,与定时器有关的寄存器为IOC1.2和INT-MASK。IOC1.2为定时器1溢出中断允许/禁止位。INT-MASK的第0位为定时器溢出屏蔽位。6、对于80C196,在设置中断定时常数时,要注意先设置窗口寄存器WSR,设置完常数后,再恢复原WSR值。实验框图定时1s:ORG0000HLJMPMAINORG000BHLJMPIT0PORG1000HMAIN:MOVSP,#60HMOVR1,#32HMOVR2,#28HMOVTMOD,#02HMOVTH0,#06HMOVTL0,#06HSETBTR0SETBET0SETBEAHERE:SJMPHEREIT0P:DJNZR1,LOOPMOVR1,#32HDJNZR2,LOOPCLREAPUSHPSWPUSHAccSETBEACPLP1.0CLREAPOPAccPOPPSWSETBEALOOP:RETI遇到的问题及解决方法1.问题:定时器工作在方式一解决方法:工作在方式一不能自动重新装载定时器,需要用软件来从新设置初值。改正后使用方式二,可以实现自动从新装载定时器。问题:定时一秒误差比较大解决方法:可以尽量使定时器循环的次数减少,如将每次定时器计时100us(计数50次T0初值为0CEH,循环10000次)改为每次计时500us(计数250次T0初值为06H循环2000次)。

硬件实验五D/A转换实验一、实验要求利用DAC0832,编制程序产生锯齿波、三角波、正弦波。三种波轮流显示,用示波器观看。二、实验目的1、了解D/A转换的基本原理。2、了解D/A转换芯片0832的性能及编程方法。3、了解单片机系统中扩展D/A转换的基本方法。三、实验电路及连线用电压表或示波器探头接-5V~+5V输出,观察显示电压或波形。四、实验说明1、D/A转换是把数字量转换成模拟量的变换,实验台上D/A电路输出的是模拟电压信号。要实现实验要求,比较简单的方法是产生三个波形的表格,然后通过查表来实现波形显示。2、产生锯齿波和三角波的表格只需由数字量的增减来控制,同时要注意三角波要分段来产生。要产生正弦波,较简单的方法是造一张正弦数字量表。即查函数表得到的值转换成十六进制数填表。D/A转换取值范围为一个周期,采样点越多,精度越高些。本例采用的采样点为256点/周期。3、8位D/A转换器的输入数据与输出电压的关系为U(0∽-5V)=Uref/256×NU(-5V∽+5V)=2·Uref/256×N-5V(这里Uref为+5V)实验框图程序:ORG0000HSTART:MOVR0,#0FEHMOVA,#00HLOOP:MOVX@R0,AINCACJNEA,#00H,LOOPUP:MOVX@R0,AINCAJNZUPDOWN:DECAMOVX@R0,AJNZDOWNLOOP1:MOVR2,#02HMOVR4,#0FFHSJMPLOOP3LOOP2:MOV@R0,AINCR2DJNZR4,LOOP3AJMPSTARTLOOP3:MOVA,R2ADDA,#02HMOVCA,@A+PCSJMPLOOP2TAB:DB

80H,83H,86H,89H,8DH,90H,93H,96H

DB

99H,9CH,9FH,0A2H,0A5H,0A8H,0ABH,0AEH

DB

0B1H,0B4H,0B7H,0BAH,0BCH,0BFH,0C2H,0C5H

DB

0C7H,0CAH,0CCH,0CFH,0D1H,0D4H,0D6H,0D8H

DB

0DAH,0DDH,0DFH,0E1H,0E3H,0E5H,0E7H,0E9H

DB

0EAH,0ECH,0EEH,0EFH,0F1H,0F2H,0F4H,0F5H

DB

0F6H,0F7H,0F8H,0F9H,0FAH,0FBH,0FCH,0FDH

DB

0FDH,0FEH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH

DB

0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FEH,0FDH

DB

0FDH,0FCH,0FBH,0FAH,0F9H,0F8H,0F7H,0F6H

DB

0F5H,0F4H,0F2H,0F1H,0EFH,0EEH,0ECH,0EAH

DB

0E9H,0E7H,0E5H,0E3H,0E1H,0DEH,0DDH,0DAH

DB

0D8H,0D6H,0D4H,0D1H,0CFH,0CCH,0CAH,0C7H

DB

0C5H,0C2H,0BFH,0BCH,0BAH,0B7H,0B4H,0B1H

DB

0AEH,0ABH,0A8H,0A5H,0A2H,9FH,9CH,99H

DB

96H,93H,90H,8DH,89H,86H,83H,80H

DB

80H,7CH,79H,76H,72H,6FH,6CH,69H

DB

66H,63H,60H,5DH,5AH,57H,55H,51H

DB

4EH,4CH,48H,45H,43H,40H,3DH,3AHDB

38H,35H,33H,30H,2EH,2BH,29H,27H

DB

25H,22H,20H,1EH,1CH,1AH,18H,16H

DB

15H,13H,11H,10H,0EH,0DH,0BH,0AH

DB

09H,8H,7H,6H,5H,4H,3H,2H

DB

02H,1H,0H,0H,0H,0H,0H,0H

DB

00H,0H,0H,0H,0H,0H,1H,2H

DB

02H,3H,4H,5H,6H,7H,8H,9H

DB

0AH,0BH,0DH,0EH,10H,11H,13H,15H

DB

16H,18H,1AH,1CH,1EH,20H,22H,25H

DB

27H,29H,2BH,2EH,30H,33H,35H,38H

DB

3AH,3DH,40H,43H,45H,48H,4CH,4EH

DB

51H,51H,55H,57H,5AH,5DH,60H,63H

DB

69H,6CH,6FH,72H,76H,79H,7CH,80H遇到的问题及解决方法问题:转换出的三种波形出现叠加现象。解决方法:原程序:MOVR0,#0FEHMOVR7,#00HMOVA,#00HLOOP:MOVX@R0,AINCACJNEA,#00H,LOOPDJNZR7,LOOPUP:MOVX@R0,AINCAJNZUPDOWN:DECAMOVX@R0,AJNZDOWNDJNZR7,UPLOOP1:MOVR2,#02HMOVR4,#0FFHSJMPLOOP3LOOP2:MOV@R0,AINCR2DJNZR4,LOOP3DJNZR7,LOOP1RETLOOP3:MOVA,R2ADDA,#02HMOVCA,@A+PCSJMPLOOP2分析此程序可以发现产生的三种波形方式为分时显示即先产生256个锯齿波然后产生256个三角波最后产生256个正弦波。理论上可以显示但实际上各种波形显示的时间非常短,上个波形的余晖尚未消失下一个的波形就显示出来以至于出现波形叠加。程序应该改为将三种波同时显示然后循环,即将锯齿波、三角波、正弦波三个波连起来作为一个波,周期为三个波的周期之和。改正后的程序:LOOP:MOVX@R0,AINCACJNEA,#00H,LOOPUP:MOVX@R0,AINCAJNZUPDOWN:DECAMOVX@R0,AJNZDOWNLOOP1:MOVR2,#02HMOVR4,#0FFHSJMPLOOP3LOOP2:MOV@R0,AINCR2DJNZR4,LOOP3AJMPSTARTLOOP3:MOVA,R2ADDA,#02HMOVCA,@A+PCSJMPLOOP2

硬件实验六外部中断(急救车与交通灯)一、实验要求本实验模拟交通信号灯控制,一般情况下正常显示,有急救车到达时,两个方向交通信号灯全红,以便让急救车通过。设急救车通过路口时间为10秒,急救车通过后,交通恢复正常,本实验用单次脉冲申请外部中断,表示有急救车通过。二、实验目的1、学习外部中断技术的基本使用方法。2、学习中断处理程序的编程方法。三、实验电路及连线四、实验说明中断服务程序的关键是:1、保护进入中断时的状态,并在退出中断之前恢复进入时的状态。2、必须在中断程序中设定是否允许中断重入,即设置EXO位。本例中使用了INTO中断(80C196为EINT中断),一般中断程序进入时应保护PSW,ACC以及中断程序使用但非其专用的寄存器。本例的中断程序保护了PSW,ACC等三个寄存器并且在退出前恢复了这三个寄存器。另外中断程序中涉及到关键数据的设置时应关中断,即设置时不允许重入。本例中没有涉及这种情况。对于8051CPU外部中断由INTO(P32)端接入。对于80C196CPU外部中断由EINT接入。中断信号由单次脉冲发生器产生。对中断的处理可参见硬件实验十一本实验提供了用8255的PA口和用单片机的I/O端口控制交通信号灯两种方法,其中196用8255,51用P1口,可以互相参考51和196的程序。实验框图程序:LED1EQUP1.0LED2EQUP1.1LED3EQUP1.2LED4EQUP1.3LED5EQUP1.4LED6EQUP1.5ORG0000HLJMPDIRORG0003HLJMPINT0ORG0100HMAIN:SETBLED1SETBLED4CLRLED2CLRLED3CLRLED5CLRLED6SETBEASETBEX0SETBIT0LOOP1:CLRLED6CLRLED1SETBLED2SETBLED4LCALLDL3sLOOP2:MOVR7,#02HCLRLED2SETBLED3LCALLDL1sLOOP21:CPLLED3LCALLDL1sDJNZR7,LOOP21LOOP3:CLRLED3CLRLED4SETBLED1SETBLED5LCALLDL3sLOOP4:MOVR7,#02HCLRLED5SETBLED6LCALLDL1sLOOP41:CPLLED6LCALLDL1sDJNZR7,LOOP41LJMPLOOP1INT0:CLREAMOVAcc,P1PUSHR1PUSHR2PUSHR3PUSHR4PUSHAccSETBEASETBLED1SETBLED4CLRLED2CLRLED3CLRLED5CLRLED6LCALLDL1sCLREAPOPAccPOPR1POPR2POPR3POPR4MOVP1,AccSETBEARETIDL3s:MOVR1,#250MOVR2,#200MOVR3,#30DL31:DJNZR1,DL31MOVR1,#250DL32:DJNZR2,DL31MOVR2,#200DL33:DJNZR3,DL31MOVR3,#30RETDL1s:MOVR1,#250MOVR2,#200MOVR4,#10DL11:DJNZR1,DL11MOVR1,#250DL12:DJNZR2,DL11MOVR2,#200DL13:DJNZR4,DL11MOVR4,#10RET遇到的问题及解决方法问题:中断返回时无法恢复中断前的状态(如:中断前南北绿灯刚好亮了一秒这时中断来了,待中断执行完后恢复之前状态沿着中断前南北绿灯亮一秒继续执行)。解决方法:按之前的程序MOVAcc,P1;PUSHAcc只保护中断前的状态并没有保护各状态执行了多长时间。所以改正后应增加对各寄存器状态也保护起来即下列程序PUSHR1PUSHR2PUSHR3PUSHR4

硬件实验七八段数码管显示一、实验要求利用实验仪提供的显示电路,动态显示一行数据.二、实验目的1.了解数码管动态显示的原理。2.了解用总线方式控制数码管显示三、实验线路及连线这里只是显示草图,详细原理参见图1四、实验说明1.本实验仪提供了6位8段码LED显示电路,学生只要按地址输出相应数据,就可以实现对显示器的控制。显示共有6位,用动态方式显示。8位段码、6位位码是由两片74LS374输出。位码经MC1413或ULN2003倒相驱动后,选择相应显示位。本实验仪中8位段码输出地址为0X004H,位码输出地址为0X002H。此处X是由KEY/LEDCS决定,参见地址译码。做键盘和LED实验时,需将KEY/LEDCS接到相应的地址译码上。以便用相应的地址来访问。例如,将KEY/LEDCS接到CS0上,则段码地址为08004H,位码地址为08002H。程序框图程序:ORG0000HLJMPMAINORG0003HMAIN:MOVA,#05HMOV79H,AMOVA,#04HMOV74H,AMOVA,#03HMOV7BH,AMOVA,#02HMOV7CH,AMOVA,#01HMOV7DH,AMOVA,#00HMOV7EH,ADIR:MOVR0,#79HMOVR3,#01HMOVA,R3LD0:MOVDPTR,#8002HMOVX@DPTR,AINCDPTRINCDPTRMOVA,@R0ADDA,#0FHMOVCA,@A+PCDIR1:MOVX@DPTR,AACALLDL1msINCR0MOVA,R3JBAcc.5,LD1RLAMOVR3,AAJMPLD0LD1:LJMPMAINTAB:DB3FH,06H,5BH,4FH,66H,6DHDB7DH,07H,7FH,6FH,77H,7CHDB39H,5EH,79H,71H,73H,3EHDB31H,6EH,1CH,23H,40H,03HDB18H,00DL1ms:MOVR7,#04HDL:MOVR6,#7DHDL6:DJNZR6,DL6DJNZR7,DLRETEND遇到的问题及解决方法1.问题:错误使用查表指令MOVCA,@A+DPTR解决方法:查表指令有两种上面一种和MOVCA,@A+PC,如果使用第一种必须在DPTR未被使用,一旦使用需要在查表以前保护DPTR,这样会增加程序的复杂度所以改用第二种查表方法只需在前面加一条偏移量指令即可。2.问题:无法显示数据解决方法:原程序:DIR:MOVR0,#79HMOVR3,#01HMOVA,R3LD0:MOVDPTR,#8002HMOVX@DPTR,AINCDPTRINCDPTRMOVA,@R0ADDA,#0FHMOVCA,@A+PCDIR1:MOVX@DPTR,AACALLDL1msINCR0MOVA,R3JBAcc.5,LD1RLAMOVR3,AAJMPLD0LD1:LJMPMAINTAB:DB3FH,06H,5BH,4FH,66H,6DHDB7DH,07H,7FH,6FH,77H,7CHDB39H,5EH,79H,71H,73H,3EHDB31H,6EH,1CH,23H,40H,03HDB18H,00DL1ms:MOVR7,#04HDL:MOVR6,#7DHDL6:DJNZR6,DL6DJNZR7,DLRETEND由原程序可知,程序中并没有设置要显示的数据。即R0中没有内容,所以需要在原程序前给R0赋值程序如下增加程序:ORG0000HLJMPMAINORG0003HMAIN:MOVA,#05HMOV79H,AMOVA,#04HMOV74H,AMOVA,#03HMOV7BH,AMOVA,#02HMOV7CH,AMOVA,#01HMOV7DH,AMOVA,#00HMOV7EH,A

硬件实验八键盘扫描显示实验一、实验要求在上一个实验的基础上,利用实验仪提供的键盘扫描电路和显示电路,做一个扫描键盘和数码显示实验,把按键输入的键码在六位数码管上显示出来。实验程序可分成三个模块。①键输入模块:扫描键盘、读取一次键盘并将键值存入键值缓冲单元。②显示模块:将显示单元的内容在显示器上动态显示。③主程序:调用键输入模块和显示模块。二、实验目的1、掌握键盘和显示器的接口方法和编程方法。2、掌握键盘扫描和LED八段码显示器的工作原理。三、实验电路及连线这里只是键盘草图,详细原理参见图1四、实验说明本实验仪提供了一个6×4的小键盘,向列扫描码地址(0X002H)逐列输出低电平,然后从行码地址(0X001H)读回。如果有键按下,则相应行的值应为低,如果无键按下,由于上拉的作用,行码为高。这样就可以通过输出的列码和读取的行码来判断按下的是什么键。在判断有键按下后,要有一定的延时,防止键盘抖动。地址中的X是由KEY/LEDCS决定,参见地址译码。做键盘和LED实验时,需将KEY/LEDCS接到相应的地址译码上。以便用相应的地址来访问。例如将KEY/LEDCS信号接CS0上,则列扫描地址为08002H,行码地址为08001H。列扫描码还可以分时用作LED的位选通信号。实验框图程序:ORG0000HLJMPMAINORG0030HMAIN:MOVSP,#60H;第一条指令入口地址KEYI:ACALLKS1;调用判定有无键闭合子程序KS1JNZLK1;有键闭合,跳转至LK1NI:ACALLDIR;无键闭合,调用显示子程校,延迟6毫秒,跳转至KEYIAJMPKEYILK1:ACALLDIR;可能有键闭合,延迟12毫秒,软件去抖动ACALLDIR;ACALLKS1;调用判定有无闭合子程序JNZLK2;经去抖动,判定键确实闭合,跳转至LK2去处理ACALLDIR;调用显示子程序延迟6毫秒AJMPKEYI;是抖动引起,跳转至KEYILK2:MOVR2,#0FEH;定义R2列选码MOVR4,#00H;定义R4列号计数器LK4:MOVDPTR,#08002H;列选码入口地址MOVA,R2MOVX@DPTR,A;送入列选码MOVDPTR,#08001H;行码地址MOVXA,@DPTR;读行码JBACC.0,LONE;0行线为高电平,无键闭合,跳转,转判1行MOVA,#00H;0行首建号AJMPLKP;跳转,计算键号LONE:JBACC.1,LTWO;1行线为高电平,无键闭合,跳转,转判2行MOVA,#06H;1行首建号AJMPLKP;跳转,计算键号LTWO:JBACC.2,LTHR;2行线为高电平,无键闭合,跳转,转判3行MOVA,#0CH;2行首建号AJMPLKP;跳转,计算键号LTHR:JBACC.3,NEXT;3行线为高电平,无键闭合,跳转MOVA,#12H;3行首建号LKP:ADDA,R4;计算建号,即行首建号加列号PUSHA;键号进栈保护LK3:ACALLDIR;调用显示子程序延迟6毫秒ACALLDIRACALLKS1;调用判定有无键闭合子程序6毫秒JNZLK3;判定键是否释放,未释放,则循环POPA;键已释放,建号出栈MOVB,#0AH;赋值DIVAB;除法运算MOV5AH,AMOVA,BMOV59H,A;置缓冲器指针初值RET;返回NEXT:INCR4;列计数器加1MOVA,R2;判定是否已扫到最后一列JNBACC.5,KND;若扫到最后一列,跳转,重新键盘扫描RLA;未扫到最后一列,位选码左移一位MOVR2,AAJMPLK4KND:AJMPKEYIKS1:MOVDPTR,#08002H;判定有无键闭合子程序MOVA,#00H;列线全0MOVX@DPTR,AMOVDPTR,#08001H

温馨提示

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

评论

0/150

提交评论