8051測速程式.有點問題 |
缺席
|
kevin緯
一般會員 ![]() ![]() 發表:2 回覆:1 積分:0 註冊:2009-03-11 發送簡訊給我 |
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 發送簡訊給我 |
===================引 用 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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |