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

📄 uartcom2.lst

📁 此代码实现功能为:在philips P89LPC935单片机上实现红外遥(对应红外发送芯片为:HT6222)控解码接收
💻 LST
字号:
C51 COMPILER V7.09   UARTCOM2                                                              12/05/2005 10:23:19 PAGE 1   


C51 COMPILER V7.09, COMPILATION OF MODULE UARTCOM2
OBJECT MODULE PLACED IN UARTCom2.OBJ
COMPILER INVOKED BY: c:\Keil\C51\BIN\C51.EXE UARTCom2.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          
   2          /*********************************************************************/
   3          /* 模 块 名:单片机(C51)             文件名:uart_com2.c                     */
   4          /* 提交日期:2005年11月29日          作  者:金雨和                  */
   5          /* 版    本:V1.0 --Copyright(c) 2005-2006中太视讯技术有限公司       */
   6          /* 描    述:单片机(C51)串口2处理程序                                                            */
   7          /* 修改记录:                                                                                                         */
   8          /*        日  期        版本      修改人     修改内容                            */
   9          /*         1.                                                                                                                    */
  10          /*********************************************************************/
  11          #include <Reg935.h>
  12          #include "uart.h"
  13          #include "string.h"
  14          
  15          #define TxD2    INT1            //COM2数据发送脚
  16          #define RxD2    RST                     //COM2数据接收脚
  17          
  18          uchar xdata g_sndBuf[MAX_I2CDATALEN];   //数据发送缓冲
  19          uchar g_sndBufLen=20;           //数据发送缓冲长度
  20          uchar g_sndBufOffset=0;         //数据发送偏移
  21          
  22          uchar g_bitSndCnt=0;            //数据位发送计数器
  23          //uchar g_bitRcvCnt=0;          //数据位接收计数器
  24          uchar g_rcvByte=0;                      //所接收到的字节
  25          bit g_rcvStartFlag=0;           //收到起始位后,数据开始接收标志
  26          uchar g_hasRcvOneByte=9;        //是否已经完整接收到字符
  27          
  28          extern unsigned char xdata g_ucI2CSendBuf[MAX_I2CDATALEN];     //IIC数据缓存
  29          extern unsigned char xdata g_ucI2CSendBuf_Len;     //IIC数据缓存内容长度
  30          extern unsigned char xdata g_ucI2CSendBuf_offset;  //IIC缓存数据读取当前位移
  31          
  32          /*******************************************************************
  33          ** 函 数 名: UART2_Init()
  34          ** 输    入: 无
  35          ** 输    出: 无
  36          ** 描    述: UART初始化,波特率9600bit/s
  37          ** 全局变量: 无
  38          ** 调用模块: 无
  39          ** 被调模块: 
  40          **                       main           -- 主循环处理函数
  41          ** 作    者: 金雨和
  42          ** 创建日期: 2005年11月30日
  43          ** 修    改:
  44          **        日  期        版本      修改人     修改内容                            
  45          **         1.
  46          ********************************************************************/
  47          #define IR_TEST         KB0             //红外输入
  48          
  49          void UART2_Init()
  50          {   
  51   1              //P1.4脚为TxD,P1.5脚为RxD,将其设置为准双向口模式
  52   1              P1M1 = P1M1 & 0xCF;
  53   1              P1M2 = P1M2 & 0xCF;     
  54   1      
  55   1              //红外接收  仅为输入
C51 COMPILER V7.09   UARTCOM2                                                              12/05/2005 10:23:19 PAGE 2   

  56   1              P0M1 = P0M1 & 0xFE;     //Input status,set P0.0 input mode
  57   1              P0M2 = P0M2 & 0xFE;
  58   1      
  59   1              memset(g_sndBuf, 0, sizeof(g_sndBuf));
  60   1              memcpy(g_sndBuf, "this is jinyh test\r\n", 20);
  61   1      }
  62          
  63          
  64          /*******************************************************************
  65          ** 函 数 名: timer1_Init()
  66          ** 输    入: 无
  67          ** 输    出: 无
  68          ** 描    述: 初始化定时器0。
  69          ** 全局变量: 无
  70          ** 调用模块: 无
  71          ** 被调模块: 无
  72          ** 作    者: 
  73          ** 创建日期: 2005年11月30日
  74          ** 修    改:
  75          **        日  期        版本      修改人     修改内容                            
  76          **         1. 
  77          ********************************************************************/
  78          void timer1_Init()
  79          {
  80   1              /*  使能定时器0中断   1  */
  81   1          TMOD = TMOD | 0x10;
  82   1              TR1 = 1;
  83   1              ET1 = 1;
  84   1      
  85   1              //加上红外接收定时器
  86   1          //TL1  = 0x01;        //100uS
  87   1          //TH1  = 0xFF;        //定时器0 happen per 0.1MS
  88   1              
  89   1              //去掉红外接收定时器
  90   1      //    TL1  = 0xC7;        //100uS
  91   1      //    TH1  = 0xFE;        //定时器0 happen per 0.1MS
  92   1      
  93   1          TL1  = 0xDD;        //100uS
  94   1          TH1  = 0xFD;        //定时器0 happen per 0.1MS
  95   1      }
  96          
  97          
  98          /*******************************************************************
  99          ** 函 数 名: timer1_Isr()
 100          ** 输    入: 无
 101          ** 输    出: 无
 102          ** 描    述: 定时器0中断函数,每0.1ms检测是否有脉冲。
 103          ** 全局变量: 
 104          **                       g_pulseNum                     -- 脉冲数
 105          **                       g_keyPressed           -- 连续按键标志
 106          ** 调用模块: 
 107          **                       checkPulse                     -- 检测脉冲
 108          ** 被调模块: 
 109          ** 作    者: 金雨和
 110          ** 创建日期: 2005年08月25日
 111          ** 修    改:
 112          **        日  期        版本      修改人     修改内容                            
 113          **              1.
 114          ********************************************************************/
 115          void timer1_Isr() interrupt 3
 116          {
 117   1              if(IR_TEST)
C51 COMPILER V7.09   UARTCOM2                                                              12/05/2005 10:23:19 PAGE 3   

 118   1                      IR_TEST=0;
 119   1              else
 120   1                      IR_TEST=1;
 121   1      
 122   1              //开始发送字符串
 123   1              if(g_sndBufLen > 0)
 124   1              {
 125   2                      if(g_bitSndCnt == 0)
 126   2                      {
 127   3                              TxD2 = 0;
 128   3                              g_bitSndCnt++;
 129   3                      }
 130   2                      else if(g_bitSndCnt == 9)
 131   2                      {
 132   3                              TxD2 = 1;
 133   3                              g_sndBufOffset++;
 134   3                              g_sndBufLen--;
 135   3                              g_bitSndCnt = 0;
 136   3                      }
 137   2                      else
 138   2                      {
 139   3                              TxD2 = (g_sndBuf[g_sndBufOffset] >> (g_bitSndCnt-1)) & 0x01;
 140   3                              g_bitSndCnt++;
 141   3                      }
 142   2              }
 143   1      
 144   1              //接收字符串
 145   1              if(RxD2 == 0)
 146   1                      g_rcvStartFlag = 1;
 147   1      
 148   1              //开始接受
 149   1              if(g_rcvStartFlag == 1)
 150   1              {
 151   2                      if(g_hasRcvOneByte > 0)
 152   2                      {
 153   3                              if(g_hasRcvOneByte <= 8)
 154   3                              {
 155   4                                      g_rcvByte >>= 1;
 156   4                                      if(RxD2)
 157   4                                      {
 158   5                                              g_sndBuf[g_hasRcvOneByte] = '1';
 159   5                                              g_rcvByte |= 0x80;
 160   5                                      }
 161   4                                      else
 162   4                                      {
 163   5                                              g_sndBuf[g_hasRcvOneByte] = '0';                                        
 164   5                                              g_rcvByte |= 0x00;
 165   5                                      }
 166   4                              }
 167   3      
 168   3                              g_hasRcvOneByte--;
 169   3                      }
 170   2                      else
 171   2                      {
 172   3                              if(RxD2 == 1)                                           //收到停止位,正确接收到字符
 173   3                              {
 174   4                                      if(g_rcvByte == 0x0D)                   //回车键
 175   4                                      {
 176   5                                              memcpy(g_sndBuf, "\r\n", 2);
 177   5                                              g_sndBufLen = 2;
 178   5                                      }
 179   4                                      else if(g_rcvByte == 0x0A)              //换行
C51 COMPILER V7.09   UARTCOM2                                                              12/05/2005 10:23:19 PAGE 4   

 180   4                                      {
 181   5                                              memcpy(g_sndBuf, "\r\n", 2);
 182   5                                              g_sndBufLen = 2;
 183   5                                      }
 184   4                                      else if(g_rcvByte == 0x08)              //backspace键
 185   4                                      {
 186   5                                              g_sndBuf[0] = 0x08;
 187   5                                              g_sndBuf[1] = ' ';
 188   5                                              g_sndBuf[2] = 0x08;
 189   5                                              g_sndBufLen = 3;
 190   5                                      }
 191   4                                      else if(g_rcvByte >= 127)               //发送接收到的字符
 192   4                                      {
 193   5                                              g_sndBufLen = 0;
 194   5                                      }
 195   4                                      else
 196   4                                      {
 197   5                                              g_sndBuf[0] = g_rcvByte;
 198   5                                              g_sndBufLen = 1;
 199   5      
 200   5                                              //将接收到的数据通过IIC发送给BSP15
 201   5                                              g_ucI2CSendBuf[0] = UART2;
 202   5                                              g_ucI2CSendBuf[1] = g_rcvByte;
 203   5                                              g_ucI2CSendBuf_Len = 2;
 204   5                                              g_ucI2CSendBuf_offset = 0;
 205   5                                              IICSendIntToCPU();
 206   5      
 207   5                                      }
 208   4                                      g_sndBufOffset = 0;
 209   4                              }
 210   3      
 211   3                              g_hasRcvOneByte = 9;
 212   3                              g_rcvStartFlag = 0;
 213   3      
 214   3                              g_rcvByte = 0;
 215   3                      }
 216   2              }
 217   1      
 218   1              //加上红外接收定时器
 219   1          //TL1  = 0x01;        //100uS
 220   1          //TH1  = 0xFF;        //定时器0 happen per 0.1MS
 221   1              
 222   1              //去掉红外接收定时器
 223   1      //    TL1  = 0xC7;        //100uS
 224   1      //    TH1  = 0xFE;        //定时器0 happen per 0.1MS
 225   1      
 226   1          TL1  = 0xDD;        //100uS
 227   1          TH1  = 0xFD;        //定时器0 happen per 0.1MS
 228   1      
 229   1      }
 230          
 231          
 232          /*******************************************************************
 233          ** 函 数 名: UART1SendData()
 234          ** 输    入: 
 235          **                       pbuf           -- 发送数据缓冲
 236          **                       len            -- 发送数据长度
 237          ** 输    出: 无
 238          ** 描    述: 通过UART连续发送字节数据
 239          **                       注意:此程序采用查询方式发送。
 240          ** 全局变量: 无
 241          ** 调用模块: 无
C51 COMPILER V7.09   UARTCOM2                                                              12/05/2005 10:23:19 PAGE 5   

 242          ** 被调模块: 
 243          **                       main           -- 主循环处理函数
 244          ** 作    者: 金雨和
 245          ** 创建日期: 2005年11月16日
 246          ** 修    改:
 247          **        日  期        版本      修改人     修改内容                            
 248          **         1.
 249          ********************************************************************/
 250          void UART2SendData(uchar *pbuf, uchar len)
 251          {   
 252   1          uchar i;
 253   1          TI=0;
 254   1          for(i=0; i<len; i++)
 255   1          {   
 256   2              SBUF=pbuf[i];
 257   2              while(!TI);
 258   2              TI=0;
 259   2          }    
 260   1      }
 261          
 262          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    421    ----
   CONSTANT SIZE    =     24    ----
   XDATA SIZE       =     20    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      5       3
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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