Irc_tran.c
上传用户:led2668
上传日期:2013-01-28
资源大小:1343k
文件大小:4k
源码类别:

单片机开发

开发平台:

C/C++

  1. /**********************************Copyright (c)*********************************
  2. ;**                            西南科技大学计算机学院
  3. ;**                            http://cs.swust.edu.cn
  4. ;**          
  5. ;**    日期:      2005.5.10
  6. ;**    描述:      红外数据通信实验,本程序也通过调试,仅供参考。
  7. ;**    实验内容:   利用红外线传输数据
  8. ;**    适用机型:  AT89S52
  9. *********************************************************************************/
  10. #include <at89x52.h>                     //定义芯片特殊功能寄存器的头文件
  11. #define uchar unsigned char
  12. uchar Send_data[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07
  13.                    ,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  14. uchar count=0x00;                        //计时变量
  15. uchar ptr=0x00;                          //取数指针
  16. uchar Receive_data;                      //接收到的数据
  17. /*******************************************************
  18.  名称:   初始化运行环境   
  19.  功能:  初始化各寄存器与端口状态
  20.          设置串口工作方式,波特率 3138
  21.  参数:  无
  22.  返回值:无
  23. *******************************************************/          
  24. void DeviceInit(void)
  25. {
  26.    TL0=0xC0;                              //置定时器处置,设置中断时间为20ms
  27.    TH0=0x63;
  28.    TMOD=0x01;                             //设定定时器/计数器0工作方式为1
  29.    IE=0x92;                               //允许全局中断,允许定时器/计数器0溢出中断,允许串口接收终端
  30.    T2CON = 0x39;                          //设置定时器2的工作模式为波特率发生器方式,
  31.    RCAP2H = 0xFF;                         //设置波特率为3138Hz
  32.    RCAP2L = 0x11;
  33.    SCON = 0x50;                           //设置串口工作方式为方式1
  34.    TR2 = 0x01;                            //启动定时器2*/
  35.    TR0=0x01;                              //启动定时器/计数器0
  36.    P1=0xFE;
  37. }
  38. /*******************************************************
  39.  名称:   发送模块   
  40.  功能:  利用串口发送1个字符
  41.  参数:  无
  42.  返回值:无
  43. *******************************************************/
  44. void SendChar(uchar dat)  
  45. {
  46.     SBUF=dat;                             //发送数据送发送缓冲区
  47.     while(TI==0);                         //等待发送完成
  48.     TI=0;                                 //置发送完成标志
  49. }
  50. /*******************************************************
  51.  名称:   接收中断模块   
  52.  功能:  将接收到的数据保送数码管显示
  53.  参数:  无
  54.  返回值:无
  55. *******************************************************/
  56. void Receive (void) interrupt 4
  57. {
  58.     if(RI)                                //当接收终端标志设立时,开始读取接收到的数据
  59.     {
  60.         RI = 0;                           //清除接收终端标志
  61. Receive_data=SBUF;                //将接收到的数据送缓冲区保存
  62.         P0=Receive_data;                  //显示接收到的数据
  63.     }
  64. }
  65. /*******************************************************
  66.  名称:   定时器中断模块
  67.  功能:  每隔一秒发送一个数据
  68.  参数:  无
  69.  返回值:无
  70. *******************************************************/
  71. void Timer0Over(void) interrupt 1  
  72.    count++;
  73.    if(count==0x32)                        //每隔相同时间发送一个数据
  74.    { 
  75.       if(ptr<=15)
  76.   {
  77.          SendChar(Send_data[ptr]);
  78.  ptr++;
  79.   }
  80.   else
  81.   {
  82.      SendChar(Send_data[0]);
  83.  ptr=0x01;
  84.   }
  85.  count=0x00;                          //计时清零
  86.    }
  87.    TL0=0xC0;                              //中断时间20ms
  88.    TH0=0x63;
  89. }
  90. /*******************************************************
  91.  名称:   主函数
  92.  功能:  应用程序入口
  93.  参数:  无
  94.  返回值:无
  95. *******************************************************/
  96. void main()                       
  97. {
  98.    DeviceInit();                            //初始化定时器0与串口
  99.    while(1);
  100. }