📄 driver0425.lst
字号:
716 3 if(t_edge==0&&excursion_dir==1||t_edge==1&&excursion_dir==0)//左边缘、向右偏或右边缘、向左偏
717 3 {
718 4 out1=out1+pp.dc41*10;
719 4 judge_ok=1;
720 4 center_excursion=0;
721 4 }
722 3 }
723 2 else if(judge_ok==1)
724 2 {
725 3 out1=out1-pp.dc41*10;
726 3 judge_ok=0;
727 3 }
728 2 out2=2*out1;
729 2 COM=0X76;
730 2 COUNT1=out1%256;
731 2 COUNT1=out1/256;
732 2 COM=0XB6;
733 2 COUNT2=out2%256;
734 2 COUNT2=out2/256;
735 2 P4_2=0; //开横摆使能
736 2 IEN1=IEN1|0X10; //允许CM0,边缘停留时间
C51 COMPILER V7.06 DRIVER0425 06/03/2005 15:08:33 PAGE 13
737 2 }
738 1
739 1 }
740
741 void CT2_int (void) interrupt 8 //电压采样保持脉冲/弧长脉冲
742 {
743 1 CTI2=0;
744 1 if(decrease==0)
745 1 {
746 2 if(sample_avc==0) //采样
747 2 {
748 3 CTCON=CTCON&0xCF;
749 3 IEN1=IEN1&0XFB; //禁止CT2
750 3 ad_finish=0; //AD转换及处理过程
751 3 ADCON=0X08; //启动AD采样
752 3 }
753 2 else
754 2 {
755 3 c_avc++;
756 3 if(SENS>10&&c_avc==3)
757 3 PWMP=v51;
758 3 if(c_avc==SENS) //灵敏度
759 3 {
760 4 PWM0=0; //关弧长脉冲
761 4 CTCON=CTCON&0xCF;
762 4 IEN1=IEN1&0XFB; //禁止CT2
763 4 if(pp.k5==ON)
764 4 {
765 5 sample_avc=0;
766 5 if(pp.k1==DC||pp.k1==PDC&&(pp.avc_type==SP&&pulse_base==1||pp.avc_type==SPB||pp.avc_type==SB&&pulse_b
-ase==0))
767 5 {
768 6 PWMP=12;
769 6 PWM1=127;
770 6 CTCON=CTCON|0x20;
771 6 IEN1=IEN1|0X04; //允许CT2
772 6 }
773 5 }
774 4 }
775 3 }
776 2 }
777 1 else //衰减过程
778 1 {
779 2 if(lift==1)
780 2 {
781 3 c_avc++;
782 3 if(c_avc==c_lift) //焊枪提升结束
783 3 {
784 4 P4_4=1; //关弧长使能
785 4 PWM0=0; //关弧长脉冲
786 4 IEN1=IEN1&0XFB; //禁止CT2
787 4 c_avc=0; //清弧长脉冲个数
788 4 lift_complete=1;
789 4 }
790 3 }
791 2 }
792 1 }
793
794 void CT3_int (void) interrupt 9 //电流脉冲
795 {
796 1 CTI3=0;
797 1 pulse_base=~pulse_base;
C51 COMPILER V7.06 DRIVER0425 06/03/2005 15:08:33 PAGE 14
798 1 CTCON=CTCON&0X3F;
799 1 if(pulse_base==1) //峰值
800 1 {
801 2 if(pp.avc_type==SPB||pp.avc_type==SB)
802 2 CTCON=CTCON|0X80; //CT3下降沿
803 2 }
804 1 else //基值
805 1 {
806 2 if(pp.avc_type==SP||pp.avc_type==SPB)
807 2 CTCON=CTCON|0X40; //CT3上升沿
808 2 }
809 1
810 1 if(pp.avc_type==SPB)
811 1 {
812 2 PWM0=0;
813 2 IEN1=IEN1&0XFB; //禁止CT2
814 2 c_avc=0;
815 2 sample_avc=0;
816 2
817 2 new_circle=1;
818 2 if(pulse_base==1)
819 2 {
820 3 vc5=vc1;
821 3 vc6=vc2;
822 3 }
823 2 else
824 2 {
825 3 vc5=vc3;
826 3 vc6=vc4;
827 3 }
828 2 }
829 1 if(avc_ok==0) //开始弧长
830 1 {
831 2 avc_ok=1;
832 2 PWMP=12; //23-1k 12-2k
833 2 PWM0=0;
834 2 PWM1=127;
835 2 CTCON=CTCON|0x20; //CT2下降沿
836 2 IEN1=IEN1|0X04; //允许CT2,采样保持脉冲
837 2 }
838 1 }
839
840 void ADC_int (void) interrupt 10
841 {
842 1 ADCON=ADCON&0xEF; //清ADC中断标志
843 1 c_sample++; //2005-3-3
844 1 adh=ADCH;
845 1 adl=ADCON&0xC0;
846 1 adh=adh<<2;
847 1 adl=adl>>6;
848 1 ad=adh+adl;
849 1 da=ad;
850 1 AD5=(da*5000)/0x3FF;
851 1 if(new_circle==1)
852 1 {
853 2 new_circle=0;
854 2 AD1=AD5;
855 2 AD2=AD5;
856 2 AD3=AD5;
857 2 AD4=AD5;
858 2 }
859 1 else
C51 COMPILER V7.06 DRIVER0425 06/03/2005 15:08:33 PAGE 15
860 1 {
861 2 AD5=(AD5+AD1+AD2+AD3+AD4)/5;
862 2 AD1=AD2;
863 2 AD2=AD3;
864 2 AD3=AD4;
865 2 AD4=AD5;
866 2 }
867 1 AD5=AD5*6/100; //AD5*30/5
868 1
869 1 if(c_sample%5==0)
870 1 {
871 2 PWM1=0;
872 2 c_sample=0; //2005-3-3
873 2 sample_avc=1; //等待弧长调整
874 2 // CTCON=CTCON&0X3F;
875 2 CTCON=CTCON|0X10; //CT2上升沿
876 2 PWMP=start_v51;
877 2 PWM0=127;
878 2 if(AD5>vc5)
879 2 P4_5=0;
880 2 if(AD5<vc6)
881 2 P4_5=1; //弧长方向——上
882 2 c_avc=0;
883 2 P4_4=0;
884 2 IEN1=IEN1|0X04; //允许CT2,弧长脉冲
885 2 }
886 1 else
887 1 {
888 2 if(pp.k1==DC||(pp.k1==PDC&&pp.avc_type==SP&&pulse_base==1))//(pp.avc_type==SP&&pulse_base==1||pp.avc_typ
-e==SPB||pp.avc_type==SB&&pulse_base==0)))
889 2 {
890 3 PWMP=12;
891 3 PWM1=127;
892 3 CTCON=CTCON|0x20;
893 3 IEN1=IEN1|0X04; //允许CT2
894 3 }
895 2 }
896 1 ad_finish=1; //AD转换及处理完成
897 1 }
898
899 void CM0_int (void) interrupt 11 //边缘停留时间
900 {
901 1 CMI0=0;
902 1 c_t42++;
903 1 if(decreased==0)
904 1 {
905 2 if(t_edge==0&&c_t42==c_t42_l||t_edge==1&&c_t42==c_t42_r) //左边缘
906 2 {
907 3 IEN1=IEN1&0XEF; //禁止CM0
908 3 CTCON=CTCON|0x02;
909 3 IEN1=IEN1|0X01;
910 3 P4_1=1;
911 3 TR0=1;
912 3 P4_6=~P4_6; //边缘停留时间结束
913 3 c_t42=0;
914 3 }
915 2 }
916 1
917 1 else
918 1 {
919 2 if(t_edge==0&&c_t42==c_t42_l||t_edge==1&&c_t42==c_t42_r) //左边缘
920 2 {
C51 COMPILER V7.06 DRIVER0425 06/03/2005 15:08:33 PAGE 16
921 3 IEN1=IEN1&0XEF; //禁止CM0
922 3 CTCON=CTCON|0x02;
923 3 IEN1=IEN1|0X01;
924 3 P4_1=1;
925 3 P4_6=~P4_6; //边缘停留时间结束
926 3 c_t42=0;
927 3 }
928 2 }
929 1
930 1 CML0=TML2+0X20;
931 1 if(CML0<TML2)
932 1 CMH0=TMH2+1+0X4E;
933 1 else
934 1 CMH0=TMH2+0X4E;
935 1 }
936
937 main()
938 {
939 1 TMOD=0x22; //定时器1,方式2;定时器0,方式3,两个8位定时器;
940 1 TL1=0XFD; //波特率19200
941 1 TH1=0XFD;
942 1 TR1=1; //启动定时器
943 1 PCON=0X00; //SMOD=1
944 1 TMOD=0x23; //定时器0,方式3,两个8位定时器;
945 1 TR1=0;
946 1 TF1=0;
947 1 S0CON=0XF8; //串口方式3,SM2=1,REN=1,TB8=1,RB8=0,TI=0,RI=0
948 1 IP1=0X03; //CT0、CT1高优先级
949 1 IP0=0X98; //S0=1,T1=1
950 1 ES0=1; //开串口中断
951 1 ET0=1;
952 1 ET1=1;
953 1 EAD=1; //AD中断允许
954 1 ES1=1; //I2C
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -