历史上的今天
返回首页

历史上的今天

今天是:2025年01月06日(星期一)

正在发生

2018年01月06日 | LPC900系列单片机UART和CCU模块实现红外通信程序

2018-01-06 来源:eefocus

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

$INCLUDE (REG932.INC) 

;变量定义 
BEEP        BIT     P2.7 
KEY1        BIT     P0.1

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 
    RET 

;********************************************************************** 
; 名称:     CCU_INIT 
; 功能:     CCU模块初始化,使OCA(P2.7)输出38KHz,50%占空比的PWM波, 
;           作为红外线的载波 
;           使用6MHz晶振时,CCU频率=((6000000/2)/6)*32=16MHz 
;           定时器重装值=CCU频率/红外线载频=16000000/38000=421=01A5H 
;********************************************************************** 
CCU_INIT: 
    MOV     TOR2H,#01H          ;定时器重装值 
    MOV     TOR2L,#0A5H 
    MOV     OCRAH,#00H          ;(OCRAH:OCRAL)=(TOR2H:TOR2L)/2,PWM的占空比为50% 
    MOV     OCRAL,#0D2H 
    MOV     TCR21,#85H          ;PLL预分频为5+1 
    MOV     CCCRA,#01H          ;非反相的PWM 
    MOV     TCR20,#00H           
    SETB    PLEEN 
    NOP 
    JNB     PLEEN,$             ;等待锁相环(PLL)稳定 
    ORL     TCR20,#03H          ;启动定时器,对称PWM模式 
    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 


推荐阅读

史海拾趣

FCT Electronics公司的发展小趣事

随着电子行业的快速发展,市场竞争日益激烈。为了应对挑战,FCT Electronics不断加大研发投入,推出了一系列具有自主知识产权的新产品。同时,公司还加强了与高校、研究机构的合作,引进了一批高素质的人才,为公司的持续发展注入了新的活力。

德索五金(dosinconn)公司的发展小趣事
Chen Yang Technologies GmbH & Co KG公司的发展小趣事

电子行业市场竞争激烈,Chen Yang Technologies也面临着来自各方面的挑战。在某次全球经济危机中,公司遭遇了订单减少、资金紧张等困难。然而,正是在这样的困境中,Chen Yang Technologies展现出了顽强的生命力。公司迅速调整战略,优化成本结构,同时加大研发力度,推出了一系列具有竞争力的新产品。这些举措使得公司成功度过了危机,并在危机后的市场中获得了更大的发展空间。

Coil-Q Corporation公司的发展小趣事

随着公司规模的扩大,Coil-Q意识到单靠自身的力量难以应对日益激烈的市场竞争。于是,公司积极寻求与其他企业的战略合作,与多家知名电子品牌建立了长期稳定的合作关系。通过共享资源、共同研发,Coil-Q不仅拓展了业务领域,还提高了自身的技术水平和市场竞争力。

明微公司的发展小趣事

明微公司自创立以来,始终坚持以技术创新为核心竞争力。在数字电视芯片领域,明微团队通过深入研发,成功推出了一款具有高性能、低功耗特点的芯片产品,该产品凭借其卓越的性能和合理的价格,迅速在市场上获得了认可。此后,明微公司继续加大研发投入,不断推出具有竞争力的新产品,逐步在电子行业中崭露头角。

HELUKABEL公司的发展小趣事

明微公司自创立以来,始终坚持以技术创新为核心竞争力。在数字电视芯片领域,明微团队通过深入研发,成功推出了一款具有高性能、低功耗特点的芯片产品,该产品凭借其卓越的性能和合理的价格,迅速在市场上获得了认可。此后,明微公司继续加大研发投入,不断推出具有竞争力的新产品,逐步在电子行业中崭露头角。

问答坊 | AI 解惑

偶得共享(续)

在网上,再次很偶然得到了一个FLASH: Panasonic Power Management MOSFET Product Training Module. This module……(Flash上都有), 这是从实用的和产品介绍的角度来介绍MOSFET的,觉得挺好。虽然用英语,但画面下部就是讲座的“台 ...…

查看全部问答>

wince 5.0 toolbar 怎么移动,和显示大图标?

C#写了智能应用程序,用了TOOLBAR控件,怎么不能移动,跟菜单重合在一起,也不能显示大图标,在设备里只显示一点图标,大部分被截了,我怎么才能移动改变它的大小呢?谢谢!…

查看全部问答>

各个商家的ARM架构的优缺点

瑞萨、飞思卡尔、Microchip、NEC、Atmel等等这些MCU大鳄都拥有自己的ARM架构。如今TI也有自己的架构,而且强劲地发展。 请问,这些MCU大鳄们的ARM架构是怎么样的?其各自的优缺点是什么? 那位达人可否概况下,谢谢…

查看全部问答>

我对c8051 pic msp430的比较,还望大虾们给予指正

最近我对三种单片机进行了一些了解,对三种单片机的性能进行了对比,希望各位大家给予指导,看我说的对吗? 1、PIC的特点是不进行简单的累加,他根据内部资源的多少,有120多中型号,而且具有向下兼容性。C8051和MSP430这点相对PIC差了一点。 2、 ...…

查看全部问答>

【设计工具】独家首发《xilinx PlanAhead进行FPGA设计》官方讲座

PlanAhead是xilinx新一代FPGA工程设计工具,它不仅具有ISE所具备的全部功能, 而且增强了对设计的分析能力。是xilinx重点推荐的下一代FPGA开发软件。本文是最新的PlanAhead使用介绍讲演稿,希望对大家有用处。   …

查看全部问答>

【项目外包】256信道语音模块

256信道语音模块 项目预算:¥ 15,000~20,000 开发周期:60天 项目分类: 系统开发件 竞标要求: 项目标签: 无线射频 语音传输 ...…

查看全部问答>

mos管并联有什么要求吗

hello!哪位哥哥姐姐告诉我mos管并联有什么要求吗?在pfc 电路中并联后就坏了,不知道什么原因…

查看全部问答>

求助:F28027的cmd文件中的“>>”和“|”

.cinit              : > FLASHA | FLASHC | FLASHD,       PAGE = 0    .pinit              : > FLASHA ...…

查看全部问答>

msp430中断问题

当端口发生中断的时候,怎么确定程序进入了哪个中断程序,我在P1.4按下开关之后,程序进入了ISR(CC2520_IRQ, cc2520_port1_interrupt)这个中断,为什么不是ISR(PORT1, irq_p1)中断函数,源程序中写的是ISR(PORT2, irq_p2),因为我开关接在P1.4所以 ...…

查看全部问答>

Altium Designer 15安装插件的详细图文教程

replyreload += \',\' + 1803894; 本帖最后由 小崇伟 于 2015-1-14 09:52 编辑 昨天晚上花了点时间把这个过程写了一下,没什么难的地方,在此奉献给需要的小伙伴了。 记得帮忙顶贴,有问题可以加我QQ交流,仅限问题交流,其他的杂事没空理会,谢 ...…

查看全部问答>