⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hospital.lst

📁 医院语音寻孚系统的汇编源代码
💻 LST
📖 第 1 页 / 共 3 页
字号:
A51 MACRO ASSEMBLER  HOSPITAL                                                               02/12/00 17:23:19 PAGE     1


DOS MACRO ASSEMBLER A51 X4.86
OBJECT MODULE PLACED IN HOSPITAL.OBJ
ASSEMBLER INVOKED BY: C:\MEDWIN\762\A51.EXE HOSPITAL.ASM DB

LOC  OBJ            LINE     SOURCE

                       1     ;***********************************************************************
                       2     ;医院寻呼,无线发射部分
                       3     ;全部在键盘唤醒中断里完成
                       4     ;
                       5     ;***********************************************************************
                       6     ;  I/O PORT PIN DEFINED
                       7     
  0081                 8     KEY1    BIT P0.1        ;暂定为4个按键 
  0082                 9     KEY2    BIT P0.2
  0083                10     KEY3    BIT P0.3
  0084                11     KEY4    BIT P0.4
  0080                12     LED     BIT P0.0        ;按键按下,LED亮
                      13     
  0086                14     CS_93C    BIT P0.6
  0087                15     SK_93C    BIT P0.7
  0090                16     DI_93C    BIT P1.0
  0091                17     DO_93C    BIT P1.1
                      18     
  0085                19     DATAOUT BIT P0.5        ;数据输出
                      20     
                      21     
                      22     ;===================  PHILIPS PLC SFR DEFINED BEGAIN =======================
  0087                23     HPCON   DATA   087H
                      24     ;PD bit 087h.1                  ;不能位寻址
  00A2                25     AUXR1   EQU     0A2h            ; 附助功能寄存器
                      26     ;KBF BIT AUXR1.7
  00AC                27     CMP1    EQU     0ACh            ; 比较器 1 控制 寄存器
  00AD                28     CMP2    EQU     0ADh            ; 比较器 2 控制 寄存器
  0095                29     DIVM    EQU     095h            ; cpu 时钟 控制
  00C8                30     I2CFG   EQU     0C8h            ; I2C 设置寄存器
  00C8                31     CT0     bit     I2CFG.0         ; 时钟选择0
  00C9                32     CT1     bit     I2CFG.1         ; 时钟选择1
  00CC                33     TIRUN   bit     I2CFG.4         ; 计时器 I 使能位
  00CD                34     CLRTI   bit     I2CFG.5         ; 清除计时器I
  00CE                35     MASTRQ  bit     I2CFG.6         ; 主控器请求
  00CF                36     SLAVEN  bit     I2CFG.7         ; 被控器使能
  00D8                37     I2CON   EQU     0D8h            ; I2C 控制寄存器
  00D9                38     MASTER  bit     I2CON.1         ; 主控器状态位
  00DA                39     STP     bit     I2CON.2         ; 停止探测标志
  00DB                40     STR     bit     I2CON.3         ; 开始探测标志
  00DC                41     ARL     bit     I2CON.4         ; 仲裁失败标志
  00DD                42     DRDY    bit     I2CON.5         ; 数据准备标志位
  00DE                43     ATN     bit     I2CON.6         ; 注意: I2C 中断标志位
  00DF                44     RDAT    bit     I2CON.7         ; I2C 读数据
  00D9                45     I2DAT   EQU     0D9h            ; I2C 数据寄存器
  00A8                46     IEN0    EQU     0A8h            ; 中断使能0
  00A9                47     ETO     BIT IEN0.1              ;定时器0中断使能
  00AD                48     EBO     bit     IEN0.5          ; 节电方式中断使能
  00AE                49     EWD     bit     IEN0.6          ; 看门狗中断使能
                      50     
  00E8                51     IEN1    EQU     0E8h            ; 中断使能寄存器 1
  00E8                52     EI2     bit     IEN1.0          ; I2C 中断使能
  00E9                53     EKB     bit     IEN1.1          ; 键盘中断使能
  00EA                54     EC2     bit     IEN1.2          ; 比较器 2 中断使能
  00ED                55     EC1     bit     IEN1.5          ; 比较器 1 中断使能
  00EF                56     ETI     bit     IEN1.7          ; 计时器 I 中断使能
  00B8                57     IP0     EQU     0B8h            ; 中断优先 0 低位
  00BD                58     PBO     bit     IP0.5           ; 节电方式中断优先
A51 MACRO ASSEMBLER  HOSPITAL                                                               02/12/00 17:23:19 PAGE     2

  0086                59     KBI     EQU     86h             ; 键盘中断
  0080                60     CMP2O   bit     P0.0            ; 比较器2 输出
  0081                61     CIN2B   bit     P0.1            ; 比较器2 输入B
  0082                62     CIN2A   bit     P0.2            ; 比较器2 输入A
  00F6                63     PT0AD   EQU     0F6H            ;0口数字输入禁能
  0084                64     P0M1    EQU     84H
  0085                65     P0M2    EQU     85H
  0091                66     P1M1    EQU     91H
  0092                67     P1M2    EQU     92H
                      68     
                      69     
                      70     
                      71     ;***********************************************************************
                      72     ;   自己使用的RAM的定义
                      73     
  0000                74     SEND_FINISH BIT  00H    ;发送完成标志位。=1,还未完成。20H.1
                      75     
  0031                76     KEY_VALUE       EQU 31H ;按键值,2BIT
  0032                77     TIME_ADD        EQU 32H ;地址是10BTI
  0033                78     TIME_CD_NUM     EQU 33H ;自身地址是8位,两次都是。
  0034                79     TIMERS          EQU 34H ;一共10次
  0035                80     SENDING_DATA    EQU 35H
  0036                81     TIME_REP        EQU 36H ;在发送0、1的子程序里使用,6BIT
                      82     
  0037                83     ADD_93C_L EQU 37H
  0038                84     BYTE1_93C EQU 38H
  0039                85     BYTE2_93C EQU 39H
                      86     
  0040                87     SEND_BUFFER1 EQU 40H        ;要发送的数据暂存区
  0042                88     DATA1   EQU     42H
  0043                89     DATA2   EQU     43H
                      90     
                      91     
                      92     
                      93     
                      94     ;***********************************************************************
0000                  95     ORG 0000H
0000 0150             96             AJMP SYS_START
                      97     
0003                  98     ORG 0003H            ; INT0外部中断0
0003 C2A8             99             CLR EX0
0005 32              100             RETI
0006 00              101             NOP
0007 00              102             NOP
                     103     
                     104     
000B                 105     ORG 000BH           ; TIME0 OUT定时0中断
000B C2A9            106             CLR ET0
000D 32              107             RETI
000E 00              108      NOP
000F 00              109      NOP
                     110     
0013                 111     ORG 0013H           ; INT1外部中断1
0013 C2AA            112             CLR  EX1
0015 32              113             RETI
0016 00              114      NOP
0017 00              115      NOP
                     116     
001B                 117     ORG 001BH          ;  TIME1 OUT定时1中断
001B C2AB            118             CLR ET1
001D 32              119             RETI
001E 00              120        NOP
001F 00              121        NOP
0020 00              122        NOP
                     123     
0023                 124     ORG 0023H         ;  COM I/O串口中断
A51 MACRO ASSEMBLER  HOSPITAL                                                               02/12/00 17:23:19 PAGE     3

0023 C2AC            125             CLR ES
0025 32              126             RETI
0026 00              127      NOP
0027 00              128      NOP
                     129     
002B                 130     ORG 002BH         ;TIME2 OUT 降压检测中断
002B C2AD            131             CLR IEN0.5
002D 32              132             RETI
002E 00              133      NOP
002F 00              134      NOP
                     135     
0033                 136     ORG 0033H               ;I2C中断
0033 C2E8            137             CLR IEN1.0
0035 32              138             RETI
0036 00              139      NOP
0037 00              140      NOP
                     141     
003B                 142     ORG 003BH               ;键盘中断
003B C2E9            143             CLR IEN1.1
003D 016F            144             AJMP KEYINT
003F 00              145      NOP
0040 00              146      NOP
                     147     
0043                 148     ORG 0043H               ;比较器2中断
0043 C2EA            149             CLR IEN1.2
0045 32              150             RETI
0046 00              151      NOP
0047 00              152      NOP
                     153     
0053                 154     ORG 0053H             ;  WDT TIMER OUT
0053 C2AE            155             CLR IEN0.6
0055 32              156             RETI
0056 00              157      NOP
0057 00              158      NOP
                     159     
0063                 160     ORG 0063H               ;比较器1中断
0063 C2ED            161             CLR IEN1.5
0065 32              162             RETI
                     163     
                     164     ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
0050                 165             ORG 050H
0050                 166     SYS_START:
                     167             ;MOV PT0AD,#00H         ;P0作为I/O,不使用比较器
0050 758400          168             MOV P0M1,#00H           ; P0 准双向口
0053 758541          169             MOV P0M2,#041H          ;P0.0驱动LED,P0.6时93C46的CS,所以选择上拉。
                     170     
0056 759101          171             MOV P1M1,#01H           ;P1.0是93C46的DI,选择仅为输入
0059 759202          172             MOV P1M2,#02H           ;P1.1是93C46的DO,选择上拉
                     173     
005C 43A250          174             ORL AUXR1,#50H          ;禁止掉电检测,并关掉EPROM部分模拟电路
                     175     
005F C2AE            176             CLR EWD                 ;关掉看门狗
                     177             
                     178     
0061 D2AF            179             SETB EA
0063 75861E          180             MOV KBI,#01EH   ;4个按键中断
0066 D2E9            181             SETB EKB        ;最后是使能键盘中断
                     182             
0068 C200            183             CLR SEND_FINISH
006A                 184     MAIN:
006A 2000FD          185             JB SEND_FINISH,MAIN     ;循环等待所有的完成,然后进入休眠状态
                     186             ;ORL HPCON,#02H         ;PD=1,进入低功耗模式
                     187             
006D 016A            188             AJMP MAIN
                     189             
                     190     
A51 MACRO ASSEMBLER  HOSPITAL                                                               02/12/00 17:23:19 PAGE     4

                     191     
                     192     ;*****************************************************************
                     193     ;键盘中断处理程序
                     194     ;*****************************************************************
006F                 195     KEYINT:
006F C0D0            196             PUSH PSW
0071 00              197             NOP             ;奇怪的是:没有这两个NOP,AUXR1和7FH与的值不变
0072 00              198             NOP
0073 53A27F          199             ANL AUXR1,#07FH   ;CLEAR KBF
0076 C2E9            200             CLR EKB                 ;禁止键盘中断
                     201             
                     202     
0078 208107          203             JB P0.1,KY2
007B 5151            204             ACALL DELAY10MS
007D 208120          205             JB P0.1,NOKEY
0080 01AA            206             AJMP KEY1_IN
0082                 207     KY2:            
0082 208207          208             JB P0.2,KY3
0085 5151            209             ACALL DELAY10MS
0087 208216          210             JB P0.2,NOKEY   
008A 01B0            211             AJMP KEY2_IN
008C                 212     KY3:                    
008C 208307          213             JB P0.3,KY4
008F 5151            214             ACALL DELAY10MS
0091 20830C          215             JB P0.3,NOKEY
0094 01B6            216             AJMP KEY3_IN
0096                 217     KY4:            
0096 208407          218             JB P0.4,NOKEY
0099 5151            219             ACALL DELAY10MS
009B 208402          220             JB P0.4,NOKEY   
009E 01BB            221             AJMP KEY4_IN
                     222     
                     223     
00A0                 224     NOKEY:
00A0 D2E9            225             SETB EKB
00A2 C200            226             CLR SEND_FINISH
00A4 53A27F          227             ANL AUXR1,#07FH   ;CLEAR KBF中断开始清0了一次,此处仍要清0,奇怪!
00A7 D0D0            228             POP PSW
00A9 32              229             RETI
                     230             
                     231             
00AA                 232     KEY1_IN:
00AA 00              233             NOP
00AB 753100          234             MOV KEY_VALUE,#00H      ;用2个BYTE来表示4个按键
00AE 01BE            235             AJMP KEY_FINISH
00B0                 236     KEY2_IN:
00B0 00              237             NOP
00B1 753101          238             MOV KEY_VALUE,#01H
00B4 01BE            239             AJMP KEY_FINISH
00B6                 240     KEY3_IN:
00B6 753102          241             MOV KEY_VALUE,#02H
00B9 01BE            242             AJMP KEY_FINISH
00BB                 243     KEY4_IN:
00BB 753103          244             MOV KEY_VALUE,#03H
                     245             
                     246             
00BE                 247     KEY_FINISH:             ;问题在于唤醒省电模式之前的指令是如何运行的?
00BE D280            248             SETB LED
                     249                
00C0 5387FD          250             ANL HPCON,#0FDH  ;PD=0唤醒省电模式
00C3 C2E9            251             CLR EKB          ;UNABLE THE KEY INTERUPTER
                     252     ;*******************************************************************
                     253     ;93C46里首先是2BYTE的地址,A1-A10,后的6BIT用0补。
                     254     ;第3个BYTE是自身地址前8BIT,第4个BYTE的高位是自身地址后4位,低位是KEY-VALUE
                     255     ;********************************************************************
00C5 753700          256             MOV ADD_93C_L,#00H      ;首先读10BIT(2BYTE)的ADDRESS
A51 MACRO ASSEMBLER  HOSPITAL                                                               02/12/00 17:23:19 PAGE     5

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -