作者icetofux (豆腐)
看板Electronics
標題[問題] 我想用C51模擬串列式輸出
時間Thu Dec 7 23:45:43 2006
我想用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
→ gpentacene:為何不直接用RS232串列輸出腳(P3.x),你自己寫,還要 12/08 06:44
→ gpentacene:自己定義通訊協定。 12/08 06:45
→ icetofux:因為硬體線路別人已經規劃好了,板子也洗出來了, 12/08 08:35
→ icetofux:所以我只能依照他的硬體設計下去寫XD 12/08 08:37
推 luckyBF:可以用MOV PORT2.1,ACC.0 的樣子!! 12/08 11:11
→ luckyBF:這樣就只會定一隻腳的bit為0或1了 12/08 11:12
→ luckyBF:我之前寫也是自己定協定~其實不難寫XD 12/08 11:12
→ icetofux:其實我不太了解什麼是協定,我只知道接收端有2個, 12/08 12:37
→ icetofux:一個是DATA INPUT另一個是CLOCK 12/08 12:37
→ icetofux:我卡在DATA INPUT的地方 12/08 12:38
推 luckyBF:所以用我的方法看看!!我記得是可以沒問題才是 12/08 12:39
→ icetofux:我先來找找看您所提供的方法相關資料,謝謝~ 12/08 12:38
推 luckyBF:ok~~看mov指令就行了XD~~不然的話!!就是用回文裡的SETB 12/08 12:41
※ 編輯: icetofux 來自: 203.67.181.135 (12/08 17:09)
→ icetofux:抱歉我找不到你說的方法 12/08 17:09
→ icetofux:所以改用第2種方法:直接對PORT2.1做CLR或是SEBT 12/08 17:10
→ icetofux:像這樣子應該就可以避開輸出資料是8-BIT的問題了對嗎? 12/08 17:11
推 luckyBF:是的!! 12/08 21:47