?? 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 + -