MC68HC908RF2.txt
上传用户:ruizhu64
上传日期:2022-07-31
资源大小:2k
文件大小:6k
源码类别:

远程控制编程

开发平台:

Asm

  1. 软件清单
  2. $Include 'C:pemicroics08rkzrk2regs.inc'
  3. ;定义起始地址
  4. RAMStart EQU $0080 ;数据存储区起开始地址
  5. RomStart EQU $7800 ;程序存储区起开始地址
  6. VectorStart EQU $FFF2 ;中断向量表
  7. ;定义A口各位的定义
  8. ; Porta A
  9. PLLEn equ 0 ; UHF模块控制位
  10. Row0 equ 1 ; 键盘占用PORTA口的PA.1,PA.2,PA.3
  11. Row1 equ 2 ;
  12. Row2 equ 3 ;
  13. Led equ 7 ; Led占用PORTA口的PA.7
  14. ACKK EQU 2
  15. ;定义A口各位的方向:PA.0和PA.7定义为输出,其余定义为输入
  16. DDRAInit equ %10000001 ;
  17. PortAInit equ %11111111 ;
  18. ;定义B口各位的定义
  19. ; Porta B
  20. Data equ 2 ; 数据输出
  21. DClk equ 3 ; 数据时钟
  22. DDRBInit equ %00000100 ;
  23. PortBInit equ %00000000 ;
  24. org RamStart
  25. ;以下为发射数据存储区
  26. Buffer0 DS 1 ;
  27. Buffer1 DS 1 ;
  28. Buffer2 DS 1 ;
  29. Buffer3 DS 1 ;
  30. Buffer4 DS 1 ;
  31. Buffer5 DS 1 ;
  32. Buffer6 DS 1 ;
  33. CRC DS 1 ;
  34. BitCount DS 1 ;
  35. LastRow DS 1 ;
  36. LastCol DS 1 ;
  37. TxCnt DS 1 ;
  38. TEMP DS 1 ;
  39. ; Costanti
  40. Dly300ms equ $03 ;300ms@8Mhz
  41. MinTx equ $01 ;Minimum number of frame 
  42. transmitted;//03
  43. FrameDly equ $ff ;Delay between frames 
  44. (771*FrameDly cycles)
  45. org RomStart
  46. main
  47. mov #%00000011,CONFIG ;禁止 COP 允许 Stop 指令
  48. rsp ;初始化堆栈指针
  49. clra ;
  50. clrx
  51. clr buffer0 ;
  52. clr buffer1 ;
  53. clr buffer2 ;
  54. clr buffer3 ;
  55. clr buffer4 ;
  56. clr buffer5 ;
  57. clr buffer6 ;
  58. clr crc ;
  59. clr BitCount ;
  60. clr LastRow ;
  61. clr LastCol ;
  62. clr TxCnt ;
  63. clr TEMP;
  64. WarmStart
  65. mov #DDRAInit,DDRA ;初始化PORTA口
  66. mov #PortAInit,PORTA ;
  67. bset led,porta
  68. mov #DDRBInit,DDRB ;初始化PORTB口
  69. mov #PortBInit,PORTB ;
  70. mov #%00100011,INTKBSR ;
  71. mov #%00011110,INTKBIER ;
  72. BSET ACKK,INTKBSR ;
  73. mov #%00100001,INTKBSR ;
  74. StopProc
  75. bclr pllen,porta
  76. STOP 
  77. bra StopProc
  78. KeybIRQ
  79. brclr 7,INTKBSR,KeyboardProc ;检查是否为外部中断
  80. jmp IRQProc ;不是有效的键盘中断,
  81. 退出
  82. KeyboardProc bset 2,INTKBSR ;清除键盘中断标志
  83. clrx
  84. BCLR Led,PORTA ;电亮LED
  85. WaitRow
  86. lda PORTA ;读取PORTA口数据
  87. coma ;
  88. and #%00011110 ;
  89. lsra ;
  90. bne RowOk ;
  91. dbnza $ ;
  92. dbnzx WaitRow ;如果PORTA口数据为0,一直读取,直到延时时间到
  93. jmp ExitKeyb 延时到
  94. RowOk
  95. sta LastRow ;Save Row number
  96. clr INTKBIER ;Clear Keyboard interrupt enable bits
  97. lda #%00011110 ;All rows to 1
  98. ora DDRA ;
  99. sta DDRA ;
  100. lda #%00011110 ;
  101. ora PORTA ;
  102. sta PORTA ;
  103. clrx ;
  104. mov #$10,BitCount ;
  105. ColLoop
  106. lda #$40 ;
  107. KeyLoop
  108. dbnzx KeyLoop ;
  109. dbnza KeyLoop ;
  110. ;组织待发射数据
  111. SetKey
  112. lda lastrow
  113. lsla
  114. lsla
  115. lsla
  116. lsla
  117. sta Buffer4 ;Init Key Code
  118. LDA ID0
  119. STA Buffer0 ;
  120. lda ID1 ;Init ID
  121. sta Buffer1 ;
  122. lda ID2 ;
  123. sta Buffer2 ;
  124. lda ID3 ;
  125. sta Buffer3 ;
  126. lda #Dly300ms ;Attendi 350ms
  127. psha ;
  128. clra ;
  129. clrx ;
  130. ToggleDly
  131. dbnzx $ ;[3*256=768]
  132. dbnza ToggleDly ;[256*771]
  133. dbnz 1,SP,ToggleDly ;[197379*Dly300ms]
  134. pula ;
  135. lda PORTA ;Check if key still down
  136. and #%01100000 ;
  137. nsa ;
  138. lsra ;
  139. bne NoToggle ;
  140. bset 0,Buffer0 ;键盘没有释放
  141. NoToggle
  142. lda #$01 ;
  143. add Buffer6 ;
  144. sta Buffer6 ;
  145. clra ;
  146. adc Buffer5 ;
  147. sta Buffer5 ;
  148. clc
  149. lda Buffer6 ;
  150. and #$0F ;
  151. beq NoRotate ;
  152. tax
  153. NextRotate
  154. lda Buffer5 ;
  155. rora ;
  156. ror Buffer0 ;
  157. ror Buffer1 ;
  158. ror Buffer2 ;
  159. ror Buffer3 ;
  160. ror Buffer4 ;
  161. ror Buffer5 ;
  162. dbnzx NextRotate ;
  163. NoRotate
  164. ldhx #Buffer0 ;
  165. lda ,X ;
  166. eor 1,X ;
  167. sta 1,X ;
  168. eor 2,X ;
  169. sta 2,X ;
  170. eor 3,X ;
  171. sta 3,X ;
  172. eor 4,X ;
  173. sta 4,X ;
  174. eor 5,X ;
  175. sta 5,X ;
  176. clr CRC ;
  177. ldhx #Buffer0 ;
  178. NextCRCByte LDA ,X
  179. ADD BUFFER1
  180. ADD BUFFER2
  181. ADD BUFFER3
  182. ADD BUFFER4
  183. ADD BUFFER5
  184. ADD BUFFER6
  185. STA CRC
  186. ;发送程序
  187. mov #DDRAInit,DDRA ;初始化A口方向寄存器
  188. mov #PortAInit,PORTA ;初始化A口
  189. mov #%00011110,INTKBIER 
  190. mov #MinTx,TxCnt ;一共发送3帧相同的数据
  191. bset PLLEn,PORTA ;允许UHF模块
  192. ldx #FrameDly ;
  193. clra ;
  194. FrameBlank
  195. dbnza $ ;
  196. dbnzx FrameBlank
  197. lda #$0c
  198. ;********产生24个TE******************************* 
  199. *******************
  200. HX301
  201. BCLR Data,PORTB
  202. mov #%00110000,TASCR
  203. ldhx #$0200
  204. sthx TAMODH ;
  205. bclr 5,TASCR ;计数器开始计数
  206. brclr 7,TASCR,* ;Wait
  207. BSET Data,PORTB
  208. mov #%00110000,TASCR
  209. ldhx #$0214
  210. sthx TAMODH ;
  211. bclr 5,TASCR ;计数器开始计数
  212. brclr 7,TASCR,* ;Wait
  213. dbnza HX301
  214. bclr Data,portb
  215. lda #$09
  216. HX302 mov #%00110000,TASCR
  217. ldhx #$023e
  218. sthx TAMODH ;
  219. bclr 5,TASCR ;计数器开始计数
  220. brclr 7,TASCR,* ;Wait
  221. dbnza HX302
  222. NextFrame
  223. ldhx #CRC ;指向CRC的RAM地址
  224. psha ;
  225. NextTxByte
  226. lda #$08 ;
  227. sta 1,SP ;
  228. NextTxBit lda 0,X ;将X+0指向的地址的内容
  229. ACC中
  230. rora ;带进位位右移
  231. ror 0,X ;将X+0的地址的内容带进位
  232. 右移后结果保存在X+0的地址中
  233. bcs Bit1 ;C位为1跳转,电平的持续时间为(1/3)T
  234. bit0 mov #%00110000,TASCR ;mov #%00110111,TASCR
  235. bset data,portb
  236. pshx
  237. PSHH
  238. ldhx #$425
  239. sthx tmodh
  240. PULH
  241. pulx
  242. bclr 5,TASCR
  243. brclr 7,TASCR,*
  244. mov #%00110000,TASCR 
  245. pshx
  246. PSHH
  247. ldhx #$1E0
  248. sthx tmodh
  249. PULH
  250. pulx
  251. bclr data,portb
  252. bclr 5,TASCR
  253. brclr 7,TASCR,*
  254. jmp bit2
  255. bit1 mov #%00110000,TASCR
  256. pshx
  257. PSHH
  258. ldhx #$1E0
  259. sthx tmodh
  260. PULH
  261. pulx
  262. bset data,portb
  263. bclr 5,TASCR
  264. brclr 7,TASCR,*
  265. mov #%00110000,TASCR
  266. pshx
  267. PSHH
  268. ldhx #$425
  269. sthx tmodh
  270. PULH
  271. pulx
  272. bclr data,portb
  273. bclr 5,TASCR
  274. brclr 7,TASCR,*
  275. bit2 dbnz 1,SP,NextTxBit ;
  276. decx ;
  277. cpx #Buffer0-1 ;
  278. bne NextTxByte ;
  279. pula ;Free stack
  280. clra ;
  281. dbnza $ ;
  282. bset led,porta
  283. tst TxCnt ;
  284. beq ChkKey ;
  285. dbnz TxCnt,NextFrame ;
  286. ;检查键盘是否释放
  287. ChkKey lda PORTA ;
  288. coma ;
  289. and #%00011110 ;
  290. BNE CHKKEY;
  291. bclr PLLEn,PORTA ;禁止UHF模块
  292. ExitKeyb mov #DDRAInit,DDRA ;
  293. ;mov #PortAInit,PORTA ;
  294. mov #%00011110,INTKBIER ;
  295. WaitKeyUp lda PORTA ;
  296. coma ;
  297. and #%00011110 ;
  298. bne WaitKeyUp ;
  299. bset ACKK,INTKBSR;
  300. bset Led,PORTA ;
  301. tst 5,SP ;Test Return Address Low
  302. bne DecLow ;
  303. dec 4,SP ;
  304. DecLow dec 5,SP ;
  305. rti ;
  306. IRQProc bset 6,INTKBSR;Reset IRQ Flag
  307. rti
  308. DUMMY_INT:RTI
  309. ID0 fcb $04
  310. ID1 fcb $05
  311. ID2 fcb $06
  312. ID3 FCB $07
  313. org VectorStart
  314. dw DUMMY_INT ; ICG 中断
  315. dw DUMMY_INT ; TIM1 溢出中断
  316. dw DUMMY_INT ; TIM1 通道1中断
  317. dw DUMMY_INT ; TIM1通道0中断
  318. dw KeybIRQ ; 外部中断/键盘中断共享一个
  319. 向量
  320. dw DUMMY_INT ; SWI 中断
  321. dw main ; 复位向量
  322. END