![]() |
發布時間: 2020-1-4 10:32
正文摘要:我用中斷按鍵加中斷計時器的方法去運行,但是加上按鍵就不好用,按鍵只能按一次,寄存器R7會賦值1,但是按第二次就不能外部中斷了,如果把按鍵全部去掉的話,秒表是能正常用的,但是加上按鍵秒表就一直顯示00,新手 ... |
已解決 ORG 0000H LJMP START ORG 0003H LJMP KEY ORG 000BH LJMP T0_INT //---------------------------------- //主程序: ORG 0030H START: MOV IE,#83H ;CPU開中斷,T0開中斷,外部中斷0打開 CLR IT0 ;設置電平觸發 MOV R0,#00H ;個位數字 MOV R1,#00H ;十位數字 MOV R2,#00H ;判斷是否溢出標志 MOV B,#00H MOV P0,#0C0H ;初始 MOV P2,#03H MOV TMOD,#02H ;T0方式2 MOV TH0,#6 ;計時器賦值 MOV TL0,#6 MOV R5,#39 ;設置循環次數 MOV R6,#100 MOV R7,#00H ;按鍵次數 MOV DPTR,#TAB_LED ;指針指向段碼 CJNE R7,#01H,$ ;等待鍵盤 RUN: SETB TR0 ;啟動T0 LOOP: MOV A,R0 ;顯示個位 MOVC A,@A+DPTR ; MOV P2,#02H ; MOV P0,A ;送段碼顯示 LCALL DELAY_10MS ;動態延時10ms MOV A,R1 ;送十位 MOVC A,@A+DPTR ;顯示十位 MOV P2,#01H ; MOV P0,A ;送段碼顯示 LCALL DELAY_10MS ;動態延時10ms CJNE R2,#00H,OVER ;判斷是否溢出 MOV A,B CJNE A,#00H,START NEXT: LJMP LOOP ;循環 OVER: MOV P2,#00H ;關斷 LJMP $ //---------------------------------- //共陽極段碼表: TAB_LED: DB 0C0H,0F9H,0A4H,0B0H,99H DB 92H,82H,0F8H,80H,90H //---------------------------------- //T0中斷: T0_INT: DJNZ R5,INT_END MOV R5,#39 DJNZ R6,T0_INT MOV R6,#100 INC R0 ; CJNE R0,#10,INT_END ;判斷個位是否滿10 CLEAN1: MOV R0,#00H ;個位歸零 CLEAN2: INC R1 ;十位進一 CJNE R1,#10,INT_END ;判斷十位是否滿10 MOV R1,#00H ;十位歸零 MOV R2,#01H ;標志位置1 INT_END: RETI //---------------------------------- //鍵盤輸入: KEY: JNB P3.2,$ INC R7 ;R7加一 CJNE R7,#02H,CLEAN_R7 CLR TR0 LJMP KEY_END CLEAN_R7: CJNE R7,#03H,KEY_END MOV B,#01H KEY_END: RETI //---------------------------------- //延時10ms: DELAY_10MS: MOV R3,#20 L1: MOV R4,#250 DJNZ R4,$ DJNZ R3,L1 RET END |
大佬們救救我呀!! |
問題關鍵大家都在用C敲代碼,你整個匯編的代碼上來有多少人能看的懂,有幾個玩匯編的又在線? |
我這邊只有c語音程序,匯編語言的沒有,想要的話回復我,給你 |
我這邊只有c語音程序資料 |
R7我在SETB TR0那里設置中斷,顯示是1,但是如果再在下邊一行設置直接就跑飛了,R7=71H |
求助大佬們啦,謝謝! |