8051程式!?



贊助商連結


頁 : 1 2 3 [4] 5

聰明的豬
2003-11-03, 11:24 PM
阿~那我懂了!!!那我還是先把~重點擺在~怎麼改成LCD好了!
那如果是這樣子的話!我該怎麼改呢?
我就針對MIAN:那段來改嗎?

我想就先針對LCD而言!先改完程式∼等燒錄完畢的時候!先直接用麵包版接∼看可不可以實行!如果LCD可行的話∼再來慢慢的作.....超音波的更改!!

贊助商連結


C.C.
2003-11-03, 11:42 PM
我大致上幫你整理一下, 我只列出需要改的部分, 其他的你自己放進來.
不過你這個程式看起來好像有一些打錯字的地方, 你可能要檢查看看

START:
MOV 30H,#0 ;清除顯示及技術暫存器
MOV 31H,#0
MOV 32H,#0
MOV 33H,#0
MOV 34H,#0
MOV 35H,#0
MOV SCAN,#0
MOV COUNT,#0

MOV TMOD,#21H;TIMER0=MODE1,TIMER1=MODE2
MOV TH0,#>(65536-16666);1/120秒中斷一次
MOV TH1,#118

call display_init
call display_clear

MOV IE,#82H ;中斷致能,TIMOR0中斷致能
SETB TR0

;========================================================
MIAN:
JIB TX,$ ;等待發射
CLR TX
CLR LED_OUT ;發射時點亮LED
CLR TRO ;TOMER0停止計數
MOV IE,#0 ;中斷禁能
CALL TX_CLK ;發射超音波
CALL MIN_RING ;最低測距延遲
MOV IE,#88H ;中斷致能,TIMER1中斷致能
MOV TH1,#118H
MOV REG_1,#MIN_NUM ;最機距離加到各位距離計數器
MOV REG_10,#0 ;十位數距離計數器歸零
MOV REG_100,#0 ;百位數距離計數器歸零
SETB TR1 ;TIMER1開始計數
JNB OK,$ ;等待測距完成
CLR TR1 ;TIMER1停止計數
CALL REG2DSP ;轉換顯示值
;
; 將數值顯示到 LCD
;
mov a, #0
mov b, #0
call gotoxy
mov a, DSP_100
orl a, #30h
call putch
mov a, DSP_10
orl a, #30h
call putch
mov a, DSP_1
orl a, #30h
call putch

MOV IE,#82H ;中斷致能,TIMER0中斷致能
MOV SCAN,#0 ;顯示掃描歸零
MOV COUNT,#0 ;發射計數器歸零
SETB TR0 ;TIMER0在開始計數
SETB LED_OUT ;熄滅LED
JMP MAIN ;跳至MAIN重新步驟

;=================================================
T0_INT:
MOV TH0,#>(65536-16666);1/120秒中斷一次
MOV TL0,#>(65536-16666)
INC CONUT
MOV A,COUNT
CJNE A,#60,T0_01
SETB TX
T0_END
RETI

LCD 副程式就放在最後面

gwochern
2003-11-04, 12:19 AM
最初由 聰明的豬 發表
我了改了!!!我大概研究一下pdf的腳位!!
再對照一下我去買的書本的資料(8051)!!!
我發現~8051跟89c2051的腳位是一樣低!!!!!!!...

那如果是這樣的話!!我是不是只要把...把程式燒進去8051即可!?....
因為如果假設我都不改變腳位的話!!!及時8051與89c51的腳位也是一樣低!!!
像是那些~p1.0~p1.7!!等等的~都一樣!!!!??????

希望如此.....
但有時天會不如你願.....因為我常常發生這樣的事....

我想程式你還是看過一遍,比較好,是不是都是控制那幾隻I/O Port的
還有89C2051和8051的振盪器的頻率規格是不是一樣....
反正一切看清楚,想清楚...自然事事順利...
祝你成功.... 

聰明的豬
2003-11-04, 12:55 AM
最初由 C.C. 發表
我大致上幫你整理一下, 我只列出需要改的部分, 其他的你自己放進來.
不過你這個程式看起來好像有一些打錯字的地方, 你可能要檢查看看

START:
MOV 30H,#0 ;清除顯示及技術暫存器
MOV 31H,#0
MOV 32H,#0
MOV 33H,#0
MOV 34H,#0
MOV 35H,#0
MOV SCAN,#0
MOV COUNT,#0

MOV TMOD,#21H;TIMER0=MODE1,TIMER1=MODE2
MOV TH0,#>(65536-16666);1/120秒中斷一次
MOV TH1,#118

call display_init
call display_clear

MOV IE,#82H ;中斷致能,TIMOR0中斷致能
SETB TR0

;========================================================
MIAN:
JIB TX,$ ;等待發射
CLR TX
CLR LED_OUT ;發射時點亮LED
CLR TRO ;TOMER0停止計數
MOV IE,#0 ;中斷禁能
CALL TX_CLK ;發射超音波
CALL MIN_RING ;最低測距延遲
MOV IE,#88H ;中斷致能,TIMER1中斷致能
MOV TH1,#118H
MOV REG_1,#MIN_NUM ;最機距離加到各位距離計數器
MOV REG_10,#0 ;十位數距離計數器歸零
MOV REG_100,#0 ;百位數距離計數器歸零
SETB TR1 ;TIMER1開始計數
JNB OK,$ ;等待測距完成
CLR TR1 ;TIMER1停止計數
CALL REG2DSP ;轉換顯示值
;
; 將數值顯示到 LCD
;
mov a, #0
mov b, #0
call gotoxy
mov a, DSP_100
orl a, #30h
call putch
mov a, DSP_10
orl a, #30h
call putch
mov a, DSP_1
orl a, #30h
call putch

MOV IE,#82H ;中斷致能,TIMER0中斷致能
MOV SCAN,#0 ;顯示掃描歸零
MOV COUNT,#0 ;發射計數器歸零
SETB TR0 ;TIMER0在開始計數
SETB LED_OUT ;熄滅LED
JMP MAIN ;跳至MAIN重新步驟

;=================================================
T0_INT:
MOV TH0,#>(65536-16666);1/120秒中斷一次
MOV TL0,#>(65536-16666)
INC CONUT
MOV A,COUNT
CJNE A,#60,T0_01
SETB TX
T0_END
RETI

LCD 副程式就放在最後面

不好意思!!!
如果就依照您所說低~這樣改!!!
是這樣嗎!?!??

→修改版← (http://www.gurubio.com/misaco5/這樣嗎.txt)

我是拿全部所有的程式來改低∼!

C.C.
2003-11-04, 01:50 AM
對!
不過 LCD 副程式還需配合你的電路修改才能用.
再來就是程式碼整理一下排列要整齊以及拼錯字要改正.

聰明的豬
2003-11-04, 02:44 AM
最初由 C.C. 發表
對!
不過 LCD 副程式還需配合你的電路修改才能用.
再來就是程式碼整理一下排列要整齊以及拼錯字要改正.
不好意思~我再問一個很蠢的問題!!!
您說~還需要配合我的電路修改~
您只的是~~~
89c51改成8051的部分呢!?還是腳位的部分!?
來勞請您指點指點~

謝謝~

C.C.
2003-11-04, 02:51 AM
就是 LCD Module 跟 8051 腳位怎麼接?
你應該先把電路畫好貼上來就知道了.

聰明的豬
2003-11-04, 02:21 PM
最初由 C.C. 發表
就是 LCD Module 跟 8051 腳位怎麼接?
你應該先把電路畫好貼上來就知道了.

恩~好沒有問題!!!
我會先用軟體畫好~然後再把他PO上來!!!

不過我現在有一個問題阿!
就是~89C51的這顆震盪器!!也就是我程式上的這顆~他是24M的!
但是8051只可以到12M~
整整大了兩倍!!!
那如果是針對這部分!?我可以怎樣更改ㄋ????

C.C.
2003-11-04, 04:39 PM
24M 跟 12M 對程式編寫的差異就是指令執行的速度及TIMER的時間單位.
影響的有用程式來當 Delay 及 TIMER0, TIMER1 的設定.
對你的程式有影響的有 TX_CLK, MIN_RING, TH0, TH1 這幾個地方.

8x51 系列在 IC 編號上都有一個速度編號. 如 89C51-25.
後面的 25 就是最快能使用 25 MHz.

你真的要用 "8051" 嗎? 目前市面上很少人用 "8051", 因為你買到的 "8051" 大部分都不能再燒程式了.
如果要用外部 ROM 的話大部分都是用 8031.
而你的電路看起來應該會用有內部 ROM 或 Flash 的型號.
那應該是 INTEL 8751, ATMEL AT89C51, WINBOND W78E51B 這三種比較可能.
後兩種都是 Flash, 可以用IC燒錄器就清除, 8751 是開窗的必須用紫外線照射十幾分鐘才能清除.

一般人口頭上說的 8051 指的是用 8051 系列的指令及硬體架構.
而上面幾種全部都是 8051 系列的 CPU, 只是程式碼儲存的種類不同而已.
對寫程式來說可以說是一模一樣.

你原本的電路用的是 AT89C2051, 你為何不選用 AT89C51 就好了!?
還有你用甚麼 IC 燒錄器, 萬用型還是 51 專用的?

聰明的豬
2003-11-05, 02:26 AM
嗯恩恩恩∼我打算用89c51來作了!!

今天準備要繪圖的時候∼
發現∼我使用的tina軟體∼
沒有lcd這個零件可以拖∼呃.......................


您的lcd副程式
還必須外接一顆8255的對不對!?
那這樣子不是就更麻煩了?