2、界值20,40,若不等,再根据执行CJNE指令后的进位位CY的值來判断X与临界值的的大小关系,CY二0则X大于临界值,CYP则X小于临界值;然后根据X的值所在的区
3、'可进行相应的计算。除法计算中可能产生余数,簡和余数应该分开存储,若乘方运算结果大于255,高八位与低八位应分开存储。2.24进制时钟首先构建一个三重循环实现“一秒延时”,再设计计时系统的三重循坏,秒(0-59)、分(0-59)、时(0-23)。秒和分计60次,小时计24次,分、秒达到59,小时达到23时,下一次应该为零。程序运行吋修改P3.0的值可以实现暂停和继续的功能。三、资源分配1•
4、分段函数外部寄存器DPTR用作数据指针,变量X的值存于片外RAM的3000II单元,计算结果存于片外RAM的3001H~3002H单元,按位取反计算结果存于3001H单元,而除法计算结果的簡与余数和乘方计算中结果的高、低八位分别存储于3001H~3002H单元。2.二十四小时制电子时钟工作寄存器RO,Rl,R2分别用于秒、分、时的循环计数,R3,R4,R5用作一秒延时的循环计数,秒、分、时数值分别由PO、Pl、P2端口输出。四、流程图1•分段函数Y二取反X结果存于3001H2.二十川小时制电子时钟A-21H?LJMPMAINORGOlOOIIMATN
5、:MOVA,#29HMOVDPTR,#3000HMOVX@DPTR,ACLRCSTEP1:CJNEA,#1411,STEP2Yl:CPLAMOVDPTR,#3001HMOVX@DPTR,ASJMPDONESTEP2:JNCSTEP3SJMPY1STEP3:CLRCCJNEA,#28H,STEP4Y2:MOVB,AMULABMOVDPTR,#300111MOVX©DPTR,AINCDPTRMOVA,BMOVX@DPTR,ASJMPDONESTEP4:JNCY2SJMPY3五、源代码(含文件头说明、语句行注释)1.分段函数ORG0000H;取数X;设置数
6、据指针沈存于片外RAM;进位位清零;将A与20比较,若不等于20,跳转至STEP2;A取反;设置数据指针;将计算结果存于片外地址3001H;判断CY是否为0,若为0,跳转至STEP3;CY不为0则跳转至Y1;进位位清零沮中内容与40比较,若不等于40,跳转至STEP4;复制A;X平方;设置数据指针;结果低八位存于片外地址3001H;数据指针加一;将13屮内容赋给A;结果高八位存于片外地址300211;判断CY是否为0,若为0,跳转至Y2;否则跳转至Y3Y3:MOVB,#02H;计算X/2;设置数据指针;结杲商存于片外地址3001H;数据指针加1;将1
7、3屮内容赋给A;结果余数存于片外地址300211DIVABMOVDPTR,#300111MOVX©DPTR,AINCDPTRMOVA,BMOVX@DPTR,ASJMPDONEDONE:SJMP$END2.二十四小时制电子时钟ORG0000HSTART:LJMPSTARTORG001OHMOVSP,#4011;设置堆栈MOVR0,#00H;RO,R1,R2清零MOVR1,#OOHMOVR2,#00HMOVPO,#OOH;PO,P1,P2清零PAUSE:MOVPl,#0011MOVP2,#0011JBP3.0,PAUSE;设置暂停功能SEC:MOVA,R
8、0;A—R0MOVPO,A;秒数传至P0端口ADDA,#0111;秒进位DAA;人转区。码MOVRO,A;RO-AACALLOSEC;一秒延时CJNEA,#60H,PAUSE;进位MIN:MOVRO,#0011MOVPO,#00HMOVA,R1ADDA,#01HDAA;R0,PO清零;A-R1;分进位;A转BCD码MOVPl,A;分数传至Pl端口MOVRl,A;R1-ACJNEA,#60H,PAUSE;进位HOUR:MOVPO,#00HMOVP1,#OOHMOVR1,#OOII;R1,PO,Pl清零MOVA,R2;A-R2ADDA,#01H;吋进位D
9、AA;人转BCD码MOVP2,A;小时数传至P2端口MOVR2,A;R2-ACJNEA,#24H,PAUSE