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

📄 uart_ir_pc.asm

📁 利用LPC900系列单片机的UART和CCU模块实现红外通信. * 此程序为从机程序,当接收到16字节数据后,再把接收的数据 * 返回给主机.
💻 ASM
字号:
;*******************************************************************
; 文件:     UART_IR_PC.ASM
; 开发:     WWW.ZLGMCU.COM
; 日期:     2004.03.10
; 功能:     利用LPC900系列单片机的UART和T1实现与PC的红外通信。
;           本程序中,每按键一次,就通过红外接口连续发送16字节数据。       
;********************************************************************
$INCLUDE (REG932.INC)

;变量定义
KEY1        BIT     P0.0
FE          BIT     SCON.7
SEND_BUF    DATA    40H         ;发送缓冲区
BRGR1_DATA  DATA    09H         ;波特率设为2400bit/s
BRGR0_DATA  DATA    0B4H
TH1_DATA    DATA    0D9H         ;定时器重装值

    ORG     0000H
    AJMP    MAIN
        
;主程序开始
    ORG     0100H
MAIN:
    MOV     SP,#60H
    MOV     P0M1,#80H           ;P0.7设置为开漏,其他为准双向
    MOV     P0M2,#80H
    MOV     P1M1,#01H
    MOV     P1M2,#01H           ;TXD(P1.0)设置为开漏,其他为准双向
    MOV     SEND_BUF,#00H
    ACALL   T1_INIT
    ACALL   UART_INIT
MAIN_L1:
    JB      KEY1,$
    ACALL   SEND_DATA           ;发送16字节数据
    MOV     R7,#02H             ;延时0.2S
    ACALL   DELAY
    AJMP    MAIN_L1

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

;****************************************************************************
; 名称:     T1_INIT
; 功能:     定时器1初始化,使T1(P0.7)输出38KHz,50%占空比的方波,
;           作为红外线的载波。当使用6MHz晶振时,
;           红外线载频=CCLK/(4×(256-定时器重载值)
;           定时器重装值=256-CCLK/(4*红外线载频)=256-6000000/(4*38000)=0D9H
;****************************************************************************
T1_INIT:
    MOV     TH1,#TH1_DATA       ;定时器1重载值      
    MOV     TAMOD,#00H
    MOV     TMOD,#20H           ;定时器1工作于模式2(自动重载)
    ORL     AUXR1,#20H          ;置位ENT1,当T1溢出时触发P0.7翻转
    SETB    TR1                 ;启动定时器
    RET

;***************************************
; 名称:     UART_INIT
; 功能:     UART初始化,波特率2400bit/s   
;***************************************
UART_INIT:
    MOV     PCON,#00H
    MOV     SSTAT,#00H          ;双缓冲禁止,中断禁止,采用查询方式发送和接收
    MOV     SCON,#40H           ;串口模式1,接收禁止
    ORL     PCON,#40H           ;SMOD0=1,SCON的位7作为FE
    MOV     BRGCON,#00H
    MOV     BRGR1,#BRGR1_DATA
    MOV     BRGR0,#BRGR0_DATA
    MOV     BRGCON,#03H         ;启动UART的波特率发生器
    RET

;*****************************************************
; 名称:     DELAY
; 功能:     延时(R7*0.1)秒(振荡器为6MHz)
; 入口参数:R7--延时时间
; 出口参数:无
; 注意:    如果入口参数R7等于0,则不延时而直接返回。
;*****************************************************
DELAY:
    MOV     A,R7
    JZ      DELAY_RTN
DELAY_L1:
    MOV     R6,#0C8H            ;延时0.1S
DELAY_L2:
    MOV     R5,#0FAH
DELAY_L3:
    NOP
    NOP
    NOP
    NOP
    DJNZ    R5,DELAY_L3
    DJNZ    R6,DELAY_L2
    DJNZ    R7,DELAY_L1
DELAY_RTN:
    RET    
    END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -