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

2019-04-15 11:40发布

问题:

将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){ ; } }