单片机实验报告实验一数据传送(RAM–>XRAM)一、实验目的熟悉星研集成环境软件或熟悉Keil C51集成环境软件的使用方法。
熟悉MCS51汇编指令,能自己编写简单的程序,掌握数据传输的方法。
二、实验内容1、熟悉星研集成环境软件或熟悉Keil C51集成环境软件的安装和使用方法。
2、编写程序,实现内外部数据段的传送、校验。
三、程序框图数据传送程序框图四、实验步骤在内部RAM 30H ~3FH中输入数据;使用单步、断点方式调试程序,检测外部数据RAM 的1000H ~100FH中的内容。
熟悉查看特殊功能寄存器、内部数据RAM、外部数据空间的各种方法。
五、程序清单;将内部RAM Address1 开始的16个字节送到外部RAM从Address2开始的单元里,再作比较。
Address1 DATA 30HAddress2 XDATA 1000HORG 0000HLJMP STARORG 0100HSTAR: MOV SP,#60HMOV R0,#Address1MOV DPTR,#Address2MOV R7,#10HSTAR1: MOV A,@R0 ;传送MOVX @DPTR,AINC R0INC DPTRDJNZ R7,STAR1MOV R0,#Address1MOV DPTR,#Address2MOV R7,#10HSTAR2: MOV B,@R0 ;比较MOVX A,@DPTRCJNE A,B,STAR3INC R0INC DPTRDJNZ R7,STAR2SJMP $ ;传送正确STAR3: SJMP $ ;传送错误END实验二双字节BCD码(十进制数)加法一、实验目的熟悉51汇编指令,学会使用星研集成环境软件,能自己编写简单的程序,熟悉BCD码,了解如何调用系统提供的子程序。
二、实验内容从键盘上输入4位被加数、加数,实现双字节BCD码(四位数)的加法,结果显示在数码管上;熟悉使用断点、单步进入、单步、运行到光标处、修改PC指针、全速运行等各种调试手段;熟悉查看特殊功能寄存器、内部数据RAM、外部数据空间的各种方法。
三、实验框图双字节BCD加法程序框图四、实验步骤1、连线说明:2、在F43、结果显示在F4区的数码管上五、程序清单EXTRN CODE(Display8, GetBCDKey)Buffer DATA 30H ;8字节显示缓冲区F1 BIT 0D1H ;PSW.1ORG 0000HLJMP STARTORG 0100HSTART: MOV SP,#60HCLR F1 ;先清除显示,再接收键输入START1: MOV R0,#bufferMOV A,#4 ;按键次数LCALL GetBCDKey ;得到双字节十进制数(被加数)SETB F1 ;接收到第一个键,才清除显示MOV R0,#buffer+4MOV A,#4 ;按键次数LCALL GetBCDKey ;得到双字节十进制数(加数)MOV A,buffer+1ADD A,buffer+5DA AMOV buffer+5,AMOV A,bufferADDC A,buffer+4DA AMOV buffer+4,ACLR ARLC ADisplay: PUSH ACC ;显示结果MOV R0,#bufferMOV A,buffer+5 ;低位ACALL B1toB2 ;压缩BCD码转换成非压缩BCD码MOV A,buffer+4 ;高位ACALL B1toB2POP ACC ;进位ACALL B1toB2MOV @R0,#10H ;最高二位消隐INC R0MOV @R0,#10HMOV R0,#buffer+5MOV R7,#5ACALL BlackDisplay ;将高位0消隐MOV R0,#bufferLCALL Display8SJMP START1;将一个字节压缩BCD码转换成二个字节非压缩BCD码B1toB2: PUSH ACCANL A,#0FHMOV @R0,AINC R0POP ACCANL A,#0F0HSWAP AMOV @R0,AINC R0RETBlackDisplay: MOV A,@R0 ;将高位0消隐JNZ ExitMOV A,#10HMOV @R0,ADEC R0DJNZ R7,BlackDisplay Exit: RETEND实验三 双字节BCD 码(十进制数)减法一、实验目的熟悉51汇编指令,学会使用星研集成环境软件,掌握汇编语言的设计和调试方法。
能看懂程序流程框图,能自己设计程序,熟悉BCD 码、补码,了解如何调用系统提供的子程序。
二、实验内容从键盘上输入4位被减数、减数,实现双字节BCD 码(四位数)的减法,结果显示在数码管上;进一步熟悉使用断点、单步进入、单步、运行到光标处、修改PC 指针、全速运行等各种调试手段;熟悉查看特殊功能寄存器、内部数据RAM 、外部数据空间的各种方法。
三、程序框图设定"先清LED,再接收键输入"标志堆栈初始化开始通过键盘获得双字节十进制被减数(压缩BCD码)置位"接收到第一个键后才清除LED"标志通过键盘获得双字节十进制减数(压缩BCD码)减数进行十进制取补双字节十进制加法操作C=1?C=0,有进位(结果为负),再执行一次求补运算,调整为正数高位0消隐,若结果为负,前面加上"-"显示结果YN双字节十进制减法程序框图四、实验步骤1、连线说明:2、在F4区的键盘上输入4位被减数、减数3、结果显示在F4区的数码管上五、程序清单EXTRN CODE(Display8, GetBCDKey)Buffer DATA 30H ;8字节显示缓冲区F1 BIT 0D1H ;PSW.1ORG 0000HLJMP STARTORG 0100HSTART: MOV SP,#60HCLR F1 ;先清除显示,再接收键输入START1: MOV R0,#bufferMOV A,#4 ;按键次数LCALL GetBCDKey ;得到双字节十进制数(被减数)SETB F1 ;接收到第一个键,才清除显示MOV R0,#buffer+4MOV A,#4 ;按键次数LCALL GetBCDKey ;得到双字节十进制数(减数)MOV A,#9AHCLR CSUBB A,buffer+5MOV buffer+5,AMOV A,#99HCLR CSUBB A,buffer+4MOV buffer+4,A ;减数取补MOV A,buffer+1ADD A,buffer+5DA AMOV buffer+5,AMOV A,bufferADDC A,buffer+4DA AMOV buffer+4,AMOV F0,C ;借位标志JC DisplayMOV A,#9AHSUBB A,buffer+5..MOV buffer+5,AMOV A,#99HSUBB A,buffer+4XCH A,buffer+5ADD A,#00HDA AXCH A,buffer+5ADDC A,#00HDA AMOV buffer+4,ADisplay: MOV R0,#buffer ;显示结果MOV A,buffer+5 ;低位ACALL B1toB2 ;压缩BCD码转换成非压缩BCD码MOV A,buffer+4 ;高位ACALL B1toB2MOV @R0,#10H ;最高四位消隐INC R0MOV @R0,#10HINC R0MOV @R0,#10HINC R0MOV @R0,#10HMOV R0,#buffer+3MOV R7,#3ACALL BlackDisplay ;将高位0消隐MOV R0,#bufferLCALL Display8SJMP START1BlackDisplay: MOV A,@R0 ;将高位0消隐JNZ ExitMOV A,#10HMOV @R0,ADEC R0DJNZ R7,BlackDisplayExit: JB F0,Exit1INC R0MOV @R0,#11H ;负数标志Exit1: RETB1toB2: PUSH ANL A,#0FHMOV @R0,AINC R0POP ACC..ANL A,#0F0HSWAP AMOV @R0,AINC R0RETBlackDisplay: MOV A,@R0JNZ ExitMOV A,#10HMOV @R0,ADEC R0DJNZ R7,BlackDisplayExit: RETEND实验四四字节十六进制数转十进制数一、实验目的进一步熟悉51汇编指令,了解十六进制数转十进制数的方法。
二、实验内容从键盘上输入8位十六进制数,实现四字节十六进制数转8位十进制数,并在数码管上显示。
注意输入数据必须在00000000H~05F00000H范围,否则,结果超出8位十进制数,无法正确显示。
三、程序框图主程序十六进制转十进制子程序四、实验步骤2、在F4区的键盘上输入8位十六进制数3、结果显示在F4区的数码管上五、程序清单EXTRN CODE(Display8, GetKey)Buffer DATA 30H ;8字节显示缓冲区F1 BIT 0D1H ;PSW.1ORG 0000HLJMP STARTORG 0100HSTART: MOV SP,#60HCLR F1 ;先清除显示,再接收键输入START1: MOV R0,#bufferMOV A,#8 ;按键次数LCALL GetKey ;得到4字节十六进制数SETB F1 ;接收到第一个键后,才清除显示MOV R0,bufferMOV R1,buffer+1MOV R2,buffer+2MOV R3,buffer+3ACALL B4toD4 ;转换成十进制数Display: MOV R0,#buffer ;显示结果MOV A,R7 ;低位ACALL B1toB2 ;压缩BCD码转换成非压缩BCD码MOV A,R6ACALL B1toB2MOV A, R5ACALL B1toB2MOV A,R4 ;高位ACALL B1toB2MOV R0,#buffer+7MOV R7,#7ACALL BlackDisplay ;将高位0消隐MOV R0,#bufferLCALL Display8SJMP START1;四字节十六进制数转十进制数:R0R1R2R3为十六进制,R4R5R6R7为压缩BCD码B4toD4: CLR AMOV R4,AMOV R5,AMOV R6,AMOV R7,AMOV B,#32LOOP: CLR CMOV A,R3RLC AMOV R3,AMOV A,R2RLC AMOV R2,AMOV A,R1RLC AMOV R1,AMOV A,R0RLC AMOV R0,AMOV A,R7ADDC A,R7DA AMOV R7,AMOV A,R6ADDC A,R6DA AMOV R6,AMOV A,R5..ADDC A,R5DA AMOV R5,AMOV A,R4ADDC A,R4DA AMOV R4,ADJNZ B,LOOPRETB1toB2: PUSH ACCANL A,#0FHMOV @R0,AINC R0POP ACCANL A,#0F0HSWAP AMOV @R0,AINC R0RETBlackDisplay: MOV A,@R0 ;将高位0消隐JNZ ExitMOV A,#10HMOV @R0,ADEC R0DJNZ R7,BlackDisplayExit: RETEND实验五 双字节BCD 码(十进制数)乘法一、实验目的进一步熟悉51汇编指令,掌握汇编语言的设计和调试方法。