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

📄 uart_ir_pc.c

📁 利用LPC900系列单片机的UART和CCU模块实现红外通信. * 此程序为从机程序,当接收到16字节数据后,再把接收的数据 * 返回给主机.
💻 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 + -