导航:首页 > 操作系统 > 单片机rra编程什么意思

单片机rra编程什么意思

发布时间:2025-05-21 07:27:29

1. 单片机编程程序RRA什么意思

准确地写就应该是:RR A,中间是有空格的。

这是汇编指令,是对累加器A中的8位数进行右循环移位。见下图详解。

2. 在8位单片机如何实现16位运算

如果你是用C编译器,那么根本就不用考虑这个问题,因为编译器都为你解决了,你只需要定义16位的变量(如int型)
但如果你是用汇编语言写程序,那么就得为程序分配内存单元(字型变量),利用四个或四个以上的八位寄存器,先低八位进行运算,然后进行高八位的运算,但其中要注意状态寄存器的变化。

3. 编程:使用单片机P1口控制8个LED。显示方式:自上而下逐个点亮,再自下而上逐个点亮,如此循环

给你个简单点的
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN: MOV P1,#01111111B ;P1口低电平 对应灯亮 点亮P1.7对应的LED
LCALL DLY_500MS ;延时500ms 可以清晰看到每个LED的亮灭情况
MOV P1,#10111111B
LCALL DLY_500MS ;延时500ms 可以清晰看到每个LED的亮灭情况
MOV P1,#11011111B
LCALL DLY_500MS ;延时500ms 可以清晰看到每个LED的亮灭情况
MOV P1,#11101111B
LCALL DLY_500MS ;延时500ms 可以清晰看到每个LED的亮灭情况
MOV P1,#11110111B
LCALL DLY_500MS ;延时500ms 可以清晰看到每个LED的亮灭情况
MOV P1,#11111011B
LCALL DLY_500MS ;延时500ms 可以清晰看到每个LED的亮灭情况
MOV P1,#11111101B
LCALL DLY_500MS ;延时500ms 可以清晰看到每个LED的亮灭情况
MOV P1,#11111110B;点亮P1.0对应LED
LCALL DLY_500MS ;延时500ms 可以清晰看到每个LED的亮灭情况
MOV P1,#11111110B
LCALL DLY_500MS ;延时500ms 可以清晰看到每个LED的亮灭情况
MOV P1,#11111101B
LCALL DLY_500MS ;延时500ms 可以清晰看到每个LED的亮灭情况
MOV P1,#11111011B
LCALL DLY_500MS ;延时500ms 可以清晰看到每个LED的亮灭情况
MOV P1,#11110111B
LCALL DLY_500MS ;延时500ms 可以清晰看到每个LED的亮灭情况
MOV P1,#11101111B
LCALL DLY_500MS ;延时500ms 可以清晰看到每个LED的亮灭情况
MOV P1,#11011111B
LCALL DLY_500MS ;延时500ms 可以清晰看到每个LED的亮灭情况
MOV P1,#10111111B
LCALL DLY_500MS ;延时500ms 可以清晰看到每个LED的亮灭情况
MOV P1,#01111111B
LCALL DLY_500MS ;延时500ms 可以清晰看到每个LED的亮灭情况
SJMP MAIN
;延时250ms子程序
DLY_250MS:MOV R5,#5
DLY1: MOV R6,#100
DLY0: MOV R7,#250
DLY: DJNZ R7,DLY
DJNZ R6,DLY0
DJNZ R5,DLY1
RET
;延时500ms子程序
DLY_500MS:MOV R4,#2
DLY2: LCALL DLY_250MS
DJNZ R4,DLY2
RET
END

4. 51单片机intrinsic.h怎么用

头文件就相当于一组自定义函数或者一些声明。其实没什么使用方法。你在使用include<aaa.h>时,就如同你把aaa.h中的内容全部复制到添加路径include<aaa.h>的地方。
具体我们看下面:

/*--------------------------------------------------------------------------
INTRINS.H
IntrinsicfunctionsforC51.
--------------------------------------------------------------------------*/
#ifndef__INTRINS_H__
#define__INTRINS_H__
#pragmaSAVE
#ifdefined(__CX2__)
#pragmaFUNCTIONS(STATIC)
/*,butneedstaticattribute*/
#endif
externvoid_nop_(void);
externbit_testbit_(bit);
externunsignedchar_cror_(unsignedchar,unsignedchar);
externunsignedint_iror_(unsignedint,unsignedchar);
externunsignedlong_lror_(unsignedlong,unsignedchar);
externunsignedchar_crol_(unsignedchar,unsignedchar);
externunsignedint_irol_(unsignedint,unsignedchar);
externunsignedlong_lrol_(unsignedlong,unsignedchar);
externunsignedchar_chkfloat_(float);
#ifdefined(__CX2__)
externintabs(int);
externvoid_illop_(void);
#endif
#if!defined(__CX2__)
externvoid_push_(unsignedchar_sfr);
externvoid_pop_(unsignedchar_sfr);
#endif
#pragmaRESTORE
#endif

以上是intrins.h的具体内容。


逐一分析。
1.#ifndef,#define,#endif
#ifndef __INTRINS_H__
#define __INTRINS_H__
#define qwerty
...
#define tyuio
#endif
这是一组。功能是条件编译。ifndef是if not defined,如果没有定义__INTRINS_H__,那咱们就定义吧,下一条就是#define __INTRINS_H__。一直到最后终止endif。
使用目的:如果编译时,系统已有intrins.h的定义,则不编译以下内容,若系统没有定义标识则编译内容。

例如,我们有一个数据类型,在Windows平台中,应该使用long类型表示,而在其他平台应该使用float表示,这样往往需要对源程序作必要的修改,这就降低了程序的通用性。可以用以下的条件编译:

#ifdefWINDOWS
#defineMYTYPElong
#else
#defineMYTYPEfloat
#endif

如果在Windows上编译程序,则可以在程序的开始加上#define WINDOWS
这样则编译命令行:#define MYTYPE long。
如果在这组条件编译命令之前曾出现以下命令行:#define WINDOWS 0
则预编译后程序中的MYTYPE都用float代替。这样,源程序可以不必作任何修改就可以用于不同类型的计算机系统。


(#pragma先略过)
2.extern
Extern用在变量/函数声明前,表明该变量/函数是在别处定义的。Extern void nop (void)表示其他地方有定义过函数nop(void),此处引用。
首先强调一点。头文件中的定义都不是全局变量,但是因为一直写在开头所以总是被最先编译。如果在xxx.h中定义int key,想在多个文件中使用A.c,B.h,…,编译不会通过。因为头文件中的内容如同照抄在include<xxx.h>处。即:在A和B中都定义了一次这个全局变量key(重复定义)。正确做法是在A.c中定义,在B.h中用extern+A.c中的定义,相反也行。
extern unsigned char _cror_ (unsigned char, unsigned char);表示声明一个叫_cror_ 的函数,两个参变量,返回unsigned char型的函数。等等。

_crol_字符循环左移
_cror_字符循环右移
_irol_整数循环左移
_iror_整数循环右移
_lrol_长整数循环左移
_lror_长整数循环右移
_nop_空操作8051NOP指令

说明一下,上面的这些函数虽然是外部定义的。但是很难找到定义的地点。可能在某个系统的dll文件中。使用时不必拘泥过多,直接使用就行。具体函数干些什么你也可以自己网络。这里不展开了。


3.#pragma
这是预编译指令,也可以叫编译器指令。初学者不必深究。换句话说,即使完全不理解也不影响你单片机的学习。
#pragma SAVE表示把当前设定放入保存堆栈。
#pragma RESTORE一直和SAVE组合使用,吧保存堆栈中的内容存储起来。他们是一组,一般共同使用。


还有剩余的一些其实就和上面讲的是一个类型。无非就是条件编译和预编译指令,和你关系不大这里就不展开了。

综合一下。看一个例子:

voidhahaha(inta,charb);//实际上你打开一个单片机的project,里面有reg51.h和intrins.h。这句话就如同intrins.h的功能,仅仅是声明。
main()
{
hahaha(qwe,rty);
}
voidhahaha(inta,charb);//这句话就如同reg51.h的功能,定义了一些函数。
{
a=a++;
b=b--;
}

当你include<reg51.h>include<intrins.h>后,就如同头文件的内容全部抄到你自己写的函数的最上面。

阅读全文

与单片机rra编程什么意思相关的资料

热点内容
pdf交流 浏览:320
如何看vivos7有多少app 浏览:116
cmdping命令如何复制 浏览:647
java数组转换类型 浏览:498
天正命令to 浏览:838
如何禁止安卓系统软件开机自启动 浏览:465
服务器注册上限如何取消 浏览:672
大圣腾飞幼少儿编程学费多少 浏览:866
androidmimetype 浏览:643
单片机的结论 浏览:303
java前叉 浏览:290
frankwolfe算法 浏览:74
如何设置app屏幕锁 浏览:206
唱戏机程序加密 浏览:235
天眼查微信小程序源码 浏览:448
海口Python开发工程师招聘 浏览:626
怎么删除状态栏的新建文件夹 浏览:972
天翼没有装路由器怎么加密 浏览:950
如何用app翻拍1寸照片 浏览:353
安卓如何把手机wifi搞坏 浏览:36