从数据存储类型来说,8051系列有片内、片外程序存储器,片内、片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code、data、xdata、idata以及根据51系列特点而设定的pdata类型,使用不同的存储器,将使程序执行效率不同,在编写C51程序时,最好指定变量的存储类型,这样将有利于提高程序执行效率(此问题将在后面专门讲述)。与ANSI-C稍有不同,它只分SAMLL、COMPACT、LARGE模式,各种不同的模式对应不同的实际硬件系统,也将有不同的编译结果。
在51系列中data,idata,xdata,pdata的区别:
data:固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小。
idata:固定指前面0x00-0xff的256个RAM,其中前128和data的128完全相同,只是因为访问的方式不同。idata是用类似C中的指针方式访问的。汇编中的语句为:mox ACC,@Rx.(不重要的补充:c中idata做指针式的访问效果很好)
xdata:外部扩展RAM,一般指外部0x0000-0xffff空间,用DPTR访问。
pdata:外部扩展RAM的低256个字节,地址出现在A0-A7的上时读写,用movx ACC,@Rx读写。这个比较特殊,而且C51好象有对此BUG,建议少用。但也有他的优点,具体用法属于中级问题,这里不提。
单片机C语言unsigned char code table[] code 是什么作用?
code的作用是告诉单片机,我定义的数据要放在ROM(程序存储区)里面,写入后就不能再更改,其实是相当与汇编里面的寻址MOVX(好像是),因为C语言中没办法详细描述存入的是ROM还是RAM(寄存器),所以在软件中添加了这一个语句起到代替汇编指令的作用,对应的还有data是存入RAM的意思。
程序可以简单的分为code(程序)区,和data (数据)区,code区在运行的时候是不可以更改的,data区放全局变量和临时变量,是要不断的改变的,cpu从code区读取指令,对data区的数据进行运算处理,因此code区存储在什么介质上并不重要,象以前的计算机程序存储在卡片上,code区也可以放在rom里面,也可以放在ram里面,也可以放在flash里面(但是运行速度要慢很多,主要读flash比读ram要费时间),因此一般的做法是要将程序放到flash里面,然后load到 ram里面运行的;DATA区就没有什么选择了,肯定要放在RAM里面,放到rom里面改动不了。
bdata如何使用它呢?
若程序需要8个或者更多的bit变量,如果你想一次性给8个变量赋值的话就不方便了,(举个例子说说它的方便之处,想更深入的了解请在应用中自己琢磨)又不可以定义bit数组,只有一个方法
char bdata MODE;
sbit MODE_7 = MODE^7;
sbit MODE_6 = MODE^6;
sbit MODE_5 = MODE^5;
sbit MODE_4 = MODE^4;
sbit MODE_3 = MODE^3;
sbit MODE_2 = MODE^2;
sbit MODE_1 = MODE^1;
sbit MODE_0 = MODE^0;
8个bit变量MODE_n 就定义好了
这是定义语句,Keilc 的特殊数据类型。记住一定要是sbit
不能 bit MODE_0 = MODE^0;
赋值语句要是这么些C语言就视为异或运算
关键字:单片机 C语言 data idata xdata pdata code
引用地址:
单片机C语言中的data,idata,xdata,pdata,code
推荐阅读最新更新时间:2024-03-16 14:32
基于单片机DS18B20温度报警系统 无线蓝牙显示
一、系统方案 随着科学技术的不断发展带动着电子行业的地位越来越重,现在电子产品几乎在社会的各个领域都可以见到。这些技术的发展有效的带动着社会生产力的发展和信息化的提高,同时电子产品也越来越智能。 本设计采用AT89C51单片机为主控芯片,采用数字型防水温度传感器DS18B20制作温度检测报警器,通过四位数码管显示温度值,系统设立几个按键,可以通过按键进行设置温度的上、下限值,当所采集温度超过设定值时,系统会控制蜂鸣器和对应LED发出声光报警。这个设计简单、成本低、具有实用性。 二、硬件设计 原理图如下: 三、单片机软件设计 1、首先是串口初始化: void Uart_init() { TMOD=0x20;//定时器0工作
[单片机]
单片机的PCB电磁干扰设计
对电磁干扰的设计我们主要从硬件和软件方面进行设计处理,下面就是从单片机的PCB设计到软件处理方面来介绍对电磁兼容性的处理。 一、影响EMC的因数 1.电压 电源电压越高,意味着电压振幅越大,发射就更多,而低电源电压影响敏感度。 2.频率 高频产生更多的发射,周期性信号产生更多的发射。在高频单片机系统中,当器件开关时产生电流尖峰信号;在模拟系统中,当负载电流变化时产生电流尖峰信号。 3.接地 有三种信号接地方法:单点、多点和混合。在频率低于1MHz时,可采用单点接地方法,但不适宜高频;在高频应用中,最好采用多点接地。混合接地是低频用单点接地,而高频用多点接地的方法。地线布局是关键,高频数字电
[单片机]
51单片机汇编语言-延时程序的延时时间
请高手帮我分析以下延时程序所占的时钟周期。 求解释: DELAY: MOV R6, #13 DELAY1: MOV R5, #250 DELAY2: NOP DJNZ R5, DELAY2 DJNZ R6, DELAY1 RET 问题补充:晶振为12MHz,机器周期即是1us。 ;----------------------------------------------------- 最佳答案: DELAY: MOV R6,#13 ;1 DELAY1: MOV R5,#250 ;1 DELAY2: NOP ;1 DJNZ R5,DELAY2 ;2 250 * (1 + 2) = 750 DJNZ R6,DELAY1 ;2 1
[单片机]
51单片机外部计数器的使用方法
T0的端口怎么使用?我想用p3.4口接一个霍尔开关接收脉冲进行计数,数值是放在TH0和TL0的!我的理解有没有错//初始化红外计数器 定义外部中断口P3.4为 脉冲触发模式 void Init_Sum_Ird(){ TMOD= 0x05 ; //开启计数器0 为16位计数器 EA= 1 ; //开总中断 ET0=1; //开外部中断 IT0=1; TR0=0; //禁用 // TH0=0; // TL0=0; sum_ird=0; //初始化计数值为 } //红外计数器的 中断0 计数累加 void Et0() interrupt 1{
[单片机]
51单片机:6位数码管动态显示,从600000开始,每0.5秒加1
原理图 ##//源码 #include reg52.h #include stdlib.h #define uint unsigned long #define uchar unsigned char sbit N1 = P1^0; sbit N2 = P1^1; sbit N3 = P1^2; sbit N4 = P1^3; sbit N5 = P1^4; sbit N6 = P1^5; uchar code table ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uint num; int a,t1=0; void delayms(uint
[单片机]
硅芯片助力汽车制动系统实现更高安全性
当今汽车电子工程师所面临的严峻挑战就是构建低成本、无故障(fail-silent)甚至在发生故障时也能正常工作的汽车系统。制动、转向以及其他车辆稳定控制功能都属于任务关键型特征,对安全有着极高的要求,即使电子底盘控制技术日益受到大众的青睐,也不能轻易应对上述挑战。 美国联邦政府要求未来所有的车辆都采用稳定控制技术。美国国家高速公路交通安全管理局(NHTSA)在公布上述要求时指出,该局进行的有关分析明确显示,装备了稳定控制技术的车辆发生碰撞事故的几率会减少35 %。电子稳定控制技术有望将总体重大伤亡事故以及单一车辆事故死亡率分别降低为43%和56%左右。 早在美国联邦政府制定上述规定之前,就已有预计显示,全球车辆电子
[汽车电子]
基于单片机的数控电流源设计
摘要:本文给出了一种基于单片机控制的数控电流源设计。本设计以PIC16F877A单片机为核心部件,采用PID算法实现了量程可选、输出可调、步进精确、纹波电流极小的功能,而且可将输出电流预置值、实测值在LED上同时显示。经实验测试证明,此设计具有较高的控制精度。 1 引言 电源技术尤其是数控电源技术是一门实践性很强的工程技术,涉及了电气、电子、系统集成、控制理论、材料等诸多学科领域。计算机和通讯技术的发展,给电力电子技术提供了广阔的发展前景,同时也给电源提出了更高的要求。普通电源由于精确度不高等缺点已不能满足现实的需要。直到单片机技术及电压转换模块的出现,才使精确数控电源的发展有了可能。本文所设计的数控电流源采用PIC16F87
[单片机]
IAR全面支持小华全系芯片,强化工控及汽车MCU生态圈
IAR Embedded Workbench for Arm已全面支持小华半导体系列芯片,加速高端工控MCU和车用MCU应用的安全开发 中国,上海 – 2024年3月7日 - 嵌入式开发软件和服务的全球领导者IAR与小华半导体有限公司(以下简称“小华半导体”)联合宣布, IAR Embedded Workbench for Arm已全面支持小华半导体系列芯片 ,涵盖通用控制、电机控制、汽车电子、超低功耗四大产品线,用户可通过IAR嵌入式工具安全且高效地开发小华半导体全系列芯片,降低项目成本,加速产品上市。 小华半导体是中国电子信息产业集团有限公司旗下集成电路业务平台华大半导体有限公司的核心子公司。小华半导体以技术创新为动力
[嵌入式]