男女午夜激情_www.天堂av.com_亚洲综合小说区_亚洲欧美自拍视频_成年精品_久久www免费人成—看片_激情综合五月天_久久高潮视频_最新国产成人ab网站_国产精品卡一

機電之家資源網
單片機首頁|單片機基礎|單片機應用|單片機開發|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發
培訓信息
贊助商
利用LPC900系列單片機的UART和CCU模塊實現紅外通信(C程序)
利用LPC900系列單片機的UART和CCU模塊實現紅外通信(C程序)
 更新時間:2008-7-26 20:29:45  點擊數:2
【字體: 字體顏色

/**********************************************************************
* 文件:     UART_IR_Master.C
* 開發:     WWW.ZLGMCU.COM
* 日期:     2004.03.04
* 功能:     利用LPC900系列單片機的UART和CCU模塊實現紅外通信。
*           此程序為主機程序,先發送16字節數據給從機,從機再把接收到的
*           數據返回給主機,如果返回正確,則蜂鳴器短響一聲,否則長響一聲。      
************************************************************************/
#include "reg932.h"
#include "intrins.h"

#define uchar unsigned char

// 變量定義
sbit  BEEP=P2^7;
sbit  KEY1=P0^0;

const uchar data BRGR1_DATA=9;      //波特率設為2400bit/s
const uchar data BRGR0_DATA=0xb4;

//函數聲明
void CCU_Ini();
void UART_Ini();
void SendData();
void RcvData(uchar *pbuf);
bit  Compare(uchar *pbuf);
void Delay(uchar k);

//主程序開始
void main()
{
    uchar RcvBuf[16];               //接收數據用緩沖區
    P0M1=P0M2=0;
    P1M1=P1M2=0;                    //P0,P1口設置為準雙向
    P2M1=P2M2=0xc0;                 //P2.6,P2.7設置為開漏
    CCU_Ini();                      //CCU模塊初始化,用以產生38KHz調制信號
    UART_Ini();
    while(1)
    {  
        while(KEY1);
        SendData();                 //發送16字節數據
        Delay(1);
        RcvData(RcvBuf);            //接收16字節數據
        if(Compare(RcvBuf)==1)      //比較接收到的數據和發送的數據
        {  
            BEEP=0;                 //如果正確則蜂鳴器短響一聲
            Delay(1);
            BEEP=1;
        }
        else
        {
            BEEP=0;                 //如果錯誤則蜂鳴器長響一聲
            Delay(5);
            BEEP=1;
        }
    }  
}

/*********************************************
* 名稱:     SendData()
* 功能:     通過UART連續發送16字節數據(0~15)
* 入口參數:無
* 出口參數:無
* 注意:     此程序采用查詢方式發送。
**********************************************/
void SendData()
{  
    uchar i;
    TI=0;
    for(i=0;i<16;i++)
    {  
        SBUF=i;
        while(!TI);
        TI=0;
    }   
}

/********************************************************************
* 名稱:     RcvData()
* 功能:     通過UART連續接收16字節數據
* 入口參數: pbuf--用于接收數據的緩沖區首地址
* 出口參數: 接收到的16字節數據位于接收緩沖區
* 注意:     此程序采用查詢方式進行接收。由于采取半雙工通信,所以接收
*           數據之前要打開接收允許,接收完畢之后要關閉接收允許。
*********************************************************************/
void RcvData(uchar *pbuf)
{  
    uchar i;
    REN=1;
    FE=0;
    RI=0;
    for(i=0;i<16;i++)
    {  
        while(!RI);
        RI=0;
        pbuf[i]=SBUF;
    }
    REN=0;
}

/******************************************
* 名稱:     Compare()
* 功能:     比較緩沖區中的內容是否為0~15
* 入口參數: pbuf--需要比較的緩沖區首地址
* 出口參數: 比較正確則返回1,否則返回0。
******************************************/
bit Compare(uchar *pbuf)
{  
    uchar i;
    for(i=0;i<16;i++)
    {  
        if(pbuf[i]!=i)
        {  
            return(0);
        }
    }
    return(1);
}

/*********************************************************************
* 名稱:     CCU_Ini()
* 功能:     CCU模塊初始化,使OCA(P2.7)輸出38KHz,50%占空比的PWM波,
*           作為紅外線的載波
*           使用6MHz晶振時,CCU頻率=((6000000/2)/6)*32=16MHz
*           定時器重裝值=CCU頻率/紅外線載頻=16000000/38000=421=0x1a5
**********************************************************************/
void CCU_Ini()
{  
    TOR2H=0x01;                     //定時器重裝值
    TOR2L=0xa5;
    OCRAH=0x00;                     //(OCRAH:OCRAL)=(TOR2H:TOR2L)/2,PWM的占空比為50%
    OCRAL=0xd2;
    TCR21=0x85;                     //PLL預分頻為5+1
    CCCRA=1;                        //非反相的PWM,

    TCR20=0;
    PLEEN=1;
    while(!PLEEN);
    TCR20|=3;                       //啟動定時器,非對稱PWM模式
}

/***************************************
* 名稱:     UART_Ini()
* 功能:     UART初始化,波特率2400bit/s  
****************************************/
void UART_Ini()
{  
    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_();
   }
  }
 }
}

  • 上一篇: 利用LPC900系列單片機的UART和CCU模塊實現紅外通信(匯編)
  • 下一篇: 利用LPC900系列單片機的UART和CCU模塊實現紅外通信(匯編)
  • 發表評論   告訴好友   打印此文  收藏此頁  關閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關文章
    網友評論:(只顯示最新5條。)
    關于我們 | 聯系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發消息66821730(技術支持)點擊這里給我發消息66821730(廣告投放) 點擊這里給我發消息41031197(編輯) 點擊這里給我發消息58733127(審核)
    本站提供的機電設備,機電供求等信息由機電企業自行提供,該企業負責信息內容的真實性、準確性和合法性。
    機電之家對此不承擔任何保證責任,有侵犯您利益的地方請聯系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術支持

    主辦:杭州市高新區(濱江)機電一體化學會
    中國行業電子商務100強網站

    網站經營許可證:浙B2-20080178-1
    主站蜘蛛池模板: 阿拉善盟| 舟山市| 建德市| 汉川市| 武隆县| 玛多县| 安顺市| 镇安县| 菏泽市| 新田县| 秦皇岛市| 博白县| 大同市| 海林市| 江华| 平和县| 尉犁县| 孝感市| 远安县| 洪雅县| 吉木萨尔县| 屯门区| 宁陕县| 象州县| 云霄县| 兴安盟| 扶余县| 泸西县| 奉节县| 太仓市| 繁峙县| 米泉市| 钟祥市| 正蓝旗| 通江县| 河北省| 烟台市| 会东县| 久治县| 武邑县| 深泽县|