51单片机R0-R7的功能及作用

51单片机R0-R7的功能及作用

51单片机中的R0至R7是8个工作寄存器,它们位于内部RAM的特定地址空间内(00H-1FH),并分为4组,每组包含R0-R7。以下是这些工作寄存器的主要功能和作用:

  1. 数据存储

    • R0至R7可以作为临时的数据存储单元,在执行算术逻辑运算、移位操作等指令时存放中间结果或待处理的数据。
  2. 快速寻址

    • 在编写程序时,使用R0至R7进行直接寻址,由于它们在CPU内部,因此访问速度较快,有利于提高程序执行效率。
  3. 工作寄存器组切换

    • 通过PSW寄存器中的RS1和RS0两位,可以指定当前活动的工作寄存器组(共0~3组)。这意味着虽然每个寄存器都有四个物理副本(R0’到R7’),但在同一时间,只有其中一组(8个寄存器)是有效的,用于程序操作。
  4. 间接寻址

    • 特别地,R0和R1还支持寄存器间接寻址,即MOV A, @R0或MOV A, @R1指令,可用来间接访问外部RAM或内部RAM中的数据,其中R0或R1中存放的是要访问内存单元的地址。

综上所述,R0至R7工作寄存器在51单片机中扮演着重要的角色,它们是程序员在编写高效代码时经常使用的资源,对于简化程序设计、加快指令执行速度等方面具有重要意义。

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
秒表计时器设计 学院 土木工程 班级 交运021 设计人 张志东 __ 成绩 __ 1. 设计目的 (1)培养学生综合利用MCS- 51单片机的软硬件知识进行程序设计的能力,解决一些实际问题。 (2)进一步加深对MCS-51单片机内部结构和程序设计方法的理解。 (2)提高学生建立程序文档、归纳总结的能力。 2. 总体设计 1. 所能实现的功能: 1. 计时,计时数值最大为99分59秒99; 2. 停止或继续; 3. 清零。 2. 总体设计方案:用LED数码管显示计时的时间,显示的时间应有百分之一秒位、十分 之一秒位、秒个位、秒十位、分个位、分十位;利用单片机的外中断,某键为低 时产生中断开始计时,再一次为低时产生中断停止计时;另一键为低时产生中断 使时间清0。 3. 硬件系统设计 1. 所需设备:DICE- 5013S实验系统一个,并行接口8155一个,PC微机(P4)一台。 2. 接线设计: 1. 将P1.2(X3)接到按钮开关1上,作为STOP中断; 2. 外部中断0的引脚INT0(X15)接按钮开关2,作为CLEAR中断。 4. 软件系统设计 1. 软件功能模块设计及流程图 先利用计时中断产生百分之一秒基时,将百分之一秒位、十分之一秒位、秒个位 、秒十位、分个位、分十位分别存于片内RAM地址79H,7AH,7BH,7CH,7DH,7EH中, 再由主程序显示程序将其显示在LED显示器上;开始/继续通过STOP中断对P1.2进 行取反,然后在计时中断中对输入口P1.2的位进行判断来实现;清零通过在清零 中断中设置各位初值来实现。 主流程图: Y N Y N Y N 计时中断程序流程图: N Y N Y N Y 2.程序清单和注释 ORG 0000H AJMP MAIN ORG 0003H AJMP CLEAR ;清零中断 ORG 000BH AJMP START ;计时中断 ORG 0013H AJMP STOP ;停止中断 MAIN: MOV TMOD,#01H ;T/C0工作方式为方式0 MOV IE, #87H ;开启INT0 中断 MOV TL0, #78H ;置T/C0初值(216- 10000/2=EC78H) MOV TH0, #0ECH SETB TR0 ;开启各个中断 SETB IT0 SETB IT1 MOV R4, #00H ;1/100秒置初值 MOV R3, #00H ;秒置初值 MOV R2, #00H ;分置初值 MOV 79H, #00H ;1/100秒位置初值 MOV 7AH, #00H ;1/10秒位置初值 MOV 7BH, #00H ;秒位置初值 MOV 7CH, #00H ;十秒位置初值 MOV 7DH, #00H ;分位置初值 MOV 7EH, #00H ;十分位置初值 SETB P1.2 SHOW: MOV SP,#5FH ;显示程序 MOV A,#03H MOV DPTR,#0FF20H ;设置8155初始化 MOVX @DPTR,A DISP4: MOV R5,#01H MOV R0,#79H MOV A,R5 LD0: MOV DPTR,#0FF21H ;字位码送8155A口 MOVX @DPTR,A MOV DPTR,#0FF22H MOV A,@R0 ADD A,#0EH MOVC A,@A+PC ;查字形表 MOVX @DPTR,A ;字型码送8155B口 ACALL DLAY ;延时1MS INC R0 MOV A,R5 JB ACC.5,LD1 RL A MOV R5,A AJMP LD0 LD1: SJMP DISP4 DB 0C0H,0F9H,0A4H,0B0H,99H,92H DB 82H,0F8H,80H,90H,88H,83H,0C6H DB 0A1H,86H,8EH,0FFH,0CH,89H DB 0C8H,0C1H,7FH,0BFH DLAY: MOV R7,#02H ;延时1MS DL1: MOV R6,#0FFH DL2: DJNZ R6,DL2 DJNZ R7,DL1 RET START: MOV TL0, #78H MOV TH0, #0ECH PUSH ACC JNB P1.2,NEXT ;P1.2为0则返回不计时 INC R2 MOV A, R2 MOV B, #10 DIV AB MOV 79H, B ;存1/100秒位 MOV 7AH, A ;存1/10秒位 CJNE R2, #100, NEXT ;1/100秒到100则秒加一 MOV R2, #00H MOV 79H, #00H MOV 7AH, #00H INC R3 MOV A, R3 MOV B, #10 DIV AB MOV 7BH, B ;存秒位 MOV 7CH, A ;存
以下是一个简单的51单片机汇编语言实现0-9的加减法计算器的示例代码: ``` ORG 0H MOV P0,#0FFH ;设置P0口为输入口 MOV P1,#0H ;设置P1口为输出口 MOV P2,#0H ;设置P2口为输出口 MAIN: ACALL READ_NUM1 ;读取第一个数字 ACALL READ_NUM2 ;读取第二个数字 ACALL READ_OP ;读取运算符 ACALL CALC ;计算结果 ACALL DISPLAY ;显示结果 SJMP MAIN READ_NUM1: MOV R0,#10 ;设置循环次数 MOV A,#0H ;清零累加器 LOOP1: MOV C,P0.0 ;读取P0.0口的值 JNC LOOP1 ;等待输入 ACALL DELAY ;延时去抖 MOV C,P0.0 ;再次读取P0.0口的值 JNC LOOP1 ;等待输入 ADD A,#0FH ;十进制转换 MOV B,A ;保存累加器的值 MOV A,P0 ;读取输入值 ANL A,#0FH ;取低四位 ADD A,B ;加上之前的结果 MOV B,A ;保存结果 DJNZ R0,LOOP1 ;循环10次结束 RET READ_NUM2: MOV R0,#10 ;设置循环次数 MOV A,#0H ;清零累加器 LOOP2: MOV C,P0.0 ;读取P0.0口的值 JNC LOOP2 ;等待输入 ACALL DELAY ;延时去抖 MOV C,P0.0 ;再次读取P0.0口的值 JNC LOOP2 ;等待输入 ADD A,#0FH ;十进制转换 MOV B,A ;保存累加器的值 MOV A,P0 ;读取输入值 ANL A,#0FH ;取低四位 ADD A,B ;加上之前的结果 MOV B,A ;保存结果 DJNZ R0,LOOP2 ;循环10次结束 RET READ_OP: MOV R0,#10 ;设置循环次数 LOOP3: MOV C,P0.0 ;读取P0.0口的值 JNC LOOP3 ;等待输入 ACALL DELAY ;延时去抖 MOV C,P0.0 ;再次读取P0.0口的值 JNC LOOP3 ;等待输入 MOV A,P0 ;读取输入值 CPL A ;取反 ANL A,#0FH ;取低四位 CJNE A,#0EH,LOOP3 ;如果输入的不是+或-,重新输入 MOV B,A ;保存运算符 RET CALC: MOV A,B ;读取运算符 CJNE A,#0DH,ADD1 ;如果是+,跳转到ADD1 MOV A,R1 ;读取第一个数字 ADD A,R2 ;加上第二个数字 MOV R3,A ;保存结果 SJMP CALC_END ADD1: MOV A,R1 ;读取第一个数字 SUBB A,R2 ;减去第二个数字 MOV R3,A ;保存结果 CALC_END: RET DISPLAY: MOV A,R3 ;读取结果 MOV R0,#10 ;设置循环次数 LOOP4: MOV B,#0AH ;除以10 DIV AB MOV P2,B ;输出余数 INC P1 ;P1口指向下一位 DJNZ R0,LOOP4 ;循环10次结束 RET DELAY: MOV R7,#0FFH DELAY_LOOP: DJNZ R7,DELAY_LOOP RET END ``` 这个程序通过检测P0.0口的状态,读取用户输入的数字和运算符,并通过P2口输出余数,P1口控制位数,从而实现了一个简单的0-9加减法计算器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式Stark

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值