MC68HC908RF2.txt
上传用户:ruizhu64
上传日期:2022-07-31
资源大小:2k
文件大小:6k
- 软件清单
- $Include 'C:pemicroics08rkzrk2regs.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