📄 pump.lst
字号:
543 {
544 1 // TMOD=0x51;
545 1 TL1=(0xff&(-Bubble_NUM));
546 1 TH1=(0xff&(-Bubble_NUM>>8));
547 1 TR1=0;
548 1 }
549 /**********************************************************************************************
550 函数:void T1_ISR(void)
551 说明:定时器T1中断服务函数
552 ***********************************************************************************************/
553 void T1_ISR(void) interrupt 3
554 {
555 1 TR1=0;
556 1 ET1=0;
557 1 TR2=0;
558 1 TMR3CN=0x00;
559 1 EIE2=0x00;
560 1 Bubble_alarm();
561 1 }
562 /**********************************************************************************************
C51 COMPILER V8.01 PUMP 09/19/2006 11:35:54 PAGE 14
563 函数:void PCA_ADC(void)
564 说明:软件定时器方式,做第五个定时器用
565 ***********************************************************************************************/
566 void PCA_ADC(void)
567 { PCA0MD = 0x02;
568 1 PCA0CN = 0x00;
569 1 PCA0H = 0x00;
570 1 PCA0L = 0x00;
571 1 PCA0CPM0 = 0x4C;
572 1 PCA0CPL0 = 0x88;
573 1 PCA0CPH0 = 0x88;
574 1 CR=1;
575 1 }
576 /**********************************************************************************************
577 函数:void T2_Set(void)
578 说明:定时器T2寄存器设置函数,用来对超声波传感器处理后的信号进行计数,当无气泡时,在定时器溢出
579 前自动重载,如果有气泡,则会发生溢出。T2用于判断大于0.3ml的气泡。
580 ***********************************************************************************************/
581 void T2_Set(void)
582 { RCAP2L=(0xff&(-Delay_LTime));
583 1 RCAP2H=(0xff&(-Delay_LTime>>8));
584 1 TL2=(0xff&(-Delay_LTime));
585 1 TH2=(0xff&(-Delay_LTime>>8));
586 1 T2CON=0x08;
587 1 TR2=0;
588 1 }
589 /**********************************************************************************************
590 函数:void T3_Set(void)
591 说明:定时器T3寄存器设置函数
592 ***********************************************************************************************/
593 void T3_Set(void)
594 { TMR3CN=0x00;
595 1 SMB0CN=0xC1;
596 1 TMR3L=(0xff&(-Delay_STime));
597 1 TMR3H=(0xff&(-Delay_STime>>8));
598 1 TMR3RLL=(0xff&(-Delay_STime));
599 1 TMR3RLH=(0xff&(-Delay_STime>>8));
600 1 // TMR3CN=0x04;
601 1 SCL=0;
602 1 nop(20);
603 1 SCL=1;
604 1 }
605 /**********************************************************************************************
606 函数:void T3_ISR(void)
607 说明:定时器T3中断服务函数
608 ***********************************************************************************************/
609 void T3_ISR(void) interrupt 14
610 {
611 1 TMR3CN=0x04;
612 1 T1IN=!T1IN;
613 1 }
614 /**********************************************************************************************
615 函数:void data_inv(void)
616 说明:将键盘设置的流量或滴数转换为电机的控制参数,以滴作为基本单位,0.1ml对应为2滴.考虑中断循
617 环的时间,需要加上修正系数。
618 ***********************************************************************************************/
619 void data_inv(void)
620 {uint c;
621 1 ulint a,b;
622 1 // if(Fluxdrop_Flag)
623 1 // Drop_Num=temp[3]+10*temp[2]+100*temp[1];
624 1 // else
C51 COMPILER V8.01 PUMP 09/19/2006 11:35:54 PAGE 15
625 1 // Drop_Num=2*temp[3]+20*temp[2]+200*temp[1];
626 1 if(Drop_Num==1)
627 1 Buffer_NUM=2;
628 1 // else if((Drop_Num>4)&&(Drop_Num<25))
629 1 // Buffer_NUM=10;
630 1 else
631 1 Buffer_NUM=1;
632 1 // a=15000000/(Drop_Num*Drop_NStep);
633 1 // b=a-2;
634 1 // c=b/Buffer_NUM;
635 1 // PWM_Width=c-2;
636 1 Flux_Pulse=0.2403*Drop_Num*Drop_Num+48.956*Drop_Num-0.0008*Drop_Num*Drop_Num*Drop_Num+169.8705;
637 1 a=15000000/Flux_Pulse;
638 1 b=a-2;
639 1 c=b/Buffer_NUM;
640 1 PWM_Width=c-2;
641 1 }
642 /**********************************************************************************************
643 函数:void pulse_inv(void)
644 说明:将键盘设置的输液量转换为电机的控制参数,以1ml作为基本单位,考虑不可能将容器中的药液完全
645 输出,需要扣除相应的保留值(8ml)
646 ***********************************************************************************************/
647 void pulse_inv(void)
648 {uint All_Num;
649 1 All_Num=20*temp2[3]+200*temp2[2]+2000*temp2[1];
650 1 All_Pulse=(2*All_Num*Flux_Pulse)/Drop_Num;
651 1 }
652 /**********************************************************************************************
653 函数:void Read_flash(void)
654 说明:读出flash存储器中确切地址的数据
655 ***********************************************************************************************/
656 void Read_flash(void)
657 { uchar code *pread;
658 1 uchar i;
659 1 pread=0x5000; //读flash
660 1 for(i=0;i<4;i++)
661 1 { temp[i]=*(pread++);
662 2 }
663 1 for(i=0;i<4;i++)
664 1 { temp2[i]=*(pread++);
665 2 }
666 1 for(i=0;i<10;i++)
667 1 {lcd_data[i]=*(pread++);
668 2 }
669 1 delay(Time_1ms);
670 1 }
671 /**********************************************************************************************
672 函数:Write_flash(void)
673 说明:首先将flash固定区域的数据整页完全擦除,然后写入修改后的数据
674 ***********************************************************************************************/
675 void Write_flash(void)
676 {uchar xdata *pwrite;
677 1 uchar *pgen;
678 1 uchar i;
679 1 FLSCL=0x88; //擦除128字节的信息页
680 1 PSCTL=0x03;
681 1 pwrite=0x5000;
682 1 *pwrite=0;
683 1 PSCTL=0x01;
684 1 pgen=temp; //写flash
685 1 for(i=0;i<4;i++)
686 1 {
C51 COMPILER V8.01 PUMP 09/19/2006 11:35:54 PAGE 16
687 2 *(pwrite++)=*(pgen++);
688 2 }
689 1 pgen=temp2; //写flash
690 1 for(i=0;i<4;i++)
691 1 {
692 2 *(pwrite++)=*(pgen++);
693 2 }
694 1 pgen=lcd_data;
695 1 for(i=0;i<10;i++)
696 1 {
697 2 *(pwrite++)=*(pgen++);
698 2 }
699 1 PSCTL=0;
700 1 FLSCL=0x8f;
701 1 delay(Time_20ms);
702 1 }
703 /**********************************************************************************************
704 函数:void keyinterrupt(void)
705 说明:键盘中断服务函数,Hold键锁定时,不能进行任何操作。采用外部中断INT1
706 ***********************************************************************************************/
707 void keyinterrupt(void) interrupt 2
708 {uchar release_flag=0xFF; //按键是否释放的标志
709 1 EX1=0;
710 1 keycode=0x00;
711 1 delay(Time_20ms); //延迟时间以20ms为宜
712 1 if(INT1==1)
713 1 { EX1=1;
714 2 return;
715 2 }
716 1 code_h=0x7F;
717 1 while((code_h&0x0f)==0x0f) //如果没有到最后一行,则继续扫描
718 1 {
719 2 P3=code_h;
720 2 nop(20);
721 2 if((P3&0x0F)!=0x0F)
722 2 { code_l=((P3&0x0F)|0xF0);
723 3 keycode=((~code_h)|(~code_l));
724 3 break; //扫描到按键后退出扫描
725 3 }
726 2 else
727 2 code_h=((code_h>>1)|0x80);
728 2 }
729 1 WDTCN=0xA5;
730 1 switch(keycode)
731 1 {
732 2 case 0x88: //按键1
733 2 // if((Speed_Set==1)&&(Hold_Flag==0))
734 2 if(Speed_Set==1)
735 2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -