历史上的今天
今天是:2025年07月30日(星期三)
2018年07月30日 | PIC单片机入门_PICC的指向RAM的指针
2018-07-30 来源:eefocus
问题:
将30h,31h,32h单元中最大的数放入40h。
利用指向RAM的指针进行编程如下:
#include
static volatile unsigned char add1 @0x30;
static volatile unsigned char add2 @0x31;
static volatile unsigned char add3 @0x32;
static volatile unsigned char add @0x40;
main() //绝对地址定位
{ add1=0x51;
add2=0x5;
add3=0x60;
if(add1>add2) add=add1;
else add=add2;
if(add3>add) add=add3;
while(1){ ; }
}
注意:
本例中add1、add2、add3和add本质上都是地址,因此它们都是指向RAM的指针。在PICC中用指针进行寻址是通过FSR间接寻址的,因此add1=0x51以及add=add1都是以间接寻址方式进行赋值的。
以上程序中的指针add1、add2、add3和add都是指向bank0,假如要定义指向其他bank的指针也是可以的。
例如:
#include
//将绝对地址定位在不同的体
static volatile unsigned char add1 @0x30 ; //实际地址=30h
bank1 static volatile unsigned char add2 @0x31; //实际地址=(80h+31h)=0B1h
bank2 static volatile unsigned char add3 @0x32 ; //实际地址=80h*2+32h=132h
bank3 static volatile unsigned char add @0x40 ; //实际地址=80h*3+40h=1c0h
int x,y,z;
void comparison()
{ if (x>y)
z=x;
else
z=y; }
main()
{ add1=0x31; add2=0x34; add3=0x28;
x=add1; y=add2;
comparison();
x=z; y=add3;
comparison();
add=z;
while(1){ ; }
}
换一种思路:
也可以直接对三个常数进行比较大小,然后将最大的数存放在于bank3的某单元中。
#include
//符号定义
#define x_data 0xe0;
#define y_data 0x60;
#define z_data 0x90;
bank3 static volatile unsigned char add @0x40 ; //实际地址=80h*3+40h=1c0h
int x,y,z;
void comparison()
{ if (x>y)
z=x;
else
z=y;
}
main()
{ x = x_data ;
y = y_data;
comparison();
x = z;
y = z_data;
comparison();
add = z;
while(1){ ; }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.cs
史海拾趣
|
我原来有个摄像头,镜头为AVENIR 8.5-51MM的,有8根连接线分别是红、黄、蓝、绿、黑、白、棕、灰,从解码器接出来为黄(解码器)对红(镜头)、黑(解码器)对黑绿(镜头)、绿(解码器)对蓝(镜头),现在该摄像机换成了一体机了,但不知道怎么 ...… 查看全部问答> |
|
下面是程序: #include \"..\\config.h\" #define LED (1ul << 2)#define LED_INIT() GPIO2DIR |= LED &nb ...… 查看全部问答> |
|
最近要做一个基于Context-M3的无操作系统的项目,其中有一部分功能是要实现软件的在线更新。 我第一次做这方面的功能,没有什么经验,特来请教。 现在通信协议方面已经没有问题了,现在所面对的问题是: 如何将2进制文件写到Flash相应的地址上。 ...… 查看全部问答> |
|
在做PDA应用程序时碰到: D:\\WebService2\\WebService2\\TestWebService\\Form1.cs(26,13): 错误 CS0012: 类型“System.Web.Services.WebService”在未被引用的程序集中定义。必须添加对程序集“System.Web.Services, Version=2.0.0.0, Culture=n ...… 查看全部问答> |
|
BOOL CScanDlg::OnInitDialog() {CDialog::OnInitDialog(); GetDlgItem(IDC_EDIT1)->SetFocus(); } 请问代码有问题吗? 为什么 edit1 就是在运行后得不到焦点呢? 请问有什么办法才能使他得到焦点。… 查看全部问答> |
|
用VHDL语言编写出租车计费器程序 要求:按行驶里程收费。起步价8.00元(含3公里),5公里以内按1.80元/公里,5公里以后按2.20元/公里,5公里以内每0.5公里加价0.9元,5公里以后每0.5公里加价1.1元。车停止每3分钟算0.5公里。 希望高手帮忙!!! ...… 查看全部问答> |




