📄 temposc2.lst
字号:
680 2 IEN1=IEN1|0x02;
681 2 }
682 1 }
683
684 void CT1_int (void) interrupt 7 //整个摆宽
685 {
686 1 CTI1=0;
687 1 gate=0; //out1、out2门控信号
688 1 CTCON=CTCON&0xF3;
689 1 if(sec_center==1)
690 1 {
691 2 COM=0XB6;
692 2 COUNT2=out2%256;
693 2 COUNT2=out2/256;
694 2 sec_center=0;
695 2 if(new_sector==1)
696 2 {
697 3 new_sector=0;
698 3 sec_change=1;
699 3 }
700 2 }
701 1 osc_dir=~osc_dir; //换横摆方向
702 1 t_edge=~t_edge; //换边缘标志
703 1 osc_out=~osc_out; //横摆输出
704 1 if(decreased==1)
705 1 {
706 2 // if(c_t42_l<1)
707 2 // c_t42_l=1;
708 2 // if(c_t42_r<1)
709 2 // c_t42_r=1;
710 2 IEN1=IEN1|0X10;
711 2 }
712 1 else
713 1 {
714 2 if(center_excursion==1&&judge_ok==0)
715 2 {
716 3 if(center_excursion==1&&judge_ok==0)
717 3 {
718 4 if(t_edge==0&&excursion_dir==1||t_edge==1&&excursion_dir==0)//左边缘、向右偏或右边缘、向左偏
719 4 {
720 5 out1=out1+pp.dc41*10;
721 5 judge_ok=1;
722 5 center_excursion=0;
723 5 }
724 4 }
725 3 else if(judge_ok==1)
726 3 {
727 4 out1=out1-pp.dc41*10;
728 4 judge_ok=0;
729 4 }
730 3 out2=2*out1;
731 3 COM=0X76;
732 3 COUNT1=out1%256;
733 3 COUNT1=out1/256;
734 3 COM=0XB6;
735 3 COUNT2=out2%256;
736 3 COUNT2=out2/256;
C51 COMPILER V7.06 TEMPOSC2 07/11/2005 13:44:54 PAGE 13
737 3 osc_enable=0;
738 3
739 3 }
740 2 IEN1=IEN1|0X10; //允许CM0,边缘停留时间
741 2 }
742 1 }
743
744 void CM0_int (void) interrupt 11 //边缘停留时间
745 {
746 1 CMI0=0;
747 1 c_t42++;
748 1 // if(decreased==0)
749 1 // {
750 1 if(t_edge==0&&c_t42==c_t42_l||t_edge==1&&c_t42==c_t42_r) //左边缘
751 1 {
752 2 IEN1=IEN1&0XEF; //禁止CM0
753 2 CTCON=CTCON|0x02; //CT0下降沿
754 2 IEN1=IEN1|0X01; //允许CT0
755 2 gate=1;
756 2 osc_out=~osc_out; //边缘停留时间结束
757 2 c_t42=0;
758 2 }
759 1 // }
760 1 /*
761 1 else
762 1 {
763 1 if(t_edge==0&&c_t42==c_t42_l||t_edge==1&&c_t42==c_t42_r) //左边缘
764 1 {
765 1 IEN1=IEN1&0XEF; //禁止CM0
766 1 CTCON=CTCON|0x02;
767 1 IEN1=IEN1|0X01;
768 1 gate=1;
769 1 osc_out=~osc_out; //边缘停留时间结束
770 1 c_t42=0;
771 1 }
772 1 }
773 1 */
774 1 CML0=TML2+0X20;
775 1 if(CML0<TML2)
776 1 CMH0=TMH2+1+0X4E;
777 1 else
778 1 CMH0=TMH2+0X4E;
779 1 }
780
781 main()
782 {
783 1 TMOD=0x22; //定时器1,方式2;定时器0,方式3,两个8位定时器;
784 1 TL1=0XFD; //波特率19200
785 1 TH1=0XFD;
786 1 TR1=1; //启动定时器
787 1 TMOD=0x23; //定时器0,方式3,两个8位定时器;
788 1 TR1=0;
789 1 TF1=0;
790 1 S0CON=0XF8; //串口方式3,SM2=1,REN=1,TB8=1,RB8=0,TI=0,RI=0
791 1 // IP1=0X03; //CT0、CT1高优先级
792 1 IP0=0X98; //S0=1,T1=1
793 1 ES0=1; //开串口中断
794 1 // ET0=1;
795 1 ET1=1;
796 1 // EAD=1; //AD中断允许
797 1 // ES1=1; //I2C
798 1 EA=1; //中断总允许
C51 COMPILER V7.06 TEMPOSC2 07/11/2005 13:44:54 PAGE 14
799 1 start_t2();
800 1 urgent_stop=0;
801 1 osc_err=0;
802 1 err_ok=0;
803 1 err=0;
804 1 BEGIN:
805 1 if(urgent_stop==1)
806 1 {
807 2 urgent_stop=0;
808 2 err_ok=0;
809 2 EX1=1;
810 2 EX0=1;
811 2 }
812 1 CTCON=0x00;
813 1 IEN1=0x00;
814 1 COM=0X36;
815 1 COUNT0=0XA0;
816 1 COUNT0=0X0F; //启动横摆脉冲 1K
817 1 COM=0X76;
818 1 COUNT1=0x00;
819 1 COUNT1=0x00;
820 1 COM=0XB6;
821 1 COUNT2=0x00;
822 1 COUNT2=0x00;
823 1 static_out1=0;
824 1 static_out0=0;
825 1 gate=0; //关门控
826 1 osc_enable=1; //横摆使能
827 1 osc_dir=0; //横摆方向,0-左,1-右
828 1 osc_out=1; //横摆输出
829 1 work=0;
830 1 receive_p_out=0;
831 1 receive_p_in=0;
832 1 called=0;
833 1 start=0;
834 1 new_sector=0;
835 1 in_sector=0;
836 1 nonce_sec=0;
837 1 sec_center=0;
838 1 sec_change=0; //区间过渡时调整标志
839 1 c_change=0; //区间过渡时调整次数
840 1 temp_c_change=0;
841 1 K4=0;
842 1 start_osc=0;
843 1 osc_started=0;
844 1 osc_ok=0;
845 1 t_edge=0; //0-左边缘 1-右边缘
846 1 c_t42=0;
847 1 share=0; //启动横摆标志
848 1 stop_osc=0;
849 1 decrease=0;
850 1 decreased=0; //衰减标志
851 1 decrease_ok=0;
852 1 to_begin=0;
853 1
854 1 need_para=0;
855 1 POINTER0=0;
856 1 SSUM=0;
857 1 S_ANSW=0;
858 1 POINTER1=0;
859 1 RSUM=0;
860 1 r_byte_nums=4;
C51 COMPILER V7.06 TEMPOSC2 07/11/2005 13:44:54 PAGE 15
861 1 ans=0;
862 1 send=0;
863 1 resend=0;
864 1
865 1 osc_l=0;
866 1 osc_r=0;
867 1 center_excursion=0; //横摆中心偏移标志(DC41)
868 1 center_change=0; //自动横摆未开时,调整中心
869 1 breadth_add=0;
870 1 breadth_dec=0;
871 1 osc_add=0; //摆宽增加次数
872 1 osc_dec=0;
873 1 osc=0;
874 1 judge_ok=0;
875 1 motor_stop=0;
876 1
877 1 CML0=TML2+0X20;
878 1 if(CML0<TML2)
879 1 CMH0=TMH2+1+0X4E;
880 1 else
881 1 CMH0=TMH2+0X4E; //20ms
882 1 EX1=1;
883 1 EX0=1;
884 1 while(start==0) //等待过程中,接受点名和参数
885 1 {
886 2 if(called==1)
887 2 {
888 3 ini_sbuf(M_main,infor,S_ANSW,cross_machine,0,0);
889 3 s_byte_nums=get_byte_nums(infor);
890 3 TR_noans();
891 3 called=0;
892 3 }
893 2
894 2 if(receive_p_out==1)
895 2 {
896 3 point=&pp.k4;
897 3 for(p_sec=0;p_sec<14;p_sec++)
898 3 *(point+p_sec)=rbuffer[p_sec*2+2]*256+rbuffer[p_sec*2+3];
899 3 ini_sbuf(M_main,answer,S_ANSW,0,0,0);
900 3 s_byte_nums=4;
901 3 TR_noans();
902 3 receive_p_out=0;
903 3 }
904 2
905 2 if(receive_p_in==1)
906 2 {
907 3 point=&pp.x[nonce_sec][0];
908 3 for(p_sec=0;p_sec<6;p_sec++)
909 3 *(point+p_sec)=rbuffer[p_sec*2+3]*256+rbuffer[p_sec*2+4];
910 3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -