搜索
bottom↓
回复: 8

关于PIC系列单片机寄存器和源文件的关系....求解答..

[复制链接]

出0入0汤圆

发表于 2013-9-18 17:05:09 | 显示全部楼层 |阅读模式
由于以前写的程序也就1000行左右吧,不需要多个源文件,现在由于程序越来越大,需要多个源文件,遇到了一个问题,描述如下:
假设我作如下定义:
#define Test_a  PORTAbits.RA0      //这个定义在a.c源文件里
#define Test_b  PORTAbits.RA0     //这个定义在b.c源文件里
请问我在各自的源文件操作这个脚时,是操作的一个脚么,还有这样使用合法么;最后,如果我在a.c源文件里设置了这个脚的数据输入输出方向,那么我在另外一个b.c源文件使用同一个脚时,我还需要再次设置这个脚的数据输入输出方向么....

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2013-9-19 12:29:25 | 显示全部楼层
1.in the port.h:
#define Test_ra0  PORTAbits.RA0      //only one

2.do it in the a.c & b.c:
需要再次设置这个脚的数据输入输出方向.

出0入0汤圆

 楼主| 发表于 2013-9-19 16:57:56 来自手机 | 显示全部楼层
jlian168 发表于 2013-9-19 12:29
1.in the port.h:
#define Test_ra0  PORTAbits.RA0      //only one


哦……我明白了

出0入0汤圆

 楼主| 发表于 2013-9-20 10:14:31 来自手机 | 显示全部楼层
jlian168 发表于 2013-9-19 12:29
1.in the port.h:
#define Test_ra0  PORTAbits.RA0      //only one


突然想了想,还是有点不明白,如果我把一个函数写在一个源文件里,那我岂不是在主函数每次调用的时候都要设置数据的输入,输出方向???

出0入0汤圆

发表于 2013-9-20 10:19:07 | 显示全部楼层
程序弄的比较乱,对硬件I/O操作写入一个函数就可以了,其他源文件直接外部应用就可以了。

出0入0汤圆

 楼主| 发表于 2013-9-20 16:41:04 来自手机 | 显示全部楼层
wangqh1983 发表于 2013-9-20 10:19
程序弄的比较乱,对硬件I/O操作写入一个函数就可以了,其他源文件直接外部应用就可以了。 ...

因为以前我把io口的设置放在初始化函数的,现在看来是要另外写一个函数,或者在操作io口前设置了

出0入0汤圆

发表于 2013-9-21 09:13:26 | 显示全部楼层
RainKing 发表于 2013-9-20 16:41
因为以前我把io口的设置放在初始化函数的,现在看来是要另外写一个函数,或者在操作io口前设置了 ...

1.port.h:
#define Test_ra0  PORTAbits.RA0      //only one
#define Test_dira0  TRISAbits.RA0      //The name i forgot it...

2.a.c=output:
dira0=0,
test_ra0=0/1;  //out=0 or=1;

3.b.c=input:
#define swra0  XXXbits.0      //ex
dira0=1;
swra0=test_ra0;

出0入0汤圆

 楼主| 发表于 2013-9-22 23:05:44 | 显示全部楼层
jlian168 发表于 2013-9-21 09:13
1.port.h:
#define Test_ra0  PORTAbits.RA0      //only one
#define Test_dira0  TRISAbits.RA0      / ...

我的意思是说,这个脚的数据方向是设置在那个地方,我举个例子:

1   port.h:
#define Test_ra0  PORTAbits.RA0      //only one
#define Test_dira0  TRISAbits.RA0

2  a.c    //这个是主函数,调用b.c里面的函数


3  b.c  // 这个是函数

void set ()
{
   
}

void set1()
{
   
}

这两个函数都用到RA0脚,那么在主函数在调用这个两个函数时,每个函数里面各自都要设置RA0的数据方向么;如果是set调用set0的,是不是只需要在set里面设置里就可以了吧。

出0入0汤圆

 楼主| 发表于 2013-9-22 23:29:15 | 显示全部楼层
我查阅了一下资料,我个人认为是不需要在设置的,只要在主函数里面初始化之后就可以了...理由如下:(纯理论)
在使用寄存器时,我们都会用到pic18.h这个头文件,并且在每个源件里面都会写,那么此时的这个寄存器的变量应该是个全局性变量,在多个源文件里面是可以使用的,而且修改的时候是修改的同一个变量,所以我觉得只要在初始化函数里面设置后,在以后就不许要在设置了,除非你改脚的输入输出方向时。。。。。。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-25 12:17

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表