欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
求助51單片機怎樣通過索引獲取地址中的數據
[打印本頁]
作者:
1224527279
時間:
2020-8-3 09:41
標題:
求助51單片機怎樣通過索引獲取地址中的數據
我的目的是在數據數組中存放著一組數據,然后通過另一個數組所謂索引儲存著數據數組的地址,然后在主函數中只需要通過指針訪問索引中的數據數組的地址就可以獲得數據。
麻煩大神幫忙找下問題點,提供點思路
/////////////////////////////////
#include "reg51.h"
#include "intrins.h"
//測試工作頻率為11.0592MHz
unsigned char code dat[1]={0x55};
unsigned char code address[1]={&dat};
sfr T2L = 0xd7;
sfr T2H = 0xd6;
sfr AUXR = 0x8e;
void UART1_init()
{
SCON = 0x50;
T2L = 0xe8; //65536-11059200/115200/4=0FFE8H
T2H = 0xff;
AUXR = 0x15; //啟動定時器
ES = 1; //使能串口中斷
EA = 1;
}
void UART1_Interrupt() interrupt 4
{
if (TI)
{
TI = 0; //清中斷標志
P10 = !P10; //測試端口
}
if (RI)
{
RI = 0; //清中斷標志
P11 = !P11; //測試端口
}
}
void main()
{
unsigned int j,*addr;
UART1_init();
j=address[1];//將address中儲存的地址賦給j
*addr=j;//將j的地址賦給指針
SBUF=*addr;
while (1);
}
////////////////////////////////////////////////////////////
{
90_O4BCA7HC~BMKGAHYU}QO.png
(56.33 KB, 下載次數: 68)
下載附件
2020-8-3 09:33 上傳
作者:
1692483014
時間:
2020-8-3 09:41
你這樣用指針就把你的程序玩壞了。
unsigned char code dat[4]={0x11, 0x22, 0x33, 0x44};
unsigned char *pAddr;
如果讓pAddr = &dat[0];
那么*pAddr和pAddr[0]則為0x11;
如果繼續進行如下操作:pAddr++;
那么*pAddr和pAddr[0]則為0x22;
如果此時重新給指針賦值:pAddr = &dat[3];
那么*pAddr和pAddr[0]則為0x44;
如果繼續進行如下操作:pAddr--;
那么*pAddr和pAddr[0]則為0x33;
且*(pAddr+1)和pAddr[1]則為0x44;
總結:將指針指向某個數組地址后,該指針則存儲其對應數組的起始地址,指針如果增加或者減小,它存儲的地址就相應的偏移,且偏移的大小由指針定義時的類型來決定。我們這個例子是uchar型,所以是8bit。我們隨時可以用*或者數組的方式從對應的地址取出數據。取出數據的寬度是指針類型的寬度,與數組無關。
例如:
對于32位的單片機:
unsigned char code dat[4]={0x11, 0x22, 0x33, 0x44};
unsigned int *pAddr;
那么pAddr[0]或者*pAddr的值是多少呢?
在小端模式下:答案是0x44332211
在小端模式下:答案是0x11223344
你可以測試一下 51是什么模式。
作者:
1224527279
時間:
2020-8-3 10:40
那個中斷中的P10和P11那句請忽略
作者:
tyrl800
時間:
2020-8-3 10:50
定義指針變量就可以查數組元素了
作者:
1224527279
時間:
2020-8-3 14:26
已解決
#include "reg51.h"
#include "intrins.h"
//測試工作頻率為11.0592MHz
unsigned int dat[4]={0xb5b5,0xb5b6,0xb5b7,0xb5b8};
long code address[1]={&dat};
int num[4];
sfr T2L = 0xd7;
sfr T2H = 0xd6;
sfr AUXR = 0x8e;
void UART1_init()
{
SCON = 0x50;
T2L = 0xe8; //65536-11059200/115200/4=0FFE8H
T2H = 0xff;
AUXR = 0x15; //啟動定時器
ES = 1; //使能串口中斷
EA = 1;
}
void UART1_Interrupt() interrupt 4
{
if (TI)
{
TI = 0; //清中斷標志
}
if (RI)
{
RI = 0; //清中斷標志
}
}
void main()
{
unsigned int i;
unsigned int *addr;
UART1_init();
addr=address[0];
for(i=0;i<4;i++)
{
num[i]=*addr;//將address中儲存的地址賦給j
addr++;
}
while (1);
}
作者:
1224527279
時間:
2020-8-3 14:28
修改索引數組數據類型,索引數據類型改為32位
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1