史萊姆論壇

史萊姆論壇 (http://forum.slime.com.tw/)
-   程式語言討論區 (http://forum.slime.com.tw/f76.html)
-   -   請問有人會 8051 嗎?? 請幫忙看看 程式 謝謝。 (http://forum.slime.com.tw/thread269569.html)

avgx 2012-03-20 05:43 PM

請問有人會 8051 嗎?? 請幫忙看看 程式 謝謝。
 
共陰極 7段顯示器 跑馬燈

問題 是 asm 我不會 移動 TABLE 的 index

ORG 0000H
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH

MOV DPTR,#TABLE //這是 把table
MOV P1,#7
MOVC A,@A+DPTR
MOV P2,A
ACALL DELAY

-------------------------------------------------

#include<AT89X52.h>
#include<INTRINS.h>

code unsigned char table[]=
{
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
};

void delayms(unsigned int time);
main()

{
while(1)
{
unsigned int t;
unsigned int m;
unsigned char y;
unsigned char x;

for (x=0; x<2;x++)
for (y=0; y<8;y++)
{
P1=y;
P2=table[8*x+y];
delayms(30);
}
}
}

C的話,寫出來了

問題1 請問 asm 怎麼 移動 DPTR(據說 這是 pointer)

TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH

MOV DPTR,#TABLE //這是 把table
MOV P1,#7
MOVC A,@A+DPTR
MOV P2,A
ACALL DELAY

這樣 會在 最右邊的顯示器 顯示 0(3FH) ,請問 怎麼樣令它 繼續 往下顯示
也就是說 顯示1 (06H)
請用程式碼 表達 謝謝


第2個問題

ORG 0000H
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH (第一個)
DB 06H,5BH,4FH,66H,6DH,7DH,07H,7FH,3FH (第二個)

MOV DPTR,#TABLE //這是 把table
MOV P1,#7
MOVC A,@A+DPTR
MOV P2,A
ACALL DELAY

若我 第1次 要顯示 8個分別對應 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH
第2次 要顯示 8個分別對應 06H,5BH,4FH,66H,6DH,7DH,07H,7FH,3FH

請問該怎麼做????

謝謝指導

K22514 2012-03-23 10:12 AM

http://tw.myblog.yahoo.com/redkimkim...65&page=1&sc=1

這裡可以參考看看~

很久沒有摸這些 書本 模擬器 早已送人 ~~:on_22:


:on_14:

飛鳥 2012-04-03 01:03 AM

DPTR是一個TABLE開始的位置(記憶體位置)

所以一開始是3FH(記憶體內容)
也就是會顯示0

要顯示1,就是DPTR的下一個位置
所以是DPTR+1個位置

MOV A,1
MOVC A,@A+DPTR #@老鼠符號是代表位置
MOV P2,A

====
再來是要想如何自動+1 到你想要的位置再回到0顯示了


所有時間均為台北時間。現在的時間是 05:37 PM

Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2025, Jelsoft Enterprises Ltd.

『服務條款』

* 有問題不知道該怎麼解決嗎?請聯絡本站的系統管理員 *


SEO by vBSEO 3.6.1