?? int0.lst
字號:
A51 MACRO ASSEMBLER INT0 02/13/2008 19:22:34 PAGE 1
MACRO ASSEMBLER A51 V7.10
OBJECT MODULE PLACED IN int0.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE int0.ASM SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1
2 ;*******************************************************************************
3 ;- INT0中斷計數 3位數碼管顯示 P3.2接按鍵,計數 *
4 ;*******************************************************************************
5 ; 日期: 2008-2-25 硬件: 數碼管P0,數碼管控制P2 *
6 ; 版本: 3.0 *
7 ; 作者: 深圳志博電子有限公司 專業8051單片機教學站 *
8 ; 郵箱: zty0012001@163.com *
9 ; 網站: http://www.elecmcu.com http://www.elecmcu.com 更多例程請登陸網站 *
10 ;*******************************************************************************
11 ; 硬件:此程序在本公司志博電子實驗儀運行通過 *
12 ;*******************************************************************************
13 ; 【版權】 Copyright(C)深圳志博電子有限公司 www.elecmcu.com All Rights Reserved *
14 ; 【聲明】 此程序僅用于學習與參考,引用請注明版權和作者信息! *
15 ;*******************************************************************************
00B2 16 IR BIT P3.2 ;紅外接收口
0080 17 LED_DATA EQU P0 ;數碼管數據口定義
0030 18 COUNT EQU 30H
0085 19 DIS_1 BIT P0.5 ;第一個數碼管顯示選擇
0086 20 DIS_2 BIT P0.6 ;第二個數碼管顯示選擇
0087 21 DIS_3 BIT P0.7 ;第三個數碼管顯示選擇
0090 22 DIS_4 BIT P1.0 ;第四個數碼管顯示選擇
0091 23 DIS_5 BIT P1.1 ;第五個數碼管顯示選擇
0084 24 DIS_6 BIT P0.4 ;第六個數碼管顯示選擇
25
00A0 26 DIS_DATA DATA P2 ;6位數碼管的公共數據口
27
0018 28 DIS_INDEX DATA 18H ;顯示位序列,存儲目前顯示的是第幾位
29
0019 30 DIS_BUFF DATA 19H ;顯示緩沖區首地址 一共從0X19-0X1E 六個字節
31
32
0019 33 DISSTART EQU 19H
34 ;*******************************************************************
0000 35 ORG 0000H
0000 802E 36 JMP MAIN
0003 37 ORG 0003H
0003 804C 38 JMP INT0_EX0
0030 39 ORG 0030H
40 ;*******************************************************************
0030 41 MAIN:
0030 758160 42 MOV SP,#60H
0033 7580FF 43 MOV P0,#0FFH
0036 75A0FF 44 MOV P2,#0FFH
0039 753000 45 MOV 30H,#00H
003C D288 46 SETB IT0 ;INT1為下降沿觸發
003E D2AF 47 SETB EA
0040 D2A8 48 SETB EX0
0042 75190A 49 MOV 19H,#0X0A ;以下三句話把前三位數碼管全熄滅(即把顯示緩沖區填10)
0045 751A0A 50 MOV 1AH,#0X0A
0048 751B0A 51 MOV 1BH,#0X0A
004B 52 MAIN1:
004B 1174 53 CALL CONVT
004D 1197 54 CALL PLAY
004F 80FA 55 JMP MAIN1
56 ;*******************************************************************
0051 57 INT0_EX0:
0051 C0E0 58 PUSH ACC
A51 MACRO ASSEMBLER INT0 02/13/2008 19:22:34 PAGE 2
0053 C0D0 59 PUSH PSW
0055 D2D3 60 SETB RS0
0057 C2D4 61 CLR RS1
0059 C2A8 62 CLR EX0
005B 0530 63 INC COUNT
005D 7C14 64 MOV R4,#14H ;顯示20次
005F 65 EX0_DEL:
005F E530 66 MOV A,COUNT
0061 1174 67 CALL CONVT
0063 1197 68 CALL PLAY
0065 DCF8 69 DJNZ R4,EX0_DEL
70
0067 B4FF03 71 CJNE A,#0FFH,EX0_END
006A 753000 72 MOV COUNT,#00H
006D 73 EX0_END:
006D D2A8 74 SETB EX0
006F D0D0 75 POP PSW
0071 D0E0 76 POP ACC
0073 32 77 RETI
78 ;---------------------------------------------------------
79 ;代碼變換 (HEX TO BCD)
80 ;---------------------------------------------------------
0074 81 CONVT:
0074 E530 82 MOV A,COUNT
0076 75F064 83 MOV B,#100
0079 84 84 DIV AB
007A F51C 85 MOV DISSTART+3,A ;百位存放在DISSTART+2
007C 740A 86 MOV A,#10
007E C5F0 87 XCH A,B
0080 84 88 DIV AB
0081 F51D 89 MOV DISSTART+4,A ;十位存放在DISSTART+1
0083 85F01E 90 MOV DISSTART+5,B ;個位存放在DISSTART
91
0086 E51C 92 MOV A,DISSTART+3
0088 B4000B 93 CJNE A,#00H,CONVT_END
008B 751C0A 94 MOV DISSTART+3,#0AH ;高位為0,不顯示
008E E51D 95 MOV A,DISSTART+4
0090 B40003 96 CJNE A,#00H,CONVT_END
0093 751D0A 97 MOV DISSTART+4,#0AH
0096 98 CONVT_END:
0096 22 99 RET
100 ;---------------------------------------------------------
0097 101 PLAY: ;顯示子程序開始
0097 751800 102 MOV DIS_INDEX,#00 ;初始化顯示的數碼管是第0位
009A 103 DISPLAY_START: ;顯示一位開始
009A 11E0 104 CALL OFF_ALL ;調用子程序關閉所有數碼管的顯示
009C 75A000 105 MOV DIS_DATA,#00 ; 6個數目管的公共顯示數據寫0關閉
009F E518 106 MOV A, DIS_INDEX
00A1 B40004 107 DIS0_B: CJNE A,#0X00,DIS1_B
00A4 C285 108 CLR DIS_1
00A6 8023 109 JMP MOV_DAT
00A8 110 DIS1_B:
00A8 B40104 111 CJNE A,#0X01,DIS2_B
00AB C286 112 CLR DIS_2
00AD 801C 113 JMP MOV_DAT
00AF 114 DIS2_B:
00AF B40204 115 CJNE A,#0X02,DIS3_B
00B2 C287 116 CLR DIS_3
00B4 8015 117 JMP MOV_DAT
00B6 118 DIS3_B:
00B6 B40304 119 CJNE A,#0X03,DIS4_B
00B9 C290 120 CLR DIS_4
00BB 800E 121 JMP MOV_DAT
00BD 122 DIS4_B:
00BD B40404 123 CJNE A,#0X04,DIS5_B
00C0 C291 124 CLR DIS_5
A51 MACRO ASSEMBLER INT0 02/13/2008 19:22:34 PAGE 3
00C2 8007 125 JMP MOV_DAT
00C4 126 DIS5_B:
00C4 B40518 127 CJNE A,#0X05,DIS_END
00C7 C284 128 CLR DIS_6
00C9 8000 129 JMP MOV_DAT ;以上程序根據現在的顯示位數進行條件分支,分別打開相應的
顯示使能位
00CB 130 MOV_DAT:
00CB E518 131 MOV A, DIS_INDEX
00CD 7919 132 MOV R1,#DIS_BUFF
00CF 29 133 ADD A,R1
00D0 F8 134 MOV R0,A
00D1 E6 135 MOV A,@R0 ;獲得目前的顯示位所對應自己的緩沖數據
00D2 9000FA 136 MOV DPTR,#DIS_TAB
00D5 93 137 MOVC A,@A+DPTR
00D6 F5A0 138 MOV DIS_DATA,A ;將目前的顯示數據經過查表獲得對應的數碼管段碼
00D8 0518 139 INC DIS_INDEX ;顯示位序加一,指向下一位
00DA E518 140 MOV A,DIS_INDEX
00DC B406BB 141 CJNE A,#6,DISPLAY_START ;以上兩句判斷是否循環顯示夠6位是的話返回到被調用的
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -