在keil中使用bdata型可位寻址全局变量

使用keil开发51单片机下位机程序,希望使用dbata型全局变量。首先了解一下51的片内RAM.

51单片机中,片内RAM分为data,bdata,和idata,

    data指前面0x00-0x7f 128个字节。

    idata指的是0-0xFF 这256个字节存储区。前128个字节同data完全相同。

    bdata是片类可位寻址的存储区,地址位0x20-0x2f 的16字节存储区,和可位寻址的特殊功能寄存器。

不同于一般的全局变量,用bdata申明的变量在头文件中不能添加extern关键字,否则编译器提示my.h(6): error C142: 't1': invalid base address。

为此写了一个测试,并设置断点观察变量的变化。

my.h

#ifndef __my_h__
#define __my_h__
#include <reg52.h>
char bdata t1 ;//_at_ 0x20;
sbit t2=P1^0;
sbit t1_7=t1^7;
extern void test();
#endif

my.c

#include "my.h"
//char bdata t1 _at_ 0x20;
void test()
{
	t1_7=0;
}

test.c

#include <reg52.h>
#include "my.h"
main()
{
	while(1)
	{
		t2=~t2;
		t1_7=~t1_7;
		test();//在此设置断点
	}
}
调试时候打开,view/watch windows 查看t1_7的变化。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值