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

📄 serial.lst

📁 C51单片机的C语言例程,可实现定时器中断及其时钟功能的源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:

  36      =1  extern char *strrchr (const char *s, char c);
  37      =1  extern int strrpos (const char *s, char c);
  38      =1  
  39      =1  extern int strspn (char *s, char *set);
  40      =1  extern int strcspn (char *s, char *set);
  41      =1  extern char *strpbrk (char *s, char *set);
  42      =1  extern char *strrpbrk (char *s, char *set);
  43      =1  extern char *strstr  (char *s, char *sub);
  44      =1  extern char *strtok  (char *str, const char *set);
  45      =1  
  46      =1  extern char memcmp (void *s1, void *s2, int n);
  47      =1  extern void *memcpy (void *s1, void *s2, int n);
  48      =1  extern void *memchr (void *s, char val, int n);
  49      =1  extern void *memccpy (void *s1, void *s2, char val, int n);
  50      =1  extern void *memmove (void *s1, void *s2, int n);
  51      =1  extern void *memset  (void *s, char val, int n);
  52      =1  #pragma RESTORE
  53      =1  
  54      =1  #endif
   4          #define TBUF_SIZE       256             /* 这两行不要改动 */
   5          #define RBUF_SIZE       256             
   6          
   7          static xdata unsigned char tbuf [TBUF_SIZE];
   8          static xdata unsigned char rbuf [RBUF_SIZE];
   9          static xdata unsigned char t_in = 0;
  10          static xdata unsigned char t_out = 0;
  11          static xdata unsigned char t_disabled = 0;
  12          static xdata unsigned char r_in = 0;
  13          static xdata unsigned char r_out = 0;
  14          
  15          /* 串行口中断服务函数 */
  16          static void com_isr (void) interrupt 4 using 2  {
  17   1      if (RI != 0) {          /* 接收处理 */
  18   2                RI = 0;       
  19   2                if ((r_in + 1) != r_out)
  20   2                  rbuf [r_in++] = SBUF;
  21   2              }
  22   1              
  23   1              if (TI != 0) {      /* 发送处理 */
  24   2                TI = 0;       
  25   2                if (t_in != t_out)
  26   2                  SBUF = tbuf [t_out++];
  27   2                else
  28   2                  t_disabled = 1;
  29   2      }       
  30   1      }
  31          
  32          /* 串行口初始化函数 */
  33          void com_initialize (void) {   
  34   1      com_baudrate (57600);   /* 设定波特率 */
  35   1              INT_DISABLE;
  36   1              t_in = 0;                            /* 清零串行口缓冲器 */
  37   1              t_out = 0;
  38   1              t_disabled = 1;
  39   1              r_in = 0;
  40   1              r_out = 0;      
  41   1              SM0 = 0; SM1 = 1;               /* 设定串行口工作于方式1 */
  42   1              SM2 = 0;
  43   1              REN = 1;                                /* 允许接收 */  
  44   1              TI = 0;                             /* 清零串行口中断标志位 */
  45   1              RI = 0;                                 
  46   1              ES = 1;                             /* 允许串行口中断 */
C51 COMPILER V7.50   SERIAL                                                                04/01/2006 14:08:06 PAGE 5   

  47   1              PS = 0;                             /* 设置串行口中断优先级 */  
  48   1              INT_ENABLE;
  49   1      }
  50          
  51          /* 波特率设置函数 */
  52          void com_baudrate (unsigned baudrate) {
  53   1              INT_DISABLE;
  54   1              TI = 0;                                 /* 清零发送中断标志 */
  55   1              t_in = 0;                               /* 清零发送缓冲区 */
  56   1              t_out = 0;
  57   1              t_disabled = 1;             /* 禁止发送 */
  58   1              TR1 = 0;                                        /* 停止T1 */
  59   1              ET1 = 0;                                        /* 禁止T1中断 */
  60   1              PCON |= 0x80;                   /* 设置SMOD=1: 波特率加倍 */    
  61   1              TMOD &= ~0xF0;                  /* 设置T1工作于方式2 */
  62   1              TMOD |= 0x20;                           
  63   1              TH1 = (unsigned char) (256 - (TCLK / (16L * 12L * baudrate)));  
  64   1              TR1 = 1;                                /* start timer 1 */     
  65   1              INT_ENABLE;
  66   1      }
  67          
  68          /* 字符发送函数 */
  69          char com_putchar (unsigned char c) {
  70   1      if ((TBUF_SIZE - com_tbuflen ()) <= 2) /* 若缓冲区满,则返回出错标志 */
  71   1                return (-1);
  72   1      INT_DISABLE;
  73   1              tbuf [t_in++] = c;                     /* 数据送往发送缓冲区 */
  74   1              if (t_disabled) {               
  75   2                t_disabled = 0;
  76   2                TI = 1;                       
  77   2              }
  78   1              INT_ENABLE;
  79   1              return (0);
  80   1      }
  81          
  82          /* 字符串发送函数 */
  83          char com_puts (char *s) {
  84   1      if ((TBUF_SIZE - com_tbuflen ()) <= strlen (s))  
  85   1                return (-1);
  86   1      INT_DISABLE;
  87   1              for (; *s != '\0'; s++)
  88   1                tbuf [t_in++] = *s;
  89   1              if (t_disabled) {               
  90   2                t_disabled = 0;
  91   2                TI = 1;                       
  92   2              }
  93   1              INT_ENABLE;     
  94   1              return (0);
  95   1      }
  96          
  97          /* 字符接收函数 */
  98          int com_getchar (void) {
  99   1              xdata int c;
 100   1              if (com_rbuflen () == 0)
 101   1                return (-1);  
 102   1              INT_DISABLE;
 103   1              c = rbuf [r_out++];
 104   1              INT_ENABLE;     
 105   1              return (c);
 106   1      }
 107          
 108          unsigned char com_rbuflen (void) { /* 计算接收缓冲区长度 */
C51 COMPILER V7.50   SERIAL                                                                04/01/2006 14:08:06 PAGE 6   

 109   1                      return (r_in - r_out);
 110   1      }
 111          
 112          unsigned char com_tbuflen (void) { /* 计算发送缓冲区长度 */
 113   1                  return (t_in - t_out);
 114   1      }
C51 COMPILER V7.50   SERIAL                                                                04/01/2006 14:08:06 PAGE 7   

NAME                                    CLASS   MSPACE  TYPE    OFFSET  SIZE
====                                    =====   ======  ====    ======  ====


com_getchar. . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  c. . . . . . . . . . . . . . . . . .  AUTO     XDATA  INT      0000H  2
EA . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00AFH  1
t_disabled . . . . . . . . . . . . . .  STATIC   XDATA  U_CHAR   0000H  1
size_t . . . . . . . . . . . . . . . .  TYPEDEF  -----  U_INT    -----  2
com_rbuflen. . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
com_tbuflen. . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
ES . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00ACH  1
RI . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0098H  1
TI . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0099H  1
PS . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00BCH  1
r_in . . . . . . . . . . . . . . . . .  STATIC   XDATA  U_CHAR   0001H  1
r_out. . . . . . . . . . . . . . . . .  STATIC   XDATA  U_CHAR   0002H  1
t_in . . . . . . . . . . . . . . . . .  STATIC   XDATA  U_CHAR   0003H  1
t_out. . . . . . . . . . . . . . . . .  STATIC   XDATA  U_CHAR   0004H  1
rbuf . . . . . . . . . . . . . . . . .  STATIC   XDATA  ARRAY    0005H  256
SBUF . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0099H  1
PCON . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0087H  1
tbuf . . . . . . . . . . . . . . . . .  STATIC   XDATA  ARRAY    0105H  256
TMOD . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0089H  1
ET1. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00ABH  1
TH1. . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   008DH  1
_com_baudrate. . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  baudrate . . . . . . . . . . . . . .  * REG *  DATA   U_INT    0006H  2
_com_puts. . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  s. . . . . . . . . . . . . . . . . .  AUTO     DATA   PTR      0000H  3
SM0. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      009FH  1
SM1. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      009EH  1
SM2. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      009DH  1
TR1. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      008EH  1
com_initialize . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
REN. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      009CH  1
com_isr. . . . . . . . . . . . . . . .  STATIC   CODE   PROC     0000H  -----
_strlen. . . . . . . . . . . . . . . .  EXTERN   CODE   PROC     -----  -----
_com_putchar . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  c. . . . . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0000H  1


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    459    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =    517       2
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       4
   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 + -