當前位置:編程學習大全網 - 編程語言 - 求匯編51單片機接兩個數碼管從00顯示到99,外部中斷0接壹開關用於復位。麻煩註解下每句話的意思!!

求匯編51單片機接兩個數碼管從00顯示到99,外部中斷0接壹開關用於復位。麻煩註解下每句話的意思!!

COUNT EQU 31H ;寄存器定義

CNT EQU 32H

ORG 0000H ;程序開始

AJMP MAIN

ORG 000BH ;定時器0中斷地址

AJMP TIME

ORG 0013H ;外總中斷0中斷地址

AJMP INT00

ORG 0030H ;程序開始執行

MAIN:

MOV SP,#5FH ;移動堆棧

MOV COUNT,#00H ;清寄存器

MOV CNT,#00H ;

MOV TMOD,#01H ;定時器0工作方式1

MOV TH0,#3CH ;50MS初值

MOV TL0,#0B0H ;

SETB ET0 ;開定時器0中斷

SETB EA ;開總中斷

SETB EX0 ;開外總中斷0中斷

SETB TR0 ;開啟定時器0

LOOP:

CALL DISP ;調用顯示子程序

JMP LOOP ;采用查詢方式

;P0口數據輸出。P2.0、P2.1位碼控制端

DISP: MOV A,CNT ;CNT數據送入A中

MOV B,#10 ;10送入B中=分離出個位、十位數

DIV AB ;A除B

MOV R0,B ;B送入R0中

MOV DPTR,#TAB ;查表地址

MOVC A,@A+DPTR ;根據A的值查表

MOV P2,#0FEH ;開啟位碼=個位

MOV P0,A ;送個位數據

CALL DELAY ;延時壹會,保持亮度

MOV A,R0 ;R0送入A中、

MOV DPTR,#TAB ;

MOVC A,@A+DPTR ;

MOV P2,#0FDH ;開啟位碼=十位

MOV P0,A ;送個位數據

CALL DELAY ;

RET

;采用定時器每秒數碼管加1

TIME:

PUSH PSW ;狀態寄存器壓入堆棧

PUSH ACC ;累加器A壓入堆棧

MOV TH0,#3CH ;重裝50MS定時器初值

MOV TL0,#0B0H ;

INC COUNT ;50MS時間到寄存器加1

MOV A,COUNT ;送入A中

CJNE A,#20,UENRET ;比較不等於20,即1秒時間沒到

MOV COUNT,#00H ;到了1秒時間,寄存器清規

INC CNT ;CNT寄存器加1

MOV A,CNT ;送入A中

CJNE A,#100,UENRET ;比較=這裏因為只有兩位數碼管

MOV CNT,#00H ;意思跟上面20 的壹樣,

UENRET:POP ACC ;彈出A保護的值

POP PSW ;彈出狀態寄寄原值

RETI ;中斷返回

;外總中斷復位

INT00:

PUSH PSW

PUSH ACC

MOV COUNT,#00H;清COUNT寄存器

MOV CNT,#00H;清CNT寄存器

CALL DELAY

POP ACC ;彈出保護數據

POP PSW

RETI

DELAY: MOV R5,#100 ;延時程序

DJNZ R5,$

RET

;***陰數據

TAB: DB 3FH,06H,5BH,4FH,66H

DB 6DH,7DH,07H,7FH,6FH

END

  • 上一篇:什麽是8086
  • 下一篇:2009 福州中考狀元
  • copyright 2024編程學習大全網