📄 uart_ir_pc.c
字号:
/*******************************************************************
* 文件: UART_IR_PC.C
* 开发: WWW.ZLGMCU.COM
* 日期: 2004.03.10
* 功能: 利用LPC900系列单片机的UART和T1实现与PC的红外通信。
* 本程序中,每按键一次,就通过红外接口连续发送16字节数据。
********************************************************************/
#include "reg932.h"
#include "intrins.h"
//变量定义
#define uchar unsigned char
sbit KEY1=P0^0;
uchar SendBuf; //发送缓冲区
const uchar BRGR1_DATA=0x09; //波特率设为2400bit/s
const uchar BRGR0_DATA=0xb4;
const uchar TH1_DATA=0xd9; //定时器重装值
//函数声明
void SendData();
void T1_Init();
void UART_Init();
void Delay(uchar k);
//主程序开始
void main()
{
P0M1=P0M2=0x80; //P0.7设置为开漏,其他为准双向
P1M1=P1M2=0x01; //TXD(P1.0)设置为开漏,其他为准双向
SendBuf=0;
T1_Init();
UART_Init();
while(1)
{
while(KEY1);
SendData(); //发送16字节数据
Delay(2); //延时0.2S
}
}
/****************************************
* 名称: SendData()
* 功能: 通过UART连续发送16字节数据
* 入口参数:无
* 出口参数:无
* 注意: 此程序采用查询方式发送。
*****************************************/
void SendData()
{
uchar i;
TI=0;
for(i=16;i;i--)
{
SBUF=SendBuf;
while(!TI); //等待一字节发送完毕
TI=0;
SendBuf++; //发送数据加1
}
}
/***************************************************************************
* 名称: T1_Init()
* 功能: 定时器1初始化,使T1(P0.7)输出38KHz,50%占空比的方波,
* 作为红外线的载波。当使用6MHz晶振时,
* 红外线载频=CCLK/(4×(256-定时器重载值)
* 定时器重装值=256-CCLK/(4*红外线载频)=256-6000000/(4*38000)=0D9H
****************************************************************************/
void T1_Init()
{
TH1=TH1_DATA; //定时器1重载值
TAMOD=0;
TMOD=0x20; //定时器1工作于模式2(自动重载)
AUXR1|=0x20; //置位ENT1,当T1溢出时触发P0.7翻转
TR1=1; //启动定时器
}
/***************************************
* 名称: UART_Init()
* 功能: UART初始化,波特率2400bit/s
***************************************/
void UART_Init()
{
PCON=0;
SSTAT=0; //双缓冲禁止,中断禁止,采用查询方式发送和接收
SCON=0x40; //串口模式1,接收禁止
PCON|=0x40; //SMOD0=1,SCON的位7作为FE
BRGCON=0;
BRGR1=BRGR1_DATA;
BRGR0=BRGR0_DATA;
BRGCON=3; //启动UART的波特率发生器
}
/*****************************************************
* 名称: Delay()
* 功能: 延时0.1*k秒(振荡器为6MHz)
* 入口参数:k--延时时间
* 出口参数:无
* 注意: 如果入口参数k等于0,则不延时而直接返回。
******************************************************/
void Delay(uchar k)
{
uchar i,j;
if(k==0)
{
return;
}
for(;k;k--)
{
for(j=200;j;j--) //延时0.1S
{
for(i=250;i;i--)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -