您当前的位置:五五电子网电子知识单片机-工控设备51单片机LPC900系列单片机UART和CCU模块实现红外通信程序 正文
LPC900系列单片机UART和CCU模块实现红外通信程序

LPC900系列单片机UART和CCU模块实现红外通信程序

点击数:7499 次   录入时间:03-04 11:45:41   整理:http://www.55dianzi.com   51单片机

LPC900系列单片机UART和CCU模块实现红外通信程序

$INCLUDE (REG932.INC)

;变量定义
BEEP        BIT     P2.7
KEY1        BIT     P0.0
FE          BIT     SCON.7
PLEEN       BIT     TCR20.7
RCV_BUF     DATA    30H         ;接收缓冲区首地址(30H~3FH)
BRGR1_DATA  DATA    09H         ;波特率设为2400bit/s
BRGR0_DATA  DATA    0B4H

    ORG     0000H
    AJMP    MAIN
        
;主程序开始
    ORG     0100H
MAIN:
    MOV     SP,#60H
    MOV     P0M1,#00H           ;P0,P1口设置为准双向
    MOV     P0M2,#00H
    MOV     P1M1,#00H
    MOV     P1M2,#00H
    MOV     P2M1,#0C0H          ;P2.6,P2.7设置为开漏
    MOV     P2M2,#0C0H
    ACALL   CCU_INIT            ;CCU模块初始化,用以产生38KHz调制信号
    ACALL   UART_INIT
MAIN_L1:
    JB      KEY1,$
    ACALL   SEND_DATA           ;发送16字节数据
    MOV     R7,#01H
    ACALL   DELAY
    ACALL   RCV_DATA            ;接收16字节数据
    ACALL   COMPARE             ;比较接收到的数据和发送的数据
    JZ      MAIN_L2
    CLR     BEEP                ;如果正确则蜂鸣器短响一声
    MOV     R7,#01H
    ACALL   DELAY
    SETB    BEEP
    AJMP    MAIN_L1
MAIN_L2:
    CLR     BEEP                ;如果错误则蜂鸣器长响一声
    MOV     R7,#05H
    ACALL   DELAY
    SETB    BEEP
    AJMP    MAIN_L1

;********************************************
; 名称:     SEND_DATA
; 功能:     通过UART连续发送16字节数据(0~15)
; 入口参数:无
; 出口参数:无
; 注意:     此程序采用查询方式发送。
;********************************************
SEND_DATA:
    MOV     R7,#10H
    CLR     TI
    CLR     A
SEND_DL1:
    MOV     SBUF,A
    JNB     TI,$                ;等待一字节发送完毕
    CLR     TI
    INC     A
    DJNZ    R7,SEND_DL1
    RET

;********************************************************************
; 名称:     RCV_DATA
; 功能:     通过UART连续接收16字节数据
; 入口参数: RCV_BUF--用于接收数据的缓冲区首地址
; 出口参数: 接收到的16字节数据位于接收缓冲区
; 注意:     此程序采用查询方式进行接收。由于采取半双工通信,所以接收
;           数据之前要打开接收允许,接收完毕之后要关闭接收允许。
;********************************************************************
RCV_DATA:
    MOV     R7,#10H
    MOV     R0,#RCV_BUF
    SETB    REN                 ;串行接收允许
    CLR     FE
    CLR     RI
RCV_DL1:
    JNB     RI,$                ;等待接收一字节
    CLR     RI
    MOV     A,SBUF
    MOV     @R0,A
    INC     R0
    DJNZ    R7,RCV_DL1
    CLR     REN                 ;串行接收禁止
    RET

;*********************************************
; 名称:     COMPARE
; 功能:     比较缓冲区中的内容是否为0~15
; 入口参数: RCV_BUF--需要比较的缓冲区首地址
; 出口参数: ACC--比较正确则返回1,否则返回0。
;*********************************************
COMPARE:
    MOV     R7,#10H
    MOV     R0,#RCV_BUF
    MOV     R1,#00H
    CLR     A
COMP_L1:
    MOV     A,@R0
    CJNE    A,01H,COMP_RTN      ;ACC与R1(01H)比较
    INC     R0
    INC     R1
    DJNZ    R7,COMP_L1
    MOV     A,#01H              ;比较结果正确,返回01H
    RET
COMP_RTN:
    CLR     A                   ;比较结果错误,返回00H

[1] [2]  下一页


本文关键字:单片机  通信  程序  51单片机单片机-工控设备 - 51单片机