目录
直接访问物理地址下的数据
1、访问硬件指定内存下的数据
1、如设备ID号:
2、将复杂格式的数据转换为字节,方便通信与存储
直接访问物理地址下的数据
1、访问硬件指定内存下的数据
1、如设备ID号:
#include <REGX52.H>
#include "LCD1602.h"
/*
LCD1602打印单片机的ID号
*/
void main()
{
unsigned char *p;
unsigned char code *x; //访问程序存储区
LCD_Init();
// LCD_ShowString(1,1,"HelloWorld!");
p = (unsigned char *)0xF1; //RAM区的ID号
x = (unsigned char *)0x1FF9; //8k程序存储区(flash) 0x1FF9为ROM区ID地址
/*RAM区与ROM区ID号相同*/
LCD_ShowHexNum(1,1,*p,2);
LCD_ShowHexNum(1,3,*(p+1),2);
LCD_ShowHexNum(1,5,*(p+2),2);
LCD_ShowHexNum(1,7,*(p+3),2);
LCD_ShowHexNum(1,9,*(p+4),2);
LCD_ShowHexNum(1,11,*(p+5),2);
LCD_ShowHexNum(1,13,*(p+6),2);
LCD_ShowHexNum(2,1,*x,2);
LCD_ShowHexNum(2,3,*(x+1),2);
LCD_ShowHexNum(2,5,*(x+2),2);
LCD_ShowHexNum(2,7,*(x+3),2);
LCD_ShowHexNum(2,9,*(x+4),2);
LCD_ShowHexNum(2,11,*(x+5),2);
LCD_ShowHexNum(2,13,*(x+6),2);
while(1)
{
}
}
?
?
2、将复杂格式的数据转换为字节,方便通信与存储
#include <stdio.h>
/*将复杂格式的数据转换为字节,方便通信与存储*/
/*用指针将float型数据发送至单片机*/
/*
float型 -> 数组 -> float型
*/
/*******************************/
unsigned char AirData[20];
unsigned char DataReceive[4];
/*发送数据*/
void SendData(const unsigned char *data,unsigned char count)
{
unsigned char i;
for(i=0;i<count;i++)
{
AirData[i]=data[i]; //将转换为数组的地址赋值给数组AirData[]
}
}
/*接收数据*/
void ReceiveData(unsigned char *data,unsigned char count)
{
unsigned char i;
for(i=0;i<count;i++)
{
data[i]=AirData[i]; //数据接收
}
}
/*******************************/
int main(void)
{
float num = 0.125;
float *fp;
unsigned char i;
unsigned char *p;
p = (unsigned char *)# //指针初始化 (unsigned char *)强制类型转化为同一级别
SendData(p,4); //(不用理解,拿去用)发送数组地址值 将浮点型数据(0.125) 转化为 四个字节的数组(float) 为四字节
/*****************************/
printf("\nAirData=");
for(i=0;i<4;i++)
{
printf("%x",AirData[i]);
}
/****************************/
ReceiveData(DataReceive,4); //读取数据
fp = (float *)DataReceive; //在转化为float型数据
printf("\nnum=%f",*fp);
return 0;
}
?
|