单片机一些基础问题
节-128~+127
Unsigned int双字节0~65535
Signed int双字节-32768~+32767
Unsigned long四字节0~4294967295
Signed long四字节-2147483648~+2147483647
float四字节±1.175494E-38~±3.402823E+38
bit1位0或1
sfr单字节0~255
sfr16双字节0~65535
Sbit1位0或1
变量的定义可以使用所有C51 编译器支持的数据类型,而常量的数据类型只有整型、浮点型、字符型、字符串型和位标量
长整型就在数字后面加字母L,如104L,034L,0xF340 等。浮点型常量可分为十进制和指数表示形式(12e5表示12*10^5)
8051 结构提供给用户3 个不同的存储空间
第一个存储空间是代码段(CODE)用来存放可执行代码被16 位寻址空间可达64K;除了可执行代码还可在代码段中存储查寻表为达此目的8051 提供了通过数据指针DPTR 或程序计数器加上由累加器提供的偏移量进行寻址的指令这样就可以把表头地址装入DPTR 中把表中要寻址的元素的偏移量装入累加器中8051 在执行指令时的过程中把这两者相加由此可节省不少指令周期。
第二个存储区是8051 内128 字节的内部RAM 或8052 的前128 字节内部RAM 这部分主要是作为数据段称为DATA 区指令用一个或两个周期来访问数据段访问DATA 区比访问XDATA 区要快因为它采用直接寻址方式而访问XDATA 须采用间接寻址必须先初始化DPTR 通常我们把使用比较频繁的变量或局部变量存储在DATA 段中但是必须节省使用DATA 段因为它的空间毕竟有限。在数据段中也可通过R0 和R1 采用间接寻址R0 和R1 被作为数据区的指针将要恢复或改变字节的地址放入R0 或R1 中根据源操作数和目的操作数的不同执行指令需要一个或两个周期。数据段中有两个小段第一个子段包含四组寄存器组每组寄存器组包含八个寄存器共32 个寄存器可在任何时候通过修改PSW 寄存器的RS1 和RS0 这两位来选择四组寄存器的任意一组作为工作寄存器组8051 也可默认任意一组作为工作寄存器组工作寄存器组的快速切换不仅使参数传递更为方便而且可在8051 中进行快速任务转换另外一个子段叫做位寻址段BDATA 包括16 个字节共128 位每一位都可单独寻址8051 有好几条位操作指令这使得程序控制非常方便并且可帮助软件代替外部组合逻辑这样就减少了系统中的模块数位寻址段的这16 个字节也可像数据段中其它字节一样进行字节寻址。
8051 系列的一些单片机如8052 有附加的128 字节的内部RAM 位于从80H 开始的地址空间中被称为IDATA 因为IDATA 区的地址和SFRs (特殊功能寄存器)的地址是重叠的通过区分所访问的存储区来解决地址重叠问题因为IDATA 区只能通过间接寻址来访问。8051 的最后一个存储空间为64K 和CODE 区一样采用16 位地址寻址称作外部数据区简称XDATA 区这个区通常包括一些RAM 如SRAM 或一些需要通过总线接口的外围器件。
8051 可对存储区直接或间接寻址这些是典型的寻址方式直接寻址是在指令中直接
包含所须寻址的字节地址直接寻址只能在DATA 区和SFR 中进行。
SBUF 串行缓冲区 DPTR 数据指针 MOVX 读入或写入外部寄存器的数据
fosc (frequency oscillate)晶振频率
指针寄存器而不是直接使用地址
中断系统
基本的8051 支持6 个中断源两个外部中断两个定时/计数器中断一个串行口输
入/输出中断中断发生后处理器转到将五个中断入口处之一执行中断处理程序中断向
量位于代码段的最低地址出串行口输入输出中断共用一个中断向量
reg51.h 详细说明
是c51(用于单片机开发的一种c语言)的头文件。类似于头文件AT89X52.h。这两个头文件基本是一样的,只是在使用时对位的定义不一样,at89x52.h文件中对P1.1的操作是写成P1_1;reg52.h文件中的操作则写成P1^1。表示方法不一样而已。另外前者是特指ATMEL公司的52系列单片机,后者指所有52系列的单片机。
LED3.C(8): error C141: syntax error near '='
在c51单片机里面不可以用#define LED1 P0^1
正确的使用sbit LED1=P0^1;
还有keil编译器不支持像P0^1=0;或P0^1=1;这样的赋值
本征库函数(intrinsic routines)和非本征证库函数
C51提供的本征函数是指编译时直接将固定的代码插入当前行,而不是用ACALL和LCALL语句来实现,这样就大大提供了函数访问的效率,而非本征函数则必须由ACALL及LCALL调用。
C51的本征库函数只有9个,数目虽少,但都非常有用,列如下:
_crol_(_cror_):将char型变量循环向左(右)移动指定位数后返回
_iror_(_irol_):将int型变量循环向左(右)移动指定位数后返回
_lrol_(_lror_):将long型变量循环向左(右)移动指定位数后返回
_nop_: 相当于插入NOP “空指令”,在x86的CPU中机器码为0x90(144)。
_testbit_: 相当
- FPGA的DSP性能揭秘(06-16)
- 基于单片机通用引脚的软件UART设计(10-16)
- 分时操作系统思想在单片机中的具体应用 (10-30)
- 基于AT89C51+DSP的双CPU伺服运动控制器的研究(05-26)
- 关于RTX51 TINY的分析与探讨(05-30)
- 基于MC9S12DGl28单片机的智能寻迹车设计(04-03)