PIC单片机入门_PICC的指向RAM的指针

问题:

将30h,31h,32h单元中最大的数放入40h。

利用指向RAM的指针进行编程如下:


<span style="font-size:18px;">#include <pic.h>
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){  ;   }
}</span>

注意:

本例中add1、add2、add3和add本质上都是地址,因此它们都是指向RAM的指针。在PICC中用指针进行寻址是通过FSR间接寻址的,因此add1=0x51以及add=add1都是以间接寻址方式进行赋值的。

以上程序中的指针add1、add2、add3和add都是指向bank0,假如要定义指向其他bank的指针也是可以的。

例如:

<span style="font-size:18px;">#include<pic.h>
//将绝对地址定位在不同的体
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){  ;    }
}</span>

换一种思路:

也可以直接对三个常数进行比较大小,然后将最大的数存放在于bank3的某单元中。

<span style="font-size:18px;">#include<pic.h>
//符号定义
#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){  ;  }
}</span>

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值