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

📄 cdle-j20_main.lst

📁 单片机C语言教程 初学单片机的非常实用.
💻 LST
字号:
C51 COMPILER V7.01  CDLE_J20_MAIN                                                          07/06/2003 22:51:48 PAGE 1   


C51 COMPILER V7.01, COMPILATION OF MODULE CDLE_J20_MAIN
OBJECT MODULE PLACED IN CDLE-J20_Main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE CDLE-J20_Main.c BROWSE DEBUG OBJECTEXTEND TABS(2)

stmt level    source

   1          /*----------------------------------------
   2          CDLE-J20_Main.c
   3          
   4          20个继电器控制电路
   5            用I/O口20线加三极管驱动20个继电器
   6          
   7          
   8          Copyright 2003 http://cdle.yeha.net 
   9                         http://cdle.126.com
  10          All rights reserved.    
  11              明浩 E-mail: pnzwzw@163.com
  12          ----------------------------------------*/
  13          
  14          #include <AT89X51.h>
  15          
  16          static unsigned char data CN[4];
  17          static unsigned char data CT;
  18          unsigned char code TS[8] = {1,2,4,8,16,32,64,128};
  19          
  20          void main(void)
  21          {
  22   1        void InitCom(unsigned char BaudRate);
  23   1        void ComOutChar(unsigned char OutData);
  24   1        void CSToOut(void);
  25   1        void CNToOut(void);
  26   1        unsigned int a;
  27   1        
  28   1        P0 = 0;
  29   1        P1 = 0; 
  30   1        P2 = 0; //IO口清零
  31   1        CT = 0; //接收字符序列
  32   1        CN[1] = 0;
  33   1        CN[2] = 51;
  34   1        CN[3] = 51;
  35   1        CN[4] = 0;
  36   1        InitCom(6); //设置波特率为9600 1-8波特率300-57600
  37   1        EA = 1; 
  38   1        ES = 1; //开串口中断
  39   1        do
  40   1          { 
  41   2            for (a=0; a<30000; a++)
  42   2              P3_6 = 1;
  43   2            for (a=0; a<30000; a++) //指示灯闪动
  44   2              P3_6 = 0;
  45   2          }
  46   1        while(1);
  47   1      }
  48          
  49          
  50          //串口初始化 晶振为11.0592M 方式1 波特率300-57600
  51          void InitCom(unsigned char BaudRate)
  52          {
  53   1        unsigned char THTL;
  54   1        switch (BaudRate)
  55   1          {
C51 COMPILER V7.01  CDLE_J20_MAIN                                                          07/06/2003 22:51:48 PAGE 2   

  56   2            case 1: THTL = 64; break; //波特率300
  57   2            case 2: THTL = 160; break; //600
  58   2            case 3: THTL = 208; break; //1200
  59   2            case 4: THTL = 232; break; //2400
  60   2            case 5: THTL = 244; break; //4800
  61   2            case 6: THTL = 250; break; //9600
  62   2            case 7: THTL = 253; break; //19200
  63   2            case 8: THTL = 255; break; //57600
  64   2            default: THTL = 208;
  65   2          }
  66   1        SCON = 0x50; //串口方式1,允许接收
  67   1        TMOD = 0x20; //定时器1定时方式2
  68   1        TCON = 0x40; //设定时器1开始计数
  69   1        TH1 = THTL;
  70   1        TL1 = THTL;
  71   1        PCON = 0x80; //波特率加倍控制,SMOD位
  72   1        RI = 0; //清收发标志
  73   1        TI = 0;
  74   1        TR1 = 1; //启动定时器
  75   1      }
  76          
  77          //向串口输出一个字符(非中断方式)
  78          void ComOutChar(unsigned char OutData)
  79          {
  80   1        SBUF = OutData; //输出字符
  81   1        while(!TI); //空语句判断字符是否发完
  82   1        TI = 0; //清TI
  83   1      }
  84          
  85          //串口接收中断
  86          void ComInINT(void) interrupt 4 using 1
  87          {
  88   1        if (RI) //判断是不是收完字符
  89   1          {
  90   2            if (CT>3)
  91   2              {
  92   3                CT = 0; //收完一组数据,序列指针清零
  93   3                CN[0] = 0;
  94   3                CN[1] = 51;
  95   3                CN[2] = 51;
  96   3                CN[3] = 0;  
  97   3              }
  98   2            CN[CT] = SBUF;
  99   2            CT++; 
 100   2            RI = 0; //RI清零
 101   2            if (CN[0]==0x61 && CN[3]==0x61) //用aXXa的简单方式保证接收的可靠性,可以满足要求
 102   2              {
 103   3                CSToOut();    //收到的数据格式正确时,调用控制输出函数              
 104   3              }
 105   2          }
 106   1      }
 107          
 108          //根据全局变量输出相应的控制信号
 109          void CSToOut(void)
 110          {
 111   1        unsigned char data a;
 112   1        unsigned int data b;
 113   1        switch(CN[1])  //aXXa的格式定义是第一个X为端口0为P2,1为P0,2为P1,3为关闭所用(同时要第2个X为3,XX=33)
 114   1          {           //XX=44为测试用,大于4则为无效数据,
 115   2            case 0:         //第一个X小于3时,第二个X为要输出的数据。
 116   2              P2 = CN[2];
 117   2              break;
C51 COMPILER V7.01  CDLE_J20_MAIN                                                          07/06/2003 22:51:48 PAGE 3   

 118   2            case 1:
 119   2              P0 = CN[2];
 120   2              break;
 121   2            case 2:
 122   2              P1 = CN[2]; 
 123   2              break;
 124   2            case 3:
 125   2              P0 = 0;
 126   2              P1 = 0;
 127   2              P2 = 0;
 128   2              break;
 129   2            case 4:
 130   2              for (a=0; a<8; a++)
 131   2                {
 132   3                  P2 = TS[a];
 133   3                  for (b=0; b<50000; b++);
 134   3                }
 135   2              P2 = 0;
 136   2              for (a=0; a<8; a++)
 137   2                {
 138   3                  P0 = TS[a];
 139   3                  for (b=0; b<50000; b++);
 140   3                }
 141   2              P0 = 0;
 142   2              for (a=0; a<4; a++)
 143   2                {
 144   3                  P1 = TS[a];
 145   3                  for (b=0; b<50000; b++);
 146   3                }
 147   2              P1 = 0;
 148   2              break;
 149   2          }
 150   1        CNToOut();
 151   1      }
 152          
 153          void CNToOut(void)
 154          {
 155   1        ComOutChar(CN[0]);
 156   1        ComOutChar(CN[1]);
 157   1        ComOutChar(CN[2]);
 158   1        ComOutChar(CN[3]);  
 159   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    483    ----
   CONSTANT SIZE    =      8    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      5       3
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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