找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2528|回復(fù): 7
收起左側(cè)

C51單片機(jī)按鍵秒表程序求助

[復(fù)制鏈接]
ID:678057 發(fā)表于 2020-1-4 10:32 | 顯示全部樓層 |閱讀模式
我用中斷按鍵加中斷計(jì)時(shí)器的方法去運(yùn)行,但是加上按鍵就不好用,按鍵只能按一次,寄存器R7會(huì)賦值1,但是按第二次就不能外部中斷了,如果把按鍵全部去掉的話,秒表是能正常用的,但是加上按鍵秒表就一直顯示00,新手真的不會(huì)了,求求大佬!下面是程序:
                        ORG                0000H
                        LJMP                START
                        ORG                0003H
                        LJMP                KEY
                        ORG                000BH
                        LJMP                T0_INT
//----------------------------------
//主程序:
                        ORG                0030H
START:                MOV                IE,#83H                        ;CPU開中斷,T0開中斷,外部中斷0打開
                        CLR                IT0                                ;設(shè)置電平觸發(fā)
                        MOV                R0,#00H                        ;個(gè)位數(shù)字
                        MOV                R1,#00H                        ;十位數(shù)字
                        MOV                R2,#00H                        ;判斷是否溢出標(biāo)志
                        MOV                P0,#0C0H                        ;初始
                        MOV                P2,#03H       
                        MOV                TMOD,#02H                ;T0方式2
                        MOV                TH0,#6                        ;計(jì)時(shí)器賦值
                        MOV                TL0,#6
                        MOV                R5,#39                        ;設(shè)置循環(huán)次數(shù)
                        MOV                R6,#100
                        MOV                R7,#00H                        ;按鍵次數(shù)
                        MOV                DPTR,#TAB_LED        ;指針指向段碼
                        CJNE                R7,#01H,$                        ;等待鍵盤                       
RUN:                        SETB                TR0                                ;啟動(dòng)T0
LOOP:                MOV                A,R0                                ;顯示個(gè)位
                        MOVC        A,@A+DPTR                ;
                        MOV                P2,#02H                        ;
                        MOV                P0,A                                ;送段碼顯示
                        LCALL        DELAY_10MS                ;動(dòng)態(tài)延時(shí)10ms
                        MOV                A,R1                                ;送十位
                        MOVC        A,@A+DPTR                ;顯示十位
                        MOV                P2,#01H                        ;
                        MOV                P0,A                                ;送段碼顯示
                        LCALL        DELAY_10MS                ;動(dòng)態(tài)延時(shí)10ms
                        CJNE                R2,#00H,OVER                ;判斷是否溢出
                        CJNE                R7,#01H,NEXT2                ;判斷按鍵次數(shù)
NEXT:                LJMP                LOOP                        ;循環(huán)
NEXT2:                CJNE                R7,#02H,START                ;判斷按鍵次數(shù)
                        LJMP                LOOP
OVER:                MOV                P2,#00H                        ;關(guān)斷
                        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                 ;判斷個(gè)位是否滿10
CLEAN1:                MOV                R0,#00H                         ;個(gè)位歸零
CLEAN2:                INC                R1                                 ;十位進(jìn)一
                        CJNE                R1,#10,INT_END                 ;判斷十位是否滿10
                        MOV                R1,#00H                         ;十位歸零
                        MOV                R2,#01H                         ;標(biāo)志位置1
INT_END:                RETI
//----------------------------------
//鍵盤輸入:
KEY:                        INC                R7                                 ;R7加一
                        CJNE                R7,#02H,PAUSE
                        LJMP                KEY_END
PAUSE:                CLR                TR0
KEY_END:                RETI
//----------------------------------
//延時(shí)10ms:
DELAY_10MS:        MOV                R3,#20
L1:                        MOV                R4,#250
                        DJNZ                R4,$
                        DJNZ                R3,L1
                        RET
                        END


下邊是protues:







批注 2020-01-04 103111.png
回復(fù)

使用道具 舉報(bào)

ID:678057 發(fā)表于 2020-1-4 10:32 | 顯示全部樓層
求助大佬們啦,謝謝!
回復(fù)

使用道具 舉報(bào)

ID:678057 發(fā)表于 2020-1-4 10:41 | 顯示全部樓層
R7我在SETB  TR0那里設(shè)置中斷,顯示是1,但是如果再在下邊一行設(shè)置直接就跑飛了,R7=71H
回復(fù)

使用道具 舉報(bào)

ID:675483 發(fā)表于 2020-1-4 11:28 | 顯示全部樓層
我這邊只有c語音程序資料
回復(fù)

使用道具 舉報(bào)

ID:675483 發(fā)表于 2020-1-4 11:29 | 顯示全部樓層
我這邊只有c語音程序,匯編語言的沒有,想要的話回復(fù)我,給你
回復(fù)

使用道具 舉報(bào)

ID:680894 發(fā)表于 2020-1-4 12:40 | 顯示全部樓層
問題關(guān)鍵大家都在用C敲代碼,你整個(gè)匯編的代碼上來有多少人能看的懂,有幾個(gè)玩匯編的又在線?
回復(fù)

使用道具 舉報(bào)

ID:678057 發(fā)表于 2020-1-4 14:20 | 顯示全部樓層
大佬們救救我呀!
回復(fù)

使用道具 舉報(bào)

ID:678057 發(fā)表于 2020-1-4 15:49 | 顯示全部樓層
已解決
                        ORG                0000H
                        LJMP        START
                        ORG                0003H
                        LJMP        KEY
                        ORG                000BH
                        LJMP        T0_INT
//----------------------------------
//主程序:
                        ORG                0030H
START:                MOV                IE,#83H                        ;CPU開中斷,T0開中斷,外部中斷0打開
                        CLR                IT0                                ;設(shè)置電平觸發(fā)
                        MOV                R0,#00H                        ;個(gè)位數(shù)字
                        MOV                R1,#00H                        ;十位數(shù)字
                        MOV                R2,#00H                        ;判斷是否溢出標(biāo)志
                        MOV                B,#00H
                        MOV                P0,#0C0H                ;初始
                        MOV                P2,#03H       
                        MOV                TMOD,#02H                ;T0方式2
                        MOV                TH0,#6                        ;計(jì)時(shí)器賦值
                        MOV                TL0,#6
                        MOV                R5,#39                        ;設(shè)置循環(huán)次數(shù)
                        MOV                R6,#100
                        MOV                R7,#00H                        ;按鍵次數(shù)
                        MOV                DPTR,#TAB_LED        ;指針指向段碼
                        CJNE        R7,#01H,$                ;等待鍵盤                       
RUN:                SETB        TR0                                ;啟動(dòng)T0
LOOP:                MOV                A,R0                        ;顯示個(gè)位
                        MOVC        A,@A+DPTR                ;
                        MOV                P2,#02H                        ;
                        MOV                P0,A                        ;送段碼顯示
                        LCALL        DELAY_10MS                ;動(dòng)態(tài)延時(shí)10ms
                        MOV                A,R1                        ;送十位
                        MOVC        A,@A+DPTR                ;顯示十位
                        MOV                P2,#01H                        ;
                        MOV                P0,A                        ;送段碼顯示
                        LCALL        DELAY_10MS                ;動(dòng)態(tài)延時(shí)10ms
                        CJNE        R2,#00H,OVER        ;判斷是否溢出
                        MOV                A,B
                        CJNE        A,#00H,START
NEXT:                LJMP        LOOP                        ;循環(huán)
OVER:                MOV                P2,#00H                        ;關(guān)斷
                        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         ;判斷個(gè)位是否滿10
CLEAN1:                MOV                R0,#00H                         ;個(gè)位歸零
CLEAN2:                INC                R1                                 ;十位進(jìn)一
                        CJNE        R1,#10,INT_END         ;判斷十位是否滿10
                        MOV                R1,#00H                         ;十位歸零
                        MOV                R2,#01H                         ;標(biāo)志位置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
//----------------------------------
//延時(shí)10ms:
DELAY_10MS:        MOV                R3,#20
L1:                        MOV                R4,#250
                        DJNZ        R4,$
                        DJNZ        R3,L1
                        RET
                        END










回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表