📄 avc_1027.lst
字号:
757 void CM0_INT (void) interrupt 11
758 {
759 1 CMI0=0;
760 1 IEN1=IEN1&0XEF; //CM0
761 1 c_cm0++;
762 1 if(c_cm0==40)
763 1 {
764 2 COM=0X36;
765 2 COUNT0=0XA0;
766 2 COUNT0=0X0F;
767 2 c_cm0=0;
768 2 }
769 1 else
770 1 {
771 2 CML0=TML2+0X50; //50ms
772 2 if(CML0>TML2)
773 2 CMH0=TMH2+1+0XC3;
774 2 else
775 2 CMH0=TMH2+0XC3;
776 2 IEN1=IEN1|0X10; //CM0
777 2 }
778 1 }
779
780 main()
781 {
782 1 TMOD=0x22; //定时器1,方式2;定时器0,方式3,两个8位定时器;
783 1 TL1=0XFD; //波特率9600
784 1 TH1=0XFD;
785 1 TR1=1; //启动定时器
786 1 TMOD=0x23; //定时器0,方式3,两个8位定时器;
787 1 TR1=0;
788 1 TF1=0;
789 1 S0CON=0XF8; //串口方式3,SM2=1,REN=1,TB8=1,RB8=0,TI=0,RI=0
790 1 IP1=0X01; //CT0高优先级
791 1 IP0=0X98; //S0=1,T1=1
792 1 ES0=1; //开串口中断
793 1 ET1=1;
794 1 EAD=1; //AD中断允许
795 1 EX1=1;
796 1 EA=1; //中断总允许
C51 COMPILER V7.06 AVC_1027 09/11/2006 08:22:21 PAGE 14
797 1 start_t2();
798 1
799 1 COM=0XB6;
800 1 COUNT2=0x00;
801 1 COUNT2=0x00;
802 1 AD1=0;
803 1 AD2=0;
804 1 AD3=0;
805 1 AD4=0;
806 1 AD5=0;
807 1 U51=0;
808 1 urgent_stop=0;
809 1 avc_err=0;
810 1 err_ok=0;
811 1 err=0;
812 1
813 1 BEGIN: if(urgent_stop==1)
814 1 {
815 2 urgent_stop=0;
816 2 err_ok=0;
817 2 EX1=1;
818 2 EX0=1;
819 2 }
820 1 CTCON=0X00;
821 1 IEN1=0x00;
822 1 COM=0x36;
823 1 COUNT0=0x00;
824 1 COUNT0=0x00;
825 1 COM=0X76;
826 1 COUNT1=0x00;
827 1 COUNT1=0x00;
828 1 gate=0; //关门控
829 1 avc_enable=1;
830 1 avc_dir=1;
831 1 externel_voltage=1;
832 1 temp_voltage=1;
833 1 work=0;
834 1 called=0;
835 1 start=0;
836 1 pgj=0;
837 1 in_sector=0;
838 1 new_sector=0;
839 1 start_avc=0;
840 1 avc_ok=0;
841 1 new_circle=1;
842 1 c_sample=0;
843 1 ad_finish=1; //AD转换及处理完成标志
844 1 pulse_base=0; //峰、基值标志 0-基值、1-峰值
845 1 stop_avc=0;
846 1 decrease=0;
847 1 lift=0;
848 1 lift_ok=0;
849 1 lift_complete=0;
850 1 to_begin=0;
851 1
852 1 need_para=0;
853 1 POINTER0=0;
854 1 SSUM=0;
855 1 S_ANSW=0;
856 1 POINTER1=0;
857 1 RSUM=0;
858 1 ans=0;
C51 COMPILER V7.06 AVC_1027 09/11/2006 08:22:21 PAGE 15
859 1 send=0;
860 1 resend=0;
861 1 r_byte_nums=4;
862 1 send_p=0;
863 1 send_p_ok=0;
864 1
865 1 // avc=0;
866 1 avc_up=0;
867 1 avc_down=0;
868 1 motor_stop=0;
869 1 touch=0;
870 1 touched=0;
871 1
872 1 PWMP=12; //采样保持脉冲,2K
873 1 PWM0=127;
874 1 COM=0X36; //弧长点动速度,1K
875 1 COUNT0=4000%256;
876 1 COUNT0=4000/256;
877 1
878 1 CML0=TML2+0X20;
879 1 if(CML0<TML2)
880 1 CMH0=TMH2+1+0X4E;
881 1 else
882 1 CMH0=TMH2+0X4E; //20ms
883 1 lamp=0xF0;
884 1 write_8574(lamp);
885 1 while(start==0) //等待过程中,接受点名和参数
886 1 {
887 2
888 2 if(called==1)
889 2 {
890 3 ini_sbuf(M_main,infor,com_calling,S_ANSW,0,0);
891 3 s_byte_nums=get_byte_nums(infor);
892 3 TR_noans();
893 3 called=0;
894 3 }
895 2
896 2 if(send_p==1)
897 2 {
898 3 while(send_p_ok==0)
899 3 {
900 4 if(receive_p_out==1)
901 4 {
902 5 point=&pp.k5;
903 5 for(p_sec=0;p_sec<14;p_sec++)
904 5 *(point+p_sec)=rbuffer[p_sec*2+2]*256+rbuffer[p_sec*2+3];
905 5 ini_sbuf(M_main,answer,S_ANSW,0,0,0);
906 5 s_byte_nums=4;
907 5 TR_noans();
908 5 c_lift=80*pp.h51/3;
909 5 receive_p_out=0;
910 5 }
911 4
912 4 if(receive_p_in==1)
913 4 {
914 5 point=&pp.x[nonce_sec][0];
915 5 for(p_sec=0;p_sec<4;p_sec++)
916 5 *(point+p_sec)=rbuffer[p_sec*2+3]*256+rbuffer[p_sec*2+4];
917 5 ini_sbuf(M_main,answer,S_ANSW,0,0,0);
918 5 s_byte_nums=4;
919 5 TR_noans();
920 5 receive_p_in=0;
C51 COMPILER V7.06 AVC_1027 09/11/2006 08:22:21 PAGE 16
921 5 }
922 4 }
923 3 send_p_ok=0;
924 3 send_p=0;
925 3 EX1=1;
926 3 EX0=1;
927 3 }
928 2
929 2 if(avc_up==1)
930 2 {
931 3 COM=0X36; //450Hz
932 3 COUNT0=0X10;
933 3 COUNT0=0X27;
934 3 avc_dir=1; //方向——上
935 3 avc_enable=0; //使能
936 3 gate=1;
937 3 c_cm0=0;
938 3 CML0=TML2+0X50; //50ms
939 3 if(CML0>TML2)
940 3 CMH0=TMH2+1+0XC3;
941 3 else
942 3 CMH0=TMH2+0XC3;
943 3 IEN1=IEN1|0X10; //CM0
944 3 avc_up=0;
945 3 }
946 2 if(avc_down==1)
947 2 {
948 3 COM=0X36; //450Hz
949 3 COUNT0=0X10;
950 3 COUNT0=0X27;
951 3 avc_dir=0; //方向——下
952 3 avc_enable=0;
953 3 gate=1;
954 3 c_cm0=0;
955 3 CML0=TML2+0X50; //50ms
956 3 if(CML0>TML2)
957 3 CMH0=TMH2+1+0XC3;
958 3 else
959 3 CMH0=TMH2+0XC3;
960 3 IEN1=IEN1|0X10; //CM0
961 3 avc_down=0;
962 3 }
963 2 if(motor_stop==1)
964 2 {
965 3 gate=0; //关8254门控信号
966 3 avc_enable=1; //关弧长使能
967 3 motor_stop=0;
968 3 }
969 2
970 2 if(lift==1)
971 2 {
972 3 COM=0X36;
973 3 COUNT0=0XA0;
974 3 COUNT0=0X0F;
975 3 COM=0X76;
976 3 COUNT1=c_lift%256;
977 3 COUNT1=c_lift/256;
978 3 CTCON=CTCON|0X01; //CT0下降沿
979 3 IEN1=IEN1|0X01; //允许CT0
980 3 avc_dir=1; //弧长方向——上
981 3 externel_voltage=0;
982 3 avc_enable=0; //开弧长使能
C51 COMPILER V7.06 AVC_1027 09/11/2006 08:22:21 PAGE 17
983 3 gate=1;
984 3 while(lift_complete==0);
985 3 externel_voltage=1;
986 3 lift_complete=0;
987 3 lift=0;
988 3 if(urgent_stop==1)
989 3 goto BEGIN;
990 3 lamp=lamp&0xF7;
991 3 write_8574(lamp);
992 3 EX1=1;
993 3 }
994 2
995 2 if(pgj==1)
996 2 {
997 3 ini_sbuf(M_main,answer,S_ANSW,0,0,0);
998 3 s_byte_nums=4;
999 3 TR_noans();
1000 3 avc_dir=0; //方向——下
1001 3 avc_enable=0;
1002 3 gate=1;
1003 3 while(lift==0);
1004 3 COM=0X36;
1005 3 COUNT0=0XA0;
1006 3 COUNT0=0X0F;
1007 3 COM=0X76;
1008 3 COUNT1=c_lift%256;
1009 3 COUNT1=c_lift/256;
1010 3 CTCON=CTCON|0X01; //CT0下降沿
1011 3 IEN1=IEN1|0X01; //允许CT0
1012 3 avc_dir=1; //弧长方向——上
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -