《分支实验.doc》由会员分享,可在线阅读,更多相关《分支实验.doc(20页珍藏版)》请在金锄头文库上搜索。
1、微机实验报告实验名称 分支程序设计实验 专业班级 姓名 学号 序号 联系方式 一、 任务要求1. 设有8bits符号数X存于外部RAM单元,按以下方式计算后的结果Y也存于外部RAM单元,请按要求编写程序。2. 利用51系列单片机设计一个24小时制电子时钟,电子时钟的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩BCD码的形式)。P3.0为低电平时开始计时,为高电平时停止计时。a. 实现4位十进制加、减1计数,千位、百位由P1口输出;十位、个位由P2口输出。利用P3.7状态选择加、减计数方式。 b. 利用P3口低四位状态控制开始和停止计数,控制方式自定。二、设计思路1.分段函数程序:将R
2、1设置为标志位。从外部RAM取出X,先判断X与40的大小,再判断X与20的大小。当X大于等于40时,标志位设置为11H;X小于等于20时,标志位设置为01H;20X40?FLAG=11HNYFLAG=01HX=20?YFLAG=01HNX40,标志位置11HSJMP CALCULAT;跳转至计算步骤JUDGETW:CJNE A,#20H,LESSTW;若X小于40,判断是否等于20MOV FLAG,#01H;若X=20,标志位置01HSJMP CALCULAT;跳转至计算步骤LESSTW: JNC MID;若X不为20,判断是否小于20MOV FLAG,#01H;若小于20,标志位置01HSJ
3、MP CALCULAT;跳转至计算步骤MID:MOV FLAG,#10H;若20x40,标志位置10HCALCULAT: CJNE FLAG,#10H,CASE1;标志位与10H比较MOV B,#2DIV AB ;若为10H,X/2SJMP STORE1;跳转至存储步骤CASE1:JNC CASE2;判断标志位是否小于10HCPL A;若小于10H,A取非SJMP STORE2;跳转至存储步骤CASE2:MOV B,A;若标志位大于10H,X取平方MUL ABSTORE1:MOV R2,A ;对乘除法存储MOV A,BINC DPTRMOVX DPTR,A;计算结果Y高位,余数存于1001HM
4、OV A,R2STORE2:INC DPTR MOVX DPTR,A;取非,低位,商存于1002HSJMP $;踏步END2.时钟程序:;R0:时;R1:分;R2:秒;R3-R7:计时循环ORG 0000HLJMP MAINORG 0200HMAIN:MOV R0,#0 ;初始化R0MOV R1,#0 ;初始化R1MOV R2,#0 ;初始化R2MOV P0,#0 ;初始化P0MOV P1,#0 ;初始化P1MOV P2,#0 ;初始化P2STAY:JB P3.0,STAY ;判断P3.0电平SEC:LCALL DELAY ;调用计时函数INC R2 ;秒加1MOV P2,R2 ;P2口输出秒
5、CJNE R2,#3CH,STAY ;判断是否到60秒MOV R2,#0 ;秒清0INC R1 ;分加1MOV P1,R1 ;P1口输出分CJNE R1,#3CH,STAY ;判断是否到60分MOV R2,#0 ;分清0INC R0 ;小时加1MOV P0,R0 ;P0口输出小时CJNE R0,#18H,STAY ;判断是否到24小时MOV R0,#0 ;小时清0AJMP STAY DELAY:MOV R7,#28H ;延时5usLOOP5: MOV R6,#05H NOP NOPLOOP4: MOV R5,#05H NOP LOOP3: MOV R4,#05H NOP LOOP2: MOV
6、R3,#41H NOP LOOP1:NOP DJNZ R3,LOOP1DJNZ R4,LOOP2DJNZ R5,LOOP3DJNZ R6,LOOP4DJNZ R7,LOOP5RETEND3. 实现4位十进制加、减1计数程序:;R1:千位,百位;R2:十位,个位;30H:暂存R2;R4:暂存A;P3.7=0,减,P3.7=1,加ORG 0000HLJMP MAINORG 0200HMAIN:MOV A,#99H ;四位数赋值MOV R1,AMOV A,#79HMOV R2,AJUDGE:JB P3.7,ADDUP ;若p3.7=1,加1;否则减1DEDUCE:DEC R2 ;R2减1CJNE R2,#0FFH,ADJUST ;判断R2是否借位MOV R2,#99H ;借位则置99DE