‘壹’ 向高手请教89x51单片机7种寻址方式的寻址范围
1、立即寻址:立即数就是存放在程序存储器中的常数,换句话说就是操作数(立即数)是包含在指令字节中的。
如:MOV A,#20H,此时数据范围:00H~FFH。
再如:MOV DPTR,#1000H,此时数据范围:0000H~ffffH;
2、直接寻址:
A:可以访问内部数据存储器RAM低128单元00~7FH
B:如果是高位则一定是特殊功能寄存器如P0,P1,SBUF,IE等等,而且也只有直接寻址可以访问特殊功能寄存器。
C:位寻址空间20H~2FH
3、寄存器寻址:
A:四个工作寄存器组也就是00H~1FH
B:其他特殊功能寄存器如A,B,PSW,DPTR等等
4、寄存器间接寻址:
A:用@Ri可以寻址内部或外部00H~FFH.
B:用@DPTR可以寻址0000H到FFFFH
C:用PUSH或POP可以访问范围00~FFH
5、基址寄存器加变址寄存器的变址寻址
A:以PC为基址范围为256个字节
B:以DPTR为基址范围为64K
6、位寻址:
A:20H~2FH的位寻址空间
B:能被8整除的专用寄存器如P0,P1等等。
7、相对寻址:
偏移量+指令单元地址,所以范围为00H~FFH
‘贰’ MCS-51单片机与AT89S5x系列单片机的关系是什么 从内核、存储器等角度说明两
MCS-51是一个系列,AT89S5x属于MCS-51系列,但出现比较晚,主要改进是编程由并口变成串口 。但AT89S5系列也已落伍。
AT89C51是ATMEL公司生产的MCS-51兼容单片机,采用CMOS工艺生产,有4K的FLASH ROM空间,程序区电可擦写。MCS-51是INTEL公司开发的8位单片机系列,典型的产品有8031,8051。市面上所有兼容MCS-51的单片机都叫51兼容芯片,都可以用C51语言编程。
(2)89x51单片机扩展阅读:
MCS-51单片机:集成的电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。
‘叁’ #include <AT89X51.h>是不是只有51单片机才能用,MC9S12XS128MAA单片机可以用不
头文件里面主要是定义了引脚IO以及单片机内部寄存器地址和指令集,AT89X51.h主要用于51内核的单片机(寄存器地址是一样的,可以通用,)但引脚不一定相同,所以建议找对应单片机的头文件比较妥当。另外你这一款是飞思卡尔的单片机,不是51内核,这就更加不可以了。。。你可以查找XS128头文件.h或者XS128头文件.txt,网落上还是有很多资源的
‘肆’ 这段代码什么是什么意思 #include <at89x51.h> #include <absacc.h> #define uchar unsigned char #define
#include <at89x51.h> //编译预处理语句,指你的程序文件包含了at89x51.h,此文件是AT8951单片机
// 的头文件.
#include <absacc.h> //使用其中定义的宏来访问绝对地址.
#define uchar unsigned char //宏定义,用uchar来表示unsigned char.
#define//宏定义语句,不全
‘伍’ 关于单片机头文件reg51.h和at89x51.h编译的问题
这样,你在我的电脑里(应该在c盘吧)找到Keil文件夹而后:Keil----C51-----INC----Atmel在Atmel文件里打开你说的头文件一看里面的设定就一目了然了,他们的定义不同,所以结果就不一样了。
‘陆’ 51单片机头文件中REG51.H、AT89C51.H和AT89X51.H之间的区别
只要你将这几个文件打开,你就会发现,其实只是管脚和寄存器等的宏定义名称不一样而已。
‘柒’ 怎么用89C51单片机实现用一个开关控制8个流水灯,要求开关按下去松开是亮的,再按下去松开是灭的
开关,接在 P2.7 与地之间。
#include <AT89X51.H> //预处理命令
void w(unsigned char k)
{
unsigned int a; //定义变量a 为int 类型
if (k) {
while(P2_7); //没有按就循环,等待按下
for (a = 0; a < 600; a++); //延时消抖
while(P2_7); //没有按就循环
}
else while(!P2_7); //按下就循环,等待松开
}
void main(void) //主函数名
{
while(1) {
w(1); P1_0 = 0; w(0); P1_0 = 1;
w(1); P1_1 = 0; w(0); P1_1 = 1;
w(1); P1_2 = 0; w(0); P1_2 = 1;
w(1); P1_3 = 0; w(0); P1_3 = 1;
w(1); P1_4 = 0; w(0); P1_4 = 1;
w(1); P1_5 = 0; w(0); P1_5 = 1;
w(1); P1_6 = 0; w(0); P1_6 = 1;
w(1); P1_7 = 0; w(0); P1_7 = 1;
}
}