1. 实验目的:
掌握利用红外线实现数据传输的原理和方法。
/**********************************Copyright (c)******************** ;** 西南科技大学计算机学院 ;** ;** ;** 日期: 2005.5.10 ;** 描述: 红外数据通信实验,本程序也通过调试,仅供参考。 ;** 实验内容: 利用红外线传输数据 ;** 适用机型: AT89S52 ************************************************\*************/ #include //定义芯片特殊功能寄存器的头文件 #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); }
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』