怎么用c语言指针读取51单片机TL0中的数据?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么用c语言指针读取51单片机TL0中的数据?相关的知识,希望对你有一定的参考价值。

/*
程序名:T0计数
简介:用指针取出TL0中的数据在数码管中显示小于10的部分

*/
#include <reg52.h>

//类型别名列表:
typedef unsigned char uint8;
typedef unsigned int uint16;

//LED模块与单片机连接关系:
#define SEG_CODE P2
sbit KEY_CLEAR = P1^7;

//定义字码列表:
uint8 code SegTable[]= //共阳极数码管
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e;
//定义变量:
unsigned int * const DATA=(unsigned int *)0x008a;
uint16 counter;

//函数声明列表:
void DelayMs(uint16); //延时函数(ms)
void timer0_init();

//=============================================代码段========================================================
void main()

timer0_init();
while(1)

if(0==KEY_CLEAR)

DelayMs(10);
if(0==KEY_CLEAR)

TH0=0x00;
TL0=0x00;

while(0==KEY_CLEAR)

counter= * DATA;
SEG_CODE = SegTable[counter];


counter= * DATA;
SEG_CODE = SegTable[counter];



//延时函数(ms):
void DelayMs(uint16 ms)

uint16 i;
for(ms;ms>0;ms--)
for(i=125;i>0;i--);

//计数器0初始化:
void timer0_init()

TMOD=0x05;
TH0=0x00;
TL0=0x00;

ET0=1;
EA=1;

TR0=1;

你是想说指针指向的地址就是TH0的地址吗,那样的话应该是不可能读取的到的,指针是间接寻址,而51高128位的特殊功能寄存器是需要直接寻址才能访问到的,
unsigned int * const DATA=(unsigned int *)0x008a这个定义也是错的 8a地址在高128位应该是idata为不是DATA
参考技术A 楼主应该另有需求。

你是将你的需求逼入死胡同,应该走出来,另寻他法。绝大多机器的寄存器都不允许使用指针寻址。
目前,我也没有读出lz用指针读取TL0的必要性。其实TL0的地址是已知的,不必用指针。为了移植,你到可以使用宏。
参考技术B char * p = NULL;
*p = TL0;

单片机C语言 -- 结构体与指针在编程中的应用

单片机C语言 -- 结构体与指针在编程中的应用 

一、基础知识

1、结构体

由一系列具有相同类型或不同类型的数据构成的数据集合,叫做结构体。

进行单片机编程时,为了方便程序阅读、移植、维护,将外设看作一个对象,而对象包含数据、数据集与行为,对应程序中的变量、数组与函数。通过结构体,可以将变量、数组与函数进行封装,定义为新的数据类型。编程时,CPU可以通过新的数据类型,访问外设的变量、数组与函数,非常方便。

 

   结构体定义新的数据类型:

   typedef  struct

   {

变量;

指针;

函数指针;

} 新数据类型_t

 

  之后,我们就可以用新的数据类型定义结构体变量。

 

2、变量

整型8位,16位,32位变量,浮点型变量等。

注意:结构体中不能定义位变量。

3、指针

定义如下:

变量类型 *指针名;

4、函数指针

定义如下:

返回值类型 ( * 指针变量) ([形参列表])

 

二、文件结构

通常包含两个文件,分别的外设.c文件与外设.h文件。.h文件主要内容为枚举类型定义、结构体类型定义、结构体变量声明为外部变量;.c文件主要内容为数组定义、结构体变量定义与初始化、静态函数等。

1、外设.h文件

①、枚举类型       -> 用于声明一组常数,可以用#define代替;

②、结构体类型定义 -> 定义结构体类型,系统并不会分配内存;

③、结构体变量声明 -> 声明为外部变量后,CPU或其它外设才可以通过结构体访问外设。

 

2、、外设.c文件

②、结构体变量定义 -> .h文件只是定义了结构体类型,并没有定义结构体变量。结构体变量在.c文件定义,并且需要进行初始化。变量初始化为一数值,指针初始化为数组名,函数指针初始化为函数名;

③、 静态函数 ->外设的函数,对外部是不可见的,可以声明为static类型,函数必须通过结构体的函数指针进行访问。

 

三、编程举例

1、Timer0.h文件

 



①、枚举类型定义   -> 定义定时值,可以根据需要添加;

②、结构体类型定义 -> 定义了系统运行定时器变量与定时器0初始化函数指针;

 

2、Timer0.c文件

 



①、定义了结构体变量Timer0,并进行了初始化;

②、Timer0_Init()为结构体函数指针指向的函数。

 

3、应用举例

①、变量访问

Timer0.usMCU_Run_Timer = TIMER0_1S;

②、函数访问

Timer0.Timer0_Init(); //定时器初始化


  硬件家园     yjjy168168168

   

 




以上是关于怎么用c语言指针读取51单片机TL0中的数据?的主要内容,如果未能解决你的问题,请参考以下文章

51单片机C语言编程问题,关于指针的运用问题,菜鸟求解求。

51单片机汇编中的寄存器R0、R1、R2如果用c语言写的话怎么表示

c语言编写一个程序,在电脑上读取单片机用Wi-Fi返回的数值怎么做

51单片机可以通过指针访问寄存器吗

51单片机访问片内数据存储器某单元的内容用c语言怎么写???

keil2编51单片机程序c 指针赋值提示重复定义,怎么解决