分享
 
 
 

MC68HC908RF2在汽车远程无匙进入系统中的应用

王朝厨房·作者佚名  2007-01-04
窄屏简体版  字體: |||超大  

许继电气 曹雪兰 曹国军

简介

MC68HC908RF2是M68HC08家族中的一员,采用增强型内核,是专为无匙进入系统(RKE)的发射端设计的一款性价比较高的微控制器。它的主要特点如下:

⑴ 高性能的M68HC08结构

⑵ 在3.3V供电时的内部总线频率为4MHz

⑶ 2K字节可加密闪速存储器

⑷ 128字节的片上随机存储器

⑸ 2个16位的定时器

⑹ 12个通用IO口,其中6个具有键盘唤醒功能

⑺ 1个外部中断管脚,内部有上拉电阻

⑻ 1个高频发射模块

系统框图

原理图如图1示。

⑴ 电源系统

系统采用3V的钮扣电8池供电,MC68HC908RF2具有停止模式(STOP MODE),功耗非常低。

⑵ 键盘扫描

系统接入3个键盘,分别作为上锁、解锁、寻车功能。接入PORTA口的A1、A2、A3。当按下任一键盘时将CPU08唤醒,并进入相应的中断处理程序中。处理完毕后,重新进入停止模式(STOP MODE)。

⑶ LED指示

将PORTA口的A7作为输出,控制LED的点亮、熄灭。

⑷ 高频发射

高频发射模块的相应功能管脚如图2。

图2 高频发射模块(UHF)功能管脚(略)

各功能管脚的作用如下:

VCC:电源管脚。

MODE:模式选择,接高电平时选择FSK模式,接低电平时选择OOK模式,在本系统中采用OOK方式,MODE接低电平。

ENABLE: 高频发射模块(UHF)允许,当在该管脚接高电平时,高频发射模块(UHF)允许工作,在该管脚接低电平时,禁止高频发射模块(UHF)工作,在本系统中,ENABLE管脚与PTA0相连,用PTA0来控制高频发射模块(UHF)的状态。

DATA:数据输入端与PTB2相连。

BAND:选择频段,当接高电平时选择315MHz和434MHz,如果选择868MHz时,BAND管脚接低电平。在系统中采用315 MHz发射频率。

RFOUT:高频输出管脚,为了能够获得最大输出发射功率需在该管脚外部配接少量元件。

GNDRF:接低电平。

REXT:配接12K的下拉电阻。

XTA1,XTA2:如果选择发射的频率为315MHz,配接9.84375 MHz的晶振,如果选434MHz的发射频率配接13.56 MHz的晶振。

DATACLK:数据同步时钟,与PTB3相连。

CFSK:OOK和FSK模式选择,悬空选择OOK模式,接低电平选择FSK模式。

为了降低系统的功耗,只用在需要发送数据时,才将高频发射模块(UHF)置为有效,其余时刻将高频发射模块(UHF)置为无效。典型的发射时序列如图3所示。

图2 高频发射模块(UHF)功能管脚

图3 典型发射时序

系统软件框图

图3 软件框图(略)

中断处理程序流程图如图4。

图4 中断流程图

软件清单

$Include 'C:\pemicro\ics08rkz\rk2regs.inc'

;定义起始地址

RAMStart EQU $0080 ;数据存储区起开始地址

RomStart EQU $7800 ;程序存储区起开始地址

VectorStart EQU $FFF2 ;中断向量表

;定义A口各位的定义

; Porta A

PLLEn equ 0 ; UHF模块控制位

Row0 equ 1 ; 键盘占用PORTA口的PA.1,PA.2,PA.3

Row1 equ 2 ;

Row2 equ 3 ;

Led equ 7 ; Led占用PORTA口的PA.7

ACKK EQU 2

;定义A口各位的方向:PA.0和PA.7定义为输出,其余定义为输入

DDRAInit equ %10000001 ;

PortAInit equ %11111111 ;

;定义B口各位的定义

; Porta B

Data equ 2 ; 数据输出

DClk equ 3 ; 数据时钟

DDRBInit equ %00000100 ;

PortBInit equ %00000000 ;

org RamStart

;以下为发射数据存储区

Buffer0 DS 1 ;

Buffer1 DS 1 ;

Buffer2 DS 1 ;

Buffer3 DS 1 ;

Buffer4 DS 1 ;

Buffer5 DS 1 ;

Buffer6 DS 1 ;

CRC DS 1 ;

BitCount DS 1 ;

LastRow DS 1 ;

LastCol DS 1 ;

TxCnt DS 1 ;

TEMP DS 1 ;

; Costanti

Dly300ms equ $03 ;300ms@8Mhz

MinTx equ $01 ;Minimum number of frame

transmitted;//03

FrameDly equ $ff ;Delay between frames

(771*FrameDly cycles)

org RomStart

main

mov #%00000011,CONFIG ;禁止 COP 允许 Stop 指令

rsp ;初始化堆栈指针

clra ;

clrx

clr buffer0 ;

clr buffer1 ;

clr buffer2 ;

clr buffer3 ;

clr buffer4 ;

clr buffer5 ;

clr buffer6 ;

clr crc ;

clr BitCount ;

clr LastRow ;

clr LastCol ;

clr TxCnt ;

clr TEMP;

WarmStart

mov #DDRAInit,DDRA ;初始化PORTA口

mov #PortAInit,PORTA ;

bset led,porta

mov #DDRBInit,DDRB ;初始化PORTB口

mov #PortBInit,PORTB ;

mov #%00100011,INTKBSR ;

mov #%00011110,INTKBIER ;

BSET ACKK,INTKBSR ;

mov #%00100001,INTKBSR ;

StopProc

bclr pllen,porta

STOP

bra StopProc

KeybIRQ

brclr 7,INTKBSR,KeyboardProc ;检查是否为外部中断

jmp IRQProc ;不是有效的键盘中断,

退出

KeyboardProc bset 2,INTKBSR ;清除键盘中断标志

clrx

BCLR Led,PORTA ;电亮LED

WaitRow

lda PORTA ;读取PORTA口数据

coma ;

and #%00011110 ;

lsra ;

bne RowOk ;

dbnza $ ;

dbnzx WaitRow ;如果PORTA口数据为0,一直读取,直到延时时间到

jmp ExitKeyb 延时到

RowOk

sta LastRow ;Save Row number

clr INTKBIER ;Clear Keyboard interrupt enable bits

lda #%00011110 ;All rows to 1

ora DDRA ;

sta DDRA ;

lda #%00011110 ;

ora PORTA ;

sta PORTA ;

clrx ;

mov #$10,BitCount ;

ColLoop

lda #$40 ;

KeyLoop

dbnzx KeyLoop ;

dbnza KeyLoop ;

;组织待发射数据

SetKey

lda lastrow

lsla

lsla

lsla

lsla

sta Buffer4 ;Init Key Code

LDA ID0

STA Buffer0 ;

lda ID1 ;Init ID

sta Buffer1 ;

lda ID2 ;

sta Buffer2 ;

lda ID3 ;

sta Buffer3 ;

lda #Dly300ms ;Attendi 350ms

psha ;

clra ;

clrx ;

ToggleDly

dbnzx $ ;[3*256=768]

dbnza ToggleDly ;[256*771]

dbnz 1,SP,ToggleDly ;[197379*Dly300ms]

pula ;

lda PORTA ;Check if key still down

and #%01100000 ;

nsa ;

lsra ;

bne NoToggle ;

bset 0,Buffer0 ;键盘没有释放

NoToggle

;

lda #$01 ;

add Buffer6 ;

sta Buffer6 ;

clra ;

adc Buffer5 ;

sta Buffer5 ;

clc

lda Buffer6 ;

and #$0F ;

beq NoRotate ;

tax

NextRotate

lda Buffer5 ;

rora ;

ror Buffer0 ;

ror Buffer1 ;

ror Buffer2 ;

ror Buffer3 ;

ror Buffer4 ;

ror Buffer5 ;

dbnzx NextRotate ;

NoRotate

ldhx #Buffer0 ;

lda ,X ;

eor 1,X ;

sta 1,X ;

eor 2,X ;

sta 2,X ;

eor 3,X ;

sta 3,X ;

eor 4,X ;

sta 4,X ;

eor 5,X ;

sta 5,X ;

clr CRC ;

ldhx #Buffer0 ;

NextCRCByte LDA ,X

ADD BUFFER1

ADD BUFFER2

ADD BUFFER3

ADD BUFFER4

ADD BUFFER5

ADD BUFFER6

STA CRC

;发送程序

mov #DDRAInit,DDRA ;初始化A口方向寄存器

mov #PortAInit,PORTA ;初始化A口

mov #%00011110,INTKBIER

mov #MinTx,TxCnt ;一共发送3帧相同的数据

bset PLLEn,PORTA ;允许UHF模块

ldx #FrameDly ;

clra ;

FrameBlank

dbnza $ ;

dbnzx FrameBlank

lda #$0c

;********产生24个TE******************************* *******************

HX301

BCLR Data,PORTB

mov #%00110000,TASCR

ldhx #$0200

sthx TAMODH ;

bclr 5,TASCR ;计数器开始计数

brclr 7,TASCR,* ;Wait

BSET Data,PORTB

mov #%00110000,TASCR

ldhx #$0214

sthx TAMODH ;

bclr 5,TASCR ;计数器开始计数

brclr 7,TASCR,* ;Wait

dbnza HX301

bclr Data,portb

lda #$09

HX302 mov #%00110000,TASCR

ldhx #$023e

sthx TAMODH ;

bclr 5,TASCR ;计数器开始计数

brclr 7,TASCR,* ;Wait

dbnza HX302

NextFrame

ldhx #CRC ;指向CRC的RAM地址

psha ;

NextTxByte

lda #$08 ;

sta 1,SP ;

NextTxBit lda 0,X ;将X+0指向的地址的内容

ACC中

rora ;带进位位右移

ror 0,X ;将X+0的地址的内容带进位

右移后结果保存在X+0的地址中

bcs Bit1 ;C位为1跳转,电平的持续时间为(1/3)T

bit0 mov #%00110000,TASCR ;mov #%00110111,TASCR

bset data,portb

pshx

PSHH

ldhx #$425

sthx tmodh

PULH

pulx

bclr 5,TASCR

brclr 7,TASCR,*

mov #%00110000,TASCR

pshx

PSHH

ldhx #$1E0

sthx tmodh

PULH

pulx

bclr data,portb

bclr 5,TASCR

brclr 7,TASCR,*

jmp bit2

bit1 mov #%00110000,TASCR

pshx

PSHH

ldhx #$1E0

sthx tmodh

PULH

pulx

bset data,portb

bclr 5,TASCR

brclr 7,TASCR,*

mov #%00110000,TASCR

pshx

PSHH

ldhx #$425

sthx tmodh

PULH

pulx

bclr data,portb

bclr 5,TASCR

brclr 7,TASCR,*

bit2 dbnz 1,SP,NextTxBit ;

decx ;

cpx #Buffer0-1 ;

bne NextTxByte ;

pula ;Free stack

clra ;

dbnza $ ;

bset led,porta

tst TxCnt ;

beq ChkKey ;

dbnz TxCnt,NextFrame ;

;检查键盘是否释放

ChkKey lda PORTA ;

coma ;

and #%00011110 ;

BNE CHKKEY;

bclr PLLEn,PORTA ;禁止UHF模块

ExitKeyb mov #DDRAInit,DDRA ;

;mov #PortAInit,PORTA ;

mov #%00011110,INTKBIER ;

WaitKeyUp lda PORTA ;

coma ;

and #%00011110 ;

bne WaitKeyUp ;

bset ACKK,INTKBSR;

bset Led,PORTA ;

tst 5,SP ;Test Return Address Low

bne DecLow ;

dec 4,SP ;

DecLow dec 5,SP ;

rti ;

IRQProc bset 6,INTKBSR;Reset IRQ Flag

rti

DUMMY_INT:RTI

ID0 fcb $04

ID1 fcb $05

ID2 fcb $06

ID3 FCB $07

org VectorStart

dw DUMMY_INT ; ICG 中断

dw DUMMY_INT ; TIM1 溢出中断

dw DUMMY_INT ; TIM1 通道1中断

dw DUMMY_INT ; TIM1通道0中断

dw KeybIRQ ; 外部中断/键盘中断共享一个

向量

dw DUMMY_INT ; SWI 中断

dw main ; 复位向量

END

本文摘自《世界电子元器件》

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有