PCDVD數位科技討論區
PCDVD數位科技討論區   註冊 常見問題 標記討論區為已讀

回到   PCDVD數位科技討論區 > 其他群組 > 七嘴八舌異言堂
帳戶
密碼
 

  回應
 
主題工具
蒼藍的月光
Senior Member
 

加入日期: Jan 2004
您的住址: 高雄市
文章: 1,244
引用:
作者asccpu
我舉個例子好了,其他的就由你去體會了或是由他人發揮
假設 PORT 0的狀態是 10000001,現在要把bit4變1,但不改其他值,所以最終狀態是 10010001。
原值是81h(稱A值),現在要加入10h(稱B)之值,要如何才得出91h,有點要注意,這不是算術問題,而是位元運算。
上面的程式是A值送出後,再送B值,A的結果被B取代了....

不過,我有疑問,送同一值出去,紅藍不會同時亮嗎?還是????
LED如何接?


哦...這點小弟到是疏忽了;採用的是單顆紅藍雙色LED(即一顆

LED裡有紅藍兩種顏色) ,所以紅藍一起亮是呈現紫色

嗯....大大您先看看小弟的想法

現在要讓紅色 32 顆 LED 左旋;藍色 32顆 LED 右旋

因為一個埠只有 8 個 I/O 只能驅動 8 顆 LED

所以 8 X 4( P0 & P1 & P2 & P3 總共 4個埠) = 32 顆 LED

然後要讓 P0 & P1 & P2 & P3 動作可以連續下去

所以採用 RRC 和 RLC 這兩個旋轉指令;這樣紅色和藍色

4 個埠的值就可以連續位移下去

所以先讓紅色 4 個埠 的資料都位移一次透過LED顯示出來

藍色 4 個埠 的資料都位移一次透過LED顯示出來

這樣我們看起來,就好像紅色藍色LED各自從 P0.6

移動

不知道大大您目前知道小弟的觀念和想法了嗎!?@_@!?
     
      
舊 2006-07-22, 01:23 AM #21
回應時引用此文章
蒼藍的月光離線中  
asccpu
Master Member
 

加入日期: Jan 2002
您的住址: U.S.S AGC
文章: 1,669
那如何決定要亮紅的藍的?
都是32個,表每一PIN一定接紅藍各一,你是輸出LO時點亮的吧。
LED是3PIN吧。
你的程式似乎有個隱藏的大BUG,我51只玩半年,而是4年前的事了,不過我總覺得會有這個BUG,也可能我多慮,這個就由其他熟人出來証實了。
 
__________________
辭源數位化計劃啟始於2014年1月。請拜訪成果。
舊 2006-07-22, 03:36 PM #22
回應時引用此文章
asccpu離線中  
ElvisTu
*停權中*
 
ElvisTu的大頭照
 

加入日期: Aug 2003
文章: 226
引用:
作者蒼藍的月光
感謝yhboy 和 finkel 兩位大大的解惑,小弟了解了

想再請問一下

CLK1: REG 40H.0
CLK2: REG 40H.1
CLK3: REG 40H.2
CLK4: REG 40H.3
CLK5: REG 40H.4
CLK6: REG 40H.5
CLK7: REG 40H.6
CLK8: REG 40H.7

CLR 40H.7
MOV A,#40H
MOV P0,A


那這樣 A 的值還會是 40H(即 0100 0000)嗎!?

另外 finkel 大大您是學 keil C 的嗎!?

光看這二行…就會覺得…上面是多寫的…

A=#40H

再輸出A,那當然是01000000b 囉……

我已經很久沒碰了…還是看得懂ㄝ~~~

當然如果是mov A,40H 那又另當別論了…

此文章於 2006-07-22 04:02 PM 被 ElvisTu 編輯.
舊 2006-07-22, 03:59 PM #23
回應時引用此文章
ElvisTu離線中  
蒼藍的月光
Senior Member
 

加入日期: Jan 2004
您的住址: 高雄市
文章: 1,244
引用:
作者asccpu
那如何決定要亮紅的藍的?
都是32個,表每一PIN一定接紅藍各一,你是輸出LO時點亮的吧。
LED是3PIN吧。
你的程式似乎有個隱藏的大BUG,我51只玩半年,而是4年前的事了,不過我總覺得會有這個BUG,也可能我多慮,這個就由其他熟人出來証實了。


沒錯!!LED就是3的PIN 大大您真內行!^^!

小弟想到一點可能就是 的C值就有問題

因為左旋完之後接著又右旋

那就是左旋完之後的 C值又被右旋接著繼續用

但這就是小弟不太懂的地方

如果真的是這樣 那應該紅藍LED還是會繼續左旋右

旋下去,只是右旋的動作會不正確才對

可是現在看起來只有右旋才有動作....Orz
舊 2006-07-22, 05:44 PM #24
回應時引用此文章
蒼藍的月光離線中  
蒼藍的月光
Senior Member
 

加入日期: Jan 2004
您的住址: 高雄市
文章: 1,244
引用:
作者ElvisTu
光看這二行…就會覺得…上面是多寫的…

A=#40H

再輸出A,那當然是01000000b 囉……

我已經很久沒碰了…還是看得懂ㄝ~~~

當然如果是mov A,40H 那又另當別論了…


大大您真是一語驚醒夢中人呀....!^^!

小弟終於明白了!n_n!甘溫唷.....!^^!
舊 2006-07-22, 05:45 PM #25
回應時引用此文章
蒼藍的月光離線中  
asccpu
Master Member
 

加入日期: Jan 2002
您的住址: U.S.S AGC
文章: 1,669
引用:
作者蒼藍的月光
沒錯!!LED就是3的PIN 大大您真內行!^^!

小弟想到一點可能就是 的C值就有問題

因為左旋完之後接著又右旋

那就是左旋完之後的 C值又被右旋接著繼續用
但這就是小弟不太懂的地方
如果真的是這樣 那應該紅藍LED還是會繼續左旋右
旋下去,只是右旋的動作會不正確才對
可是現在看起來只有右旋才有動作....Orz

想到了呀,沒錯,這就是BUG所在,事實上你是在旋轉33bit
而你一開始在旋轉前的 C的內值是如何你不知道,所以你要準備2個bit用來各別存放第33bit的狀態。
例如:
C_RLC_LAST_STA REG 48H.0
C_RRC_LAST_STA REG 48H.1

在你的 L_CHANGE: 中的第一行及RET前一行加上
MOV C,C_RLC_LAST_STA (我忘了有沒有這樣的用法,若沒有就自行替換)
....... 原本程式 ......
MOV C_RLC_LAST_STA,C
RET

同樣在 R_CHANGE: 也是加入...
MOV C,C_RRC_LAST_STA
........
MOV C_RRC_LAST_STA,C
RET

而程式一開始就先把1存入C_RLC_LAST_STA 及C_RRC_LAST_STA 內。
而至於為何沒出錯,可能與你目前程式比較單純有關,等程式一大這BUG就會慢慢顯現出來。
你工作的地方沒有ICE或模擬器嗎?
這用單步追蹤幾次就差不多知道問題所在了。
__________________
辭源數位化計劃啟始於2014年1月。請拜訪成果。
舊 2006-07-22, 07:29 PM #26
回應時引用此文章
asccpu離線中  
蒼藍的月光
Senior Member
 

加入日期: Jan 2004
您的住址: 高雄市
文章: 1,244
引用:
作者asccpu
想到了呀,沒錯,這就是BUG所在,事實上你是在旋轉33bit
而你一開始在旋轉前的 C的內值是如何你不知道,所以你要準備2個bit用來各別存放第33bit的狀態。
例如:
C_RLC_LAST_STA REG 48H.0
C_RRC_LAST_STA REG 48H.1

在你的 L_CHANGE: 中的第一行及RET前一行加上
MOV C,C_RLC_LAST_STA (我忘了有沒有這樣的用法,若沒有就自行替換)
....... 原本程式 ......
MOV C_RLC_LAST_STA,C
RET

同樣在 R_CHANGE: 也是加入...
MOV C,C_RRC_LAST_STA
........
MOV C_RRC_LAST_STA,C
RET

而程式一開始就先把1存入C_RLC_LAST_STA 及C_RRC_LAST_STA 內。
而至於為何沒出錯,可能與你目前程式比較單純有關,等程式一大這BUG就會慢慢顯現出來。
你工作的地方沒有ICE或模擬器嗎?
這用單步追蹤幾次就差不多知道問題所在了。

.CHIP 8052
;----------------------------------------------
ORG 0000H
LCALL DELAY
RL_C REG 30H.0
RR_C REG 30H.1
SETB 30H.0
SETB 30H.1
;----------------------------------------------
MOV 40H,#DFH
MOV 41H,#FFH
MOV 42H,#FFH
MOV 43H,#FFH
MOV 44H,#DFH
MOV 45H,#FFH
MOV 46H,#FFH
MOV 47H,#FFH
;----------------------------------------------
LOOP:
MOV C,RL_C
LCALL L_DATA
MOV A,40H
MOV P0,A
MOV A,41H
MOV P1,A
MOV A,42H
MOV P2,A
MOV A,43H
MOV P3,A
MOV RL_C,C
LCALL DELAY1
;----------------------------------------------
MOV C,RR_C
LCALL R_DATA
MOV A,44H
MOV P0,A
MOV A,45H
MOV P1,A
MOV A,46H
MOV P2,A
MOV A,47H
MOV P3,A
MOV RR_C,C
LJMP LOOP
;-------------------------------------------

大大我有改了,可是跑出來的結果還是一樣只有右旋的說...Orz

呃...大大我待的只是間小小的在做電玩(就是八大行業的那種電玩)的小小企業社而已!>"<!沒有您所謂的 ICE或模擬器 的說~"~
舊 2006-07-23, 12:33 AM #27
回應時引用此文章
蒼藍的月光離線中  
asccpu
Master Member
 

加入日期: Jan 2002
您的住址: U.S.S AGC
文章: 1,669
你把左右旋的程式對調看看,結果如何。
當然我所提的方式,也是有問題存在的,因為你只有32個LED,要做33次轉動,那一定有一次LED會全不亮。
OK,白天有空繼續 :Q
__________________
辭源數位化計劃啟始於2014年1月。請拜訪成果。
舊 2006-07-23, 02:33 AM #28
回應時引用此文章
asccpu離線中  
蒼藍的月光
Senior Member
 

加入日期: Jan 2004
您的住址: 高雄市
文章: 1,244
引用:
作者asccpu
你把左右旋的程式對調看看,結果如何。
當然我所提的方式,也是有問題存在的,因為你只有32個LED,要做33次轉動,那一定有一次LED會全不亮。
OK,白天有空繼續 :Q


大大小弟找到了,就是延遲時間啦....XD


MOV C,RR_C
LCALL R_DATA
MOV A,44H
MOV P0,A
MOV A,45H
MOV P1,A
MOV A,46H
MOV P2,A
MOV A,47H
MOV P3,A
MOV RR_C,C
LJMP LOOP

還要再補上一行延遲時間副程式....不然8051太快會顯示不出!^^!

另外小弟對8051的記憶體架構有點問題和疑問可以方便和大大討論嗎!?
舊 2006-07-23, 05:36 PM #29
回應時引用此文章
蒼藍的月光離線中  
asccpu
Master Member
 

加入日期: Jan 2002
您的住址: U.S.S AGC
文章: 1,669
跟著我不好吧,我只玩半年而已,你有到"雷兒"吧,那邊比我專的一堆
__________________
辭源數位化計劃啟始於2014年1月。請拜訪成果。
舊 2006-07-23, 09:32 PM #30
回應時引用此文章
asccpu離線中  


    回應


POPIN
主題工具

發表文章規則
不可以發起新主題
不可以回應主題
不可以上傳附加檔案
不可以編輯您的文章

vB 代碼打開
[IMG]代碼打開
HTML代碼關閉



所有的時間均為GMT +8。 現在的時間是08:38 AM.


vBulletin Version 3.0.1
powered_by_vbulletin 2025。