;定義數據存儲單元 AKEY EQU 10H ;鍵值單元 BKEY EQU 11H CKEY EQU 12H DKEY EQU 13H JPSD EQU 14H ;節拍速度 JPFD EQU 15H ;節拍分度 XC1 EQU 27H ;顯示緩存 XC2 EQU 28H XC3 EQU 29H XC4 EQU 2AH LED1 EQU 2BH ;顯示代碼 LED2 EQU 2CH LED3 EQU 2DH LED4 EQU 2EH GEWEI EQU 30H ;個位 SIWEI EQU 31H ;十位 BEIWEI EQU 32H ;百位 KEYMA EQU 33H JPBS EQU 34H PAISU EQU 35H ;拍速 SS EQU 36H XLL EQU P1.0 ;聲音腳輸出 ;主程序 ORG 0000H LJMP MAIN ORG 001BH LJMP TDISP ;初始化 ORG 0030H MAIN:MOV P0,#0 MOV SP,#60H MOV 0ah,#1 MOV JPSD,#72 MOV JPFD,#3 MOV PAISU,#1 MOV AKEY,#0 MOV BKEY,#1 MOV P1,#0F0H MOV IE,#8AH MOV TMOD,#11H MOV TH1,#0EAH ;4ms參數 MOV TL1,#0F0H SET TR1 MOV P3,#0F0H ;鍵盤掃描處理 MKEY:LCALL KEY JZ MLOOP LCALL D10MS LCALL KEY JZ MLOOP KPCL: CJNE A,#10H,MLOOP;A鍵顯示代碼 MOV R3,AKEY CJNE R3,#1,KPINC;其他鍵不處理 MOV AKEY,#00 LJMP KEY11 KPINC:INC AKEY KEY11:LCALL KEY JNZ KEY11 LCALL D10MS JNZ KEY11 DISAJ: MOV XC1,,10H;顯示功能代碼2秒 MOV XC2,#10H MOV XC3,#10H MOV XC4,AKEY LCALL DISPLAY MOV 5DH,#200;延遲2秒 MD50MS:LACLL D10MS DJNZ 5DH,MD50MS MLOOP:MOV A,AKEY MJIEP: CJNE A,#1,MDISPLAY;調節狀態 LCALL TIAOJ MDISPLAY: LCALL DISPLAY MD101:LJMP MKEY ;讀鍵盤 KEY: MOV A,P1 CPL A ANL A,#0F0H MOV KEYMA,A RET ;延遲10MS D10MS: MOV 5FH,#10 DLP1: MOV 5EH,#200 DLP2: NOP NOP NOP DJNZ 5EH,DLP2 DJNZ 5FH,DLP1 RET ;節拍處理 JIEP: MOV XC4,#2 MOV XC3,#10H MOV A,JPSD SUBB A,#30 MOV DPTR,#JPTAB MOVC A,@A+DPTR MOV JPBS,A MOV A,JPFD CJNE A,PAISU,PAIINC MOV PAISU,#1 MOV XC1,PAISU MOV XC2,PAISU LCALL DISPLAY MOV SS,#33 ;高音0.1秒 SLOP1: SETB XLL LCALL D5US LCALL D5US LCALL D5US CLR XLL LCALL D5US LCALL D5US LCALL D5US PAIING: INC PAISU MOV XC1,PAISU MOV XC2,PAISU LCALL DISPLAY SOUNDL: MOV SS,#49 ;低音0.1秒 SLOP: SETB XLL LCALL D5US LCALL D5US CLR XLL LCALL D5US LCALL D5US DJNZ SS,SLOP JP100: LCALL D10MS DJNZ JPBS,JP100 RET ;節拍時間參數 JPTAB; DB 190,184,178,182,166,161,157 DB 152,148,144,140,136,133,130 DB 126,123,120,118,115,112,110 DB 108,105,103,101,99,97,95,93,92 DB 90,88,87,85,84,82,81,80,78,77, DB 76,75,73,72,71,70,69,68,67,66 DB 65,64,63,62,61,61,60,59,58,57 DB 57,56,55,55,54,53,53,52,51,51 DB 50,49,49,48,48,47,47,46,46,45 DB 45,44,44,43,43,42,42,41,41,40 DB 40,40,39,39,38,38,38,37,37,37 DB 36,36,35,35,35,34,34,34,33,33 DB 33,33,32,32,32,31,31,31,31,30 DB 30,30,29,29,29,29,28,28,28,28 DB 28,27,27,27,27,26,26,26,26,26 DB 25,25,25,25,24,24,24,24,24,23 DB 23,20,17,15,14,10,08,07,05,240 ;延遲500us D5US: MOV 38H,#100 D5S: NOP NOP NOP DJNZ 38H,D5S RET ;調節處理 ;調節狀態下的顯示處理 TIAOJ: MOV R4,BKEY CJNE R4,#1,TJ2 MOV A,JPSD LCALL SUZHI MOV XC4,BKEY MOV XC3,BEIWEI MOV XC2,SIWEI MOV XC1,GEWEI LJMP TJEND TJ2:CJNE R4,#2,TJEND ;節拍分度顯示 MOV XC4,#2 MOV XC3,#10H MOV XC2,#10H MOV XC1,JPFD TJEND: NOP ;A,B,C,D鍵盤的處理 TJ29; LCALL KEY JZ TJ01 LCALL D10MS LCALL KEY JZ TJ01 LJMP TJ00 TJ01: LJMP TJLOOP TJ00: MOV R5,A;鍵盤值暫存R5中 TJKEY11: LCALL KEY JNZ TJKEY11 LCALL D10MS JNZ TJKEY11 ;A鍵處理 CJNE R5,#10H,TJBJ LNC AKEY LJMP DISAJ ;B鍵處理 TJBJ: CJNE R5,#20H,TJCJ MOV A,BKEY CJNE A,#2,BJINC MOV BKEY,#01 LJMP TJLOOP BJINC: INC BKEY LJMP TJLOOP ;c鍵處理 增加 TJCJ: CJNE R5,#40H,TJDJ10 LJMP CJCL TJDJ10:LJMP TJDJ CJCL: MOV R6,BKEY CJNE R6,#1,TJ30 MOV A,#190 CJNE A,JPSD,JPSDINC MOV JPSD,#30 LJMP TJENDD JPSDINC: INC JPSD LJMP TJENDD TJ30: CJNE R6,#2,TJEND MOV A,#9 CJNE A,JPFD,JPFDINC MOV JPFD,#1 LJMP TJENDD JPFDINC: INC JPFD LJMP TJENDD ;D鍵處理 減少 TJDJ: CJNE R5,#80H,LJDJ10 LJMP LCJCL LJDJ10:LJMP TJENDD LCJCL: MOV R6,BKEY CJNE R6,#1,LTJ30 MOV A,#30 CJNE A,JPSD,LJPSDINC MOV JPSD,#190 LJMP TJENDD LJPSDINC:DEC JPSD LJMP TJEND LTJ30: CJNE R6,#2,TJENDD MOV A,#1 CJNE A,JPFD,LJPFDINC MOV JPFD,#9 LJMP TJENDD LJPFDINC:DEC JPFD LJMP TJENDD TJENDD:RET MMOV3: MOV XC3,#10H MOV XC2,SIWEI MOV XC1,GEWEI RET ;顯示代碼轉換處理 DISPLAY: MOV R0,#XC1 MOV R1,#LED1 MOV R7,#4 MOV DPTR,#TCODE DISP1: MOV A,@R0 MOVC A,@A+DPTR MOV @R1,A INC R0 INC R1 DJNZ R7,DISP1 MOV LED3,A LJMP DI SNEXT DIS00: MOV A,LED3 CLR ACC.7 MOV LED3,A TJLOOP: NOP DISNEXT: RET ;共陽led代碼 TCODE: DB C0H,0F9H,0A4H,0B0H,99H DB 92H,90H,88H,83H,82H,0F8H DB 80H,0A7H,0A1H,86H,8EH,0FFH ;十六進制化成十進制處理 SUZHI: MOV B,#100 DIV AB JNZ SUZI00 MOV BEIWEI,#10H LJMP SUZI01 SUZI00: MOV BEIWEI,A SUZI01: MOV A,B MOV B,#10 DIV AB MOV SIWEI,A MOV A,B MOV GEWEI,A RET ;T1中斷處理,顯示輸出 TDISP: PUSH A PUSH PSW MOV TH1,#0ECH MOV TL1,#90H SETB RS0 MOV P0,#0FFH ;關顯示 CJNE R2,#4,R2INC MOV R2,#1 LJMP TD11 R2INC: INC R2 TD11: CJNE R2,#1,TD12 CLR P2.5 MOV P0,LED1 SETB P2.8 LJMP TDRET TD12: CJNE R2,#2,TD13 CLR P2.8 MOV P0,LED2 SETB P2.7 LJMP TDRET TD13; CJNE R2,#3,TD14 CLR P2.7 MOV P0,LED3 SETB P2.6 LJMP TDRET TD14; CJNE R2,#4,TDRET CLR P2.6 MOV P0,LED4 SETB P2.5 TDRET: CLR RS0 POP PSW POP A RET
為什么我用keil uvision3編寫生成,一直出現錯誤,而且不止一個。
程序是用來控制節拍器的,
有沒有高手幫我修改一下。。
你得告訴人家出現什么錯誤?----------編譯器上有提示的啊!
定義RAM有沒有試一下使用 DATA ?
例如:
AKEY DATA 10H ;鍵值單元
BKEY DATA 11H
還有,你的主循環程序在哪里到哪里?------單片機運行是一個死循環.好像沒有看到哦?
示例:
1.清零 RAM ,初始化端口,定時器,等等.
2.主循環:
B_LOOP:
CALL B00 ;例如按鍵
CALL B01 ;例如顯示
;;; ......更多調用
JMP B_LOOP ;循環回去主循環,不能回去初始化那里!!!
;====================================
;//被調用的子程序
B_00:
......
RET
B_01:
........
RET
;==================================
建議把你的程序整理一下.
僅供參考!
這個問題,我已經解決了,同樣謝謝你!!
歡迎光臨 (http://www.raoushi.com/bbs/) | Powered by Discuz! X3.1 |