Re: [問題] 同樣輸出pulse想從不同腳位送出..

作者: ruemann (路人甲)   2013-09-05 20:01:19
※ 引述《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);
}
作者: ksmrt0123 (ksmrt)   2013-09-06 01:30:00
(1<<bitn)需要在run time才能算, 比較花時間一般是用bit_mask的方法, #define bit0 0x01#define bit01 0x02#define bit2 0x04 (以下類推)就不用再shift了. (bit01為bit1之誤)要loop每個bit就 for(i=bit0; i; i<<=1) {...} 即可
作者: qeagle   2013-09-06 21:07:00
感恩...但若是換PORT的呢?比如原來PORTA 6腳換成PORB 3腳
作者: ruemann (路人甲)   2013-09-07 19:32:00
總是要舉一反三吧 方法很多的…
作者: WolfLord (呆呆小狼￾ ￾ N￾ ￾ )   2013-09-07 21:56:00
這種事用MARCO不就好了?
作者: qeagle   2013-09-08 20:03:00
用run time好像要shift才能算,用macro好像不行..??我在想是否要用指標指到port位址,再用一個可變的mask非巨集

Links booklink

Contact Us: admin [ a t ] ucptt.com