Irc_tran.c
上传用户:led2668
上传日期:2013-01-28
资源大小:1343k
文件大小:4k
- /**********************************Copyright (c)*********************************
- ;** 西南科技大学计算机学院
- ;** http://cs.swust.edu.cn
- ;**
- ;** 日期: 2005.5.10
- ;** 描述: 红外数据通信实验,本程序也通过调试,仅供参考。
- ;** 实验内容: 利用红外线传输数据
- ;** 适用机型: AT89S52
- *********************************************************************************/
- #include <at89x52.h> //定义芯片特殊功能寄存器的头文件
- #define uchar unsigned char
- uchar Send_data[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07
- ,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
- uchar count=0x00; //计时变量
- uchar ptr=0x00; //取数指针
- uchar Receive_data; //接收到的数据
- /*******************************************************
- 名称: 初始化运行环境
- 功能: 初始化各寄存器与端口状态
- 设置串口工作方式,波特率 3138
- 参数: 无
- 返回值:无
- *******************************************************/
- void DeviceInit(void)
- {
- TL0=0xC0; //置定时器处置,设置中断时间为20ms
- TH0=0x63;
- TMOD=0x01; //设定定时器/计数器0工作方式为1
- IE=0x92; //允许全局中断,允许定时器/计数器0溢出中断,允许串口接收终端
- T2CON = 0x39; //设置定时器2的工作模式为波特率发生器方式,
- RCAP2H = 0xFF; //设置波特率为3138Hz
- RCAP2L = 0x11;
- SCON = 0x50; //设置串口工作方式为方式1
- TR2 = 0x01; //启动定时器2*/
- TR0=0x01; //启动定时器/计数器0
- P1=0xFE;
- }
- /*******************************************************
- 名称: 发送模块
- 功能: 利用串口发送1个字符
- 参数: 无
- 返回值:无
- *******************************************************/
- void SendChar(uchar dat)
- {
- SBUF=dat; //发送数据送发送缓冲区
- while(TI==0); //等待发送完成
- TI=0; //置发送完成标志
- }
- /*******************************************************
- 名称: 接收中断模块
- 功能: 将接收到的数据保送数码管显示
- 参数: 无
- 返回值:无
- *******************************************************/
- void Receive (void) interrupt 4
- {
- if(RI) //当接收终端标志设立时,开始读取接收到的数据
- {
- RI = 0; //清除接收终端标志
- Receive_data=SBUF; //将接收到的数据送缓冲区保存
- P0=Receive_data; //显示接收到的数据
- }
- }
- /*******************************************************
- 名称: 定时器中断模块
- 功能: 每隔一秒发送一个数据
- 参数: 无
- 返回值:无
- *******************************************************/
- void Timer0Over(void) interrupt 1
- {
- count++;
- if(count==0x32) //每隔相同时间发送一个数据
- {
- if(ptr<=15)
- {
- SendChar(Send_data[ptr]);
- ptr++;
- }
- else
- {
- SendChar(Send_data[0]);
- ptr=0x01;
- }
- count=0x00; //计时清零
- }
- TL0=0xC0; //中断时间20ms
- TH0=0x63;
- }
- /*******************************************************
- 名称: 主函数
- 功能: 应用程序入口
- 参数: 无
- 返回值:无
- *******************************************************/
- void main()
- {
- DeviceInit(); //初始化定时器0与串口
- while(1);
- }