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

📄 comint.lst

📁 压缩包中包括多个常用的汇编
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V6.12  COMINT                                                                 09/11/2005 10:58:55 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE COMINT
OBJECT MODULE PLACED IN E:\C51PRJ\COMINT\COMINT.OBJ
COMPILER INVOKED BY: d:\keil\c51\BIN\C51.EXE E:\C51PRJ\COMINT\COMINT.C DB SB OE

stmt level    source

   1          /****************************************************************************/
   2          /*                                                                          */
   3          /*                Copyright (c) 2005, 老树工作室                            */
   4          /*                     All rights reserved.                                 */
   5          /*                                                                          */
   6          /*      http://www.saintone.net      Email:hxm0902@163.com                  */
   7          /*      QQ:112431149                 Tel:010-62966630                       */
   8          /*                                                                          */
   9          /****************************************************************************/
  10          /****************************************************************************/
  11          /* 文件名:comint.c                                                         */
  12          /* 版  本:Version 1.0                                                      */
  13          /* 描  述:串行口中断演示代码                                               */
  14          /*                                                                          */
  15          /* 作  者:spot                                                             */
  16          /* 函  数:                                                                 */
  17          /*         ext1_int_proc                                                    */
  18          /*         system_init                                                      */
  19          /*                                                                          */
  20          /* 历史记录:                                                               */
  21          /*  spot          2005-07-10     Creat Inital version. (Version 1.0)        */
  22          /****************************************************************************/
  23          
  24          #include <reg52.h>
  25          #include <absacc.h>
  26          #include <intrins.h>
  27          #include <string.h>
  28          
  29          #define MAX_RINTL        8           /* 串口接收缓冲区长度   */
  30          typedef unsigned char u_char;
  31          typedef unsigned int  u_int;
  32          u_char  data  pint_buf[MAX_RINTL];   /* 串口接收缓冲区       */
  33          u_char  data  pint_read;             /* 串口缓冲区读指针     */
  34          u_char  data  pint_write;            /* 串口缓冲区写指针     */
  35          u_char  data  psend_int;             /* 串口发送允许标志     */
  36          
  37          char str_test[25]  = "MCS51 COM INTERRUPT:";
  38          char str_hello[10] = "HELLO";
  39          char str_world[10] = "WORLD";
  40          
  41          /* 串口中断服务程序,使用第3组寄存器 */
  42          void com_int_proc(void) interrupt 4 using 3
  43          {
  44   1          u_char temp;
  45   1          u_char temp1;
  46   1      
  47   1          if (TI == 1)                /* 是发送中断       */
  48   1          {
  49   2              TI = 0;
  50   2              psend_int = 1;          /* 可以发送         */
  51   2          }
  52   1      
  53   1          if (RI == 1)                /* 是接收中断       */
  54   1          {
  55   2              RI = 0;                 /* 清串口接收中断   */
C51 COMPILER V6.12  COMINT                                                                 09/11/2005 10:58:55 PAGE 2   

  56   2              temp1 = SBUF;
  57   2              temp  = pint_write + 1; /* 判断是否可以写入 */
  58   2              if (temp == MAX_RINTL)
  59   2              {
  60   3                  temp=0;
  61   3              }
  62   2      
  63   2              if (temp != pint_read)
  64   2              {
  65   3                  pint_buf[pint_write] = temp1; /* 读取数据 */
  66   3                  pint_write = temp;
  67   3              }
  68   2          }
  69   1      }
  70          
  71          /* 串口发送一个字节 */
  72          void com_send_command(char onebyte)
  73          {
  74   1          psend_int = 0;
  75   1          SBUF = onebyte;
  76   1          while (psend_int != 1);
  77   1      }
  78          
  79          /* 串口接收数据处理 */
  80          void com_command_receive(void)
  81          {
  82   1          u_char var1,var2;
  83   1          u_char i;
  84   1      
  85   1          var2 = pint_read;
  86   1          if (var2 != pint_write)
  87   1          {
  88   2              var1=pint_buf[var2];
  89   2              var2=var2+1;
  90   2      
  91   2              if (var2 >= MAX_RINTL)
  92   2                  var2=0;
  93   2      
  94   2              pint_read=var2;
  95   2      
  96   2              if (var1 == 0x0A)    /* 收到0x0A */
  97   2              {
  98   3                  for (i=0; i<strlen(str_hello); i++)
  99   3                  {
 100   4                      com_send_command(str_hello[i]); /* 发送字符串HELLO */
 101   4                  }
 102   3                  com_send_command(0x0D);
 103   3                  return;
 104   3              }
 105   2              if (var1 ==0x0D)     /* 收到0x0D */
 106   2              {
 107   3                  for (i=0; i<strlen(str_world); i++)
 108   3                  {
 109   4                      com_send_command(str_world[i]); /* 发送字符串WORLD */
 110   4                  }
 111   3                  com_send_command(0x0D);
 112   3                  return;
 113   3              }
 114   2          }
 115   1      }
 116          void system_init()
 117          {
C51 COMPILER V6.12  COMINT                                                                 09/11/2005 10:58:55 PAGE 3   

 118   1          u_char loop;
 119   1      
 120   1          EA = 0;         /* CPU关中断      */
 121   1          pint_read  = 0; /* 串口缓冲读指针 */
 122   1          pint_write = 0; /* 串口缓冲写指针 */
 123   1      
 124   1          SCON = 0x48;
 125   1          PCON = 0x80;
 126   1          TMOD = 0x20;
 127   1          TCON = 0x50;
 128   1          TH1  = 0xFD;    /* 波特率为19200  */
 129   1          TL1  = 0xFD;
 130   1          TR1  = 1;       /* 定时器1启动计数*/
 131   1          ES   = 1;       /* 串口开中断     */
 132   1          PS   = 0;       /* 串口低优先级   */

⌨️ 快捷键说明

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