📄 osc2_0929.lst
字号:
693 4 osc_ok=0;
694 4 }
695 3 }
696 2 CTCON=CTCON|0x08;
697 2 IEN1=IEN1|0x02;
698 2 }
699 1 }
700
701 void CT1_int (void) interrupt 7 //整个摆宽
702 {
703 1 CTI1=0;
704 1 gate=0; //out1、out2门控信号
705 1 CTCON=CTCON&0xF3;
706 1 if(sec_center==1)
707 1 {
708 2 out2=2*out1;
709 2 COM=0XB6;
710 2 COUNT2=out2%256;
711 2 COUNT2=out2/256;
712 2 sec_center=0;
713 2 if(new_sector==1)
714 2 {
715 3 new_sector=0;
716 3 sec_change=1;
717 3 }
718 2 }
719 1 osc_dir=~osc_dir; //换横摆方向
720 1 t_edge=~t_edge; //换边缘标志
721 1 osc_out=~osc_out; //横摆输出
722 1 if(decreased==0)
723 1 {
724 2 if(center_excursion==1)
725 2 {
726 3 if(judge_ok==0)
727 3 {
728 4 if(t_edge==0&&excursion_dir==1||t_edge==1&&excursion_dir==0)//左边缘、向右偏或右边缘、向左偏
729 4 {
730 5 out1=out1+n_dc41;
731 5 out2=out2+n_dc41;
732 5 }
733 4 if(t_edge==0&&excursion_dir==0||t_edge==1&&excursion_dir==1)
734 4 {
735 5 if(out1>n_dc41)
736 5 {
737 6 out1=out1-n_dc41;
C51 COMPILER V7.06 OSC2_0929 03/27/2006 17:02:25 PAGE 13
738 6 out2=out2-n_dc41;
739 6 }
740 5 }
741 4 judge_ok=1;
742 4 }
743 3 else
744 3 {
745 4 if(t_edge==1&&excursion_dir==1||t_edge==0&&excursion_dir==0)
746 4 {
747 5 out1=out1-n_dc41;
748 5 out2=out2-n_dc41;
749 5 }
750 4 if(t_edge==1&&excursion_dir==0||t_edge==0&&excursion_dir==1)
751 4 {
752 5 out1=out1+n_dc41;
753 5 out2=out2+n_dc41;
754 5 }
755 4 judge_ok=0;
756 4 center_excursion=0;
757 4 }
758 3 COM=0X76;
759 3 COUNT1=out1%256;
760 3 COUNT1=out1/256;
761 3 COM=0XB6;
762 3 COUNT2=out2%256;
763 3 COUNT2=out2/256;
764 3 osc_enable=0;
765 3
766 3 }
767 2 }
768 1 IEN1=IEN1|0X10; //允许CM0,边缘停留时间
769 1 }
770
771 void CM0_int (void) interrupt 11 //边缘停留时间
772 {
773 1 CMI0=0;
774 1 c_t42++;
775 1 if(t_edge==0&&c_t42==c_t42_l||t_edge==1&&c_t42==c_t42_r) //左边缘
776 1 {
777 2 IEN1=IEN1&0XEF; //禁止CM0
778 2 CTCON=CTCON|0x02; //CT0下降沿
779 2 IEN1=IEN1|0X01; //允许CT0
780 2 gate=1;
781 2 osc_out=~osc_out; //边缘停留时间结束
782 2 c_t42=0;
783 2 }
784 1 CML0=TML2+0X20;
785 1 if(CML0<TML2)
786 1 CMH0=TMH2+1+0X4E;
787 1 else
788 1 CMH0=TMH2+0X4E;
789 1 }
790
791 void CM1_INT (void) interrupt 12
792 {
793 1 CMI1=0;
794 1 IEN1=IEN1&0XDF; //CM1
795 1 c_cm1++;
796 1 if(c_cm1==40)
797 1 {
798 2 COM=0X36;
799 2 COUNT0=0XA0;
C51 COMPILER V7.06 OSC2_0929 03/27/2006 17:02:25 PAGE 14
800 2 COUNT0=0X0F;
801 2 c_cm1=0;
802 2 }
803 1 else
804 1 {
805 2 CML1=TML2+0X50; //50ms
806 2 if(CML1>TML2)
807 2 CMH1=TMH2+1+0XC3;
808 2 else
809 2 CMH1=TMH2+0XC3;
810 2 IEN1=IEN1|0X20; //CM1
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 ET1=1;
828 1 EA=1; //中断总允许
829 1 start_t2();
830 1 urgent_stop=0;
831 1 osc_err=0;
832 1 err_ok=0;
833 1 err=0;
834 1 BEGIN:
835 1 if(urgent_stop==1)
836 1 {
837 2 urgent_stop=0;
838 2 err_ok=0;
839 2 EX1=1;
840 2 EX0=1;
841 2 }
842 1 CTCON=0x00;
843 1 IEN1=0x00;
844 1 // COM=0X36;
845 1 // COUNT0=0XA0;
846 1 // COUNT0=0X0F; //启动横摆脉冲 1K
847 1 // COM=0X76;
848 1 // COUNT1=0x00;
849 1 // COUNT1=0x00;
850 1 // COM=0XB6;
851 1 // COUNT2=0x00;
852 1 // COUNT2=0x00;
853 1 gate=0; //关门控
854 1 static_out1=0;
855 1 static_out0=0;
856 1 osc_enable=1; //横摆使能
857 1 osc_dir=0; //横摆方向,0-左,1-右
858 1 osc_out=1; //横摆输出
859 1 work=0;
860 1 receive_p_out=0;
861 1 receive_p_in=0;
C51 COMPILER V7.06 OSC2_0929 03/27/2006 17:02:25 PAGE 15
862 1 called=0;
863 1 start=0;
864 1 new_sector=0;
865 1 in_sector=0;
866 1 nonce_sec=0;
867 1 sec_center=0;
868 1 sec_change=0; //区间过渡时调整标志
869 1 c_change=0; //区间过渡时调整次数
870 1 temp_c_change=0;
871 1 K4=0;
872 1 start_osc=0;
873 1 osc_ok=0;
874 1 t_edge=0; //0-左边缘 1-右边缘
875 1 c_t42=0;
876 1 share=0; //启动横摆标志
877 1 stop_osc=0;
878 1 decrease=0;
879 1 decreased=0; //衰减标志
880 1 decrease_ok=0;
881 1 to_begin=0;
882 1
883 1 need_para=0;
884 1 POINTER0=0;
885 1 SSUM=0;
886 1 S_ANSW=0;
887 1 POINTER1=0;
888 1 RSUM=0;
889 1 r_byte_nums=4;
890 1 ans=0;
891 1 send=0;
892 1 resend=0;
893 1
894 1 osc_l=0;
895 1 osc_r=0;
896 1 center_excursion=0; //横摆中心偏移标志(DC41)
897 1 center_change=0; //自动横摆未开时,调整中心
898 1 breadth_add=0;
899 1 breadth_dec=0;
900 1 osc_add=0; //摆宽增加次数
901 1 osc_dec=0;
902 1 osc=0;
903 1 judge_ok=0;
904 1 motor_stop=0;
905 1 c_cm1=0;
906 1
907 1 CML0=TML2+0X20;
908 1 if(CML0<TML2)
909 1 CMH0=TMH2+1+0X4E;
910 1 else
911 1 CMH0=TMH2+0X4E; //20ms
912 1 write_8574(0xF0);
913 1 EX1=1;
914 1 EX0=1;
915 1 while(start==0) //等待过程中,接受点名和参数
916 1 {
917 2 if(called==1)
918 2 {
919 3 ini_sbuf(M_main,infor,com_calling,S_ANSW,0,0);
920 3 s_byte_nums=get_byte_nums(infor);
921 3 TR_noans();
922 3 called=0;
923 3 }
C51 COMPILER V7.06 OSC2_0929 03/27/2006 17:02:25 PAGE 16
924 2
925 2 if(receive_p_out==1)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -