资源描述:
《单片机编程作业》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验四80C51综合软件设计一、实验目的:熟练掌握80C51的指令系统和编写程序的方法。二、实验内容:(1)将RAM50H~59H中的数据从小到大顺序排列。(2)借助51单片机开发系统及参考程序,编程求出10个正整数的最大值、最小值、和、平均数。三、程序ORG0000HREAET:AJMPMAINORG0100HMAIN:MOVSP,#60H;(MAIN函数)MOVR0,#50H;(将十个数存入CPU内部存储器,起始地址为50H)MOV@R0,#6FHINCR0MOV@R0,#6EHINCR0MOV@R0,#6AHINCR0MO
2、V@R0,#6CHINCR0MOV@R0,#6DHINCR0MOV@R0,#6BHINCR0MOV@R0,#67HINCR0MOV@R0,#69HINCR0MOV@R0,#68HINCR0MOV@R0,#64HINCR0ACALLQMM;(调用求平均值、最大值、最小值函数)ACALLSUM;(调用求和函数)ACALLAVARAGE;(调用求平均值函数)SJMP$QMM:CLR00H;(求平均值、最大值、最小值函数)MOVR7,#09H;(每个循环进行9次两两比较)MOVR0,#50HMOVA,@R0;(将第一个数的值送到累加器A
3、)L2:INCR0MOVB,@R0;(将后面一个数的值送到B)CLRC;(符号位清零)CJNEA,B,L3;(前后两个数进行比较,若前后两数不相等则跳到L3)L3:JCL1;(若符号位为1,即前面的数小于后面的数则程序跳到L1)SETB00H;(若符号位为1,即前面的数小于后面的数,则程序继续向下执行,00H单元置为1)XCHA,@R0;(后面单元中的数与累加器A中的数进行交换)DECR0XCHA,@R0;(前面单元中的数与累加器A中的数进行交换)INCR0L1:MOVA,@R0DJNZR7,L2;(若未进行完9次比较则程序跳回
4、L2继续执行)JB00H,QMM;(进行完9次比较若仍有交换存在,则程序跳回QMM继续循环,直到10个单元中的数不再进行交换,即完成从小到大排序)MOVA,59H;(将最大值送到30H单元)MOV30H,AMOVA,50H;(将最小值送到20H单元)MOV20H,ARETSUM:CLRC;(求和函数)MOVR0,#50HMOVR1,#10MOVA,R1MOVR7,A;(10个数相加循环10次)MOVR2,#00H;(R2中存放累加值)MOVR3,#00H;(R3中存放进位的累加值)LP0:MOVA,R2ADDA,@R0MOVR2
5、,AMOVA,R3ADDCA,#00HMOVR3,AINCR0DJNZR7,LP0MOV5AH,R2;(将和的低八位存放在5A单元中)MOV5BH,R3;(将和的高八位存放在5B单元中)RETAVARAGE:;(求平均值)MOV5AH,R2MOV5BH,R3INCR3MOVR4,#00H;(R4中存放减10的次数)MOVA,R2Q1:CLRCMOVR5,#0AHQ2:DECA;(减10次1)DJNZR5,Q2CJNEA,0AH,Q3Q3:INCR4;(每减一个10,R4加1)JNCQ1;(循环减10,直到低位小于0)DJNZR3
6、,Q1;(低位减完向高位借位,直到高位小于0)DECR4MOV5CH,R4;(将商送到5CH单元)MOVR5,0AHQ4:INCADJNZR5,Q4MOV5DH,A;(将余数送到5DH单元)RET