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

看板ASM (組合語言)作者 (路人甲)時間11年前 (2013/09/05 20:01), 編輯推噓3(308)
留言11則, 4人參與, 最新討論串2/7 (看更多)
※ 引述《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

09/06 01:30, , 1F
(1<<bitn)需要在run time才能算, 比較花時間
09/06 01:30, 1F

09/06 01:32, , 2F
一般是用bit_mask的方法, #define bit0 0x01
09/06 01:32, 2F

09/06 01:33, , 3F
#define bit01 0x02
09/06 01:33, 3F

09/06 01:34, , 4F
#define bit2 0x04 (以下類推)
09/06 01:34, 4F

09/06 01:35, , 5F
就不用再shift了. (bit01為bit1之誤)
09/06 01:35, 5F

09/06 01:36, , 6F
要loop每個bit就 for(i=bit0; i; i<<=1) {...} 即可
09/06 01:36, 6F

09/06 21:07, , 7F
感恩...但若是換PORT的呢?比如原來PORTA 6腳換成PORB 3腳
09/06 21:07, 7F

09/07 19:32, , 8F
總是要舉一反三吧 方法很多的…
09/07 19:32, 8F

09/07 21:56, , 9F
這種事用MARCO不就好了?
09/07 21:56, 9F

09/08 20:03, , 10F
用run time好像要shift才能算,用macro好像不行..??
09/08 20:03, 10F

09/08 20:06, , 11F
我在想是否要用指標指到port位址,再用一個可變的mask非巨集
09/08 20:06, 11F
文章代碼(AID): #1IA7AHgf (ASM)
討論串 (同標題文章)
文章代碼(AID): #1IA7AHgf (ASM)