⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 366j.lst

📁 该程序可作为386的接警程序使用
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V6.10  366J                                                                   04/18/2006 16:01:28 PAGE 1   


C51 COMPILER V6.10, COMPILATION OF MODULE 366J
OBJECT MODULE PLACED IN e:\安\366\程序\下简\366j.OBJ
COMPILER INVOKED BY: E:\董\软件\lope\kc51\bin\C51.exe e:\安\366\程序\下简\366j.c SMALL OT(0,SIZE) SB OR DB OE

stmt level    source

   1          //----------------------------------------晶振480K 波特率7500--------------------------------------------/
             -/
   2          //-----------------------------------简化版,不在24C02存储数据,仅仅简单收发-------------------------------/
             -/
   3          //-----------------------------------------2006年2月14日 董凯宁------------------------------------------/
             -/ 
   4            #include "string.h"
   5            #include <reg52.h>
   6            #include <intrins.h>
   7            #include <math.h>
   8          //---------------------------------------定义部分----------------------------------------------
   9          //P1
  10          sbit MT8880_D0=       P1^4;  //OUT/IN  双向数据总线                                5脚
  11          sbit MT8880_D1=       P1^5;  //OUT/IN  双向数据总线                                6脚  
  12          sbit MT8880_D2=       P1^6;  //OUT/IN  双向数据总线                                7脚
  13          sbit MT8880_D3=       P1^7;  //OUT/IN  双向数据总线                                8脚 
  14          //P3
  15          sbit MT8880_RW=       P3^2;  //OUT      读写选择控制                                12脚  
  16          sbit MT8880_CP2=      P3^3;  //OUT     8880的系统时钟                               13脚 
  17          sbit MT8880_CS=       P3^4;  //OUT                                                 14脚 
  18          sbit MT8880_RS0=      P3^5;  //OUT     变低时,进入现场监听状态                    15脚
  19          
  20          //P2
  21          sbit ToneTest=        P2^2;  //IN      峰值为3.5V的铃流脉冲信号检测                 23脚
  22          sbit J_LineToPhone=   P2^3;  //OUT     报警时,驱动继电器切断本地电话和外线的联系,同时模拟摘机   24脚
  23          
  24          int JISHU; 
  25          unsigned char i;
  26          typedef unsigned char Number[10];      //定义一个10字节长的数组类型,用来放6组电话,一组密码,次数振铃,报
             -警延迟时间
  27          
  28          //--------------------------------------函数部分-----------------------------------------------
  29          
  30          void DELAY_50ms()
  31          {
  32   1       EA=0;
  33   1       TMOD=0; //13位不重装定时器方式
  34   1       TL0=48;
  35   1       TH0=24;
  36   1       TCON=0;
  37   1       TR0=1; //定时器0启动,定时器1不启动
  38   1       wait: if(TF0==0)
  39   1            {
  40   2             _nop_();
  41   2             goto wait;
  42   2            }   
  43   1       TCON=0;//停动定时器0
  44   1      }
  45          
  46          void MT8880_StatusRegister_READ()
  47          {  
  48   1        MT8880_CP2=0; 
  49   1        MT8880_RW=1;      //读状态寄存器
  50   1        MT8880_RS0=1;
  51   1        MT8880_CS=0;
C51 COMPILER V6.10  366J                                                                   04/18/2006 16:01:28 PAGE 2   

  52   1        MT8880_D0=1;         
  53   1        MT8880_D1=1;        
  54   1        MT8880_D2=1;  
  55   1        MT8880_D3=1;  
  56   1        MT8880_CP2=1; 
  57   1      }
  58          
  59          void MT8880_DataRegister_READ()
  60          {
  61   1        MT8880_CP2=0;      
  62   1        MT8880_RW=1;      //读接收数据寄存器
  63   1        MT8880_RS0=0;
  64   1        MT8880_CS=0;    //给时钟信号
  65   1        MT8880_D0=1;         
  66   1        MT8880_D1=1;        
  67   1        MT8880_D2=1;  
  68   1        MT8880_D3=1;
  69   1        MT8880_CP2=1;  //读状态寄存器值到D0-D3口  
  70   1      }
  71          
  72          void MT8880_ControlRegister_Initialize()
  73          { 
  74   1        MT8880_CP2=0; 
  75   1        MT8880_RS0=1;   //du 1  
  76   1        MT8880_RW=1;
  77   1        MT8880_CS=0; 
  78   1        MT8880_D0=1;        
  79   1        MT8880_D1=1;       
  80   1        MT8880_D2=1;  
  81   1        MT8880_D3=1; 
  82   1        MT8880_CP2=1;
  83   1        MT8880_CP2=0;
  84   1        MT8880_CS=1;
  85   1      
  86   1        MT8880_RS0=1;  //xie 1
  87   1        MT8880_RW=0;
  88   1        MT8880_CS=0;
  89   1        MT8880_D0=0;         
  90   1        MT8880_D1=0;        
  91   1        MT8880_D2=0;  
  92   1        MT8880_D3=0; 
  93   1        MT8880_CP2=1; 
  94   1        MT8880_CP2=0;
  95   1        MT8880_CS=1; 
  96   1      
  97   1        MT8880_RS0=1;  //xie2
  98   1        MT8880_RW=0; 
  99   1        MT8880_CS=0;     
 100   1        MT8880_D0=0;       
 101   1        MT8880_D1=0;        
 102   1        MT8880_D2=0;  
 103   1        MT8880_D3=0;
 104   1        MT8880_CP2=1; 
 105   1        MT8880_CP2=0;
 106   1        MT8880_CS=1;
 107   1      
 108   1        MT8880_RS0=1;  //xie3
 109   1        MT8880_RW=0; 
 110   1        MT8880_CS=0;     
 111   1        MT8880_D0=0;       
 112   1        MT8880_D1=0;        
 113   1        MT8880_D2=0;  
C51 COMPILER V6.10  366J                                                                   04/18/2006 16:01:28 PAGE 3   

 114   1        MT8880_D3=1;
 115   1        MT8880_CP2=1; 
 116   1        MT8880_CP2=0;
 117   1        MT8880_CS=1;
 118   1      
 119   1        MT8880_RS0=1;  //xie4
 120   1        MT8880_RW=0; 
 121   1        MT8880_CS=0;     
 122   1        MT8880_D0=0;       
 123   1        MT8880_D1=0;        
 124   1        MT8880_D2=0;  
 125   1        MT8880_D3=0;
 126   1        MT8880_CP2=1; 
 127   1        MT8880_CP2=0;
 128   1        MT8880_CS=1;
 129   1      
 130   1        MT8880_RS0=1;  //du 2
 131   1        MT8880_RW=1; 
 132   1        MT8880_CS=0; 
 133   1        MT8880_D0=1;         
 134   1        MT8880_D1=1;        
 135   1        MT8880_D2=1;  
 136   1        MT8880_D3=1; 
 137   1        MT8880_CP2=1;
 138   1        MT8880_CP2=0;
 139   1        MT8880_CS=1;
 140   1        
 141   1        MT8880_D0=1;  //总线复位       
 142   1        MT8880_D1=1;        
 143   1        MT8880_D2=1;  
 144   1        MT8880_D3=1;   
 145   1      }
 146          
 147          void MT8880_ControlRegister_Write()
 148          {
 149   1        MT8880_CS=1;
 150   1      
 151   1        MT8880_RW=0;      //写控制寄存器
 152   1        MT8880_RS0=1;
 153   1        MT8880_D0=1;  //使能tone输出       
 154   1        MT8880_D1=0;  //选用双音多频方式,不用CP方式      
 155   1        MT8880_D2=0;  //此脚在实际电路中未接,不管
 156   1        MT8880_D3=1;  //本次操作CRA,下一个写操作选择CRB 
 157   1        MT8880_CS=0;
 158   1        MT8880_CP2=1;//给时钟信号,写D0-D3口值到控制寄存器   
 159   1        MT8880_CP2=0;    
 160   1        MT8880_CS=1;
 161   1        
 162   1        MT8880_RW=0;   //写控制寄存器
 163   1        MT8880_RS0=1;
 164   1        MT8880_D0=0;      
 165   1        MT8880_D1=0;        
 166   1        MT8880_D2=0;  
 167   1        MT8880_D3=0; 
 168   1        MT8880_CS=0;  
 169   1        MT8880_CP2=1;  //给时钟信号,写D0-D3口值到控制寄存器   
 170   1        MT8880_CP2=0;    
 171   1        MT8880_CS=1;
 172   1        
 173   1        MT8880_D0=1;  //总线复位       
 174   1        MT8880_D1=1;        
 175   1        MT8880_D2=1;  
C51 COMPILER V6.10  366J                                                                   04/18/2006 16:01:28 PAGE 4   

 176   1        MT8880_D3=1;  
 177   1      }
 178          
 179          void MT8880_WriteOne(unsigned char SendData)  //使用入口参数,即要发送的数
 180          { 
 181   1         MT8880_CS=1;    
 182   1         MT8880_CP2=0;
 183   1         MT8880_RW=0;      //写传输数据寄存器
 184   1         MT8880_RS0=0;
 185   1      
 186   1        switch(SendData)
 187   1        {
 188   2         case 10: MT8880_D0=0; MT8880_D1=1; MT8880_D2=0; MT8880_D3=1;break; 
 189   2         case 1:  MT8880_D0=1; MT8880_D1=0; MT8880_D2=0; MT8880_D3=0;break;
 190   2         case 2:  MT8880_D0=0; MT8880_D1=1; MT8880_D2=0; MT8880_D3=0;break;
 191   2         case 3:  MT8880_D0=1; MT8880_D1=1; MT8880_D2=0; MT8880_D3=0;break;
 192   2         case 4:  MT8880_D0=0; MT8880_D1=0; MT8880_D2=1; MT8880_D3=0;break;
 193   2         case 5:  MT8880_D0=1; MT8880_D1=0; MT8880_D2=1; MT8880_D3=0;break;
 194   2         case 6:  MT8880_D0=0; MT8880_D1=1; MT8880_D2=1; MT8880_D3=0;break;
 195   2         case 7:  MT8880_D0=1; MT8880_D1=1; MT8880_D2=1; MT8880_D3=0;break;
 196   2         case 8:  MT8880_D0=0; MT8880_D1=0; MT8880_D2=0; MT8880_D3=1;break;
 197   2         case 9:  MT8880_D0=1; MT8880_D1=0; MT8880_D2=0; MT8880_D3=1;break;
 198   2         case 11: MT8880_D0=1; MT8880_D1=1; MT8880_D2=0; MT8880_D3=1;break;  // *
 199   2         case 12: MT8880_D0=0; MT8880_D1=0; MT8880_D2=1; MT8880_D3=1;break;  // #
 200   2        }
 201   1         MT8880_CS=0;    //给时钟信号,写D0-D3口值到控制寄存器
 202   1         MT8880_CP2=1;
 203   1         
 204   1         MT8880_CP2=0;
 205   1         MT8880_CS=1;
 206   1          
 207   1         MT8880_D0=1;  //写操作完后一定要总线复位       
 208   1         MT8880_D1=1;        
 209   1         MT8880_D2=1;  
 210   1         MT8880_D3=1; 
 211   1      }
 212          
 213          //------------------------------处理在一次下位机发送报警信息来过程中的读取 ,存储-------------------------
             ----------//
 214          
 215          void READ_MESSAGE()    
 216          {  
 217   1        unsigned char Number_Note=1;   //记录是第几个“下位机输入信号”
 218   1        unsigned char Number_Key;          //存储“电话机输入键值”的中间变量
 219   1        Number NUMBER;       //生成记录一次摘机过程的数组  
 220   1        JISHU=4000;          //配合晶振,等待2秒
 221   1             
 222   1        ReadStatus: MT8880_StatusRegister_READ(); 
 223   1         
 224   1         if(MT8880_D2==1)     //是否有键值生成             
 225   1          {
 226   2              MT8880_CP2=0; //停动8880总线 
 227   2              MT8880_CS=1;  //停动8880总线
 228   2           MT8880_DataRegister_READ();   //读入的一个值出现在MT8880_D0-D3
 229   2           
 230   2           if(MT8880_D3==0 & MT8880_D2==0 & MT8880_D1==0 & MT8880_D0==1)  //输入“1” 
 231   2             {Number_Key=1; }
 232   2           if(MT8880_D3==0 & MT8880_D2==0 & MT8880_D1==1 & MT8880_D0==0)  //输入“2” 
 233   2             {Number_Key=2; }
 234   2           if(MT8880_D3==0 & MT8880_D2==0 & MT8880_D1==1 & MT8880_D0==1)  //输入“3” 
 235   2             {Number_Key=3; } 
 236   2           if(MT8880_D3==0 & MT8880_D2==1 & MT8880_D1==0 & MT8880_D0==0)  //输入“4” 
C51 COMPILER V6.10  366J                                                                   04/18/2006 16:01:28 PAGE 5   

 237   2             {Number_Key=4; } 
 238   2           if(MT8880_D3==0 & MT8880_D2==1 & MT8880_D1==0 & MT8880_D0==1)  //输入“5” 
 239   2             {Number_Key=5; }
 240   2           if(MT8880_D3==0 & MT8880_D2==1 & MT8880_D1==1 & MT8880_D0==0)  //输入“6” 
 241   2             {Number_Key=6;  }
 242   2           if(MT8880_D3==0 & MT8880_D2==1 & MT8880_D1==1 & MT8880_D0==1)  //输入“7” 
 243   2             {Number_Key=7;} 
 244   2           if(MT8880_D3==1 & MT8880_D2==0 & MT8880_D1==0 & MT8880_D0==0)  //输入“8” 
 245   2             {Number_Key=8;}
 246   2           if(MT8880_D3==1 & MT8880_D2==0 & MT8880_D1==0 & MT8880_D0==1)  //输入“9” 
 247   2             {Number_Key=9; }
 248   2           if(MT8880_D3==1 & MT8880_D2==0 & MT8880_D1==1 & MT8880_D0==0)  //输入“0” 
 249   2             {Number_Key=0; }
 250   2           if(MT8880_D3==1 & MT8880_D2==0 & MT8880_D1==1 & MT8880_D0==1)  //输入“*” 
 251   2             {Number_Key=11;}
 252   2           if(MT8880_D3==1 & MT8880_D2==1 & MT8880_D1==0 & MT8880_D0==0)  //输入“#” 
 253   2             {Number_Key=12;}
 254   2             
 255   2             MT8880_CP2=0; //停动8880总线
 256   2             MT8880_CS=1;  //停动8880总线
 257   2           
 258   2          if(Number_Note>=7) // 已经处理了6次数据
 259   2              {
 260   3               J_LineToPhone=1;  //模拟挂机 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -