📄 keil00.lst
字号:
793 2 break;
794 2 else
795 2 {
796 3 TX[2]=a;
797 3 TX[4]=b;
798 3 TX[5]=c;
799 3 Transmit();x++;}
C51 COMPILER V7.10 KEIL00 09/13/2007 23:16:12 PAGE 14
800 2 if(x>5)
801 2 {
802 3 ErrorNO=0x2a;
803 3 break;
804 3 }
805 2 }
806 1 Command=0;
807 1 }
808 /***********************************/
809 /*-------有无牌状态查询程序--------*/
810 /***********************************/
811 void StateB(void)
812 {
813 1 unsigned char x,y;
814 1 OPTOV=0;
815 1 Delay50ms();
816 1 BboxState(); /*查询B仓有无牌状态*/
817 1 y=0;
818 1 for(x=0;x<50;x++) /*判断50次,确定牌盒内是否有牌*/
819 1 {
820 2 if(!Back_OPTO||Count_OPTO) /*牌盒内检测是否有牌*/
821 2 y++;
822 2 }
823 1 if(y>40) /*有牌次数超过40次为有牌,否则为无牌*/
824 1 TX[5]=1;
825 1 else
826 1 TX[5]=0;
827 1 TX[2]='M';
828 1 TX[4]=0x23; /*有无牌状态返回*/
829 1 Transmit();
830 1 }
831 /******************************************/
832 void BboxState(void)
833 {
834 1 TX[2]='B'; /*B1仓有无牌查询*/
835 1 TX[4]=0x07;
836 1 Transmit();
837 1 TXok();
838 1 if(ReceivePack[5]==0)
839 1 Wupai1=0;
840 1 else
841 1 Wupai1=1;
842 1 if(ReceivePack[6]==0)
843 1 Wupai2=0;
844 1 else
845 1 Wupai2=1;
846 1 TX[2]='C'; /*B2仓有无牌查询*/
847 1 TX[4]=0x07;
848 1 Transmit();
849 1 TXok();
850 1 if(ReceivePack[5]==0)
851 1 Wupai3=0;
852 1 else
853 1 Wupai3=1;
854 1 if(ReceivePack[6]==0)
855 1 Wupai4=0;
856 1 else
857 1 Wupai4=1;
858 1 TX[6]=Wupaidata; /*B仓有无牌状态*/
859 1 }
860 /***********************************/
861 /*----------485发送程序------------*/
C51 COMPILER V7.10 KEIL00 09/13/2007 23:16:12 PAGE 15
862 /***********************************/
863 void Transmit(void)
864 {
865 1 unsigned char x;
866 1 R485cs=1; //rs485_cs
867 1 LED=0;
868 1 _nop_();
869 1 _nop_();
870 1 _nop_();
871 1 _nop_();
872 1 EA=0;
873 1 for(x=0;x<8;)
874 1 {
875 2 SBUF=TX[x++];
876 2 while(!TI)
877 2 {_nop_();}
878 2 TI=0;
879 2 }
880 1 TI=0;
881 1 RI=0;
882 1 EA=1;
883 1 LED=1;
884 1 R485cs=0;
885 1 }
886 /***************************************/
887 /* rs232中断 */
888 /***************************************/
889 void Rs232int() interrupt 4 using 0
890 {
891 1 ES=0;
892 1 if(!TI)
893 1 {
894 2 Receive();
895 2 if(ReceivePack[2]=='A')
896 2 {
897 3 if(ReceivePack[0]=='R'&&ReceivePack[1]=='B')
898 3 {
899 4 if(ReceivePack[7]==0x0d||ReceivePack[9]==0x0d)
900 4 {
901 5 LED=0;
902 5 Command=ReceivePack[4];
903 5 TX[2]='M';
904 5 TX[4]=0x21;
905 5 TX[5]=Command;
906 5 Transmit();
907 5 }
908 4 ReceivePack[2]=0;
909 4 }
910 3 }
911 2 TH0=0; /* Delay 2us */
912 2 TL0=0;
913 2 }
914 1 ES=1;
915 1 LED=1;
916 1 }
917 /*-------------------------------*/
918 /*-------接收程序----------------*/
919 /*-------------------------------*/
920 void Receive(void)
921 {
922 1 unsigned char TrReCount0;
923 1 TrReCount0=0;
C51 COMPILER V7.10 KEIL00 09/13/2007 23:16:12 PAGE 16
924 1 TR0=1;
925 1 while(TrReCount0<11)
926 1 {
927 2 if(RI)
928 2 {
929 3 ReceivePack[TrReCount0++]=SBUF;
930 3 TH0=0x0;
931 3 TL0=0x0;
932 3 RI=0;
933 3 }
934 2 else if(TF0)
935 2 break;
936 2 }
937 1 if(TrReCount0<7)
938 1 {
939 2 ReceivePack[2]=0;
940 2 }
941 1 RI=0;
942 1 TR0=0;
943 1 TF0=0;
944 1 }
945 /**********************************/
946 void Delay50ms(void)
947 {
948 1 unsigned char i,Count0;
949 1 for(i=0;i<45;i++)
950 1 {
951 2 for(Count0=0;Count0<0xff;Count0++)
952 2 {
953 3 _nop_();
954 3 }
955 2 }
956 1 }
957 /**************************************************************/
958 void Test1(void)
959 {
960 1 OPTOV=0; /*开传感器电源*/
961 1 Delay50ms();
962 1 while(1)
963 1 {
964 2 if(!Back_OPTO) /*牌盒内有牌时传牌电机转动,LED亮*/
965 2 {
966 3 LED=0;
967 3 Back_motor=0;
968 3 }
969 2 else if(Count_OPTO) /*计数器有牌时出牌电机转动,LED亮*/
970 2 {
971 3 LED=0;
972 3 Front_motor=0;
973 3 }
974 2 else /*否则无动作*/
975 2 {
976 3 LED=1; //
977 3 Back_motor=1; //
978 3 Front_motor=1;
979 3 }
980 2 }
981 1 }
982 /**************************************************************/
983 void Test2(void)
984 {
985 1 unsigned char i;
C51 COMPILER V7.10 KEIL00 09/13/2007 23:16:12 PAGE 17
986 1 i=0;
987 1 OPTOV=0; /*开传感器电源*/
988 1 Delay50ms();
989 1 while(!KEY) /*按键3秒以上为转动90度,3秒以下为发牌3张*/
990 1 {
991 2 Delay50ms(); //@
992 2 if(!KEY) //@
993 2 {
994 3 if(i<200) //@
995 3 {
996 4 i++;
997 4 } //@
998 3 else break;
999 3 } //@
1000 2 else break; //@
1001 2 } //@
1002 1 if(i>15) //*转动测试:按键转90'*/
1003 1 {
1004 2 BoxNO++; //
1005 2 if(BoxNO==5) //
1006 2 {
1007 3 BoxNO=1;
1008 3 } //
1009 2 Turn();} //
1010 1 if(i>1)
1011 1 {
1012 2 if(i<15) /*发牌测试:按键发3张*/
1013 2 {
1014 3 Card_data=3; //
1015 3 OutCard();
1016 3 } //
1017 2 }
1018 1 OPTOV=1; /*关传感器电源*/
1019 1 }
1020 /***********************************/
1021 /* 初始化 */
1022 /***********************************/
1023 void Init(void)
1024 {
1025 1 IE0=0;
1026 1 TMOD=0x20;
1027 1 PCON=0x00;
1028 1 SCON=0x50; /*SCON=0xf0;串口为方式3,单机通讯*/
1029 1 TH1=0x0fd; /* 9.6k */
1030 1 TL1=0x0fd;
1031 1 TH0=0x0; /* Delay-2ms */
1032 1 TL0=0x0;
1033 1 TH2=0x0; /* Delay */
1034 1 TL2=0x0;
1035 1 TR0=0; /* 关闭定时器0 */
1036 1 TR1=1; /* 允许定时器1 */
1037 1 IT0=1; /* 中断0边沿触发方式 */
1038 1 ES=1;
1039 1 EA=1;
1040 1 R485cs=0;
1041 1 P2=0xff;
1042 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2119 ----
CONSTANT SIZE = ---- ----
C51 COMPILER V7.10 KEIL00 09/13/2007 23:16:12 PAGE 18
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 39 23
IDATA SIZE = ---- ----
BIT SIZE = 7 9
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -