作者ruemann (路人甲)
看板ASM
标题Re: [问题] 同样输出pulse想从不同脚位送出..
时间Thu Sep 5 20:01:19 2013
※ 引述《qeagle ()》之铭言:
: 请教一个问题..
: 若我想写一个输出时序,依次由不同脚位送出
: 是否程式一定要重覆copy,换成不同脚位
: 还是有办法写成副函式去呼叫
: 我的问题点是因为脚位好像无法定义成变数
: 还是用指标或其它高阶方法可以达成??
for example
假定要输出P0的某个bit,sign则代表要输出的讯号(1,0)
例如out(1,0)就由P0.1输出0
void out(unsigned char bitn, bit sign)
{
if ( 0 == sign )
P0 &= ~(1<<bitn);
else
P0 |= (1<<bitn);
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.120.187.94
1F:推 ksmrt0123:(1<<bitn)需要在run time才能算, 比较花时间 09/06 01:30
2F:→ ksmrt0123:一般是用bit_mask的方法, #define bit0 0x01 09/06 01:32
3F:→ ksmrt0123: #define bit01 0x02 09/06 01:33
4F:→ ksmrt0123: #define bit2 0x04 (以下类推) 09/06 01:34
5F:→ ksmrt0123:就不用再shift了. (bit01为bit1之误) 09/06 01:35
6F:→ ksmrt0123:要loop每个bit就 for(i=bit0; i; i<<=1) {...} 即可 09/06 01:36
7F:推 qeagle:感恩...但若是换PORT的呢?比如原来PORTA 6脚换成PORB 3脚 09/06 21:07
8F:→ ruemann:总是要举一反三吧 方法很多的… 09/07 19:32
9F:→ WolfLord:这种事用MARCO不就好了? 09/07 21:56
10F:→ qeagle:用run time好像要shift才能算,用macro好像不行..?? 09/08 20:03
11F:推 qeagle:我在想是否要用指标指到port位址,再用一个可变的mask非巨集 09/08 20:06