📄 x25045.c
字号:
TAN:DO;/* 糖尿病治疗仪 SENSOR FOR TMP04 2001/8/25*/
$INCLUDE (REG52.DCL)
DECLARE VAR LITERALLY 'DECLARE';
VAR BUF(120) BYTE PUBLIC AT(80H) IDATA; /* 中文显示缓冲区 */
VAR ZBUF(8) WORD PUBLIC;/* 数据显示缓冲区 */
VAR DI WORD PUBLIC; /* 传感器缓冲T2 sensor value buf */
VAR DIH BYTE PUBLIC AT(.DI);
VAR DIL BYTE PUBLIC AT(.DI+1);
VAR (ADR,TT,CI)WORD PUBLIC AT(0FAH) IDATA; /* 显示指针,传感器缓冲T1 */
VAR (INA,INB,GUNWEI,RUN,DD,RUNM,BP,ER,AM,AP) BYTE PUBLIC;
/*50毫秒计数,脉冲计数,光标位置,运行标置,运行:秒-分单元, 脉冲输出标记,运行脉冲间隔(调制脉冲) */
VAR ADRH BYTE PUBLIC AT(.ADR) IDATA;
VAR ADRL BYTE PUBLIC AT(.ADR+1) IDATA;
VAR CIH BYTE PUBLIC AT(.CI) IDATA;
VAR CIL BYTE PUBLIC AT(.CI+1) IDATA;
VAR TTH BYTE PUBLIC AT(.TT) IDATA;
VAR TTL BYTE PUBLIC AT(.TT+1) IDATA;
VAR (AA,BB,CC,DAT1,DAT2,COM) BYTE PUBLIC;/* 键值,第一参数,第二参数,指令 */
VAR (SWEND,STIME,SFREQ,SMODE,RESET,WORK) BYTE PUBLIC;/*温度、时间、频率、模式标记*/
VAR OLED BYTE PUBLIC; /* LED灯输出缓冲 */
VAR KEYPORT BYTE PUBLIC AT(9C00H) AUXILIARY;/* 键盘输入口 */
VAR OULED BYTE PUBLIC AT(9400H) AUXILIARY; /* LED灯输出口,高有效 */
VAR OULCD BYTE PUBLIC AT(9000H) AUXILIARY; /* LCD输出数据口 */
VAR IND BYTE PUBLIC AT(9100H) AUXILIARY; /* LCD输出命令口 */
VAR EEBUF BYTE PUBLIC; /* EEPROM用缓冲区 */
VAR EE(20) BYTE PUBLIC; /* EEPROM:EE(0)写或读字节数,EE(1...)数据 */
VAR RE BIT PUBLIC;
EEPROMIN:PROCEDURE; /*从EEPROM输入一个字节,结果在EEBUF中 */
VAR III BYTE; /*假定开始时,/CS=0,SCK=0*/
III=0; /*SCK下降沿后,EEPROM输出数据*/
DO III=0 TO 7; /*P1.4--/CS, P1.6--SCK,P1.5--SO/SI* /
P1_5=1; /* 置P1.5为输入口 */
P1_6=1;
P1_6=0;
CY=P1_5;
EEBUF=SCL(EEBUF,1);
END;
END EEPROMIN;
EEPROMOUT:PROCEDURE; /*向EEPROM输出一个字节,EEBUF的内容输出*/
DECLARE (III,JJJ,KKK) BYTE; /* P1.6--SCK,P1.4--/CS,P1.5-SI/SO */
KKK=EEBUF; /* SCK上升沿锁入数据 */
DO III=0 TO 7;
P1_6=0;
EEBUF=SCL(EEBUF,1);
P1_5=CY;
P1_6=1;
END;
P1_5=1;
END EEPROMOUT;
EEPROMR_S:PROCEDURE; /*读EEPROM状态寄存器*/
P1_6=0; /* SCK=0 */
P1_4=0; /* /CS=0 */
EEBUF=05H; /* 输出读命令*/
CALL EEPROMOUT;
CALL EEPROMIN;
P1_6=0; /* SCK=0 */
P1_4=1; /* CS=1 */
END EEPROMR_S;
EEPROMR:PROCEDURE; /*读EEPROM 从00H ADDR开始,X25045为512BYTE*/
DECLARE III BYTE;/* EE(0)为读字节数 !!! 调用本程序,先置EE(0)=字节数 */
III=0; /* EE(1)开始放读出的数据*/
P1_6=0; /* SCK=0 */
P1_4=0; /* /CS=0 */
EEBUF=03H; /* ACC=03H;A_3=A8;EEBUF=ACC; 输出读指令 */
CALL EEPROMOUT; /* 调输出程序 */
EEBUF=00H; /* 输出低8位地址 EEBUF=ADDR*/
CALL EEPROMOUT; /* 调输出程序 */
DO III=1 TO EE(0);
CALL EEPROMIN; /* 调输入程序 */
EE(III)=EEBUF; /* 保存读出结果 */
END;
P1_6=0; /* SCK=0 */
P1_4=1; /* /CS=1 */
END EEPROMR;
EEPROMW:PROCEDURE; /*写EEPROM 从A8+ADDR地址开始,X25045为512BYTE*/
DECLARE (III,KKK) BYTE; /*EE(0)为写字节数 !!! 调用本程序,先置EE(0)=字节数 */
KKK=EE(0)-1; /* P1.6--SCK,P1.4--/CS,P1.5-SO/SI */
DO III=0 to KKK;
P1_6=0; /* SCK=0 */
P1_4=0; /* /CS=0 */
EEBUF=06H; /* 开锁指令 */
CALL EEPROMOUT; /* 调开锁指令输出程序 */
P1_4=1; /* /CS=1 */
P1_4=0; /* /CS=0 */
EEBUF=02H; /*ACC=02H;A_3=A8;EEBUF=ACC; 写指令 */
CALL EEPROMOUT; /* 调输出程序,输出写指令 */
EEBUF=III; /* ADDR;*/
CALL EEPROMOUT; /* 输出地址 */
EEBUF=EE(III+1); /*取写入的数据 */
CALL EEPROMOUT; /* 输出数据 */
P1_6=0; /* SCK=0 */
P1_4=1; /* /CS=1 */
EEPP:CALL EEPROMR_S; /* 读状态寄存器 */
EEBUF=EEBUF AND 01H; /* 判写数据忙*/
IF EEBUF>0 THEN GOTO EEPP; /*ADDR=ADDR+1;*/
END;
END EEPROMW;
DOG:PROCEDURE;
P1_4=1; /* EEPROM /CS=1 */
P1_4=0; /* /CS=0 */
P1_4=1; /* /CS=1 */
END DOG;
ST:SP=60H;
P1=0FFH;
TMOD=0001$0001B; /* T0定时, T1定时中断*/
TH1=3CH; /* 定时系数高8位,3CAFH=50毫秒,在12M时钟;EC78H=10毫秒在6M时钟 */
TL1=0AFH; /* 定时系数低8位 */
TH0=0;
TL0=0;
RCAP2H=0FEH; /* 65135D=0FE6FH */
RCAP2L=6FH; /* T2 INITIAL */
T2CON=0;
PT1=1; /* T1:HIGH INTERUPT LEVEL */
PT2=0; /* T2:LOW INTERUPT LEVEL */
EA=1;
ET0=0; /* 开定时器0中断 */
ET1=1; /* 开定时器1中断 */
ET2=1;
TR0=0; /* =1开定时器0,=0关定时器T0 */
TR1=0; /* =1开定时器1,=0关定时器T1 */
TR2=0;
RE=0;
TT=0;AA=0;BB=0;RUN=0;RUNM=0;BP=0;AM=0;AP=0; /* */
B
GOTO ST;
GOTO ST;
GOTO ST;
GOTO ST;
AA=33;
END TAN;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -