📄 hospital2.asm
字号:
;***********医院接收软件***************
; I/O PORT PIN DEFINED
RX BIT P1.4 ;外部中断输入口
D1 BIT P0.0
D2 BIT P0.1
D3 BIT P0.2
D4 BIT P0.3
D5 BIT P0.4
D6 BIT P0.5
D7 BIT P0.6
D8 BIT P0.7
;=================== PHILIPS PLC SFR DEFINED BEGAIN =======================
AUXR1 EQU #0A2h ; 附助功能寄存器
CMP1 EQU #0ACh ; 比较器 1 控制 寄存器
CMP2 EQU #0ADh ; 比较器 2 控制 寄存器
DIVM EQU #095h ; cpu 时钟 控制
I2CFG EQU #0C8h ; I2C 设置寄存器
CT0 bit I2CFG.0 ; 时钟选择0
CT1 bit I2CFG.1 ; 时钟选择1
TIRUN bit I2CFG.4 ; 计时器 I 使能位
CLRTI bit I2CFG.5 ; 清除计时器I
MASTRQ bit I2CFG.6 ; 主控器请求
SLAVEN bit I2CFG.7 ; 被控器使能
I2CON EQU #0D8h ; I2C 控制寄存器
MASTER bit I2CON.1 ; 主控器状态位
STP bit I2CON.2 ; 停止探测标志
STR bit I2CON.3 ; 开始探测标志
ARL bit I2CON.4 ; 仲裁失败标志
DRDY bit I2CON.5 ; 数据准备标志位
ATN bit I2CON.6 ; 注意: I2C 中断标志位
RDAT bit I2CON.7 ; I2C 读数据
I2DAT EQU #0D9h ; I2C 数据寄存器
IEN0 EQU #0A8h ; 中断使能0
EBO bit IEN0.5 ; 节电方式中断使能
EWD bit IEN0.6 ; 看门狗中断使能
ET0 BIT IEN0.1 ;定时器0中断使能
IEN1 EQU #0E8h ; 中断使能寄存器 1
EI2 bit IEN1.0 ; I2C 中断使能
EKB bit IEN1.1 ; 键盘中断使能
EC2 bit IEN1.2 ; 比较器 2 中断使能
EC1 bit IEN1.5 ; 比较器 1 中断使能
ETI bit IEN1.7 ; 计时器 I 中断使能
1IP0 EQU #0B8h ; 中断优先 0 低位
PBO bit IP0.5 ; 节电方式中断优先
KBI EQU #086h ; 键盘中断
CMP2O bit P0.0 ; 比较器2 输出
CIN2B bit P0.1 ; 比较器2 输入B
CIN2A bit P0.2 ; 比较器2 输入A
PT0AD EQU #0F6H ;0口数字输入禁能
PCON EQU #087H ;电源控制
;*******自己定义的RAM***********************************************
F_1ST BIT 20.0H ;是否是接收的第一组数据,=1,是第2组
DATA_READY BIT 20.1 ;数据是否准备好的标志位
D_BUF1 EQU 22H ;从3758接收的数据的存储区
D_BUF2 EQU 23H
;***********************************************************************
ORG 0000H
AJMP SYS_START
ORG 0003H ; INT0外部中断0
CLR EX0
RETI
NOP
NOP
ORG 000BH ; TIME0 OUT定时0中断
CLR ET0
RETI
NOP
NOP
ORG 0013H ; INT1外部中断1
CLR EX1
AJMP XINT1
NOP
NOP
ORG 001BH ; TIME1 OUT定时1中断
CLR ET1
RETI
NOP
NOP
NOP
ORG 0023H ; COM I/O串口中断
CLR ES
RETI
NOP
NOP
ORG 002BH ;TIME2 OUT 降压检测中断
CLR IEN0.5
RETI
NOP
NOP
ORG 0033H ;I2C中断
CLR IEN1.0
RETI
NOP
NOP
ORG 003BH ;键盘中断
CLR IEN1.1
RETI
NOP
NOP
ORG 0043H ;比较器2中断
CLR IEN1.2
RETI
NOP
NOP
ORG 0053H ; WDT TIMER OUT
CLR IEN0.6
RETI
NOP
NOP
ORG 0063H ;比较器1中断
CLR IEN1.5
RETI
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SYS_START:
MAIN:
;*****************用来把D-BUF1和BUF2里的数据发送出去*****************
JB DATA_READY,SEND_DATA
AJMP NEXT_STEP
SEND_DATA:
;*******************************************************************
NEXT_STEP:
AJMP MAIN
;*************外部中断,接收数据*********************
XINT1:
CLR RX1 ;禁止外部中断
JB RX,XINT1_RETI
ACALL DELAY_80US
JB RX,XINT1_RETI
JB F_1ST,GET_2DATA
SETB F_1ST
MOV A,P0
CLR C
RLC A
JC GET_NET ;如果最高位是1,这是第2个数据的标志。错误
MOV D_BUF1,A
MOV D_400MS,#0A0H ;启动400MS 计时.具体值,须详细定
AJMP GET_NEXT
GET_2DATA:
MOV A,D_400MS
JZ GET_NEXT ;如果时间超出了400MS,说明有冲突!放弃!
MOV A,P0
CLR C
RLC A
JNC GET_NEXT ;如果第2次接收的数据是第一组数据,出错!
CLR C ;第2次
RLC A
MOV D_BUF2,A ;D-BUF1是完整的8位数据
MOV D_BUF1.0,C ;D-BUF2前4位是数据,2位是KEY-VALUE,最后2位是0
CLR F_1ST
SETB DATA_READY ;数据已经准备好,可以发送了
MOV D_BUF1,#00H
GET_NEXT:
XINT1_RETI:
SETB RX1 ;重新起用外部中断
RETI
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -