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

按照書上打卻出現BUG~(新手發問, 抱歉)

缺席
skywindsea1
一般會員


發表:1
回覆:2
積分:0
註冊:2007-09-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-10-12 01:25:14 IP:218.165.xxx.xxx 訂閱
請問板上各位,小弟我初學8051,由於學校專題我負責的部份是用8051控制馬達
但是系上老師並不專長於此項,因此只能買些書回來自修
而最近我要寫出一個可以用8051去控制馬達走幾步的程式
我也找到ㄧ本書上面有寫可以利用8051上的鍵盤去控制步數
1.ㄧ開始是用它光碟原本有的C語言來做燒錄
可是出來後為什麼8051鍵盤按下去後,在8051上顯示的並非那個數字,而數字也會亂跳呢???
2.後來我去拿了另一本書是用組語寫的,我也按照他書上面的指令全部KEY完,可是在組譯時卻出現錯誤
大概是出現語法錯誤或者是expression錯誤之類的
可是我又重新檢查過程式,發現沒有KEY錯~
所以想請問怎麼會發生這種情形呢?
編輯記錄
skywindsea1 重新編輯於 2007-10-12 17:06:11, 註解 無‧
skywindsea1 重新編輯於 2007-10-13 21:44:03, 註解 (附上原始檔程式碼)‧
skywindsea1 重新編輯於 2007-10-14 12:25:25, 註解 無‧
skywindsea1 重新編輯於 2007-10-14 12:29:34, 註解 無‧

版主


發表:261
回覆:2302
積分:1667
註冊:2005-01-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-10-12 02:57:35 IP:219.70.xxx.xxx 未訂閱
1> 請先看過版規

2> 沒人知道你寫什麼程式, 也沒人知道你硬體怎麼接, 更沒人知道你用那顆chip. 大家不是神仙, 怎麼知道你的問題在哪裡.

3> 照書key, 請用與書上相同的 compiler 及軟體. 否則出現錯誤是可以預期的. 但是一定會有錯誤訊息告訴你那一行錯或錯在那邊.請努力一下.
------
-------------------------------------------------------------------------
走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!?
addn
高階會員


發表:64
回覆:221
積分:202
註冊:2005-03-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-10-12 17:24:02 IP:218.171.xxx.xxx 訂閱
您好
建議將書本的例子,原理完全弄董了解以後
再用自己的想法重新去寫過

寫code時不要從頭到尾蠻幹,寫完後要debug會累死
將功能區塊化,寫完小區塊程式碼後就可先測試這部分的程式碼,是否
正確,在逐一將其他區塊的程式碼完成


以上個人小小建議,請參考看看
編輯記錄
addn 重新編輯於 2007-10-12 17:35:31, 註解 無‧
addn 重新編輯於 2007-10-12 17:36:23, 註解 無‧
bernie_w39
資深會員


發表:3
回覆:199
積分:280
註冊:2007-10-07

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-10-13 01:03:06 IP:59.121.xxx.xxx 訂閱
第一個問題, 看起來你使用了某一款的 8051 試驗板, 或是你自己焊接起來的板子.
因為缺乏這部份的資訊, 很難回答.

第二個問題, 可以幫你猜一下程式 compile 不過的幾個可能原因.

JNB C2, S6 => 應該是看不懂 C2 是什麼, 會不會是 C 的誤植呢?

PUSH A => 試試看 PUSH ACC 會不會過

POP A => 一樣試試 POP ACC

TABLE DB 01H => 應該是因為 TABLE 後面少了一個冒號
skywindsea1
一般會員


發表:1
回覆:2
積分:0
註冊:2007-09-25

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-10-13 21:45:57 IP:140.130.xxx.xxx 訂閱
請問是要把全部的A改成ACC嗎???
另外我需要把原始碼的一些設定打上嗎?
謝謝阿

版主


發表:261
回覆:2302
積分:1667
註冊:2005-01-04

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-10-14 01:12:07 IP:211.76.xxx.xxx 未訂閱
To skywindsea1 : 
請直接在新回覆文裡發表. 你這樣每次回文都直接於第一次發表的文章修改, 除了看過的人外, 沒人知道一開始的問題是什麼.大家為什麼要這樣回覆.
------
-------------------------------------------------------------------------
走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!?
skywindsea1
一般會員


發表:1
回覆:2
積分:0
註冊:2007-09-25

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-10-14 12:28:39 IP:140.130.xxx.xxx 訂閱
抱歉,在此附上原始程式碼
另外,板子的CPU要如何去查看為哪個型號呢???
謝謝

[code delphi]
CNT1 EQU 30H
CNT2 EQU 31H
BUFFER EQU 32H

G REG P1.6
R REG P1.7

STEP EQU 41H
COUNT EQU 42H
SPEED EQU 43H

C1 REG 0
C2 REG 1
DIRECT REG 2

SCANLINE EQU 44H
COLS EQU 45H
KEYDATA EQU 46H
KEYTEMP EQU 47H
ZERO EQU 48H
ONE EQU 49H


ORG 00H
AJMP START
ORG 0BH
AJMP TIMER0
ORG 1BH
AJMP TIMER1
START: MOV SP,#60H
ACALL INIT
LOOP: ACALL IS_ZERO
ACALL BCD2DSP
MOV A,#-1
XCH A,KEYDATA
CJNE A,#-1,L0
SJMP LOOP
L0: CJNE A,#AH,L1
CLR TR1
SETB G
SETB R
SJMP LOOP
L1: CJNE A,#BH,L2
JB TR1,LOOP
MOV CNT1,#0
MOV CNT2,#0
SJMP LOOP
L2: CJNE A,#CH,L3
JNB R,LOOP
CLR G
SETB R
CLR DIRECT
SETB TR1
SJMP LOOP
L3: CJNE A,#DH,L4
JNB G,LOOP
SETB G
CLR R
SETB DIRECT
SETB TR1
SJMP LOOP
L4: CJNE A,#EH,L5
MOV A,SPEED
CLR C
SUBB A,#10
CJNE A,#10,L41
L41: JC LOOP
MOV SPEED,A
SJMP LOOP
L5: CJNE A,#FH,L6
MOV A,SPEED
ADD A,#10
CJNE A,#200,L51
L51: JNC LOOP
MOV SPEED,A
SJMP LOOP
L6: JB TR1,LOOP
ACALL STORE
SJMP LOOP
INIT: MOV SCANLINE,#11110111B
MOV COLS,#0
MOV KEYDATA,#-1
MOV KEYTEMP,#-1
MOV ZERO,#0
MOV ONE,#1
MOV TMOD,#11H
SETB EA
SETB ET0
SETB ET1
MOV TH0,#>(65536-2000)
MOV TL0,#<(65536-2000)
MOV TH1,#>(65536-5000)
MOV TL1,#<(65536-5000)
MOV SPEED,#100
MOV COUNT,SPEED
MOV DPTR,#TABLE
MOV CNT1,#0
MOV CNT2,#0
MOV STEP,#11H
SETB G
SETB R
SETB TR0
RET
IS_ZERO PUSH A
MOV A,CNT2
XRL A,#0
JNZ J1
MOV A,CNT1
XRL A,#0
JNZ J1
SETB G
SETB R
CLR TR1
J1: POP A
RET
;
STORE PUSH A
XCH A,CNT2
SWAP A
MOV R5,A
ANL A,#F0H
ORL A,CNT2
XCH A,CNT2
MOV A,R5
ANL A,#0FH
XCH A,CNT1
SWAP A
ANL A,#F0H
ORL A,CNT1
XCH A,CNT1
POP A
RET
;
BCD2DSP: PUSH A
MOV R1,#BUFFER
MOV A,CNT1
SWAP A
ANL A,#0FH
MOV @R1,A
INC R1
MOV A,CNT1
ANL A,#0FH
MOV @R1,A
INC R1
MOV A,CNT2
SWAP A
ANL A,#0FH
MOV @R1,A
INC R1
MOV A,CNT2
ANL A,#0FH
MOV @R1,A
POP A
RET
;
DISPLAY: PUSH A
MOV A,#BUFFER
ADD A,COLS
MOV R0,A
MOV A,@R0
MOVC A,@A DPTR
MOV P2,A
D1: POP A
RET
;
TIMER0: PUSH A
MOV TH0,#>(65536-2000)
MOV TL0,#<(65536-2000)
ACALL KEYSCAN
POP A
RET1
;
TIMER1: PUSH A
MOV TH1,#>(65536-5000)
MOV TL1,#<(65536-5000)
DJNZ COUNT,T12
MOV COUNT,SPEED
MOV A,STEP
JB DIRECT,REV
RL A
SJMP T11
REV: RR A

T11: MOV STEP,A
ANL A,#0FH
ANL P1,#F0H
ORL P1,A
CLR C
MOV A,CNT2
SUBB A,#1
ACALL DS
MOV CNT2,A
MOV A,CNT1
SUBB A,#0
ACALL DS
MOV CNT1,A
T12: POP A
RET1
;
DS: PUSH PSW
PUSH A
CLR C1
CLR C2
JNB AC,S1
SETB C1
S1: JNB CY,S2
SETB C2
S2: ANL A,#0FH
CLR C
SUBB A,#0AH
JB CY,S3
SETB C1
S3: POP A
PUSH A
ANL A,#F0H
CLR C
SUBB A,#A0H
JB CY,S4
SETB C2
S4: POP A
JNB C1,S5
CLR C
SUBB A,#06H

S5: JNB C2,S6------>此行出現Undefined Symbol (Pass-2)
CLR C
SUBB A,#60H
S6: POP PSW
RET
;
KEYSCAN: PUSH A ------>此行出現Expression Type Does Not Match Instruction
MOV A,SCANLINE
MOV P3,A
MOV A,P3
ANL A,#F0H ------>此行出現Undefined Symbol (Pass-2)
MOV R3,#4
ROW: SETB C
RLC A
JNC KEYIN
DJNZ R3,ROW
JMP K3
KEYIN: MOV ONE,#0
MOV A,R3
DEC A
XRL A,#00000011B
MOV R3,A
MOV A,COLS
RL A
RL A
ORL A,R3
CJNE A,KEYTEMP,K2
MOV A,ZERO
CJNE A,#5,K1
SJMP K3
K1: INC ZERO
MOV A,ZERO
CJNE A,#5,K3
MOV A,KEYTEMP
MOV KEYDATA,A
SJMP K3
K2: MOV KEYTEMP,A
MOV ZERO,#1
K3: ACALL DISPLAY
MOV A,SCANLINE
RR A
MOV SCANLINE,A
INC COLS
MOV A,COLS
CJNE A,#4,K4
MOV COLS,#0
MOV SCANLINE,#11110111B
INC ONE
MOV A,ONE
CJNE A,#5,K4
MOV ZERO,#0
MOV KEYTEMP,#-1
MOV KEYDATA,#-1
K4: POP A ------>此行出現Expression Type Does Not Match Instruction
RET
;
TABLE DB 01H ------>此行出現Symbol Error
DB 4FH
DB 12H
DB 06H
DB 4CH
DB 24H
DB 20H
DB 0FH
DB 00H
DB 04H
END

[/code]

此程式的功能4*4矩陣型鍵盤控制步進馬達的轉動方向,速度以及步進數,而按鍵0~9是去設定步進數
編輯記錄
skywindsea1 重新編輯於 2007-10-14 12:35:43, 註解 無‧
skywindsea1 重新編輯於 2007-10-14 12:37:26, 註解 無‧
skywindsea1 重新編輯於 2007-10-14 12:38:27, 註解 無‧

版主


發表:261
回覆:2302
積分:1667
註冊:2005-01-04

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-10-14 14:18:02 IP:203.79.xxx.xxx 未訂閱
除非 IC 編號有被磨掉, 否則在 chip 上面就可以看到編號. Ex : "AT89C51XXXXXX"
------
-------------------------------------------------------------------------
走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!?
系統時間:2024-05-13 12:33:25
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!