📄 t.lst
字号:
A51 MACRO ASSEMBLER T 04/20/2008 22:58:08 PAGE 1
MACRO ASSEMBLER A51 V8.00
OBJECT MODULE PLACED IN T.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE T.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
00B7 1 BEEP BIT P3.7
00A0 2 LCD_RS BIT P2.0
00A1 3 LCD_RW BIT P2.1
00A2 4 LCD_EN BIT P2.2
003F 5 LCD_X EQU 3FH ;LCD 地址变量
6
0030 7 TIMER_H EQU 30H ;定时器高位字节单元
0031 8 TIMER_L EQU 31H ;定时器低位字节单元
0032 9 TIMCOUNT EQU 32H ;时间中断数
10
11
0035 12 INT_G EQU 35H ;中断计数缓冲单元高地址
0034 13 INT_H EQU 34H ;中断计数缓冲单元中地址
0033 14 INT_L EQU 33H ;中断计数缓冲单元低地址
15
16
0036 17 T_S EQU 36H ;数据显示低位
0037 18 T_M EQU 37H ;数据显示中位
0038 19 T_H EQU 38H ;数据显示高位
0039 20 T_G EQU 39H ;数据显示最高位
21
22 ;----------------------------------------------------------
0000 23 ORG 0000H
0000 802E 24 JMP MAIN ;主程序开始
000B 25 ORG 000BH
000B 2184 26 JMP TIMER_INT ;定时器T0中断服务程序
001B 27 ORG 001BH ;定时器T1中断服务程序
001B 802A 28 JMP TIMER1
0030 29 ORG 0030H
30 ;----------------------------------------------------------
0030 31 MAIN:
0030 758160 32 MOV SP,#60H ;设置SP指针
0033 12004A 33 LCALL PRO_SET ;初始化
0036 117D 34 CALL SET_LCD
0038 12016B 35 LCALL TIM_T0
36 ;-----------------------------------------------------------
37 ;LCD1602是慢速显示器件,故100MS显示一次。
38 ;-----------------------------------------------------------
003B 39 MAIN1:
003B AD28 40 MOV R5,40
003D 41 MAIN2:
003D 3162 42 ACALL DELAY1 ;3ms
003F DDFC 43 DJNZ R5,MAIN2
0041 31B1 44 ACALL SBIN_SBCD
0043 3133 45 CALL CONV
0045 80F4 46 JMP MAIN1
47 ;------------------------------------------------------------
48 ;T1计数器中断服务子程序
49 ;计T1计数器溢出次数
50 ;------------------------------------------------------------
0047 51 TIMER1:
0047 052A 52 INC 2AH
0049 32 53 RETI
54 ;------------------------------------------------------------
55 ;初始化程序
56 ;------------------------------------------------------------
004A 7400 57 PRO_SET: MOV A,#00H
004C 75F000 58 MOV B,#00H
A51 MACRO ASSEMBLER T 04/20/2008 22:58:08 PAGE 2
004F F52A 59 MOV 2AH,A
0051 7580FF 60 MOV P0,#0FFH
0054 7590FF 61 MOV P1,#0FFH
0057 75A0FF 62 MOV P2,#0FFH
005A 753400 63 MOV INT_H,#00H
005D 753300 64 MOV INT_L,#00H
0060 753500 65 MOV INT_G,#00H
0063 753600 66 MOV T_S,#00H
0066 753800 67 MOV T_H,#00H
0069 753700 68 MOV T_M,#00H
006C 753900 69 MOV T_G,#00H
006F 753200 70 MOV TIMCOUNT,#00H
0072 75304C 71 MOV TIMER_H,#04CH ;定时 50 MS
0075 753110 72 MOV TIMER_L,#10H ;
0078 C2B7 73 CLR BEEP
007A D2B5 74 SETB P3.5 ;P3.5端口置输入状态
007C 22 75 RET ;T1(TIMER1的外部输入脚)
76 ;-----------------------------------------------------
77 ;LCD 初始化设置
78 ;-----------------------------------------------------
007D 79 SET_LCD:
007D C2A2 80 CLR LCD_EN
007F 11B4 81 CALL INIT_LCD ;初始化 LCD
0081 3162 82 CALL DELAY1
0083 900092 83 MOV DPTR,#INFO1 ;指针指到显示信息1
0086 7401 84 MOV A,#1 ;显示在第一行
0088 11D3 85 CALL LCD_SHOW
008A 9000A3 86 MOV DPTR,#INFO2 ;指针指到显示信息2
008D 7402 87 MOV A,#2 ;显示在第二行
008F 11D3 88 CALL LCD_SHOW
0091 22 89 RET
90 ;-----------------------------------------------------
0092 20202020 91 INFO1: DB " CYMOMETER ",0 ;LCD 第一行显示信息
0096 43594D4F
009A 4D455445
009E 52202020
00A2 00
00A3 46524551 92 INFO2: DB "FREQ: HZ ",0 ;LCD 第二行显示信息
00A7 3A202020
00AB 20202020
00AF 20485A20
00B3 00
93 ;-----------------------------------------------------
94 ;LCD 接口初始化
95 ;8位I/O控制
96 ;-----------------------------------------------------
00B4 97 INIT_LCD:
00B4 7438 98 MOV A,#38H ;双列显示,字形5*7点阵
00B6 311C 99 CALL WCOM
00B8 3162 100 CALL DELAY1
00BA 7438 101 MOV A,#38H ;双列显示,字形5*7点阵
00BC 311C 102 CALL WCOM
00BE 3162 103 CALL DELAY1
00C0 7438 104 MOV A,#38H ;双列显示,字形5*7点阵
00C2 311C 105 CALL WCOM
00C4 3162 106 CALL DELAY1
00C6 740C 107 MOV A,#0CH ;开显示,关光标,
00C8 311C 108 CALL WCOM
00CA 3162 109 CALL DELAY1
00CC 7401 110 MOV A,#01H ;清除 LCD 显示屏
00CE 311C 111 CALL WCOM
00D0 3162 112 CALL DELAY1
00D2 22 113 RET
114 ;----------------------------------------------------
00D3 115 LCD_SHOW: ;在LCD的第一行或第二行显示信息字符
116
A51 MACRO ASSEMBLER T 04/20/2008 22:58:08 PAGE 3
00D3 B4010C 117 CJNE A,#1,LINE2 ;判断是否为第一行
00D6 7480 118 LINE1: MOV A,#80H ;设置 LCD 的第一行地址
00D8 311C 119 CALL WCOM ;写入命令
00DA 11F8 120 CALL CLR_LINE ;清除该行字符数据
00DC 7480 121 MOV A,#80H ;设置 LCD 的第一行地址
00DE 311C 122 CALL WCOM ;写入命令
00E0 800A 123 JMP FILL
00E2 74C0 124 LINE2: MOV A,#0C0H ;设置 LCD 的第二行地址
00E4 311C 125 CALL WCOM ;写入命令
00E6 11F8 126 CALL CLR_LINE ;清除该行字符数据
00E8 74C0 127 MOV A,#0C0H ;设置 LCD 的第二行地址
00EA 311C 128 CALL WCOM
00EC E4 129 FILL: CLR A ;填入字符
00ED 93 130 MOVC A,@A+DPTR ;由消息区取出字符
00EE B40001 131 CJNE A,#0,LC1 ;判断是否为结束码
00F1 22 132 RET
00F2 3121 133 LC1: CALL WDATA ;写入数据
00F4 A3 134 INC DPTR ;指针加1
00F5 80F5 135 JMP FILL ;继续填入字符
00F7 22 136 RET
137 ;---------------------------------------------------
00F8 138 CLR_LINE: ;清除该行 LCD 的字符
00F8 7818 139 MOV R0,#24
00FA 7420 140 CL1: MOV A,#' '
00FC 3121 141 CALL WDATA
00FE D8FA 142 DJNZ R0,CL1
0100 22 143 RET
144 ;-----------------------------------------------------
145 ; 写指令、数据使能子程序
146 ;-----------------------------------------------------
0101 147 ENABLE: ;写指令使能
0101 C2A0 148 CLR LCD_RS ;RS=L,LCD_RW=L,D0-D7=指令码,E=高脉冲
0103 C2A1 149 CLR LCD_RW
0105 D2A2 150 SETB LCD_EN
0107 3117 151 CALL DELAY0
0109 C2A2 152 CLR LCD_EN
010B 22 153 RET
010C 154 ENABLE1: ;写数据使能
010C D2A0 155 SETB LCD_RS ;RS=H,RW=L,D0-D7=数据,E=高脉冲
010E C2A1 156 CLR LCD_RW
0110 D2A2 157 SETB LCD_EN
0112 3117 158 CALL DELAY0
0114 C2A2 159 CLR LCD_EN
0116 22 160 RET
161
0117 7FFA 162 DELAY0: MOV R7,#250 ;延时500微秒
0119 DFFE 163 DJNZ R7,$
011B 22 164 RET
165 ;----------------------------------------------------
166 ;写入命令子程序
167 ;----------------------------------------------------
011C 168 WCOM: ;以8位控制方式将命令写至LCD
011C F580 169 MOV P0,A ;写入命令
011E 3101 170 CALL ENABLE
0120 22 171 RET
172 ;----------------------------------------------------
173 ;写入数据子程序
174 ;----------------------------------------------------
0121 175 WDATA: ;以8位控制方式将数据写至LCD
0121 F580 176 MOV P0,A ;写入数据
0123 310C 177 CALL ENABLE1
0125 22 178 RET
179 ;---------------------------------------------------
180 ;在 LCD 第二行显示字符
181 ;A=ASC DATA, B=LINE X POS
182 ;---------------------------------------------------
A51 MACRO ASSEMBLER T 04/20/2008 22:58:08 PAGE 4
0126 183 LCDP2: ;在LCD的第二行显示字符
0126 C0E0 184 PUSH ACC ;
0128 E5F0 185 MOV A,B ;设置显示地址
012A 24C0 186 ADD A,#0C0H ;设置LCD的第二行地址
012C 311C 187 CALL WCOM ;写入命令
012E D0E0 188 POP ACC ;由堆栈取出A
0130 3121 189 CALL WDATA ;写入数据
0132 22 190 RET
191 ;-------------------------------------------------------
192 ;ASCII 转换并在第二行显示数字子程序
193 ;-------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -