![]() |
||
Senior Member
![]() ![]() ![]() 加入日期: Jan 2004 您的住址: 高雄市
文章: 1,244
|
引用:
哦...這點小弟到是疏忽了;採用的是單顆紅藍雙色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 移動 不知道大大您目前知道小弟的觀念和想法了嗎!?@_@!? |
||||||||
![]() |
![]() |
*停權中*
加入日期: Aug 2003
文章: 226
|
引用:
光看這二行…就會覺得…上面是多寫的… A=#40H 再輸出A,那當然是01000000b 囉…… 我已經很久沒碰了…還是看得懂ㄝ~~~ 當然如果是mov A,40H 那又另當別論了… 此文章於 2006-07-22 04:02 PM 被 ElvisTu 編輯. |
|
![]() |
![]() |
Senior Member
![]() ![]() ![]() 加入日期: Jan 2004 您的住址: 高雄市
文章: 1,244
|
引用:
沒錯!!LED就是3的PIN 大大您真內行!^^! 小弟想到一點可能就是 的C值就有問題 因為左旋完之後接著又右旋 那就是左旋完之後的 C值又被右旋接著繼續用 但這就是小弟不太懂的地方 如果真的是這樣 那應該紅藍LED還是會繼續左旋右 旋下去,只是右旋的動作會不正確才對 可是現在看起來只有右旋才有動作....Orz |
|
![]() |
![]() |
Senior Member
![]() ![]() ![]() 加入日期: Jan 2004 您的住址: 高雄市
文章: 1,244
|
引用:
大大您真是一語驚醒夢中人呀....!^^! 小弟終於明白了!n_n!甘溫唷.....!^^! |
|
![]() |
![]() |
Master Member
![]() ![]() ![]() ![]() 加入日期: Jan 2002 您的住址: U.S.S AGC
文章: 1,669
|
引用:
![]() ![]() 而你一開始在旋轉前的 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月。請拜訪成果。 |
|
![]() |
![]() |
Senior Member
![]() ![]() ![]() 加入日期: Jan 2004 您的住址: 高雄市
文章: 1,244
|
引用:
.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或模擬器 的說~"~ |
|
![]() |
![]() |
Senior Member
![]() ![]() ![]() 加入日期: Jan 2004 您的住址: 高雄市
文章: 1,244
|
引用:
大大小弟找到了,就是延遲時間啦....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的記憶體架構有點問題和疑問可以方便和大大討論嗎!? |
|
![]() |
![]() |