全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2116
推到 Plurk!
推到 Facebook!

8051測速程式.有點問題

缺席
kevin緯
一般會員


發表:2
回覆:1
積分:0
註冊:2009-03-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-05-31 11:33:50 IP:203.68.xxx.xxx 訂閱
SEC     EQU     39H 
SEC2 EQU 3AH
SELECT EQU 3AH
ORG 0000H
JMP START
ORG 0BH ;設定Timer 0中斷程式起始位置
AJMP TIMER0 ;中斷發生後,到Timer 0副程式執行
START:
MOV 30H,#0 ;仟位 顯示值
MOV 31H,#0 ;佰位
MOV 32H,#0 ;拾位
MOV 33H,#0 ;個位
MOV 40H,#0 ;仟位 計數值
MOV 41H,#0 ;佰位
MOV 42H,#0 ;拾位
MOV 43H,#0 ;個位
ACALL SET0 ;設定TIMER 0
MOV R2,#1
MOV P2,#11110111B
MOV R0,#30H
LOOP:
JB P1.0,LOOP ;轉盤是否觸發到光遮斷器
CALL COUNTLED ;是則轉數值加一
JNB P1.0,$

JMP LOOP
;----- --- ----
; SET TIMER0 ;參閱6-3§SET 0程式說明
;----- --- ----
SET0: MOV SEC,#100
MOV SEC2,#100 ;
MOV TMOD,#01H ;設定TIMER O工作模式1
MOV IE,#10000010B
MOV TH0,#>(65536-100)
MOV TL0,#<(65536-100)
SETB TR0
RET
TIMER0: PUSH A
MOV TH0,#>(65536-100)
MOV TL0,#<(65536-100)
CALL L_DISPLAY ;每1MS掃描顯示七段顯示器
DJNZ SEC,EXIT6
MOV SEC,#100 ;1MSX10000=1秒
DJNZ SEC2,EXIT6
EXIT5: MOV 30H,40H ;每秒更新一次轉盤圈數計數值
MOV 31H,41H
MOV 32H,42H
MOV 33H,43H
MOV 40H,#0 ;仟位 計數值歸零
MOV 41H,#0 ;佰位
MOV 42H,#0 ;拾位
MOV 43H,#0 ;個位
MOV SEC,#100
MOV SEC2,#100
EXIT6: POP A
RETI
COUNTLED:
MOV A,43H ;個位數
CJNE A,#9,EE1 ;已經加到9,若再加則進位成0
MOV 43H,#0
MOV A,42H ;十位數
CJNE A,#9,EE2 ;已經加到9,若再加則進位成0
MOV 42H,#0
MOV A,41H ;百位數
CJNE A,#9,EE3 ;已經加到9,若再加則進位成0
MOV 41H,#0
MOV A,40H ;千位數
CJNE A,#9,EE4 ;已經加到9,若再加則進位成0
MOV 40H,#0
MOV 41H,#0
MOV 42H,#0
MOV 43H,#0
JMP EE5
EE1: INC 43H ;個位數未到9,加1
JMP EE5
EE2: INC 42H ;十位數未到9,加1
JMP EE5
EE3: INC 41H ;百位數未到9,加1
JMP EE5
EE4: INC 40H ;千位數未到9,加1
JMP EE5
EE5: RET
;==============================
;=======七段顯示掃描副程式=======
;==============================
L_DISPLAY:

MOV A,P2
RR A
MOV P2,A ;依序點亮個、十、百、千七段顯示器
INC R0
MOV P0,@R0
CJNE A,#01111111B,LBACK
MOV P2,#11110111B
MOV R0,#30H
MOV P0,@R0
LBACK: RET
END

Build後會出現
C:\RPMSECOND.ASM(42): error A9: SYNTAX ERROR
C:\RPMSECOND.ASM(42): error A9: SYNTAX ERROR
C:\RPMSECOND.ASM(43): error A9: SYNTAX ERROR
C:\RPMSECOND.ASM(43): error A9: SYNTAX ERROR
C:\RPMSECOND.ASM(48): error A22: EXPRESSION TYPE DOES NOT MATCH INSTRUCTION
C:\RPMSECOND.ASM(49): error A9: SYNTAX ERROR
C:\RPMSECOND.ASM(49): error A9: SYNTAX ERROR
C:\RPMSECOND.ASM(50): error A9: SYNTAX ERROR
C:\RPMSECOND.ASM(50): error A9: SYNTAX ERROR
C:\RPMSECOND.ASM(66): error A22: EXPRESSION TYPE DOES NOT MATCH INSTRUCTION

希望各位大大指導一下..感謝..
src
高階會員


發表:1
回覆:94
積分:154
註冊:2005-08-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-05-31 19:22:23 IP:59.121.xxx.xxx 訂閱

===================引 用 kevin緯 文 章===================
SEC EQU 39H
SEC2 EQU 3AH
SELECT EQU 3AH
ORG 0000H
JMP START
ORG 0BH ;設定Timer 0中斷程式起始位置
AJMP TIMER0 ;中斷發生後,到Timer 0副程式執行
START:
MOV 30H,#0 ;仟位 顯示值
MOV 31H,#0 ;佰位
MOV 32H,#0 ;拾位
MOV 33H,#0 ;個位
MOV 40H,#0 ;仟位 計數值
MOV 41H,#0 ;佰位
MOV 42H,#0 ;拾位
MOV 43H,#0 ;個位
ACALL SET0 ;設定TIMER 0
MOV R2,#1
MOV P2,#11110111B
MOV R0,#30H
LOOP:
JB P1.0,LOOP ;轉盤是否觸發到光遮斷器
CALL COUNTLED ;是則轉數值加一
JNB P1.0,$

JMP LOOP
;----- --- ----
; SET TIMER0 ;參閱6-3?SET 0程式說明
;----- --- ----
SET0: MOV SEC,#100
MOV SEC2,#100 ;
MOV TMOD,#01H ;設定TIMER O工作模式1
MOV IE,#10000010B
MOV TH0,#(65536-100)/256
MOV TL0,#(65536-100) mod 256
SETB TR0
RET
TIMER0: PUSH ACC
MOV TH0,#(65536-100)/256
MOV TL0,#(65536-100) mod 256

CALL L_DISPLAY ;每1MS掃描顯示七段顯示器
DJNZ SEC,EXIT6
MOV SEC,#100 ;1MSX10000=1秒
DJNZ SEC2,EXIT6
EXIT5: MOV 30H,40H ;每秒更新一次轉盤圈數計數值
MOV 31H,41H
MOV 32H,42H
MOV 33H,43H
MOV 40H,#0 ;仟位 計數值歸零
MOV 41H,#0 ;佰位
MOV 42H,#0 ;拾位
MOV 43H,#0 ;個位
MOV SEC,#100
MOV SEC2,#100
EXIT6: POP ACC
RETI
COUNTLED:
MOV A,43H ;個位數
CJNE A,#9,EE1 ;已經加到9,若再加則進位成0
MOV 43H,#0
MOV A,42H ;十位數
CJNE A,#9,EE2 ;已經加到9,若再加則進位成0
MOV 42H,#0
MOV A,41H ;百位數
CJNE A,#9,EE3 ;已經加到9,若再加則進位成0
MOV 41H,#0
MOV A,40H ;千位數
CJNE A,#9,EE4 ;已經加到9,若再加則進位成0
MOV 40H,#0
MOV 41H,#0
MOV 42H,#0
MOV 43H,#0
JMP EE5
EE1: INC 43H ;個位數未到9,加1
JMP EE5
EE2: INC 42H ;十位數未到9,加1
JMP EE5
EE3: INC 41H ;百位數未到9,加1
JMP EE5
EE4: INC 40H ;千位數未到9,加1
JMP EE5
EE5: RET
;==============================
;=======七段顯示掃描副程式=======
;==============================
L_DISPLAY:

MOV A,P2
RR A
MOV P2,A ;依序點亮個、十、百、千七段顯示器
INC R0
MOV P0,@R0
CJNE A,#01111111B,LBACK
MOV P2,#11110111B
MOV R0,#30H
MOV P0,@R0
LBACK: RET
END

Build後會出現
C:\RPMSECOND.ASM(42): error A9: SYNTAX ERROR
C:\RPMSECOND.ASM(42): error A9: SYNTAX ERROR
C:\RPMSECOND.ASM(43): error A9: SYNTAX ERROR
C:\RPMSECOND.ASM(43): error A9: SYNTAX ERROR
C:\RPMSECOND.ASM(48): error A22: EXPRESSION TYPE DOES NOT MATCH INSTRUCTION
C:\RPMSECOND.ASM(49): error A9: SYNTAX ERROR
C:\RPMSECOND.ASM(49): error A9: SYNTAX ERROR
C:\RPMSECOND.ASM(50): error A9: SYNTAX ERROR
C:\RPMSECOND.ASM(50): error A9: SYNTAX ERROR
C:\RPMSECOND.ASM(66): error A22: EXPRESSION TYPE DOES NOT MATCH INSTRUCTION

希望各位大大指導一下..感謝..
aki
版主


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-06-01 08:16:03 IP:61.229.xxx.xxx 未訂閱
軟體是配合硬體,整個系統才會正常運作!
該 post 一下電路圖, 或是方塊圖吧!
系統時間:2024-05-06 11:05:43
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!