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