線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3450
推到 Plurk!
推到 Facebook!

請指導89c51 倒車雷達組合語言這樣是不是正確

答題得分者是:阿信
主程式起始
設定堆疊位置
規劃 LCD 工作模式
清除 LCD 畫面
預先寫入字串到 LCD
關閉蜂鳴器
清除顯示暫存器資料
檢測超音波起始訊號
清除距離暫存器資料
呼叫時間延遲副程式
距離暫存器加一
檢測超音波反射訊號
如果沒有反射訊號就到 E21 執行
讀出距離暫存器資料
距離資料和 30 公分作比較
如果比 30 大就到 E37 執行
設定蜂鳴器啟動
跳到 E39 執行
關閉蜂鳴器
讀出距離暫存器資料
呼叫二進制轉十進制附程式
讀出距離資料顯示到 LCD
顯示 公分 到 LCD
判讀反射訊號是否已經結束了
如果結束就到 E17 執行
hamasaki0918
一般會員


發表:3
回覆:5
積分:1
註冊:2009-02-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-05-17 18:07:06 IP:220.139.xxx.xxx 訂閱
請問一下 我們這個程式這樣對不對~~

麻煩各位大哥幫忙指導一下




LCD_BUS reg P0 ;LCD資料匯流排
START_PULSE reg p3.2 ;超音波發射訊號
END_PULSE reg p3.3 ;超音波反射訊號
BZ reg p3.4 ;蜂鳴器控制訊號
LCD_Enable reg P3.6 ;1 bit LCD Pin 6
LCD_RS reg P3.7 ;1 bit LCD Pin 7
CMBuffer equ 30h ;1 byte
Count equ 31h ;1 byte
;===============================================================
; start program ;啟始程序 =
;===============================================================
org 00h
jmp Reset ;程式啟始位置
org 40h
Reset
;===============================================================
; system data setup ;系統資料結構 =
;===============================================================
mov sp,#50h ;堆疊啟始位置
clr BZ ;關閉蜂鳴器
;
mov a,#38h ;設定 8 位元資料傳輸模式
call WriteLCDCommand ;呼叫LCD命令碼寫出附程式
;
mov a,#0Ch ;游標不顯示也不閃爍
call WriteLCDCommand ;呼叫LCD命令碼寫出附程式
;
mov a,#06h ;移動方式遞增
call WriteLCDCommand ;呼叫LCD命令碼寫出附程式
;
call LCD_CLS ;呼叫 LCD 畫面清除副程式
;
mov r6,#10 ;
Wait_LCD
mov r7,#00 ;
call dl2 ;時間延遲
djnz r6,Wait_LCD ;
;
mov a,#0 ;設定啟始字元列位置
mov b,#0 ;設定啟始字元行位置
call LCD_LOCATE ;呼叫LCD游標位置附程式
mov dptr,#String ;設定字串啟始位置
call LCD_PrintString ;呼叫LCD字串寫出附程式
;===============================================================
ADLoop:
nop ;
jb START_PULSE,ADLoop ;檢測是否有發射啟始訊號
mov r7,#50 ;超音波發射時間
call dl2 ;
mov CMBuffer,#00 ;距離資料暫存器清除
Wait:
call Delay ;呼叫延遲副程式
inc CMBuffer ;距離暫存器內容加一
jb END_PULSE,Wait ;檢測是否有收到返射訊號
mov a,CMBuffer ;收到返射訊號就取出距離資料
subb a,#30 ;判獨距離是否低於30公分
jnc Reg ;
mov r5,#200 ;存入常數 200作為蜂鳴器動作時間
BZLoop:
cpl BZ ;蜂鳴器動作反向
mov r7,#60 ;存入常數 60 作為蜂鳴器動作頻率
call dl2 ;呼叫延遲副程式
djnz r5,BZ_Loop ;判斷r5是否已經為零
sjmp Reg_A ;
Reg:
clr BZ ;關閉蜂鳴器
Reg_A:
mov a,CMBuffer ;讀出距離暫存器資料
add a,#5 ;
call BinBcd ;呼叫二進制轉BCD碼附程式
;
mov a,#1 ;設定啟始字元列位置
mov b,#1 ;設定啟始字元行位置
call LCD_LOCATE ;呼叫LCD字元位置設定副程式
;
mov a,r4 ;讀入距離'佰'數值
anl a,#0fh ;取出低位元資料
jnz Show_1 ;判讀如果不為零就到Show_1
mov a,#' ' ;為零LCD顯示空白
sjmp Show_2
Show_1:
add a,#30h ;加入30h成為ASCII碼
Show_2:
call WriteLCDData ;呼叫寫出LCD副程式
;
mov a,r3 ;讀入距離'十'數值
swap a ;高低位元互換
anl a,#0fh ;取出低位元資料
add a,#30h ;加入30h成為ASCII碼
call WriteLCDData ;呼叫寫出LCD副程式
;
mov a,r3 ;讀入距離'個'數值
anl a,#0fh ;取出低位元資料
add a,#30h ;加入30h成為ASCII碼
call WriteLCDData ;呼叫寫出LCD副程式
;
mov a,#'c' ;存入 'c' 字元
call WriteLCDData ;呼叫寫出LCD副程式
mov a,#'m' ;存入 'm' 字元
call WriteLCDData ;呼叫寫出LCD副程式
Wait_ED:
jnb END_PULSE,Wait_ED ;檢測是否有收到返射訊號
sjmp ADLoop ;跳回主程式
;===============================================================
;= BIN to BCD code convertor =
;= in:CMBuffer out:r4,r3 chang:r5 =
;===============================================================
BinBcd:
mov r6,CMBuffer
mov r5,#08
clr a
mov r3,a
mov r4,a
Bloop:
mov a,r6
rlc a
mov r6,a
mov a,r3
addc a,r3
da a
mov r3,a
mov a,r4
addc a,r4
da a
mov r4,a
djnz r5,Bloop
ret
;===============================================================
; lcd program ;LCD程序 =
;===============================================================
LCD_CLS:
mov a,#01h ;清除LCD字幕
call WriteLCDCommand
ret
;===============================================================
LCD_HOME:
mov a,#02h ;LCD游標歸位
call WriteLCDCommand
ret
;===============================================================
LCD_LOCATE: ;LCD游標定位副程式
anl a,#01111b ;
jnb b.0, DoSetBit6 ;
setb acc.6 ;
DoSetBit6:
setb acc.7 ;Locate
call WriteLCDCommand ;
ret ;
;===============================================================
LCD_PrintString: ;LCD字串寫出副程式
push a
PrintStringLoop:
clr a
movc a,@a dptr ;抓取要顯示的字元
jz EndPrintString ;判斷是否已經將要顯示的字元全部顯示完
call WriteLCDData ;呼叫字元寫出副程式
inc dptr ;字型指標加一
jmp PrintStringLoop ;未顯示完全部字型繼續顯示
EndPrintString:
pop a
ret
;===============================================================
WriteLCDData: ;字型寫到LCD副程式
setb LCD_RS ;開啟LCD資料匯流排
call DLY ;
setb LCD_Enable ;產生一個LCD脈衝訊號
call DLY ;
mov LCD_BUS,a ;將字型碼寫到LCD資料匯流排
call DLY ;
clr LCD_Enable ;產生一個LCD脈衝訊號
call DLY ;
setb LCD_RS ;關閉LCD資料匯流排
ret ;
;===============================================================
WriteLCDCommand: ;字型寫到LCD副程式
clr LCD_RS ;開啟LCD資料匯流排
call DLY ;
setb LCD_Enable ;產生一個LCD脈衝訊號
call DLY ;
mov LCD_BUS,a ;將控制碼寫到LCD資料匯流排
call DLY ;
clr LCD_Enable ;產生一個LCD脈衝訊號
call DLY ;
setb LCD_RS ;關閉LCD資料匯流排
ret
;===============================================================
;01234567
String db " Reang:",0 ;b=0
;===============================================================
; delay program ;延遲程序 =
;===============================================================
Delay:
mov r7,#23 ;1 cycle
nop
dl2:
djnz r7,dl2 ;2 cycle
ret ;2 cycle
;===============================================================
DLY:
mov r7,#25 ;3 cycle
djnz r7,$ ;3 cycle
ret ;3 cycle
;===============================================================
end
編輯記錄
hamasaki0918 重新編輯於 2009-05-17 18:10:47, 註解 無‧
hamasaki0918 重新編輯於 2009-05-19 02:11:52, 註解 無‧
aki
版主


發表:30
回覆:696
積分:755
註冊:2004-01-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-05-17 18:53:55 IP:61.229.xxx.xxx 訂閱
這位同學,系統是否會正確的動作, 軟體是要配合硬體一起動作的.
不是丟一個程式要人幫你看對不對? 天知道呀!
aki
版主


發表:30
回覆:696
積分:755
註冊:2004-01-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-05-17 18:58:06 IP:61.229.xxx.xxx 訂閱
學生課業提問技巧:
1. 請注意禮貌:
不管您是不是學生,禮貌是一件重要的事情,包含文章的主題主旨要清楚,內容要有禮序,並起頭處要介紹自己及背景,一開始讓回答您的人有被尊重的感覺,不要有回答問題的好像笨蛋似的感覺!
2. 主旨要清楚:
在論壇式的網頁中,主旨不清會讓人不理會您的問題,因為對一些人來說,時間可貴,您都不重視自己的問題,我又何必看的感覺。除了管理人員外,其他的進來的可就少了,所以主題別隨意訂定,更別用像是『XXXX有問題,進來幫忙』『誰會做XXXX?』之類的題目,再這裡會的人太多了,重要的是大家都不認識,誰有義務幫忙,幫了忙確又感覺您是誰?我的長輩嗎?切記勿有命令的語氣,注意禮貌。
3. 自我介紹的重要:
所謂的見面三分情,在網際網路中,卻很難有見面熟捻的機會(所以我們就辦了網聚這樣的活動不來參加的就可惜了!),所以能簡單自我介紹者,反比一般位自我介紹的人強多了,並有更進一步讓能幫助您的人,知道它到底在幫誰,及為何要幫忙。我想這是重要的一件事情!
4. 提問內容如要清楚:
重點來了,一般提問問題的人,非常懶於清楚撰寫問題內容,好像小朋友跑去跟父親哭述,不舒服!又一直哭,卻又不說清楚,到底是頭痛、腳痛或是心理不舒服(被搶玩具),您不說清楚,誰會曉得?再說在這裡回答的不是您的父親或母親,也不是您的老師,再說回來,是您的老師,您也得注意禮貌。(舉這個例子請見諒,再下沒諷刺的意思)
5. 內容提問技巧:
*敘述背景:請將您的提問範圍描述出來。
例如:目前在下再做課業VHDL的實驗,題目是撰寫一VHDL RTL CODE,使用XXXX晶片(編號:XXXXXXXX),外加電路於接腳XX - XX 8個LED。
*附件清楚:能將圖片、方塊圖、電路原理圖及其他(如程式)。
例如:以上面的例子,將xxx晶片與LED連結的Orcad或potel電路圖的提供,並劃上您要的電路方塊圖,一般回答的人就清楚您要做什麼,更能指出或許您的方塊圖一開始就錯了,當然您的結果一定就錯了!
*清楚描述出問題的點:將您實驗的過程一一的描述出來。
6. 心態的平衡:最後我想這是回答的人,所有的想法吧。您都不花時間研讀及做實驗,您想這群回答的人,卻花比您多的時間幫忙,因為回答的人,也會注意自己是不是回答錯了,因為身譽比回答問題重要多了,所以不難看出,這裡的眾多高手,都是引經據典的回答。(常常看到回答的資料比問的還多還用心,這是什麼世界呀,這要到哪裡找呀!再這小弟順便感謝一下,在這付出的高手們)
7. 解決問題後的感謝:我想這是重要的事情,當您完成及解決問題後,請注意您的回應,當您完成後,最好的感謝,應該的將您解決的方式依序描述出來,並在文後謝謝回應問題的人,這樣有幾個好處。
一、能方便也後遇上相同問題的人。
二、對回應的人有一定的幫助,在思維上或許有更新的解決想法,搞不好會出現更好的解!
三、您的回應將為您在人際關係上加分,這是隱性的事情,但相信我!搞不好下次您找工作的主管,就是回答您問題的人!套句產業界的一句話:『這個業界很小的』
8. 所謂之錯能改:或許一時不小心,招來非議,請不要生氣或灰心,相信我,在研發的過程中,這都是良好的回應,有人願意回應,不管好的或不好的,請虛心接受並更改,就像程式撰寫總有BUG,發現並解決即可,最怕的是有BUG卻沒有徵兆,直到量產後由客戶反應,那您就糟了!

感謝您看完這一篇
powerbhy
loveforme
一般會員


發表:22
回覆:39
積分:22
註冊:2009-03-24

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-05-17 22:42:33 IP:122.121.xxx.xxx 訂閱
有網聚?
我還蠻想看看各位版大是怎樣的人...
感覺功力都很深厚!!
我就常來問問題~我也覺得,在網路世界中有人肯來幫你解答就很難得了...
而且各位版大跟一些資深會員都很熱心
我是自學的,兩個多月前才剛接觸單晶片,真的覺得很好玩!
但是說真的我常常遇到關卡...總覺得自己只開了一點點門縫
而這邊很多人都可以引領我進去這個世界
可惜 我不會組合語言,不然我也很想知道倒車雷達怎麼用C語言寫?
要用哪些IC?
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-05-18 01:11:04 IP:122.118.xxx.xxx 未訂閱
我記得巿產品有的倒車雷達.是已經做好會自己嗶嗶叫了.
如果你要用它叫的頻率去做判斷.
你自己做個濾波器就可以把它們分出來了.

===================引 用 loveforme 文 章===================
有網聚?
我還蠻想看看各位版大是怎樣的人...
感覺功力都很深厚!!
我就常來問問題~我也覺得,在網路世界中有人肯來幫你解答就很難得了...
而且各位版大跟一些資深會員都很熱心
我是自學的,兩個多月前才剛接觸單晶片,真的覺得很好玩!
但是說真的我常常遇到關卡...總覺得自己只開了一點點門縫
而這邊很多人都可以引領我進去這個世界
可惜 我不會組合語言,不然我也很想知道倒車雷達怎麼用C語言寫?
要用哪些IC?
hamasaki0918
一般會員


發表:3
回覆:5
積分:1
註冊:2009-02-19

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-05-19 02:00:36 IP:220.139.xxx.xxx 訂閱
對不起@@~
我補個電路大概的幾個部份
電源電路 震盪電路 輸出推動電路 接收放大電路 訊號比較電路 蜂鳴器電路 單晶片控制電路 LCD顯示電路
我們大概想的程式執行流程~
hamasaki0918
一般會員


發表:3
回覆:5
積分:1
註冊:2009-02-19

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-05-19 02:08:54 IP:220.139.xxx.xxx 訂閱
IC部分我們選了 89C51 單晶片控制IC 、 4060跟4040這兩顆除頻IC 、CMOS IC4049反向器 、TL082運算放大器IC 
檢波電路我們有發射檢波 接收檢波 就用二極體的檢波電路 還有積分電容電路

麻煩大哥可以在幫我指正一下嗎@@?
有什麼資料不足的部分我在補上 如果需要電路圖的話 我可以寄給你@@~
謝謝你~~
編輯記錄
hamasaki0918 重新編輯於 2009-05-19 02:14:07, 註解 無‧
aki
版主


發表:30
回覆:696
積分:755
註冊:2004-01-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-05-19 07:09:31 IP:61.229.xxx.xxx 訂閱
首先,這位同學你覺得努力寫了這麼多,不知道其他位網友已經明白,他的電路嘛?
還是請畫個圖吧!
另外,如果你跑程式時,你硬體發射端的波形是甚麼樣子?
我以前作 Ultrasoic 的發設端會有這個高壓輸出,如果有觀測到這個波形,


至少證明發射部分的程式是對的.

===================引 用 hamasaki0918 文 章===================
IC部分我們選了 89C51 單晶片控制IC 、 4060跟4040這兩顆除頻IC 、CMOS IC4049反向器 、TL082運算放大器IC
檢波電路我們有發射檢波 接收檢波 就用二極體的檢波電路 還有積分電容電路

麻煩大哥可以在幫我指正一下嗎@@?
有什麼資料不足的部分我在補上 如果需要電路圖的話 我可以寄給你@@~
謝謝你~~
hamasaki0918
一般會員


發表:3
回覆:5
積分:1
註冊:2009-02-19

發送簡訊給我
#9 引用回覆 回覆 發表時間:2009-05-19 13:57:21 IP:220.139.xxx.xxx 訂閱
@@電路圖我PO不上來...
要怎麼弄??
編輯記錄
hamasaki0918 重新編輯於 2009-05-19 14:01:19, 註解 無‧
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#10 引用回覆 回覆 發表時間:2009-05-19 14:14:06 IP:118.169.xxx.xxx 訂閱
http://delphi.ktop.com.tw/faq.php

===================引 用 hamasaki0918 文 章===================
@@電路圖我PO不上來...
要怎麼弄??
hamasaki0918
一般會員


發表:3
回覆:5
積分:1
註冊:2009-02-19

發送簡訊給我
#11 引用回覆 回覆 發表時間:2009-05-19 14:22:26 IP:220.139.xxx.xxx 訂閱
hamasaki0918
一般會員


發表:3
回覆:5
積分:1
註冊:2009-02-19

發送簡訊給我
#12 引用回覆 回覆 發表時間:2009-05-19 14:23:05 IP:220.139.xxx.xxx 訂閱

===================引 用 taishyang 文 章===================
http://delphi.ktop.com.tw/faq.php

謝謝副板大~~

這個電路圖是同學在網路上找來的~
我們正在照這個電路接QQ~
編輯記錄
hamasaki0918 重新編輯於 2009-05-19 14:24:02, 註解 無‧
loveforme
一般會員


發表:22
回覆:39
積分:22
註冊:2009-03-24

發送簡訊給我
#13 引用回覆 回覆 發表時間:2009-05-19 21:55:06 IP:122.121.xxx.xxx 訂閱
運算放大器不接負電壓,是因為沒有要產生負電訊號,所以才接地嗎?
aki
版主


發表:30
回覆:696
積分:755
註冊:2004-01-15

發送簡訊給我
#14 引用回覆 回覆 發表時間:2009-05-20 13:48:54 IP:122.116.xxx.xxx 訂閱
OP 也有單電源運作!      

===================引 用 loveforme 文 章===================
運算放大器不接負電壓,是因為沒有要產生負電訊號,所以才接地嗎?
阿信
版主


發表:111
回覆:983
積分:813
註冊:2005-03-10

發送簡訊給我
#15 引用回覆 回覆 發表時間:2009-05-21 14:12:35 IP:114.32.xxx.xxx 訂閱
 這個電路的基本架構:

發射端:U2產生脈波信號經U3到AND閘成為間歇脈波,
再經反相器放大信號驅動蜂鳴片,
同時會經過半波整流給比較器,
產生觸發信號給MCU。

接收端:蜂鳴片信號經U6B及U6A做高通濾波及放大,
輸出經過D2、D3組成的倍壓整流電路給比較器,
產生觸發信號給MCU。

電路本身可以自行動作,不需MCU介入,MCU只負責顯示。

所以請用示波器逐級量測波形信號是否正確,
到INT0、INT1都要是連續的脈波信號。

電路都正確了,再來討論程式才有意義。

阿信~
編輯記錄
阿信 重新編輯於 2009-05-25 13:40:19, 註解 無‧
阿信 重新編輯於 2009-05-25 14:05:59, 註解 無‧
系統時間:2024-05-06 10:07:28
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!