1. gzyueqian
      13352868059
      首頁 > 新聞中心 > > 正文

      MC68HC908RF2在汽車遠程無匙進入系統中的應用

      更新時間: 2006-03-23 15:36:28來源: 粵嵌教育瀏覽量:2889

        簡介

        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所示。

        圖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

      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 日本一区二区三区免费在线观看 | 日韩国产欧美二区手机在线 | 亚洲日韩欧美精品一中文字幕 | 日韩免费AV乱码高清专区 | 污网站在线观看 | 日本有码在线观看 |