📄 6t.lst
字号:
页 1
01-29-03
01:37:35
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
; *************************************
; * (SEND.ASM) *
; * 十五路遥控发送控制器 *
; * 2001.7.18 *
; *************************************
;
;**********************************************************************
;* *
;* KEYX0 P1.0 1 40 VCC *
;* KEYX1 P1.1 2 39 P0.0 KEYY0 *
;* KEYX2 P1.2 3 38 P0.1 KEYY1 *
;* KEYX3 P1.3 4 37 P0.2 KEYY2 *
;* P1.4 5 36 P0.3 KEYY3 *
;* P1.5 6 35 P0.4 KEYY4 *
;* P1.6 7 34 P0.5 KEYY5 *
;* P1.7 8 33 P0.6 KEYY6 *
;* RST 9 32 P0.7 KEYY7 *
;* P3.0 10 MCS-51 31 EA VDD *
;* P3.1 11 30 ALE *
;* P3.2 12 29 PSEN *
;* P3.3 13 28 P2.7 *
;* P3.4 14 27 P2.6 *
;* REMOTEOUT T1 P3.5 15 26 P2.5 *
;* P3.6 16 25 P2.4 *
;* P3.7 17 24 P2.3 *
;* XTAL2 18 23 P2.2 *
;* XTAL1 19 22 P2.1 *
;* VSS 20 21 P2.0 *
;* *
;* *
;**********************************************************************
;
;
;
;伪定义
KEYX0 EQU P1.0 ;P1.0 -- P1.3位键盘行扫描
KEYX1 EQU P1.1 ;本系统采用4 * 8 键盘阵列
KEYX2 EQU P1.2
KEYX3 EQU P1.3
KEYY EQU P0 ;P0 口键盘列扫描
;
;
;
;
;*************************************
;* *
;* 主程序和中断程序入口 *
;* *
C:\MY DOCUMENTS\2003.02.12书稿\配套光盘源程序\实例6\6T.ASM
页 2
01-29-03
01:37:35
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
;*************************************
ORG 0000H ;程序执行开始地址
0000 014D AJMP START ;跳至START执行
ORG 0003H ;外中断0中断入口地址
0003 32 RETI ;中断返回(不开中断)
ORG 000BH ;定时器T0中断入口地址
000B 32 RETI ;中断返回(不开中断)
ORG 0013H ;外中断1中断入口地址
0013 32 RETI ;中断返回(不开中断)
ORG 001BH ;定时器T1中断入口地址
001B 02005C LJMP INTT1 ;跳至INTT1中断服务程序
ORG 0023H ;串行口中断入口地址
0023 32 RETI ;中断返回(不开中断)
ORG 002BH ;定时器T2中断入口地址
002B 32 RETI ;中断返回(不开中断)
;
;*************************************
;* *
;* 初 始 化 程 序 *
;* *
;*************************************
002C E4 CLEARMEMIO: CLR A ;A清0
002D 14 DEC A ;A为#0FFH
002E F580 MOV P0,A ;P0-P3口置1
0030 F590 MOV P1,A ;
0032 F5A0 MOV P2,A ;
0034 F5B0 MOV P3,A ;
0036 C2B5 CLR P3.5 ;关遥控输出
0038 758170 CLEARMEM: MOV SP,#70H ;设堆栈基址为70H
003B 75A800 MOV IE,#00H ;关所有中断
003E 75B801 MOV IP,#01H ;设优先级
0041 758922 MOV TMOD,#22H ;8位自动重装初值模式
0044 758DF3 MOV TH1,#0F3H ;定时为13微秒初值
0047 758BF3 MOV TL1,#0F3H ;
004A D2AF SETB EA ;开总中断允许
004C 22 RET ;返回
;
;
;
;
;*************************************
;* *
;* 主 程 序 *
;* *
;*************************************
004D 12002C START: LCALL CLEARMEMIO ;调用初始化子程序
;
0050 12005F MAIN: LCALL KEYWORK ;主体程序。调用查键子程序
C:\MY DOCUMENTS\2003.02.12书稿\配套光盘源程序\实例6\6T.ASM
页 3
01-29-03
01:37:35
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
0053 020050 LJMP MAIN ;转MAIN循环
0056 00 NOP ;PC值出错处理
0057 00 NOP
0058 00 NOP
0059 02004D LJMP START ;重新初始化
;
;*************************************
;* *
;* T1中断服务程序 *
;* *
;*************************************
005C B2B5 INTT1: CPL P3.5 ;40kHZ红外线遥控信号产生
005E 32 RETI ;中断返回
;
;
;*************************************
;* *
;* 键盘工作子程序(4 * 8 阵列) *
;* 出口为各键工作程序入口 *
;*************************************
005F 7580FF KEYWORK: MOV KEYY,#0FFH ;置列线输入状态
0062 C290 CLR KEYX0 ;行线(P1口)全置0
0064 C291 CLR KEYX1
0066 C292 CLR KEYX2
0068 C293 CLR KEYX3
006A E580 MOV A,KEYY ;读入P0口值
006C F5F0 MOV B,A ;KEYY口值暂存B中
006E B4FF01 CJNE A,#0FFH,KEYHIT ;不等于#0FFH,转KEYHIT(有键按下)
0071 22 KEYOUT: RET ;没有键按下返回
;
0072 1201E5 KEYHIT: LCALL DL10MS ;延时去抖动
0075 E580 MOV A,KEYY ;再读入P0口值至A
0077 B5F0F7 CJNE A,B,KEYOUT ;A不等于B(是干扰),子程序返回
007A D291 SETB KEYX1 ;有键按下,找键号开始,查0行
007C D292 SETB KEYX2
007E D293 SETB KEYX3
0080 E580 MOV A,KEYY ;读入P0口值
0082 B4FF1E CJNE A,#0FFH,KEYVAL0 ;P0不等于#0FFH,按下键在第0行
0085 D290 SETB KEYX0 ;不在第0行,开始查1行
0087 C291 CLR KEYX1
0089 E580 MOV A,KEYY ;读入P0口值
008B B4FF1A CJNE A,#0FFH,KEYVAL1 ;P0口不等于#0FFH,按下键在第1行
008E D291 SETB KEYX1 ;不在第1行,开始查2行
0090 C292 CLR KEYX2
0092 E580 MOV A,KEYY ;读入P0口值
0094 B4FF16 CJNE A,#0FFH,KEYVAL2 ;P0口不等于#0FFH,按下键在第2行
0097 D292 SETB KEYX2 ;不在第2行,开始查3行
0099 C293 CLR KEYX3
C:\MY DOCUMENTS\2003.02.12书稿\配套光盘源程序\实例6\6T.ASM
页 4
01-29-03
01:37:35
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
009B E580 MOV A,KEYY ;读入P0口值
009D B4FF12 CJNE A,#0FFH,KEYVAL3 ;P0口不等于#0FFH,按下键在第3行
00A0 020071 LJMP KEYOUT ;不在第3行,子程序返回
;
00A3 7A00 KEYVAL0: MOV R2,#00H ;按下键在第0行,R2赋行号初值0
00A5 0200B7 LJMP KEYVAL4 ;跳到KEYVAL4
;
00A8 7A08 KEYVAL1: MOV R2,#08H ;按下键在第1行,R2赋行号初值8
00AA 0200B7 LJMP KEYVAL4 ;跳到KEYVAL4
;
00AD 7A10 KEYVAL2: MOV R2,#10H ;按下键在第2行,R2赋行号初值16
00AF 0200B7 LJMP KEYVAL4 ;跳到KEYVAL4
;
00B2 7A18 KEYVAL3: MOV R2,#18H ;按下键在第3行,R2赋行号初值24
00B4 0200B7 LJMP KEYVAL4 ;跳到KEYVAL4
;
00B7 900136 KEYVAL4: MOV DPTR,#KEYVALTAB ; 键值翻译成连续数字
00BA F5F0 MOV B,A ;P0口值暂存B内
00BC E4 CLR A ;清A
00BD F8 MOV R0,A ;清R0
00BE E8 KEYVAL5: MOV A,R0 ;查列号开始,R0数据放入A
00BF 9408 SUBB A,#08H ;A中数减8
00C1 50AE JNC KEYOUT ;借位C为0,查表出错,返回
00C3 E8 MOV A,R0 ;查表次数小于8,继续查,
00C4 93 MOVC A,@A+DPTR ;查列号表
00C5 08 INC R0 ;R0加1
00C6 B5F0F5 CJNE A,B,KEYVAL5 ;查得值和P0口值不等,转KEYVAL5再查
00C9 18 DEC R0 ;查得值和P0口值相等,R0减1
00CA E8 MOV A,R0 ;放入A(R0中数值即为列号值)
00CB 2A ADD A,R2 ; 与行号初值相加成为键号值(0-31)
00CC F5F0 MOV B,A ;键号乘3处理用于JMP散转指令
00CE 23 RL A ;键号乘3处理用于JMP散转指令
00CF 25F0 ADD A,B ;键号乘3处理用于JMP散转指令
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -