📄 pump.lst
字号:
182 =1 sbit F1 = PSW ^ 1; /* USER FLAG 1 */
183 =1 sbit P = PSW ^ 0; /* ACCUMULATOR PARITY FLAG */
184 =1
185 =1 /* PCA0CN D8H */
186 =1 sbit CF = PCA0CN ^ 7; /* PCA 0 COUNTER OVERFLOW FLAG */
187 =1 sbit CR = PCA0CN ^ 6; /* PCA 0 COUNTER RUN CONTROL BIT */
188 =1 sbit CCF4 = PCA0CN ^ 4; /* PCA 0 MODULE 4 INTERRUPT FLAG */
189 =1 sbit CCF3 = PCA0CN ^ 3; /* PCA 0 MODULE 3 INTERRUPT FLAG */
190 =1 sbit CCF2 = PCA0CN ^ 2; /* PCA 0 MODULE 2 INTERRUPT FLAG */
191 =1 sbit CCF1 = PCA0CN ^ 1; /* PCA 0 MODULE 1 INTERRUPT FLAG */
192 =1 sbit CCF0 = PCA0CN ^ 0; /* PCA 0 MODULE 0 INTERRUPT FLAG */
193 =1
194 =1 /* ADC0CN E8H */
195 =1 sbit ADCEN = ADC0CN ^ 7; /* ADC 0 ENABLE */
196 =1 sbit ADCTM = ADC0CN ^ 6; /* ADC 0 TRACK MODE */
197 =1 sbit ADCINT = ADC0CN ^ 5; /* ADC 0 CONVERISION COMPLETE INTERRUPT FLAG */
198 =1 sbit ADBUSY = ADC0CN ^ 4; /* ADC 0 BUSY FLAG */
199 =1 sbit ADSTM1 = ADC0CN ^ 3; /* ADC 0 START OF CONVERSION MODE BIT 1 */
200 =1 sbit ADSTM0 = ADC0CN ^ 2; /* ADC 0 START OF CONVERSION MODE BIT 0 */
201 =1 sbit ADWINT = ADC0CN ^ 1; /* ADC 0 WINDOW COMPARE INTERRUPT FLAG */
202 =1 sbit ADLJST = ADC0CN ^ 0; /* ADC 0 RIGHT JUSTIFY DATA BIT */
203 =1
204 =1 /* SPI0CN F8H */
205 =1 sbit SPIF = SPI0CN ^ 7; /* SPI 0 INTERRUPT FLAG */
206 =1 sbit WCOL = SPI0CN ^ 6; /* SPI 0 WRITE COLLISION FLAG */
207 =1 sbit MODF = SPI0CN ^ 5; /* SPI 0 MODE FAULT FLAG */
208 =1 sbit RXOVRN = SPI0CN ^ 4; /* SPI 0 RX OVERRUN FLAG */
209 =1 sbit TXBSY = SPI0CN ^ 3; /* SPI 0 TX BUSY FLAG */
210 =1 sbit SLVSEL = SPI0CN ^ 2; /* SPI 0 SLAVE SELECT */
211 =1 sbit MSTEN = SPI0CN ^ 1; /* SPI 0 MASTER ENABLE */
212 =1 sbit SPIEN = SPI0CN ^ 0; /* SPI 0 SPI ENABLE */
8 #include <intrins.h>
1 =1 /*--------------------------------------------------------------------------
2 =1 INTRINS.H
3 =1
4 =1 Intrinsic functions for C51.
5 =1 Copyright (c) 1988-2004 Keil Elektronik GmbH and Keil Software, Inc.
6 =1 All rights reserved.
7 =1 --------------------------------------------------------------------------*/
8 =1
9 =1 #ifndef __INTRINS_H__
10 =1 #define __INTRINS_H__
11 =1
12 =1 extern void _nop_ (void);
13 =1 extern bit _testbit_ (bit);
14 =1 extern unsigned char _cror_ (unsigned char, unsigned char);
15 =1 extern unsigned int _iror_ (unsigned int, unsigned char);
16 =1 extern unsigned long _lror_ (unsigned long, unsigned char);
17 =1 extern unsigned char _crol_ (unsigned char, unsigned char);
18 =1 extern unsigned int _irol_ (unsigned int, unsigned char);
19 =1 extern unsigned long _lrol_ (unsigned long, unsigned char);
20 =1 extern unsigned char _chkfloat_(float);
21 =1 extern void _push_ (unsigned char _sfr);
C51 COMPILER V8.01 PUMP 09/19/2006 11:35:54 PAGE 5
22 =1 extern void _pop_ (unsigned char _sfr);
23 =1
24 =1 #endif
25 =1
9
10 /********************************************变量类型缩略定义***********************************/
11 #define uint unsigned int //缩略定义
12 #define uchar unsigned char
13 #define ulint unsigned long
14
15 /***********************************************常量定义****************************************/
16 #define Time_1ms 6 //时间常量(12M) 6x-x/8
17 #define Time_5ms 30
18 #define Time_10ms 59
19 #define Time_15ms 88
20 #define Time_20ms 118
21 #define Time_50ms 294
22 #define Time_80ms 470
23 #define Time_100ms 588
24 #define Time_200ms 1175
25
26 #define DAC0_DATA 0x01BC //斩波驱动参考电压设定值
27 #define DAC1_DATA 0x0C00 //比较器参考电压设定值
28 #define Delay_STime 0x09C4 //检测到气泡报警的时间延迟(短)
29 #define Delay_LTime 0xF424 //检测到气泡报警的时间延迟(长)
30 #define Bubble_NUM 0x0001 //累计气泡为150个
31 /*******************************************I/O端口对应输出声明*********************************/
32 sbit SDA=P0^0; //SMBUS设置
33 sbit SCL=P0^1; //用作T3定时器的自动重载触发源
34 sbit CEX0=P0^2; //PCA第一个比较、捕捉模块
35 sbit T1=P0^3; //定时器T1计数源输入端,对小气泡进行计数
36 sbit INT1=P0^4; //键盘中断
37 sbit T2EX=P0^5; //由内部计数器2对气泡检测脉冲进行计数
38 sbit CNVSTR=P0^6; //时钟输出
39 sbit SM_RST=P0^7; //L297复位控制位
40 sbit Balarm_flag=P1^0; //气泡报警标志位,为1时正常,为0时报警
41 sbit Heat_flag=P1^1; //加热标志位
42 //sbit SHIFT_DATA=P1^2; //移位寄存器串行数据输入位,H时为1,L时为0
43 sbit DI2PIN=P1^2; //LCD2时钟输入引脚
44 sbit Lpower_LED=P1^3; //低电压报警
45 //sbit SHIFT_CLK=P1^3; //移位寄存器时钟输入
46 sbit CLK2PIN=P1^4; //LCD2数据输入引脚
47 //sbit SHIFT_CLR=P1^4; //移位寄存器清零端
48 sbit CLKPIN = P1^5; //用户自定义CLK对应引脚
49 sbit T1IN=P1^6; //定时器T1的输入
50 sbit State_LED=P1^7; //状态标志位
51 sbit DIPIN = P2^0; //用户自定义DI对应引脚
52 sbit SM_CLK1=P2^2; //步进电机时钟位
53 sbit SM_EN=P2^3; //L297使能位
54 sbit SM_CW=P2^4; //L297方向控制位
55 sbit SM_MODE=P2^5; //L297环形分配器分配方式控制位
56 /*******************************************全局变量定义****************************************/
57 uchar temp[4]; //LCD显示数字缓存
58 uchar temp2[4]; //LCD2显示数字缓存
59 uchar code temp_code[4]={0,1,0,0}; //LCD显示数字的十进制形式
60 uchar code temp2_code[4]={0,5,0,0}; //LCD2显示数字的十进制形式
61 uchar Point_Flag; //小数点标志位
62 uchar data l_data[5]; //用户自定义LCD缓冲区
63 uchar lcd_data[10]; //0~9对应的显示代码缓存;
64 uchar code lcd_data_code[10]={0x88,0xbb,0xc1,0x91,0xb2,0x94,0x84,0xb9,0x80,0xb0}; //0~9对应的显示代码;
65 uchar code_h; //行扫描值
66 uchar code_l; //列扫描值
C51 COMPILER V8.01 PUMP 09/19/2006 11:35:54 PAGE 6
67 uchar keycode=0x00; //最终键值
68 uint k=0; //LCD显示段位置序号
69 uint kk=0; //LCD2显示段位置序号
70 uint BUFFER; //步进电机转速控制
71 uint Buffer_NUM; //T0循环次数
72 uint PWM_Width; //定时器0溢出周期控制
73 uint Drop_Num; //设定的液滴数
74 ulint Flux_Pulse; //设定的流速对应的脉冲数
75 ulint All_Pulse; //需要产生的全部脉冲数
76 float Drop_NStep; //一滴所对应的步进电机的步数
77 bit Fluxdrop_Flag; //流量和滴速单位标志位,为0单位是流量,为1时单位是滴速
78 bit Speed_Set; //流速设置标志位,为0时设置保存,为1时允许设置
79 bit Hold_Flag; //键盘锁定标志位,为1时键盘锁定,为0时允许键盘动作
80 bit SR_Flag; // 运行/停止标志位,为0时停止,为1时运行
81 bit PK_Flag; //排空标志位,为0停止排空操作,为1时开始排空操作
82 bit Gross_Flag; //输液量设置标志,为1时允许设置,为0时保存设置
83 /******************************************函数声明********************************************/
84 void SYSCLK_Init(void); //系统时钟初始化
85 void IO_Init(void); //I/O端口设置初始化
86 void ISR_Init(void); //系统中断设置初始化
87 void Global_Init(void); //全局变量初始化
88 void Bubble_alarm(void); //气泡检测报警
89 void delay( uint t); //软件延迟,(102.647t+2.3646)us
90 void nop(uint t); //软件短延迟函数
91 void pk(void); //输液前的排空操作
92 void lcdwbit(bit n); //LCD位传输函数
93 void lcdwd(uchar data1); //LCD字节传输函数
94 void lcdwd1(); //LCD4段数据传输函数
95 void l_set(); //各段显示数据设置
96 void display(); //显示设置数据
97 void noplay(); //空白显示
98 void lcd2wbit(bit n); //LCD2位传输函数
99 void lcd2wd(uchar data1); //LCD2字节传输函数
100 void lcd2wd1(); //LCD2的4段数据传输函数
101 void l2_set(); //LCD2各段显示数据设置
102 void display2(); //LCD2显示设置数据
103 void noplay2(); //LCD2空白显示
104 void SM_Set(void); //步进电机工作状态设置
105 void T0_Set(void); //定时器T0设置
106 void T0_ISR(void); //定时器T0中断服务函数
107 void SM_SR(void); //步进电机运行停止控制函数
108 void DAC0_Set(void); //步进电机参考电压设置
109 void DAC1_Set(void); //比较器参考电压设置
110 void data_inv(void); //流量参数变换
111 void pulse_inv(void); //输液量参数变换
112 void ADC_Set(void); //ADC窗口比较器设置
113 void ADC_ISR(void); //ADC窗口比较器中断服务函数
114 void T1_Set(void); //定时器T1参数设置
115 void T1_ISR(void); //定时器T1中断服务函数
116 void T2_Set(void); //定时器T2参数设置
117 void T2_ISR(void); //定时器T2中断服务函数
118 void T3_Set(void); //定时器T3参数设置
119 void T3_ISR(void); //定时器T3中断服务函数
120 void PCA_ADC(void); //PCA高速输出方式启动ADC
121 void keyinterrupt(void); //INT1即键盘中断服务函数
122 void main(void); //主函数
123 /***************************************函数定义***********************************************/
124
125 /**********************************************************************************************
126 函数:void SYSCLK_Init(void)
127 说明:系统时钟初始化,选择外部12M晶振,关闭看门狗。
128 ***********************************************************************************************/
C51 COMPILER V8.01 PUMP 09/19/2006 11:35:54 PAGE 7
129 void SYSCLK_Init(void)
130 {
131 1 int i;
132 1 WDTCN=0x07; //最大时间延迟
133 1 WDTCN=0xDE;
134 1 _nop_();
135 1 WDTCN=0xAD; //禁止看门狗中断
136 1 OSCXCN=0x77; //外部时钟寄存器设置
137 1 for(i=0;i<256;i++) ; // 至少等待1ms
138 1 while(!(OSCXCN&0x80)) ; //等待晶振稳定,
139 1 OSCICN=0x88; // 采用外部晶振作为时钟源
140 1 WDTCN=0xFF; //锁定看门狗禁止功能禁止,看门狗在程序中一直有效
141 1 WDTCN=0xA5; //喂狗
142 1 }
143 /**********************************************************************************************
144 函数:void IO_Init()
145 说明:I/O端口设置初始化,内部资源和IO端口交叉开关设置;输入和5V输出采用开漏输出,3.3V输出采用
146 推挽输出,允许全局弱上拉
147 ***********************************************************************************************/
148 void IO_Init()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -