打印
[国产单片机]

请问用芯睿单片机4M时钟能实现按键红外发送吗

[复制链接]
2517|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cgha|  楼主 | 2011-9-20 11:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
前提是用mk6a12,4M时钟(因为用2节干电池供电,所以不能用8M),他的指令周期是4个机器周期,有一个震动开关电平需要读出并通过红外发送,红外载波38K,感觉有点难度啊。
MCU有1个定时器(我试了用中断来输出38K时钟不可行)。
如果读了震动开关但不进行消抖估计有可能。想改用EM78P153,因为它的速度是2个机器周期,这样估计就可以用定时器中断来实现了,因为我用mk6a12的8M时钟试了下可以实现震动开关的数据读出并进行缓冲,通过模拟UART发送红外数据,如果有震动,一帧发送4次数据,每次间隔为10ms~20ms~40ms。但是领导说EM78P153贵一些,真是没有办法了。

相关帖子

沙发
szycgao| | 2011-9-20 13:33 | 只看该作者
嫌EM78P153贵,那就用飞凌FM8PS53E好了,性价比比芯睿的还好。

使用特权

评论回复
板凳
老鱼探戈| | 2011-9-23 12:11 | 只看该作者
可以帮你算算,在不分频的情况下:
红外线是38K,即模拟载波的IO口需要13us翻转一次。
4M, INS/4Fcpu。即执行一条指令需要1us时间,MK的单片机好像没有pop和push,需要自己写,也不支持中断嵌套。这样的话你的中断里所有指令(_POP,_PUSH也算)不能大于13条。
自己权衡一下吧。

使用特权

评论回复
地板
lsqdesign| | 2011-9-23 16:35 | 只看该作者
大家可以开阔一下思路,没必要一定要在定时器中断里完成发射任务,可以用顺序执行的办法实现红外发射。38K随便那个MCU实现起来起来都很easy。不到100ms的时间,其他的任务暂停一般都没有问题

使用特权

评论回复
5
老鱼探戈| | 2011-9-24 11:40 | 只看该作者
LS你用什么产生载波? 外围硬件?

使用特权

评论回复
6
lsqdesign| | 2011-9-29 15:01 | 只看该作者
软件顺序执行即可

使用特权

评论回复
7
love_gerry| | 2011-10-7 09:49 | 只看该作者
路过!:)

使用特权

评论回复
8
老鱼探戈| | 2011-10-7 15:30 | 只看该作者
软件顺序执行即可
lsqdesign 发表于 2011-9-29 15:01


载波何解?

使用特权

评论回复
9
lsqdesign| | 2011-10-7 16:24 | 只看该作者
载波只有38KHZ ,有10几个us的时间可以执行置高,低和进行下一步的判断。只是这发码的几十ms时间没办法干别的了。

使用特权

评论回复
10
ouyang8803| | 2011-11-1 10:10 | 只看该作者
芯睿的性能奇差

使用特权

评论回复
11
q331513266| | 2011-11-1 10:46 | 只看该作者
用带IR的IC啊 ,价格差不多……再说用IO口模拟38K也没啥难度,汇编要玩得好而已……

使用特权

评论回复
12
zhanghai312| | 2011-11-30 16:38 | 只看该作者
听的比较少

使用特权

评论回复
13
fu10| | 2011-12-3 10:22 | 只看该作者
现在新版本的单片机都没问题,几年以前旧版本的就难说了.38K栽波当然用软件模拟方式省资源又省事.你只要算一下13us内如果能执行30条以上指令的单片机都可以.

使用特权

评论回复
14
jiangcr81| | 2012-4-3 17:49 | 只看该作者
建议采用海尔HR6P59HL来实现,内部4M。
HR6P59HL内置硬件定时器,可以实现38K波型,高低电平比1:4。间隔一毫秒发送
源码如下

;作者QQ:8044997
;芯片        HR6P59HL 14PINS 4M 内部晶振
#INCLUDE        "HR6P59HL.INC"

RAM_BIT0                EQU                0X16
#DEFINE        TM_1MS_FLAG        RAM_BIT0,0

        ORG                0X00
    LCALL        0X3FF
    MOVA        CALR
    JUMP        MAIN
   
        ORG                0X08
        PUSH
        BCC                PSW,RP0
       
        JBC                INTC0,T8IE
        JBS                INTC0,T8IF
        JUMP        INT_EXIT

        BCC                INTC0,T8IF
        MOVI        .194                ;255-(194)+1=62 机器周期*16微秒(16*4M/4)=1000微秒
        ADD                T8,1
       
        JUMP        TIMER_S_WORK
        MOVI        0X01
        XOR                PA,1

INT_EXIT
        POP
        RETIE

TIMER_S_WORK
        MOVI        0X01
        XOR                RAM_BIT0,1
       
        JBC                TM_1MS_FLAG
        JUMP        T8P_PWM_ON

        JBS                TM_1MS_FLAG
        JUMP        T8P_PWM_OFF
       
T8P_PWM_ON
        MOVI        B'11111110'
        TRIS        PA
        JUMP        INT_EXIT
       
T8P_PWM_OFF
        MOVI        B'11111111'
        TRIS        PA
        JUMP        INT_EXIT

MAIN
        LCALL        RAM_INI
       
MAIN_INIT
        MOVI        B'11111110'
        TRIS        PA
        MOVI        B'11110111'
        TRIS        PB
       
        CLR                PA
        CLR                PB

;        MOVI        B'11111110'
;        MOVA        PAWPUC
       
        MOVI        B'01000011'                        ;T8预分频1:2
        OPTION

        BCC                INTC0,T8IF
        BSS                INTC0,T8IE
        LCALL        T8P_PWM

MAIN_LOOP
        CWDT

        JUMP        MAIN_LOOP
       
T8P_PWM
        BSS                PSW,RP0
        CLR                T8P
        MOVI        .25
        MOVA        T8PP
        MOVI        0X00
        MOVA        T8PC

        MOVI        .5
        MOVA        TEL
        MOVI        0X0C
        MOVA        TEC
       
        BCC                INTC0,T8PIF
        BSS                INTC0,T8PIE
        BSS                INTC0,GIE
       
        BSS                T8PC,T8PON
        BCC                PSW,RP0
       
        RETIA        0

;RAM初始化,全部置0
RAM_INI
        BCC                PSW,RP0
        MOVI        0X10
        MOVA        IAA
CLR_BANK0
        CLR                IAD                        ;清除存储组0的RAM数据
        INC                IAA
        JBS                IAA,5
        JUMP        CLR_BANK0
        MOVI        0X30
        MOVA        IAA
CLR_BANK1
        CLR                IAD                        ;清除存储组1的RAM数据
        INC                IAA
        JBS                IAA,6
        JUMP        CLR_BANK1
        RETIA        0
       
        END

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

561

主题

719

帖子

0

粉丝