📄 7.lst
字号:
页 1
01-29-03
01:40:36
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; SPEED/MILE FOR BIKE PROGRAM ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;
; 60H,61H,62H作里程计数单元,6CH,6DH作T1计数扩充单元,
; 68H,69H,6AH,6BH存放自行车每圈时间数,70H,71H,72H,73H
; 作显示BCD码存放数用,11H--15H存放被除数,16H-19H存放除数
;
;
; 定义
VSDA EQU P1.5 ; EEPROM数据传送口
VSCL EQU P1.4 ; EEPROM时钟传送口
SLA EQU 50H ; EEPROM器件寻址字节存放单元
NUMBYT EQU 51H ; EEPROM传送字节数存放单元
MTD EQU 30H ; EEPROM发送数据缓冲单元
MRD EQU 40H ; EEPROM读出数据存放单元
SLAW EQU 0A0H ; EEPROM寻址字节写
SLAR EQU 0A1H ; EEPROM寻址字节读
DPHH EQU 62H ; DPTR计数扩展高8位
TH1H EQU 6CH ; 定时器T1扩展高8位
TH1HH EQU 6DH ; 定时器T1扩展高8-16位
;
;;;;;;;;;;;;;;;;;;;;
;; PROGRAM INPUT ;;
;;;;;;;;;;;;;;;;;;;;
;
ORG 0000H ;程序执行开始地址
0000 020091 LJMP START ;跳至START
ORG 0003H ;外中断0中断程序入口
0003 02009C LJMP INTEX0 ;跳至INTEX0中断服务程序
ORG 000BH ;定时器T0中断程序入口
000B 32 RETI ;中断返回
ORG 0013H ;外中断1中断入口
0013 0200B7 LJMP INTEX1 ; 跳至INTEX1中断服务程序
ORG 001BH ; 定时器T1中断程序入口
001B 0200E8 LJMP INTT1 ; 跳至INTT1中断服务程序
ORG 0023H ;串口中断入口地址
0023 32 RETI ;中断返回
ORG 002BH ;定时器T2中断入口地址
002B 32 RETI ;中断返回
;
;
;;;;;;;;;;;;;;;;;;;;
;; PROGRAM CLEAR ;;
;;;;;;;;;;;;;;;;;;;;
;上电初始化程序
002C 758990 CLEARMEN: MOV TMOD,#90H ;T1为16位外部控制定时器
C:\MY DOCUMENTS\2003.02.12书稿\配套光盘源程序\实例7\7.ASM
页 2
01-29-03
01:40:36
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
002F 758175 MOV SP,#75H ;堆栈在75H开始
0032 D2B8 SETB PX0 ;外中断0优先级为1
0034 D288 SETB IT0 ;外中断0用边沿触发
0036 D28A SETB IT1 ;外中断1用边沿触发
0038 E4 CLR A ;清A
0039 F520 MOV 20H,A ;清内存中特定单元
003B F56C MOV 6CH,A ;
003D F56D MOV 6DH,A ;
003F F570 MOV 70H,A ;
0041 F571 MOV 71H,A ;
0043 F572 MOV 72H,A ;
0045 F573 MOV 73H,A ;
0047 F560 MOV 60H,A ;
0049 F561 MOV 61H,A ;
004B F562 MOV 62H,A ;
004D F563 MOV 63H,A ; 清内存中特定单元
004F 14 DEC A ;A为#0FFH
0050 F568 MOV 68H,A ;内存置数据#0FFH
0052 F569 MOV 69H,A ; 内存置数据#0FFH
0054 F56A MOV 6AH,A ; 内存置数据#0FFH
0056 F56B MOV 6BH,A ; 内存置数据#0FFH
0058 F590 MOV P1, A ;P1口置1
005A 209206 CLEAR1: JB P1.2,KEY1 ;根据P1.2,P1.3,P1.6,P1.7设置状态,
;在21H地址单元赋自行车周长值
005D 75210F MOV 21H,#0FH ;22寸自行车周长值
0060 02007B LJMP CLEAR2 ;转CLEAR2
0063 209306 KEY1: JB P1.3,KEY2 ;
0066 752112 MOV 21H,#12H ; 24寸自行车周长值
0069 02007B LJMP CLEAR2 ; 转CLEAR2
006C 209606 KEY2: JB P1.6,KEY3 ;
006F 752114 MOV 21H,#14H ; 26寸自行车周长值
0072 02007B LJMP CLEAR2 ; 转CLEAR2
0075 209711 KEY3: JB P1.7,ERR ;四个开关都没合上,转出错处理
0078 752119 MOV 21H,#19H ; 28寸自行车周长值
007B D28E CLEAR2: SETB TR1 ;开定时器T1
007D D2AF SETB EA ;开中断允许
007F D2A8 SETB EX0 ;开外中断0
0081 D2AB SETB ET1 ;开定时中断T1
0083 D2B1 SETB P3.1 ;关报警器
0085 120143 LCALL VIICREAD ;将EEPROM中原里程数据调入内存
0088 22 RET ;子程序返回
0089 B2B1 ERR: CPL P3.1 ;轮周长设置出错,LED灯闪烁堤醒
008B 1202E4 LCALL DL5S ;延时
008E 02005A LJMP CLEAR1 ;重新初始化,等待轮周长设置开关合上
;
;;;;;;;;;;;;;;;;;;;;
;; PROGRAM START ;;
;;;;;;;;;;;;;;;;;;;;
C:\MY DOCUMENTS\2003.02.12书稿\配套光盘源程序\实例7\7.ASM
页 3
01-29-03
01:40:36
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
;
0091 12002C START: LCALL CLEARMEN ;上电初始化
0094 20B068 START1: JB P3.0,DISPLAYS ;P3.0=1,显示里程
0097 12010E LCALL DISPLAYV ;显示速度
009A 80F8 START2: SJMP START1 ;转START1循环
;
;;;;;;;;;;;;;;;;;;;;
;;INTEX0 PROGRAM ;;
;;;;;;;;;;;;;;;;;;;;
; 里程计数程序,用外中断0实现,计数用60H-62H内存单元。
009C C0E0 INTEX0: PUSH ACC ; 累加器堆栈保护
009E C0D0 PUSH PSW ;状态字堆栈保护
00A0 0560 INC 60H ;圈加1
00A2 E4 CLR A ;清A
00A3 B56007 CJNE A,60H,INTEX0OUT ;计数没溢出转INTEX0OUT
00A6 0561 INC 61H ;溢出进位(61H加1)
00A8 B56102 CJNE A,61H,INTEX0OUT ; 计数没溢出转INTEX0OUT
00AB 0562 INC 62H ; 溢出进位(62H加1)
00AD 120127 INTEX0OUT: LCALL VIICWRITE ;里程数据存入EEPROM
00B0 D2AA SETB EX1 ;开外中断1
00B2 D0D0 POP PSW ;状态字恢复
00B4 D0E0 POP ACC ;累加器恢复
00B6 32 RETI ;中断返回
;;;;;;;;;;;;;;;;;;;;
;;INTEX1 PROGRAM ;;
;;;;;;;;;;;;;;;;;;;;
; 每转1圈时间计数处理程序,每圈时间放在68H-6BH单元中。
00B7 C0E0 INTEX1: PUSH ACC ; 堆栈保护
00B9 C0D0 PUSH PSW ;
00BB C2AA CLR EX1 ;关外中断1
00BD 30000C JNB 00H,INTEX11 ;溢出标志为0转INTEX11
00C0 758BFF MOV TL1,#0FFH ;溢出时计时单元赋#0FFH(显示速度为零)
00C3 758DFF MOV TH1,#0FFH ;
00C6 756CFF MOV 6CH,#0FFH ;
00C9 756DFF MOV 6DH,#0FFH ;
00CC 858B68 INTEX11: MOV 68H,TL1 ;将时间计数值移入暂存单元68H-6BH
00CF 858D69 MOV 69H,TH1 ;
00D2 856C6A MOV 6AH,6CH ;
00D5 856D6B MOV 6BH,6DH ;
00D8 E4 CLR A ;清A
00D9 F58B MOV TL1,A ;计时单元置0
00DB F58D MOV TH1,A ;
00DD F56C MOV 6CH,A ;
00DF F56D MOV 6DH,A ;
00E1 C200 CLR 00H ;清溢出标志
00E3 D0D0 POP PSW ;堆栈恢复
00E5 D0E0 POP ACC ;
00E7 32 RETI ;中断返回
C:\MY DOCUMENTS\2003.02.12书稿\配套光盘源程序\实例7\7.ASM
页 4
01-29-03
01:40:36
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
;
;;;;;;;;;;;;;;;;;;;;
;;INTT1 PROGRAM ;;
;;;;;;;;;;;;;;;;;;;;
;
; T1计数器中断服务程序。(计数器T1由外中断1输入控制,当为高电平时计时开始)
00E8 C0E0 INTT1: PUSH ACC ;堆栈保护
00EA C0D0 PUSH PSW ;
00EC 056C INC 6CH ;6CH计时 单元加1
00EE E56C MOV A,6CH ;移入A
00F0 7008 JNZ INTT11 ;不等于0转INTT11
00F2 056D INC 6DH ;进位,6DH单元加1
00F4 E56D MOV A,6DH ;移入A
00F6 7002 JNZ INTT11 ; 不等于0转INTT11
00F8 D200 SETB 00H ;计时器溢出,置溢出标志
00FA D0D0 INTT11: POP PSW ;恢复堆栈
00FC D0E0 POP ACC ;
00FE 32 RETI ;中断返回
;
;;;;;;;;;;;;;;;;;;;;
;;DISPLAY S ;;
;;;;;;;;;;;;;;;;;;;;
;
;里程显示控制程序
00FF D290 DISPLAYS: SETB P1.0 ;点亮LED1(显示里程状态)
0101 C291 CLR P1.1 ;关闭速度指示灯
0103 D2B7 SETB P3.7 ;显示小数点(最小显示为0.1公里)
0105 12026A LCALL SSS ;将圈数转为公里数
0108 120234 LCALL DISPLAY ;显示公里数据
010B 020094 LJMP START1 ;跳回START1
;
;
;;;;;;;;;;;;;;;;;;;;
;;DISPLAY V ;;
;;;;;;;;;;;;;;;;;;;;
;速度显示控制程序
010E C290 DISPLAYV: CLR P1.0 ;关闭LED1(里程)灯
0110 D291 SETB P1.1 ;点亮LED2(显示时速状态)
0112 C2B7 CLR P3.7 ;关小数点显示
0114 1202A6 LCALL VVV ;每圈时间换算为公里/小时程序
0117 E571 MOV A,71H ;将十位数(BCD码)值移入A
0119 9404 SUBB A,#04H ; 与预定报警值比较
011B 5006 JNC WARING ; 时速超过40时报警
011D D2B1 SETB P3.1 ;关报警灯
011F 120234 V1: LCALL DISPLAY ;显亮一次(为了改善闪烁)
0122 22 RET ;子程序返回
0123 C2B1 WARING: CLR P3.1 ; 报警灯LED3点亮(并呜叫)
0125 211F AJMP V1 ;转V1退出
C:\MY DOCUMENTS\2003.02.12书稿\配套光盘源程序\实例7\7.ASM
页 5
01-29-03
01:40:36
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
;
;;;;;;;;;;;;;;;;;;;;
;;VIICWRITE ;;
;;;;;;;;;;;;;;;;;;;;
;归一化EEPROM存入程序(12M时钟),存入数在50H起单元
0127 3133 VIICWRITE: ACALL WMOV9
0129 7550A0 MOV SLA,#SLAW
012C 755109 MOV NUMBYT,#09H
012F 1201EC LCALL WRNBYT
0132 22 RET
0133 755F50 WMOV9: MOV 5FH,#50H
0136 7830 MOV R0,#MTD
0138 795F MOV R1,#5FH
013A 7A09 MOV R2,#09H
013C E7 WMOV: MOV A,@R1
013D F6 MOV @R0,A
013E 08 INC R0
013F 09 INC R1
0140 DAFA DJNZ R2,WMOV
0142 22 RET
;
;;;;;;;;;;;;;;;;;;;;
;;VIICREAD ;;
;;;;;;;;;;;;;;;;;;;;
; 归一化EEPROM读出程序(12M时钟),读出数放入60H-67H单元
0143 753050 VIICREAD: MOV MTD,#50H ;
0146 7550A0 MOV SLA,#SLAW
0149 755101 MOV NUMBYT,#01H
014C 1201EC LCALL WRNBYT
014F 7550A1 MOV SLA,#SLAR
0152 755108 MOV NUMBYT,#08H
0155 12020F LCALL RDNBYT
0158 315B ACALL RMOV8
015A 22 RET
015B 7840 RMOV8: MOV R0,#MRD
015D 7960 MOV R1,#60H
015F 7A08 MOV R2,#08H
0161 E6 RMOV: MOV A,@R0
0162 F7 MOV @R1,A
0163 08 INC R0
0164 09 INC R1
0165 DAFA DJNZ R2,RMOV
0167 22 RET
;
;;;;;;;;;;;;;;;;;;;;
;;VIIC PROGRAM ;;
;;;;;;;;;;;;;;;;;;;;
; I2C串行归一化存储子程序
C:\MY DOCUMENTS\2003.02.12书稿\配套光盘源程序\实例7\7.ASM
页 6
01-29-03
01:40:36
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
0168 D295 STA: SETB VSDA
016A D294 SETB VSCL
016C 00 NOP
016D 00 NOP
016E 00 NOP
016F 00 NOP
0170 C295 CLR VSDA
0172 00 NOP
0173 C295 CLR VSDA
0175 00 NOP
0176 00 NOP
0177 00 NOP
0178 00 NOP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -