📄 osc.lst
字号:
702 1 TR1=0;
703 1 TF1=0;
704 1 S0CON=0XF8; //串口方式3,SM2=1,REN=1,TB8=1,RB8=0,TI=0,RI=0
705 1 IP1=0X03; //CT0、CT1高优先级
706 1 IP0=0X98; //S0=1,T1=1
707 1 ES0=1; //开串口中断
708 1 // ET0=1;
709 1 ET1=1;
710 1 // EAD=1; //AD中断允许
711 1 // ES1=1; //I2C
712 1 EA=1; //中断总允许
713 1 start_t2();
714 1 urgent_stop=0;
715 1 osc_err=0;
716 1 err_ok=0;
717 1 err=0;
718 1 BEGIN:
719 1 if(urgent_stop==1)
720 1 {
721 2 urgent_stop=0;
722 2 err_ok=0;
723 2 EX1=1;
724 2 EX0=1;
725 2 }
726 1 CTCON=0x00;
727 1 IEN1=0x00;
728 1 COM=0X36;
729 1 COUNT0=0XA0;
730 1 COUNT0=0X0F; //启动横摆脉冲 1K
731 1 COM=0X76;
732 1 COUNT1=0x00;
733 1 COUNT1=0x00;
734 1 COM=0XB6;
735 1 COUNT2=0x00;
736 1 COUNT2=0x00;
737 1 gate=0; //关门控
C51 COMPILER V7.06 OSC 06/22/2005 15:49:12 PAGE 13
738 1 osc_enable=1; //横摆使能
739 1 osc_dir=0; //横摆方向,0-左,1-右
740 1 osc_out=1; //横摆输出
741 1 work=0;
742 1 called=0;
743 1 start=0;
744 1 sector=0;
745 1 in_sector=0;
746 1 start_osc=0;
747 1 osc_ok=0;
748 1 first_center=1;
749 1 t_edge=0; //0-左边缘 1-右边缘
750 1 c_t0=0;
751 1 c_t42=0;
752 1 temp_c=0;
753 1 share=0; //启动横摆标志
754 1 stop_osc=0;
755 1 decrease=0;
756 1 decreased=0; //衰减标志
757 1 decrease_ok=0;
758 1 to_begin=0;
759 1
760 1 need_para=0;
761 1 POINTER0=0;
762 1 SSUM=0;
763 1 S_ANSW=0;
764 1 POINTER1=0;
765 1 RSUM=0;
766 1 r_byte_nums=4;
767 1 ans=0;
768 1 send=0;
769 1 resend=0;
770 1 demand=0;
771 1
772 1 osc_l=0;
773 1 osc_r=0;
774 1 center_excursion=0; //横摆中心偏移标志(DC41)
775 1 breadth_add=0;
776 1 breadth_dec=0;
777 1 osc_add=0; //摆宽增加次数
778 1 osc_dec=0;
779 1 osc=0;
780 1 judge_ok=0;
781 1 motor_stop=0;
782 1
783 1 CML0=TML2+0X20;
784 1 if(CML0<TML2)
785 1 CMH0=TMH2+1+0X4E;
786 1 else
787 1 CMH0=TMH2+0X4E; //20ms
788 1 EX1=1;
789 1 EX0=1;
790 1 while(start==0) //等待过程中,接受点名和参数
791 1 {
792 2 if(called==1)
793 2 {
794 3 ini_sbuf(M_main,infor,S_ANSW,cross_machine,0,0);
795 3 s_byte_nums=get_byte_nums(infor);
796 3 TR_noans();
797 3 called=0;
798 3 }
799 2
C51 COMPILER V7.06 OSC 06/22/2005 15:49:12 PAGE 14
800 2 if(receive_p_out==1)
801 2 {
802 3 point=&pp.k4;
803 3 for(p_sec=0;p_sec<13;p_sec++)
804 3 *(point+p_sec)=rbuffer[p_sec*2+2]*256+rbuffer[p_sec*2+3];
805 3 ini_sbuf(M_main,answer,S_ANSW,0,0,0);
806 3 s_byte_nums=4;
807 3 TR_noans();
808 3 // demand=0;
809 3 receive_p_out=0;
810 3 }
811 2
812 2 if(receive_p_in==1)
813 2 {
814 3 point=&pp.x[nonce_sec][0];
815 3 for(p_sec=0;p_sec<6;p_sec++)
816 3 *(point+p_sec)=rbuffer[p_sec*2+3]*256+rbuffer[p_sec*2+4];
817 3
818 3 ini_sbuf(M_main,answer,S_ANSW,0,0,0);
819 3 s_byte_nums=4;
820 3 TR_noans();
821 3 // demand=0;
822 3 receive_p_in=0;
823 3 }
824 2
825 2 if(osc_l==1)
826 2 {
827 3 gate=1; //给出横摆脉冲
828 3 osc_dir=0; //左
829 3 osc_enable=0; //开使能
830 3 osc_l=0;
831 3 }
832 2
833 2 if(osc_r==1)
834 2 {
835 3 gate=1; //开8254门控信号
836 3 osc_dir=1; //右
837 3 osc_enable=0; //开使能
838 3 osc_r=0;
839 3 }
840 2
841 2 if(motor_stop==1)
842 2 {
843 3 gate=0; //关横摆脉冲
844 3 osc_enable=1;
845 3 motor_stop=0;
846 3 }
847 2
848 2 if(urgent_stop==1)
849 2 goto BEGIN;
850 2 }
851 1 K4=pp.k4&0x01;
852 1 const0=pp.v41*(pp.t42_l+pp.t42_r)/2;
853 1 const0=const0+pp.a41*60;
854 1 // const0=pp.a41*60;
855 1 const1=(unsigned long)(pp.v41)*(unsigned long)(pp.t17);
856 1 out0=2400000/pp.v41; //横摆脉冲, 时钟4M,4*60*0.01*1000000
857 1 out1=10*pp.a41; //横摆半宽脉冲,时钟1K,(A41/10)/(v41/60)*1000
858 1 out2=2*out1; //横摆整宽脉冲
859 1 c_t42_l=pp.t42_l*5; //pp.t42_l/10*1000/50
860 1 c_t42_r=pp.t42_r*5;
861 1 COM=0X36;
C51 COMPILER V7.06 OSC 06/22/2005 15:49:12 PAGE 15
862 1 COUNT0=out0%256;
863 1 COUNT0=out0/256;
864 1 COM=0X76;
865 1 COUNT1=out1%256;
866 1 COUNT1=out1/256; //半个摆宽
867 1 COM=0XB6;
868 1 COUNT2=out1%256;
869 1 COUNT2=out1/256; //整个摆宽
870 1 work=3; //关8254门控信号
871 1 do
872 1 {
873 2 if(start_osc==1) //开始横摆
874 2 {
875 3 ini_sbuf(M_main,answer,S_ANSW,0,0,0);
876 3 s_byte_nums=4;
877 3 TR_noans();
878 3 osc_dir=0; //方向——左
879 3 osc_enable=0; //开横摆使能
880 3 CTCON=CTCON|0x08; //CT1下降沿
881 3 IEN1=IEN1|0X02; //允许CT1
882 3 gate=1;
883 3 osc_out=1;
884 3 // TR0=1;
885 3 start_osc=0;
886 3 }
887 2
888 2 if(urgent_stop==1)
889 2 goto BEGIN;
890 2
891 2 if(pp.k4==OFF&¢er_excursion==1)
892 2 {
893 3 if(excursion_dir==0)
894 3 osc_dir=0; //左
895 3 else
896 3 osc_dir=1;
897 3 CTCON=CTCON|0X02;
898 3 COM=0X76;
899 3 COUNT1=10;
900 3 COUNT1=0;
901 3 IEN1=IEN1|0X01;
902 3 gate=1;
903 3 osc_enable=0; //开横摆使能
904 3 center_excursion=0;
905 3 }
906 2
907 2 if(urgent_stop==1)
908 2 goto BEGIN;
909 2
910 2 if(sector==1) //进入新区间
911 2 {
912 3 if(osc_ok==1)
913 3 {
914 4 K4=pp.x[nonce_sector][19];
915 4 if(K4==1)
916 4 {
917 5 }
918 4 else
919 4 {
920 5 stop_osc=1;
921 5 }
922 4 }
923 3 sector=0;
C51 COMPILER V7.06 OSC 06/22/2005 15:49:12 PAGE 16
924 3 }
925 2 /*
926 2 if(resend==1)
927 2 {
928 2 POINTER1=0;
929 2 RSUM=0;
930 2 ini_sbuf(M_main,answer,S_ANSW,0,0,0);
931 2 s_byte_nums=get_byte_nums(answer);
932 2 }
933 2 */
934 2 if(urgent_stop==1)
935 2 goto BEGIN;
936 2 }while(decrease==0);
937 1 /*
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -