1、单片机实验报告单片机实验报告实验一 数据传送(RAMXRAM)一、实验目的熟悉星研集成环境软件或熟悉Keil C51集成环境软件的使用方法。熟悉MCS51汇编指令,能自己编写简单的程序,掌握数据传输的方法。二、实验内容1、熟悉星研集成环境软件或熟悉Keil C51集成环境软件的安装和使用方法。2、编写程序,实现内外部数据段的传送、校验。三、程序框图四、实验步骤 在内部RAM 30H 3FH中输入数据;使用单步、断点方式调试程序,检测外部数据RAM的1000H 100FH中的内容。熟悉查看特殊功能寄存器、内部数据RAM、外部数据空间的各种方法。五、程序清单;将内部RAM Address1 开始的
2、16个字节送到外部RAM从Address2开始的单元里,再作比较。Address1DATA30HAddress2XDATA1000HORG0000HLJMPSTARORG0100HSTAR:MOVSP,#60HMOVR0,#Address1MOVDPTR,#Address2MOVR7,#10HSTAR1:MOVA,R0;传送MOVXDPTR,AINCR0INCDPTRDJNZR7,STAR1MOVR0,#Address1MOVDPTR,#Address2MOVR7,#10HSTAR2:MOVB,R0;比较MOVXA,DPTRCJNEA,B,STAR3INCR0INCDPTRDJNZR7,STA
3、R2SJMP$;传送正确STAR3:SJMP$;传送错误END实验二 双字节BCD码(十进制数)加法一、实验目的熟悉51汇编指令,学会使用星研集成环境软件,能自己编写简单的程序,熟悉BCD码,了解如何调用系统提供的子程序。二、实验内容从键盘上输入4位被加数、加数,实现双字节BCD码(四位数)的加法,结果显示在数码管上;熟悉使用断点、单步进入、单步、运行到光标处、修改PC指针、全速运行等各种调试手段;熟悉查看特殊功能寄存器、内部数据RAM、外部数据空间的各种方法。三、实验框图四、实验步骤 1、连线说明:D3区 :CLKB2区:2MD3区 :CSA3区:CS5D3区 :A0A3区:A02、在F4区
4、的键盘上输入4位被加数、加数3、结果显示在F4区的数码管上五、程序清单EXTRNCODE(Display8, GetBCDKey)BufferDATA30H;8字节显示缓冲区F1BIT0D1H;PSW.1ORG0000HLJMPSTARTORG0100HSTART:MOVSP,#60HCLRF1;先清除显示,再接收键输入START1:MOVR0,#bufferMOVA,#4;按键次数LCALLGetBCDKey;得到双字节十进制数(被加数)SETBF1;接收到第一个键,才清除显示MOVR0,#buffer+4MOVA,#4;按键次数LCALLGetBCDKey;得到双字节十进制数(加数)MOV
5、A,buffer+1ADDA,buffer+5DAAMOVbuffer+5,AMOVA,bufferADDCA,buffer+4DAAMOVbuffer+4,ACLRARLCADisplay:PUSHACC;显示结果MOVR0,#bufferMOVA,buffer+5;低位ACALLB1toB2;压缩BCD码转换成非压缩BCD码MOVA,buffer+4;高位ACALLB1toB2POPACC;进位ACALLB1toB2MOVR0,#10H;最高二位消隐INCR0MOVR0,#10HMOVR0,#buffer+5MOVR7,#5ACALLBlackDisplay;将高位0消隐MOVR0,#bu
6、fferLCALLDisplay8SJMPSTART1;将一个字节压缩BCD码转换成二个字节非压缩BCD码B1toB2:PUSHACCANLA,#0FHMOVR0,AINCR0POPACCANLA,#0F0HSWAPAMOVR0,AINCR0RETBlackDisplay:MOVA,R0;将高位0消隐JNZExitMOVA,#10HMOVR0,ADECR0DJNZR7,BlackDisplayExit:RETEND实验三 双字节BCD码(十进制数)减法一、实验目的熟悉51汇编指令,学会使用星研集成环境软件,掌握汇编语言的设计和调试方法。能看懂程序流程框图,能自己设计程序,熟悉BCD码、补码,了
7、解如何调用系统提供的子程序。二、实验内容从键盘上输入4位被减数、减数,实现双字节BCD码(四位数)的减法,结果显示在数码管上;进一步熟悉使用断点、单步进入、单步、运行到光标处、修改PC指针、全速运行等各种调试手段;熟悉查看特殊功能寄存器、内部数据RAM、外部数据空间的各种方法。三、程序框图四、实验步骤 1、连线说明:D3区 :CLKB2区:2MD3区 :CSA3区:CS5D3区 :A0A3区:A02、在F4区的键盘上输入4位被减数、减数3、结果显示在F4区的数码管上五、程序清单 EXTRNCODE(Display8, GetBCDKey)BufferDATA30H;8字节显示缓冲区F1BIT0
8、D1H;PSW.1ORG0000HLJMPSTARTORG0100HSTART:MOVSP,#60HCLRF1;先清除显示,再接收键输入START1:MOVR0,#bufferMOVA,#4;按键次数LCALLGetBCDKey;得到双字节十进制数(被减数)SETBF1;接收到第一个键,才清除显示MOVR0,#buffer+4MOVA,#4;按键次数LCALLGetBCDKey;得到双字节十进制数(减数)MOVA,#9AHCLRCSUBBA,buffer+5MOVbuffer+5,AMOVA,#99HCLRCSUBBA,buffer+4MOVbuffer+4,A;减数取补MOVA,buffer
9、+1ADDA,buffer+5DAAMOVbuffer+5,AMOVA,bufferADDCA,buffer+4DAAMOVbuffer+4,AMOVF0,C;借位标志JCDisplayMOVA,#9AHSUBBA,buffer+5MOVbuffer+5,AMOVA,#99HSUBBA,buffer+4XCHA,buffer+5ADDA,#00HDAAXCHA,buffer+5ADDCA,#00HDAAMOVbuffer+4,ADisplay:MOVR0,#buffer;显示结果MOVA,buffer+5;低位ACALLB1toB2;压缩BCD码转换成非压缩BCD码MOVA,buffer+4;
10、高位ACALLB1toB2MOVR0,#10H;最高四位消隐INCR0MOVR0,#10HINCR0MOVR0,#10HINCR0MOVR0,#10HMOVR0,#buffer+3MOVR7,#3ACALLBlackDisplay;将高位0消隐MOVR0,#bufferLCALLDisplay8SJMPSTART1BlackDisplay:MOVA,R0;将高位0消隐JNZExitMOVA,#10HMOVR0,ADECR0DJNZR7,BlackDisplayExit:JBF0,Exit1INCR0MOVR0,#11H;负数标志Exit1:RETB1toB2:PUSHACCANLA,#0FHM
11、OVR0,AINCR0POPACCANLA,#0F0HSWAPAMOVR0,AINCR0RETBlackDisplay:MOVA,R0JNZExitMOVA,#10HMOVR0,ADECR0DJNZR7,BlackDisplayExit:RETEND实验四 四字节十六进制数转十进制数一、实验目的进一步熟悉51汇编指令,了解十六进制数转十进制数的方法。二、实验内容从键盘上输入8位十六进制数,实现四字节十六进制数转8位十进制数,并在数码管上显示。注意输入数据必须在00000000H05F00000H范围,否则,结果超出8位十进制数,无法正确显示。三、程序框图四、实验步骤 1、连线说明:D3区 :C
12、LKB2区:2MD3区 :CSA3区:CS5D3区 :A0A3区:A02、在F4区的键盘上输入8位十六进制数3、结果显示在F4区的数码管上五、程序清单 EXTRNCODE(Display8, GetKey)BufferDATA30H;8字节显示缓冲区F1BIT0D1H;PSW.1ORG0000HLJMPSTARTORG0100HSTART:MOVSP,#60HCLRF1;先清除显示,再接收键输入START1:MOVR0,#bufferMOVA,#8;按键次数LCALLGetKey;得到4字节十六进制数SETBF1;接收到第一个键后,才清除显示MOVR0,bufferMOVR1,buffer+1
13、MOVR2,buffer+2MOVR3,buffer+3ACALLB4toD4;转换成十进制数Display:MOVR0,#buffer;显示结果MOVA,R7;低位ACALLB1toB2;压缩BCD码转换成非压缩BCD码MOVA,R6ACALLB1toB2MOVA, R5ACALLB1toB2MOVA,R4;高位ACALLB1toB2MOVR0,#buffer+7MOVR7,#7ACALLBlackDisplay;将高位0消隐MOVR0,#bufferLCALLDisplay8SJMPSTART1;四字节十六进制数转十进制数:R0R1R2R3为十六进制,R4R5R6R7为压缩BCD码B4to
14、D4: CLRAMOVR4,AMOVR5,AMOVR6,AMOVR7,AMOVB,#32LOOP:CLRCMOVA,R3RLCAMOVR3,AMOVA,R2RLCAMOVR2,AMOVA,R1RLCAMOVR1,AMOVA,R0RLCAMOVR0,AMOVA,R7ADDCA,R7DAAMOVR7,AMOVA,R6ADDCA,R6DAAMOVR6,AMOVA,R5ADDCA,R5DAAMOVR5,AMOVA,R4ADDCA,R4DAAMOVR4,ADJNZB,LOOPRETB1toB2:PUSHACCANLA,#0FHMOVR0,AINCR0POPACCANLA,#0F0HSWAPAMOVR0,
15、AINCR0RETBlackDisplay:MOVA,R0;将高位0消隐JNZExitMOVA,#10HMOVR0,ADECR0DJNZR7,BlackDisplayExit:RETEND实验五 双字节BCD码(十进制数)乘法一、实验目的进一步熟悉51汇编指令,掌握汇编语言的设计和调试方法。根据程序流程图,自己设计程序,了解如何调用系统提供的子程序。二、实验内容从键盘上输入4位被乘数、乘数,实现四位十进制数的乘法,结果显示在数码管上。三、程序框图四、实验步骤 1、连线说明:D3区 :CLKB2区:2MD3区 :CSA3区:CS5D3区 :A0A3区:A02、在F4区的键盘上输入4位被乘数、乘数
16、3、结果显示在F4区的数码管上五、程序清单 EXTRNCODE(Display8, GetBCDKey)BufferDATA30H;8字节显示缓冲区F1BIT0D1H;PSW.1ORG0000HLJMPSTARTORG0100HSTART:MOVSP,#60HCLRF1;先清除显示,再接收键输入START1:MOVR0,#bufferMOVA,#4;按键次数LCALLGetBCDKey;得到双字节十进制数(被乘数)MOVR0,#bufferACALLD4toB2;转换成二进制数PUSH02HPUSH03HSETBF1;接收到第一个键,才清除显示MOVR0,#bufferMOVA,#4;按键次数
17、LCALLGetBCDKey;得到双字节十进制数(乘数)MOVR0,#bufferACALLD4toB2;转换成二进制数POP01HPOP00HACALLWordMul;(R0R1)*(R2R3)=R0R1R2R3ACALLB4toD4;转换成十进制数Display:MOVR0,#buffer;显示结果MOVA,R7;低位ACALLB1toB2;压缩BCD码转换成非压缩BCD码MOVA,R6ACALLB1toB2MOVA, R5ACALLB1toB2MOVA,R4;高位ACALLB1toB2MOVR0,#buffer+7MOVR7,#7ACALLBlackDisplay;将高位0消隐MOVR0
18、,#bufferLCALLDisplay8SJMPSTART1;双字节十六进制数乘以双字节十六进制数子程序WordMul:MOVA,R3; (R0)(R1)MOVB,R1; (R2)(R3)MULAB;-XCHA,R3; (R3R1H)(R3R1L)MOVR7,B; (R3R0H)(R3R0L)MOVB,R0; (R2R1H)(R2R1L)MULAB;(R2R0H)(R2R0L)ADDA,R7;-MOVR7,A; R0 R1 R2 R3CLRAADDCA,BXCHA,R1MOVB,R2MULABADDA,R7XCHA,R2PUSHACCMOVA,BADDCA,R1MOVR1,ACLRARLCA
19、XCHA,R0POPBMULABADDA,R1MOVR1,AMOVA,R0ADDCA,BMOVR0,ARET;双字节十进制数转二进制数 ,R0-指向双字节十进制数,结果在R2R3中D4toB2:MOVA,R0ANLA,#0FHXCHA,R0ANLA,#0F0HSWAPAMOVB,#10MULABADDA,R0INCR0MOVB,#10MULABMOVR2,BMOVR3,AMOVA,R0ANLA,#0FHXCHA,R0ANLA,#0F0HSWAPAADDA,R3XCHA,R2ADDCA,#0MOVB,#10MULABXCHA,R2MOVB,#10MULABADDA,R0MOVR3,AMOVA,R2ADDCA,BMOVR2,ARETB1toB2:PUSHACCANLA,#0FHMOVR0,AINCR0POPACCANLA,#0F0HSWAPAMOVR0,AINCR0RETBlackDisplay:MOVA,R0;将高位0消隐JNZExitMOVA,#10HMOVR0,ADECR0DJNZR7,BlackDisplayB4toD4: CLRAMOVR4,AMOVR5,AMOVR6,AMOVR7,AMOVB,#32
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1