使用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的变化。