📄 pump.src
字号:
; void l2_set(); //LCD2各段显示数据设置
; void display2(); //LCD2显示设置数据
; void noplay2(); //LCD2空白显示
; void SM_Set(void); //步进电机工作状态设置
; void T0_Set(void); //定时器T0设置
; void T0_ISR(void); //定时器T0中断服务函数
; void SM_SR(void); //步进电机运行停止控制函数
; void DAC0_Set(void); //步进电机参考电压设置
; void DAC1_Set(void); //比较器参考电压设置
; void data_inv(void); //流量参数变换
; void pulse_inv(void); //输液量参数变换
; void ADC_Set(void); //ADC窗口比较器设置
; void ADC_ISR(void); //ADC窗口比较器中断服务函数
; void T1_Set(void); //定时器T1参数设置
; void T1_ISR(void); //定时器T1中断服务函数
; void T2_Set(void); //定时器T2参数设置
; void T2_ISR(void); //定时器T2中断服务函数
; void T3_Set(void); //定时器T3参数设置
; void T3_ISR(void); //定时器T3中断服务函数
; void PCA_ADC(void); //PCA高速输出方式启动ADC
; void keyinterrupt(void); //INT1即键盘中断服务函数
; void main(void); //主函数
; /***************************************函数定义***********************************************/
;
; /**********************************************************************************************
; 函数:void SYSCLK_Init(void)
; 说明:系统时钟初始化,选择外部12M晶振,关闭看门狗。
; ***********************************************************************************************/
; void SYSCLK_Init(void)
RSEG ?PR?SYSCLK_Init?PUMP
SYSCLK_Init:
USING 0
; SOURCE LINE # 129
; {
; SOURCE LINE # 130
; int i;
; WDTCN=0x07; //最大时间延迟
; SOURCE LINE # 132
MOV WDTCN,#07H
; WDTCN=0xDE;
; SOURCE LINE # 133
MOV WDTCN,#0DEH
; _nop_();
; SOURCE LINE # 134
NOP
; WDTCN=0xAD; //禁止看门狗中断
; SOURCE LINE # 135
MOV WDTCN,#0ADH
; OSCXCN=0x77; //外部时钟寄存器设置
; SOURCE LINE # 136
MOV OSCXCN,#077H
; for(i=0;i<256;i++) ; // 至少等待1ms
; SOURCE LINE # 137
;---- Variable 'i?040' assigned to Register 'R6/R7' ----
CLR A
MOV R7,A
MOV R6,A
?C0001:
INC R7
CJNE R7,#00H,?C0184
INC R6
?C0184:
CLR A
CJNE A,AR7,?C0001
MOV A,R6
CJNE A,#01H,?C0001
?C0004:
; while(!(OSCXCN&0x80)) ; //等待晶振稳定,
; SOURCE LINE # 138
MOV A,OSCXCN
JNB ACC.7,?C0004
?C0005:
; OSCICN=0x88; // 采用外部晶振作为时钟源
; SOURCE LINE # 139
MOV OSCICN,#088H
; WDTCN=0xFF; //锁定看门狗禁止功能禁止,看门狗在程序中一直有效
; SOURCE LINE # 140
MOV WDTCN,#0FFH
; WDTCN=0xA5; //喂狗
; SOURCE LINE # 141
MOV WDTCN,#0A5H
; }
; SOURCE LINE # 142
RET
; END OF SYSCLK_Init
; /**********************************************************************************************
; 函数:void IO_Init()
; 说明:I/O端口设置初始化,内部资源和IO端口交叉开关设置;输入和5V输出采用开漏输出,3.3V输出采用
; 推挽输出,允许全局弱上拉
; ***********************************************************************************************/
; void IO_Init()
RSEG ?PR?IO_Init?PUMP
IO_Init:
; SOURCE LINE # 148
; {
; SOURCE LINE # 149
; XBR0 = 0x09; // 交叉开关设置
; SOURCE LINE # 150
MOV XBR0,#09H
; XBR1 = 0x58;
; SOURCE LINE # 151
MOV XBR1,#058H
; XBR2 = 0x41;
; SOURCE LINE # 152
MOV XBR2,#041H
; PRT0CF = 0x04; // 端口输出方式寄存器设置
; SOURCE LINE # 153
MOV PRT0CF,#04H
; PRT1CF = 0xA3;
; SOURCE LINE # 154
MOV PRT1CF,#0A3H
; PRT2CF = 0x01;
; SOURCE LINE # 155
MOV PRT2CF,#01H
; PRT3CF = 0x00;
; SOURCE LINE # 156
CLR A
MOV PRT3CF,A
; }
; SOURCE LINE # 157
RET
; END OF IO_Init
; /**********************************************************************************************
; 函数:void ISR_Init(void)
; 说明:系统中断设置初始化
; ***********************************************************************************************/
; void ISR_Init(void)
RSEG ?PR?ISR_Init?PUMP
ISR_Init:
; SOURCE LINE # 162
; {
; SOURCE LINE # 163
; IT1=1; //设置外部中断1为下降沿触发
; SOURCE LINE # 164
SETB IT1
; EA=1; //开全局中断
; SOURCE LINE # 165
SETB EA
; EX1=1; //打开外部中断1
; SOURCE LINE # 166
SETB EX1
; ET0=1; //定时器0开中断
; SOURCE LINE # 167
SETB ET0
; ET1=1; //定时器1开中断
; SOURCE LINE # 168
SETB ET1
; PT0=1; //置定时器0中断为高优先级
; SOURCE LINE # 169
SETB PT0
; PT1=1; //置定时器1中断为高优先级
; SOURCE LINE # 170
SETB PT1
; EIP1=0x04; //置ADC0窗口比较器中断为高优先级
; SOURCE LINE # 171
MOV EIP1,#04H
; //IE=0xAE; //或对IE中断允许寄存器进行设置
; EIE1=0x04; //允许ADC0窗口比较器中断
; SOURCE LINE # 173
MOV EIE1,#04H
; EIE2=0x01; //定时器3开中断
; SOURCE LINE # 174
MOV EIE2,#01H
; }
; SOURCE LINE # 175
RET
; END OF ISR_Init
; /**********************************************************************************************
; 函数:void Global_Init(void)
; 说明:全局变量初始化
; ***********************************************************************************************/
; void Global_Init(void)
RSEG ?PR?Global_Init?PUMP
Global_Init:
; SOURCE LINE # 180
; { P3=0x0F;
; SOURCE LINE # 181
MOV P3,#0FH
; Heat_flag=1;
; SOURCE LINE # 182
SETB Heat_flag
; Fluxdrop_Flag=1;
; SOURCE LINE # 183
SETB Fluxdrop_Flag
; Speed_Set=0;
; SOURCE LINE # 184
CLR Speed_Set
; Lpower_LED=1;
; SOURCE LINE # 185
SETB Lpower_LED
; Hold_Flag=0;
; SOURCE LINE # 186
CLR Hold_Flag
; SR_Flag=0;
; SOURCE LINE # 187
CLR SR_Flag
; Point_Flag=0x02;
; SOURCE LINE # 188
MOV Point_Flag,#02H
; BUFFER=0;
; SOURCE LINE # 189
CLR A
MOV BUFFER,A
MOV BUFFER+01H,A
; Buffer_NUM=1;
; SOURCE LINE # 190
MOV Buffer_NUM,A
MOV Buffer_NUM+01H,#01H
; PWM_Width=0x07D0;
; SOURCE LINE # 191
MOV PWM_Width,#07H
MOV PWM_Width+01H,#0D0H
; Drop_NStep=50.0;
; SOURCE LINE # 192
MOV Drop_NStep+03H,A
MOV Drop_NStep+02H,A
MOV Drop_NStep+01H,#048H
MOV Drop_NStep,#042H
; SM_CLK1=0;
; SOURCE LINE # 193
CLR SM_CLK1
; SM_RST=0;
; SOURCE LINE # 194
CLR SM_RST
; SM_EN=0;
; SOURCE LINE # 195
CLR SM_EN
; T1IN=1;
; SOURCE LINE # 196
SETB T1IN
; Balarm_flag=1;
; SOURCE LINE # 197
SETB Balarm_flag
; PK_Flag=0;
; SOURCE LINE # 198
CLR PK_Flag
; State_LED=1;
; SOURCE LINE # 199
SETB State_LED
; Gross_Flag=0;
; SOURCE LINE # 200
CLR Gross_Flag
; }
; SOURCE LINE # 201
RET
; END OF Global_Init
; /**********************************************************************************************
; 函数:void Bubble_alarm(void)
; 说明:气泡检测报警、处理
; ***********************************************************************************************/
; void Bubble_alarm(void)
RSEG ?PR?Bubble_alarm?PUMP
Bubble_alarm:
USING 0
; SOURCE LINE # 206
; { Balarm_flag=0;
; SOURCE LINE # 207
CLR Balarm_flag
; SR_Flag=0;
; SOURCE LINE # 208
CLR SR_Flag
; SM_SR();
; SOURCE LINE # 209
LJMP SM_SR
; END OF Bubble_alarm
; }
; /**********************************************************************************************
; 函数:void delay( uint t)
; 说明:延时子程序,延迟时间[(12.144*TIMER1+17.365)*TIMER2+28.375]/f,当t=16M时,为(76.9853t+1.7
; 734)us,当t=12M时,为(102.647t+2.3646)us
; ***********************************************************************************************/
; void delay( uint t)
RSEG ?PR?_delay?PUMP
L?0237:
USING 0
L?0238:
MOV R7,#026H
MOV R6,#01H
LCALL _delay
MOV WDTCN,#0A5H
LCALL _delay
MOV WDTCN,#0A5H
LCALL _delay
MOV WDTCN,#0A5H
_delay:
USING 0
; SOURCE LINE # 216
;---- Variable 't?541' assigned to Register 'R6/R7' ----
; { uint i,j;
; SOURCE LINE # 217
; for(i=0;i<t;i++)
; SOURCE LINE # 218
;---- Variable 'i?542' assigned to Register 'R4/R5' ----
CLR A
MOV R5,A
MOV R4,A
?C0011:
CLR C
MOV A,R5
SUBB A,R7
MOV A,R4
SUBB A,R6
JNC ?C0017
; for(j=0;j<100;j++)
; SOURCE LINE # 219
;---- Variable 'j?543' assigned to Register 'R2/R3' ----
CLR A
MOV R3,A
MOV R2,A
?C0014:
INC R3
CJNE R3,#00H,?C0186
INC R2
?C0186:
MOV A,R3
XRL A,#064H
ORL A,R2
JNZ ?C0014
?C0013:
INC R5
CJNE R5,#00H,?C0187
INC R4
?C0187:
SJMP ?C0011
; ;
; }
; SOURCE LINE # 221
?C0017:
RET
; END OF _delay
; /**********************************************************************************************
; 函数:void nop(uint t)
; 说明:软件短时间精确延时子程序,相当于t个空操作
; ***********************************************************************************************/
; void nop(uint t)
RSEG ?PR?_nop?PUMP
L?0239:
USING 0
L?0240:
MOV R7,#05H
MOV R6,#00H
_nop:
USING 0
; SOURCE LINE # 226
;---- Variable 't?644' assigned to Register 'R6/R7' ----
; { uint i;
; SOURCE LINE # 227
; for(i=0;i<t;i++)
; SOURCE LINE # 228
;---- Variable 'i?645' assigned to Register 'R4/R5' ----
CLR A
MOV R5,A
MOV R4,A
?C0018:
CLR C
MOV A,R5
SUBB A,R7
MOV A,R4
SUBB A,R6
JNC ?C0021
; _nop_();
; SOURCE LINE # 229
NOP
INC R5
CJNE R5,#00H,?C0188
INC R4
?C0188:
SJMP ?C0018
; }
; SOURCE LINE # 230
?C0021:
RET
; END OF _nop
; /**********************************************************************************************
; 函数:void pk(void)
; 说明:输液前的排空操作,电机快速转动,迅速排出气泡
; ***********************************************************************************************/
; void pk(void)
RSEG ?PR?pk?PUMP
pk:
USING 0
; SOURCE LINE # 235
; {
; SOURCE LINE # 236
; if(PK_Flag==1)
; SOURCE LINE # 237
JNB PK_Flag,?C0022
; {SR_Flag=1;
; SOURCE LINE # 238
SETB SR_Flag
; SM_SR();
; SOURCE LINE # 239
; }
; SOURCE LINE # 240
SJMP ?C0222
?C0022:
; else
; {SR_Flag=0;
; SOURCE LINE # 242
CLR SR_Flag
; SM_SR();
; SOURCE LINE # 243
?C0222:
LCALL SM_SR
; }
; SOURCE LINE # 244
; }
; SOURCE LINE # 245
?C0024:
RET
; END OF pk
; /**********************************************************************************************
; 函数:void lcdwbit(bit n)
; 说明:LCD位传输函数
; ***********************************************************************************************/
; void lcdwbit(bit n)
RSEG ?PR?lcdwbit?PUMP
lcdwbit:
; SOURCE LINE # 250
; { DIPIN = n;
; SOURCE LINE # 251
MOV C,n?846
MOV DIPIN,C
; CLKPIN = 1;
; SOURCE LINE # 252
SETB CLKPIN
; CLKPIN = 0;
; SOURCE LINE # 253
CLR CLKPIN
; CLKPIN = 1;
; SOURCE LINE # 254
SETB CLKPIN
; }
; SOURCE LINE # 255
RET
; END OF lcdwbit
; /**********************************************************************************************
; 函数:void lcdwd(uchar data1)
; 说明:LCD字节传输函数
; ***********************************************************************************************/
; void lcdwd(uchar data1)
RSEG ?PR?_lcdwd?PUMP
_lcdwd:
USING 0
; SOURCE LINE # 260
;---- Variable 'data1?947' assigned to Register 'R7' ----
; { uchar i;
; SOURCE LINE # 261
; for(i=0;i<8;i++)
; SOURCE LINE # 262
;---- Variable 'i?948' assigned to Register 'R6' ----
CLR A
MOV R6,A
?C0026:
; { if((data1&0x01)==0x01)
; SOURCE LINE # 263
MOV A,R7
JNB ACC.0,?C0029
; lcdwbit(1);
; SOURCE LINE # 264
SETB ?lcdwbit?BIT
SJMP ?C0223
?C0029:
; else
; lcdwbit(0);
; SOURCE LINE # 266
CLR ?lcdwbit?BIT
?C0223:
LCALL lcdwbit
?C0030:
; data1>>=1;
; SOURCE LINE # 267
MOV A,R7
CLR C
RRC A
MOV R7,A
; }
; SOURCE LINE # 268
INC R6
CJNE R6,#08H,?C0026
; }
; SOURCE LINE # 269
?C0031:
RET
; END OF _lcdwd
; /**********************************************************************************************
; 函数:void lcdwd1(void)
; 说明:LCD4段数据传输函数
; ***********************************************************************************************/
; void lcdwd1(void)
RSEG ?PR?lcdwd1?PUMP
lcdwd1:
USING 0
; SOURCE LINE # 274
; { uchar i;
; SOURCE LINE # 275
; for(i=0;i<5;i++)
; SOURCE LINE # 276
;---- Variable 'i?1049' assigned to Register 'R5' ----
CLR A
MOV R5,A
?C0032:
; {lcdwd(l_data[i]);
; SOURCE LINE # 277
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -