Advertisement
Guest User

Untitled

a guest
Aug 25th, 2019
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.81 KB | None | 0 0
  1.  
  2. PROCESSOR 16F1718
  3. RADIX dec
  4.  
  5. INCLUDE "p16f1718.inc"
  6.  
  7. __config _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _MCLRE_ON & _BOREN_ON & _FCMEN_OFF
  8. __config _CONFIG2, _PLLEN_OFF & _ZCDDIS_ON & _PPS1WAY_OFF
  9.  
  10. P5 EQU 0x70 ; RB5, cC, F1(5), C1(5)
  11. P6 EQU 0x71 ; RB6, HL, F1(6), C1(6)
  12. TS1A EQU 0x72 ; RB2, dD, F1(2), C1(2)
  13. TS1B EQU 0x73 ; RB3, eE, F1(3), C1(3)
  14.  
  15. S1A EQU 0x74 ; RA4, fF, F2(4), C2(4)
  16. S1B EQU 0x75 ; RA3, gG, F2(3), C2(3)
  17.  
  18. TS2A EQU 0x76 ; RC2, iI, F3(2), C3(2)
  19. TS2B EQU 0x77 ; RC3, jJ, F3(3), C3(3)
  20.  
  21. C1 EQU 0x78
  22. C2 EQU 0x79
  23. C3 EQU 0x7A
  24.  
  25. F1 EQU 0x7B ; (not) IOCBF flags
  26. F2 EQU 0x7C
  27. F3 EQU 0x7D
  28.  
  29. T0 EQU 0x7E ; initialized to 0x04 in init
  30.  
  31. ; reset vector
  32.  
  33. PAGESEL init
  34. GOTO init
  35.  
  36. ; interrupt vector
  37.  
  38. ORG __VECTOR_INT
  39.  
  40. BTFSS INTCON,IOCIF
  41. BRA _iocx
  42.  
  43. BANKSEL IOCAF
  44. MOVLW 0xFF
  45. XORWF IOCBF,W
  46. ANDWF IOCBF,F
  47. MOVWF F1
  48.  
  49. MOVLW 0xFF
  50. XORWF IOCAF,W
  51. ANDWF IOCAF,F
  52. MOVWF F2
  53.  
  54. MOVLW 0xFF
  55. XORWF IOCCF,W
  56. ANDWF IOCCF,F
  57. MOVWF F3
  58.  
  59. BTFSC F1,5
  60. BRA _iocb5x ; bra to the next number
  61. MOVFW P5
  62. BNZ _bncb5 ; bouncing here
  63. MOVFW T0
  64. MOVWF P5
  65.  
  66. BTFSS C1,5
  67. BRA _higb5
  68.  
  69. BSF IOCBP,IOCBP5
  70. BCF IOCBN,IOCBN5
  71. BCF C1,5
  72.  
  73. MOVLW 'c'
  74. CALL dbg
  75.  
  76. BRA _iocb5x
  77.  
  78. _higb5: BSF IOCBN,IOCBN5
  79. BCF IOCBP,IOCBP5
  80. BSF C1,5
  81.  
  82. MOVLW 'C'
  83. CALL dbg
  84.  
  85. _iocb5x:BTFSC F1,6
  86. BRA _iocb6x ; bra to the next number
  87. MOVFW P6
  88. BNZ _bncb6 ; bouncing here
  89. MOVFW T0
  90. MOVWF P6
  91.  
  92. BTFSS C1,6
  93. BRA _higb6
  94.  
  95. BSF IOCBP,IOCBP6
  96. BCF IOCBN,IOCBN6
  97. BCF C1,6
  98.  
  99. MOVLW 'L'
  100. CALL dbg
  101.  
  102. BRA _iocb6x
  103.  
  104. _higb6: BSF IOCBN,IOCBN6
  105. BCF IOCBP,IOCBP6
  106. BSF C1,6
  107.  
  108. MOVLW 'H'
  109. CALL dbg
  110.  
  111. _iocb6x:BTFSC F1,2
  112. BRA _iocb2x ; bra to the next number
  113. MOVFW TS1A
  114. BNZ _bncb2 ; bouncing here
  115. MOVFW T0
  116. MOVWF TS1A
  117.  
  118. BTFSS C1,2
  119. BRA _higb2
  120.  
  121. BSF IOCBP,IOCBP2
  122. BCF IOCBN,IOCBN2
  123. BCF C1,2
  124.  
  125. MOVLW 'd'
  126. CALL dbg
  127.  
  128. BRA _iocb2x
  129.  
  130. _higb2: BSF IOCBN,IOCBN2
  131. BCF IOCBP,IOCBP2
  132. BSF C1,2
  133.  
  134. MOVLW 'D'
  135. CALL dbg
  136.  
  137. _iocb2x:
  138. BTFSC F1,3
  139. BRA _iocb3x ; bra to the next number
  140. MOVFW TS1B
  141. BNZ _bncb3 ; bouncing here
  142. MOVFW T0
  143. MOVWF TS1B
  144.  
  145. BTFSS C1,3
  146. BRA _higb3
  147.  
  148. BSF IOCBP,IOCBP3
  149. BCF IOCBN,IOCBN3
  150. BCF C1,3
  151.  
  152. MOVLW 'e'
  153. CALL dbg
  154.  
  155. BRA _iocb3x
  156.  
  157. _higb3: BSF IOCBN,IOCBN3
  158. BCF IOCBP,IOCBP3
  159. BSF C1,3
  160.  
  161. MOVLW 'E'
  162. CALL dbg
  163.  
  164. _iocb3x:
  165. BANKSEL IOCAF
  166. BTFSC F2,4
  167. BRA _ioca4x ; bra to the next number
  168. MOVFW S1A
  169. BNZ _bnca4 ; bouncing here
  170. MOVFW T0
  171. MOVWF S1A
  172.  
  173. BTFSS C2,4
  174. BRA _higa4
  175.  
  176. BSF IOCAP,IOCAP4
  177. BCF IOCAN,IOCAN4
  178. BCF C2,4
  179.  
  180. MOVLW 'f'
  181. CALL dbg
  182.  
  183. BRA _ioca4x
  184.  
  185. _higa4: BSF IOCAN,IOCAN4
  186. BCF IOCAP,IOCAP4
  187. BSF C2,4
  188.  
  189. MOVLW 'F'
  190. CALL dbg
  191.  
  192. _ioca4x:
  193. BTFSC F2,3
  194. BRA _ioca3x ; bra to the next number
  195. MOVFW S1B
  196. BNZ _bnca3 ; bouncing here
  197. MOVFW T0
  198. MOVWF S1B
  199.  
  200. BTFSS C2,3
  201. BRA _higa3
  202.  
  203. BSF IOCAP,IOCAP3
  204. BCF IOCAN,IOCAN3
  205. BCF C2,3
  206.  
  207. MOVLW 'g'
  208. CALL dbg
  209.  
  210. BRA _ioca3x
  211.  
  212. _higa3: BSF IOCAN,IOCAN3
  213. BCF IOCAP,IOCAP3
  214. BSF C2,3
  215.  
  216. MOVLW 'G'
  217. CALL dbg
  218.  
  219. _ioca3x:
  220. BANKSEL IOCCF
  221. BTFSC F3,2
  222. BRA _iocc2x ; bra to the next number
  223. MOVFW TS2A
  224. BNZ _bncc2 ; bouncing here
  225. MOVFW T0
  226. MOVWF TS2A
  227.  
  228. BTFSS C3,2
  229. BRA _higc2
  230.  
  231. BSF IOCCP,IOCCP2
  232. BCF IOCCN,IOCCN2
  233. BCF C3,2
  234.  
  235. MOVLW 'i'
  236. CALL dbg
  237.  
  238. BRA _iocc2x
  239.  
  240. _higc2: BSF IOCCN,IOCCN2
  241. BCF IOCCP,IOCCP2
  242. BSF C3,2
  243.  
  244. MOVLW 'I'
  245. CALL dbg
  246.  
  247. _iocc2x:
  248. BTFSC F3,3
  249. BRA _iocc3x ; bra to the next number
  250. MOVFW TS2B
  251. BNZ _bncc3 ; bouncing here
  252. MOVFW T0
  253. MOVWF TS2B
  254.  
  255. BTFSS C3,3
  256. BRA _higc3
  257.  
  258. BSF IOCCP,IOCCP3
  259. BCF IOCCN,IOCCN3
  260. BCF C3,3
  261.  
  262. MOVLW 'j'
  263. CALL dbg
  264.  
  265. BRA _iocc3x
  266.  
  267. _higc3: BSF IOCCN,IOCCN3
  268. BCF IOCCP,IOCCP3
  269. BSF C3,3
  270.  
  271. MOVLW 'J'
  272. CALL dbg
  273.  
  274. _iocc3x:
  275. BRA _iocx
  276.  
  277. _bncb5: MOVLW '5'
  278. CALL dbg
  279. BRA _iocb5x
  280.  
  281. _bncb6: MOVLW '6'
  282. CALL dbg
  283. BRA _iocb6x
  284.  
  285. _bncb2: MOVLW '2'
  286. CALL dbg
  287. BRA _iocb2x
  288.  
  289. _bncb3: MOVLW '3'
  290. CALL dbg
  291. BRA _iocb3x
  292.  
  293. _bnca4: MOVLW '4'
  294. CALL dbg
  295. BRA _ioca4x
  296.  
  297. _bnca3: MOVLW '1'
  298. CALL dbg
  299. BRA _ioca3x
  300.  
  301. _bncc2: MOVLW '7'
  302. CALL dbg
  303. BRA _iocc2x
  304.  
  305. _bncc3: MOVLW '8'
  306. CALL dbg
  307. BRA _iocc3x
  308.  
  309. _iocx: BANKSEL PIR1
  310. BTFSS PIR1,TMR1IF
  311. BRA _tmr1x
  312.  
  313. BCF PIR1,TMR1IF
  314.  
  315. ; time set
  316.  
  317. BANKSEL TMR1H ; FFFF - 7 (in hex) ... 31k*258us=8
  318. MOVLW 0xFF ; 258us delay
  319. MOVWF TMR1H
  320. MOVLW 0xF8
  321. MOVWF TMR1L
  322.  
  323. MOVFW P5
  324. BZ _tmr1b5x ; if there is nothing we check next
  325. DECF P5,F
  326.  
  327. _tmr1b5x:
  328. MOVFW P6
  329. BZ _tmr1b6x ; if there is nothing we check next
  330. DECF P6,F
  331.  
  332. _tmr1b6x:
  333. MOVFW TS1A
  334. BZ _tmr1b2x ; if there is nothing we check next
  335. DECF TS1A,F
  336.  
  337. _tmr1b2x:
  338. MOVFW TS1B
  339. BZ _tmr1b3x ;if there is nothing we finish interrupt
  340. DECF TS1B,F
  341.  
  342. _tmr1b3x:
  343. MOVFW S1A
  344. BZ _tmr1a4x ;if there is nothing we finish interrupt
  345. DECF S1A,F
  346.  
  347. _tmr1a4x:
  348. MOVFW S1B
  349. BZ _tmr1a3x ;if there is nothing we finish interrupt
  350. DECF S1B,F
  351.  
  352. _tmr1a3x:
  353. MOVFW TS2A
  354. BZ _tmr1c2x ;if there is nothing we finish interrupt
  355. DECF TS2A,F
  356.  
  357. _tmr1c2x:
  358. MOVFW TS2B
  359. BZ _tmr1x ;if there is nothing we finish interrupt
  360. DECF TS2B,F
  361.  
  362. _tmr1x: RETFIE
  363.  
  364. init: BANKSEL LATA
  365. CLRF LATA
  366. CLRF LATB
  367. BSF LATB,7 ; RB7 default high
  368. CLRF LATC
  369.  
  370. BANKSEL TRISA
  371. MOVLW 10011011b ; RA2,RA5,RA6 out
  372. MOVWF TRISA
  373. MOVLW 01111111b ; RB7 out
  374. MOVWF TRISB
  375. MOVLW 11111111b ; all in
  376. MOVWF TRISC
  377.  
  378. BANKSEL INLVLA
  379. BSF INLVLA,3 ; ST thresholds
  380. BSF INLVLA,4
  381. BSF INLVLB,2
  382. BSF INLVLB,3
  383. BSF INLVLC,2
  384. BSF INLVLC,3
  385.  
  386. ; setup Pin Properties
  387.  
  388. BANKSEL ANSELA
  389. CLRF ANSELA
  390. CLRF ANSELB
  391. CLRF ANSELC
  392.  
  393. BANKSEL OPTION_REG
  394. BCF OPTION_REG,NOT_WPUEN
  395.  
  396. ; initialize
  397.  
  398. MOVLW 0x04
  399. MOVWF T0
  400.  
  401. CLRF P5
  402. CLRF P6
  403. CLRF TS1A
  404. CLRF TS1B
  405. CLRF S1A
  406. CLRF S1B
  407. CLRF TS2A
  408. CLRF TS2B
  409. CLRF F1
  410. CLRF F2
  411. CLRF F3
  412.  
  413. ; setup IOC
  414.  
  415. BANKSEL IOCAP
  416. MOVLW 10011011b
  417. ;MOVWF IOCAP ; we check falling edge first (N)
  418. MOVWF IOCAN
  419. MOVLW 0xFF
  420. MOVWF C2
  421.  
  422. MOVLW 01111111b
  423. ;MOVWF IOCBP
  424. MOVWF IOCBN
  425. MOVLW 0xFF
  426. MOVWF C1
  427.  
  428. MOVLW 11111111b
  429. ;MOVWF IOCCP
  430. MOVWF IOCCN
  431. MOVLW 0xFF
  432. MOVWF C3
  433.  
  434. ; enable IRQ
  435.  
  436. BANKSEL INTCON
  437. BSF INTCON,IOCIE ; enable IOC IRQ
  438. BSF INTCON,PEIE ; enable peripheral IRQ--
  439. BSF INTCON,GIE ; enable global IRQ
  440. BANKSEL PIE1
  441. BSF PIE1,TMR1IE ; enable
  442.  
  443. ; configure timer1
  444.  
  445. BANKSEL T1CON
  446. BSF T1CON,6
  447. BSF T1CON,7
  448. BSF T1CON,TMR1ON ; enable Timer1 On bit
  449. MOVLW 0xFF
  450. IORWF TMR1H,F
  451. IORWF TMR1L,F
  452.  
  453. ; setup EUSART Asynchronous Mode
  454.  
  455. BANKSEL TX1STA
  456. MOVLW 0 ; Baud rate 1Mbps
  457. MOVWF SPBRG
  458.  
  459. BSF TX1STA,BRGH ; High speed baud rate
  460. BSF RC1STA,SPEN
  461. BSF TX1STA,TXEN ; Configures TX1STA
  462.  
  463. BANKSEL OSCCON
  464. MOVLW 01111000b ; IRCF to 16MHz
  465. MOVWF OSCCON
  466.  
  467. BANKSEL RB7PPS
  468. MOVLW 10100b ; Output Source Selection TX/CK
  469. MOVWF RB7PPS
  470. GOTO main
  471.  
  472. dbg: BANKSEL TX1STA
  473. dbgl: BTFSS TX1STA,TRMT
  474. GOTO dbgl
  475. MOVWF TX1REG
  476. RETURN
  477.  
  478. wait: BANKSEL OSCSTAT
  479. waitl: BTFSS OSCSTAT,HFIOFS
  480. GOTO waitl
  481. RETURN
  482.  
  483. main: CALL wait
  484. MOVLW 'A'
  485. CALL dbg
  486.  
  487. idle: GOTO idle
  488. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement