[問題] 我想用C51模擬串列式輸出

看板Electronics作者 (豆腐)時間19年前 (2006/12/07 22:59), 編輯推噓4(4013)
留言17則, 3人參與, 最新討論串1/4 (看更多)
我想用C51系列單晶片模擬資料串列式輸出,買了一本書來看,並且大致上有了流程的草稿 ,不過因為不是很確定某些細節能否依照自己的想法處理,書上也沒有提供太多資料可參 考,所以想請大家幫我看看是否可行? 想要做到的功能: 先從PORT1(PORT1.0~PORT1.7)讀入8-BIT的數值,接著經過運算處理,再從PORT2.1從8-BIT 數值的最低位元依序丟出。 我的想法是: 先讀入8-BIT的數值,接著把此數值與0000 0001做AND,以保留最後一個BIT,接著把這個 BIT從PORT2.1丟出,然後對從PORT1讀入的數值做右旋,並且重複AND及丟出的動作。 這是我的想像流程: 假設讀入數值是 01010101 AND 00000001 得到 00000001(1-BIT的數值:1) 丟到PORT2.1 00000001(PORT2.1輸出1) 右旋讀入數值 10101010 AND 00000001 得到 00000000(1-BIT的數值:0) 丟到PORT2.1 00000000(PORT2.1輸出0) . . . 重複8次相同動作就可以把8-BIT的數值轉換成1-BIT數值依序輸出了。 讀入數值並且存入暫存器中書上有很詳盡的說明,所以我就省略了,假設讀入的8-BIT數值 我存放在暫存器R1,我的推測的寫法是: MOV R0,#8 ;R0為右旋8次用的計數暫存器 MOV A,R1 ;R1是從PORT1讀入的數值 LOOP: MOV R2,A ;將目前右旋結束後的值(8-BIT)保留於R2 ANL A,#00000001 ;把A中的值與00000001做AND並丟回A CALL CHECK ;進入CHECK副程式 MOV A,R2 ;將剛剛右旋結束的值(8-BIT)讀回A RR A ;右旋A中的值 DJNZ R0,LOOP ;計數暫存器R0的值-1如果不是0(還沒轉8次)回到LOOP . . . CHECK: JZ LOW ;如果暫存器A為0跳至LOW JNZ HIGH ;如果暫存器A不為0(是1)跳至HIGH HIGH: SEBT P2.1 ;讓PORT2.1為1 LOW: CLR P2.1 ;讓PORT2.1為0 RET ;回到主程式 但是有個地方我有點疑問,就是書上有介紹把8-BIT的數值丟入PORT2可以讓8個LED依照數 值發光或不發光,但是像我這樣把1-BIT的數值指定丟到PORT2中的2.1會被接受嗎?另外 對晶片而言0000 0001或是0000 0000這兩種資料,究竟是8-BIT還是1-BIT呢? - 文有點長,謝謝你耐心的看完,仔細想想還真諷刺,以前專科上實習課總認為一輩子不會 用到這東西所以用得過且過的心態在上課,沒想到事隔多年忽然需要用到,不但掏錢買了 本書,還只花了一週就把一學期的實習內容給硬看完,人生真是難以預料XD -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.230.83.74

12/08 06:44, , 1F
為何不直接用RS232串列輸出腳(P3.x),你自己寫,還要
12/08 06:44, 1F

12/08 06:45, , 2F
自己定義通訊協定。
12/08 06:45, 2F

12/08 08:35, , 3F
因為硬體線路別人已經規劃好了,板子也洗出來了,
12/08 08:35, 3F

12/08 08:37, , 4F
所以我只能依照他的硬體設計下去寫XD
12/08 08:37, 4F

12/08 11:11, , 5F
可以用MOV PORT2.1,ACC.0 的樣子!!
12/08 11:11, 5F

12/08 11:12, , 6F
這樣就只會定一隻腳的bit為0或1了
12/08 11:12, 6F

12/08 11:12, , 7F
我之前寫也是自己定協定~其實不難寫XD
12/08 11:12, 7F

12/08 12:37, , 8F
其實我不太了解什麼是協定,我只知道接收端有2個,
12/08 12:37, 8F

12/08 12:37, , 9F
一個是DATA INPUT另一個是CLOCK
12/08 12:37, 9F

12/08 12:38, , 10F
我卡在DATA INPUT的地方
12/08 12:38, 10F

12/08 12:39, , 11F
所以用我的方法看看!!我記得是可以沒問題才是
12/08 12:39, 11F

12/08 12:38, , 12F
我先來找找看您所提供的方法相關資料,謝謝~
12/08 12:38, 12F

12/08 12:41, , 13F
ok~~看mov指令就行了XD~~不然的話!!就是用回文裡的SETB
12/08 12:41, 13F
※ 編輯: icetofux 來自: 203.67.181.135 (12/08 17:09)

12/08 17:09, , 14F
抱歉我找不到你說的方法
12/08 17:09, 14F

12/08 17:10, , 15F
所以改用第2種方法:直接對PORT2.1做CLR或是SEBT
12/08 17:10, 15F

12/08 17:11, , 16F
像這樣子應該就可以避開輸出資料是8-BIT的問題了對嗎?
12/08 17:11, 16F

12/08 21:47, , 17F
是的!!
12/08 21:47, 17F
文章代碼(AID): #15U2ngF5 (Electronics)
文章代碼(AID): #15U2ngF5 (Electronics)