Advertisement
Xisabla

Assembly project

Oct 11th, 2021
3,188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;*******************************************************************************
  2. ;                                                                              *
  3. ;    Microchip licenses this software to you solely for use with Microchip     *
  4. ;    products. The software is owned by Microchip and/or its licensors, and is *
  5. ;    protected under applicable copyright laws.  All rights reserved.          *
  6. ;                                                                              *
  7. ;    This software and any accompanying information is for suggestion only.    *
  8. ;    It shall not be deemed to modify Microchip?s standard warranty for its    *
  9. ;    products.  It is your responsibility to ensure that this software meets   *
  10. ;    your requirements.                                                        *
  11. ;                                                                              *
  12. ;    SOFTWARE IS PROVIDED "AS IS".  MICROCHIP AND ITS LICENSORS EXPRESSLY      *
  13. ;    DISCLAIM ANY WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING  *
  14. ;    BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS    *
  15. ;    FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL          *
  16. ;    MICROCHIP OR ITS LICENSORS BE LIABLE FOR ANY INCIDENTAL, SPECIAL,         *
  17. ;    INDIRECT OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, HARM TO     *
  18. ;    YOUR EQUIPMENT, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY OR    *
  19. ;    SERVICES, ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY   *
  20. ;    DEFENSE THEREOF), ANY CLAIMS FOR INDEMNITY OR CONTRIBUTION, OR OTHER      *
  21. ;    SIMILAR COSTS.                                                            *
  22. ;                                                                              *
  23. ;    To the fullest extend allowed by law, Microchip and its licensors         *
  24. ;    liability shall not exceed the amount of fee, if any, that you have paid  *
  25. ;    directly to Microchip to use this software.                               *
  26. ;                                                                              *
  27. ;    MICROCHIP PROVIDES THIS SOFTWARE CONDITIONALLY UPON YOUR ACCEPTANCE OF    *
  28. ;    THESE TERMS.                                                              *
  29. ;                                                                              *
  30. ;*******************************************************************************
  31. ;                                                                              *
  32. ;    Filename: main.asm                                                        *
  33. ;    Date: 13/01/2020                                                          *
  34. ;    File Version: 1.0.0                                                       *
  35. ;    Author: MIQUET Gautier                                                    *
  36. ;    Company: PROJET ELEC ISEN - Equipe 1                                      *
  37. ;    Description: Main source file of the electronic projet (week 2)           *
  38. ;                                                                              *
  39. ;*******************************************************************************
  40. ;                                                                              *
  41. ;    Notes: In the MPLAB X Help, refer to the MPASM Assembler documentation    *
  42. ;    for information on assembly instructions.                                 *
  43. ;                                                                              *
  44. ;*******************************************************************************
  45. ;                                                                              *
  46. ;    Known Issues: This template is designed for relocatable code.  As such,   *
  47. ;    build errors such as "Directive only allowed when generating an object    *
  48. ;    file" will result when the 'Build in Absolute Mode' checkbox is selected  *
  49. ;    in the project properties.  Designing code in absolute mode is            *
  50. ;    antiquated - use relocatable mode.                                        *
  51. ;                                                                              *
  52. ;*******************************************************************************
  53. ;                                                                              *
  54. ;    Revision History:                                                         *
  55. ;                                                                              *
  56. ;*******************************************************************************
  57.  
  58.  
  59.  
  60. ;*******************************************************************************
  61. ; Processor Inclusion
  62. ;
  63. ; TODO Step #1 Open the task list under Window > Tasks.  Include your
  64. ; device .inc file - e.g. #include <device_name>.inc.  Available
  65. ; include files are in C:\Program Files\Microchip\MPLABX\mpasmx
  66. ; assuming the default installation path for MPLAB X.  You may manually find
  67. ; the appropriate include file for your device here and include it, or
  68. ; simply copy the include generated by the configuration bits
  69. ; generator (see Step #2).
  70. ;
  71. ;*******************************************************************************
  72.  
  73. #include "p18f25k40.inc"
  74.  
  75. ;*******************************************************************************
  76. ;
  77. ; TODO Step #2 - Configuration Word Setup
  78. ;
  79. ; The 'CONFIG' directive is used to embed the configuration word within the
  80. ; .asm file. MPLAB X requires users to embed their configuration words
  81. ; into source code.  See the device datasheet for additional information
  82. ; on configuration word settings.  Device configuration bits descriptions
  83. ; are in C:\Program Files\Microchip\MPLABX\mpasmx\P<device_name>.inc
  84. ; (may change depending on your MPLAB X installation directory).
  85. ;
  86. ; MPLAB X has a feature which generates configuration bits source code.  Go to
  87. ; Window > PIC Memory Views > Configuration Bits.  Configure each field as
  88. ; needed and select 'Generate Source Code to Output'.  The resulting code which
  89. ; appears in the 'Output Window' > 'Config Bits Source' tab may be copied
  90. ; below.
  91. ;
  92. ;*******************************************************************************
  93.  
  94. ; CONFIG1L
  95.   CONFIG  FEXTOSC = OFF         ; External Oscillator mode Selection bits (Oscillator not enabled)
  96.   CONFIG  RSTOSC = HFINTOSC_64MHZ; Power-up default value for COSC bits (HFINTOSC with HFFRQ = 64 MHz and CDIV = 1:1)
  97.  
  98. ; CONFIG1H
  99.   CONFIG  CLKOUTEN = OFF        ; Clock Out Enable bit (CLKOUT function is disabled)
  100.   CONFIG  CSWEN = ON            ; Clock Switch Enable bit (Writing to NOSC and NDIV is allowed)
  101.   CONFIG  FCMEN = ON            ; Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor enabled)
  102.  
  103. ; CONFIG2L
  104.   CONFIG  MCLRE = EXTMCLR       ; Master Clear Enable bit (If LVP = 0, MCLR pin is MCLR; If LVP = 1, RE3 pin function is MCLR )
  105.   CONFIG  PWRTE = OFF           ; Power-up Timer Enable bit (Power up timer disabled)
  106.   CONFIG  LPBOREN = OFF         ; Low-power BOR enable bit (ULPBOR disabled)
  107.   CONFIG  BOREN = SBORDIS       ; Brown-out Reset Enable bits (Brown-out Reset enabled , SBOREN bit is ignored)
  108.  
  109. ; CONFIG2H
  110.   CONFIG  BORV = VBOR_2P45      ; Brown Out Reset Voltage selection bits (Brown-out Reset Voltage (VBOR) set to 2.45V)
  111.   CONFIG  ZCD = OFF             ; ZCD Disable bit (ZCD disabled. ZCD can be enabled by setting the ZCDSEN bit of ZCDCON)
  112.   CONFIG  PPS1WAY = ON          ; PPSLOCK bit One-Way Set Enable bit (PPSLOCK bit can be cleared and set only once; PPS registers remain locked after one clear/set cycle)
  113.   CONFIG  STVREN = ON           ; Stack Full/Underflow Reset Enable bit (Stack full/underflow will cause Reset)
  114.   CONFIG  DEBUG = OFF           ; Debugger Enable bit (Background debugger disabled)
  115.   CONFIG  XINST = OFF           ; Extended Instruction Set Enable bit (Extended Instruction Set and Indexed Addressing Mode disabled)
  116.  
  117. ; CONFIG3L
  118.   CONFIG  WDTCPS = WDTCPS_31    ; WDT Period Select bits (Divider ratio 1:65536; software control of WDTPS)
  119.   CONFIG  WDTE = OFF            ; WDT operating mode (WDT Disabled)
  120.  
  121. ; CONFIG3H
  122.   CONFIG  WDTCWS = WDTCWS_7     ; WDT Window Select bits (window always open (100%); software control; keyed access not required)
  123.   CONFIG  WDTCCS = SC           ; WDT input clock selector (Software Control)
  124.  
  125. ; CONFIG4L
  126.   CONFIG  WRT0 = OFF            ; Write Protection Block 0 (Block 0 (000800-001FFFh) not write-protected)
  127.   CONFIG  WRT1 = OFF            ; Write Protection Block 1 (Block 1 (002000-003FFFh) not write-protected)
  128.   CONFIG  WRT2 = OFF            ; Write Protection Block 2 (Block 2 (004000-005FFFh) not write-protected)
  129.   CONFIG  WRT3 = OFF            ; Write Protection Block 3 (Block 3 (006000-007FFFh) not write-protected)
  130.  
  131. ; CONFIG4H
  132.   CONFIG  WRTC = OFF            ; Configuration Register Write Protection bit (Configuration registers (300000-30000Bh) not write-protected)
  133.   CONFIG  WRTB = OFF            ; Boot Block Write Protection bit (Boot Block (000000-0007FFh) not write-protected)
  134.   CONFIG  WRTD = OFF            ; Data EEPROM Write Protection bit (Data EEPROM not write-protected)
  135.   CONFIG  SCANE = ON            ; Scanner Enable bit (Scanner module is available for use, SCANMD bit can control the module)
  136.   CONFIG  LVP = OFF             ; Low Voltage Programming Enable bit (HV on MCLR/VPP must be used for programming)
  137.  
  138. ; CONFIG5L
  139.   CONFIG  CP = OFF              ; UserNVM Program Memory Code Protection bit (UserNVM code protection disabled)
  140.   CONFIG  CPD = OFF             ; DataNVM Memory Code Protection bit (DataNVM code protection disabled)
  141.  
  142. ; CONFIG5H
  143.  
  144. ; CONFIG6L
  145.   CONFIG  EBTR0 = OFF           ; Table Read Protection Block 0 (Block 0 (000800-001FFFh) not protected from table reads executed in other blocks)
  146.   CONFIG  EBTR1 = OFF           ; Table Read Protection Block 1 (Block 1 (002000-003FFFh) not protected from table reads executed in other blocks)
  147.   CONFIG  EBTR2 = OFF           ; Table Read Protection Block 2 (Block 2 (004000-005FFFh) not protected from table reads executed in other blocks)
  148.   CONFIG  EBTR3 = OFF           ; Table Read Protection Block 3 (Block 3 (006000-007FFFh) not protected from table reads executed in other blocks)
  149.  
  150. ; CONFIG6H
  151.   CONFIG  EBTRB = OFF           ; Boot Block Table Read Protection bit (Boot Block (000000-0007FFh) not protected from table reads executed in other blocks)
  152.  
  153.  
  154. ;*******************************************************************************
  155. ;
  156. ; TODO Step #3 - Variable Definitions
  157. ;
  158. ; Refer to datasheet for available data memory (RAM) organization assuming
  159. ; relocatible code organization (which is an option in project
  160. ; properties > mpasm (Global Options)).  Absolute mode generally should
  161. ; be used sparingly.
  162. ;
  163. ; Example of using GPR Uninitialized Data
  164. ;
  165. ;   GPR_VAR        UDATA
  166. ;   MYVAR1         RES        1      ; User variable linker places
  167. ;   MYVAR2         RES        1      ; User variable linker places
  168. ;   MYVAR3         RES        1      ; User variable linker places
  169. ;
  170. ;   ; Example of using Access Uninitialized Data Section (when available)
  171. ;   ; The variables for the context saving in the device datasheet may need
  172. ;   ; memory reserved here.
  173. ;   INT_VAR        UDATA_ACS
  174. ;   W_TEMP         RES        1      ; w register for context saving (ACCESS)
  175. ;   STATUS_TEMP    RES        1      ; status used for context saving
  176. ;   BSR_TEMP       RES        1      ; bank select used for ISR context saving
  177. ;
  178. ;*******************************************************************************
  179.  
  180. INT_VAR UDATA_ACS
  181.  
  182. ; TEMPO ITERATORS
  183. i RES 1
  184. j RES 1
  185. k RES 1
  186.  
  187. ; MATRIX SIZE
  188. MATRIX_WIDTH RES 1
  189. MATRIX_HEIGHT RES 1
  190.  
  191. ; MATRIX ITERATOR
  192. MATRIX_ITR RES 1
  193.  
  194. ; VECOTR POINTER
  195. VEC_HIGH RES 1
  196. VEC_LOW RES 1
  197.  
  198. ; VECTOR SIZE
  199. VEC_SIZE RES 1
  200.  
  201. ; TILE LED STREAM ITERATOR
  202. TILE_ITR RES 1
  203.  
  204. ; FILL VECTOR ITERATOR
  205. FILL_ITR RES 1
  206.  
  207. ; COLUMN LEVEL TO STREAM
  208. COL_LEVEL RES 1
  209.  
  210. ; FREQUENCIES VALUES [0, 8]
  211. FREQ_LOW RES 1
  212. FREQ_MED_LOW RES 1
  213. FREQ_MED_HIGH RES 1
  214. FREC_HIGH RES 1
  215.  
  216. FREQ_LEVEL RES 1
  217.  
  218. TEMP RES 1
  219.  
  220. ;*******************************************************************************
  221. ; Reset Vector
  222. ;*******************************************************************************
  223.  
  224. RES_VECT  CODE    0x0000            ; processor reset vector
  225.     GOTO    RUN                   ; go to beginning of program
  226.  
  227. ;*******************************************************************************
  228. ; TODO Step #4 - Interrupt Service Routines
  229. ;
  230. ; There are a few different ways to structure interrupt routines in the 8
  231. ; bit device families.  On PIC18's the high priority and low priority
  232. ; interrupts are located at 0x0008 and 0x0018, respectively.  On PIC16's and
  233. ; lower the interrupt is at 0x0004.  Between device families there is subtle
  234. ; variation in the both the hardware supporting the ISR (for restoring
  235. ; interrupt context) as well as the software used to restore the context
  236. ; (without corrupting the STATUS bits).
  237. ;
  238. ; General formats are shown below in relocatible format.
  239. ;
  240. ;------------------------------PIC16's and below--------------------------------
  241. ;
  242. ; ISR       CODE    0x0004           ; interrupt vector location
  243. ;
  244. ;     <Search the device datasheet for 'context' and copy interrupt
  245. ;     context saving code here.  Older devices need context saving code,
  246. ;     but newer devices like the 16F#### don't need context saving code.>
  247. ;
  248. ;     RETFIE
  249. ;
  250. ;----------------------------------PIC18's--------------------------------------
  251. ;
  252. ; ISRHV     CODE    0x0008
  253. ;     GOTO    HIGH_ISR
  254. ; ISRLV     CODE    0x0018
  255. ;     GOTO    LOW_ISR
  256. ;
  257. ; ISRH      CODE                     ; let linker place high ISR routine
  258. ; HIGH_ISR
  259. ;     <Insert High Priority ISR Here - no SW context saving>
  260. ;     RETFIE  FAST
  261. ;
  262. ; ISRL      CODE                     ; let linker place low ISR routine
  263. ; LOW_ISR
  264. ;       <Search the device datasheet for 'context' and copy interrupt
  265. ;       context saving code here>
  266. ;     RETFIE
  267. ;
  268. ;*******************************************************************************
  269.  
  270. ; TODO INSERT ISR HERE
  271.  
  272. ;*******************************************************************************
  273. ; MAIN PROGRAM
  274. ;*******************************************************************************
  275.  
  276. MAIN_PROG CODE                      ; let linker place main program
  277.  
  278. ;*******************************************************************************
  279. ; MAIN VALUES INIT
  280. ;*******************************************************************************
  281.  
  282. INIT
  283.     ; INPUTS/OUTPUTS
  284.     MOVLW b'00011111'
  285.     MOVWF TRISA         ; Set A INPUT for ADC
  286.     MOVLW 0x00
  287.     MOVWF TRISB         ; Set B as OUTPUT
  288.     MOVLW 0x00
  289.     MOVWF TRISC         ; Set C as OUTPUT
  290.    
  291.     ; SET BSR BANK
  292.     MOVLB 0x0F
  293.    
  294.     ; ADC
  295.     MOVLW b'00000000'
  296.     MOVWF ADCON1, 1
  297.     MOVLW b'00000000'
  298.     MOVWF ADCON2, 1
  299.     MOVLW b'00000000'
  300.     MOVWF ADCON3, 1
  301.     MOVLW b'10000000'
  302.     MOVWF ADCON0        ; Enable ADC
  303.     MOVLW b'00001000'
  304.     ;MOVLW b'00111111'  ; A TESTER
  305.     MOVWF ADCLK, 1      ; Fosc
  306.     MOVLW b'00000000'
  307.     MOVWF ADREF, 1       ; Voltage reference (VREF-=AVss, VREF+=Vdd)
  308.     MOVLW b'00000000'    ; ANA0
  309.     MOVWF ADPCH, 1       ; ANA0 by default
  310.     MOVLW b'11111111'
  311.     MOVWF ADACQ, 1       ; Acquisition Time = Beaucoup
  312.     MOVLW b'00011111'
  313.     MOVWF ANSELA, 1     ; Analog inputs
  314.    
  315.    
  316.     ; STATUS LED ON
  317.     BSF LATB, 4
  318.    
  319.     ; LED MATRIX OFF
  320.     BCF LATB, 5
  321.    
  322.     ; SIDE LEDs OFF
  323.     MOVLW 0x00
  324.     MOVWF LATC
  325.    
  326.     ; MATRIX SIZE
  327.     MOVLW 0x08
  328.     MOVWF MATRIX_WIDTH
  329.     MOVLW 0x08
  330.     MOVWF MATRIX_HEIGHT
  331.    
  332.     ; VECTOR PTR
  333.     MOVLW 0x02
  334.     MOVWF VEC_HIGH
  335.     MOVLW 0x00
  336.     MOVWF VEC_LOW
  337.    
  338.     ; ITERATORS AND SIZES DEFAULT (=0)
  339.     MOVLW 0x00
  340.     MOVWF VEC_SIZE
  341.     MOVWF MATRIX_ITR
  342.     MOVWF TILE_ITR
  343.     MOVWF FILL_ITR
  344.    
  345.     ; RESET PTR0
  346.     CALL RESET_PTR0
  347.    
  348.     ; SET ALL LED AND VECTOR TO 0
  349.     CALL COL_LVL_0
  350.     CALL COL_LVL_0
  351.     CALL COL_LVL_0
  352.     CALL COL_LVL_0
  353.     CALL COL_LVL_0
  354.     CALL COL_LVL_0
  355.     CALL COL_LVL_0
  356.     CALL COL_LVL_0
  357.     CALL FILL_MAT
  358.    
  359.     RETURN
  360.  
  361. ;*******************************************************************************
  362. ; VECTOR BASIC FUNCTIONS
  363. ;*******************************************************************************
  364.    
  365. ; RESET PTR0
  366. RESET_PTR0
  367.     MOVF VEC_HIGH, 0
  368.     MOVWF FSR0H
  369.     MOVF VEC_LOW, 0
  370.     MOVWF FSR0L
  371.    
  372.     RETURN
  373.    
  374. ; PUSH VALUE IN VECTOR
  375. VEC_PUSH
  376.     MOVWF POSTINC0
  377.     INCF VEC_SIZE
  378.    
  379.     RETURN
  380.  
  381. ; RETURN NEXT VALUE OF VECTOR
  382. VEC_PULL
  383.     MOVF POSTINC0, 0
  384.    
  385.     RETURN
  386.  
  387. ;*******************************************************************************
  388. ; WRITING MATRIX LED STREAM
  389. ;*******************************************************************************
  390.  
  391. ; WRITE 0 INTO LED STREAM
  392. LEDW0 ; 3 10 OU 4 11
  393.     BSF LATB, 5
  394.     NOP
  395.     NOP
  396.     NOP
  397.     NOP
  398.     NOP
  399.     BCF LATB, 5
  400.     NOP
  401.     NOP
  402.     NOP
  403.     NOP
  404.     NOP
  405.     NOP
  406.     NOP
  407.    
  408.     RETURN
  409.  
  410. ; WRITE 1 INTO LED STREAM
  411. LEDW1 ; 11 2 OU 12 3
  412.     BSF LATB, 5
  413.     NOP
  414.     NOP
  415.     NOP
  416.     NOP
  417.     NOP
  418.     NOP
  419.     NOP
  420.     NOP
  421.     NOP
  422.     NOP
  423.     NOP
  424.     NOP
  425.     NOP;
  426.     NOP;
  427.     BCF LATB, 5
  428.  
  429.     RETURN
  430.  
  431. ; WRITE LED STREAM FOR A GIVEN VALUE ([0; 255] in WREG)
  432. LED    
  433.     BTFSC WREG, 0
  434.     CALL LEDW1
  435.     BTFSS WREG, 0
  436.     CALL LEDW0
  437.        
  438.     BTFSC WREG, 1
  439.     CALL LEDW1
  440.     BTFSS WREG, 1
  441.     CALL LEDW0
  442.        
  443.     BTFSC WREG, 2
  444.     CALL LEDW1
  445.     BTFSS WREG, 2
  446.     CALL LEDW0
  447.        
  448.     BTFSC WREG, 3
  449.     CALL LEDW1
  450.     BTFSS WREG, 3
  451.     CALL LEDW0
  452.        
  453.     BTFSC WREG, 4
  454.     CALL LEDW1
  455.     BTFSS WREG, 4
  456.     CALL LEDW0
  457.        
  458.     BTFSC WREG, 5
  459.     CALL LEDW1
  460.     BTFSS WREG, 5
  461.     CALL LEDW0
  462.        
  463.     BTFSC WREG, 6
  464.     CALL LEDW1
  465.     BTFSS WREG, 6
  466.     CALL LEDW0
  467.        
  468.     BTFSC WREG, 7
  469.     CALL LEDW1
  470.     BTFSS WREG, 7
  471.     CALL LEDW0
  472.    
  473.    
  474.     RETURN
  475.  
  476. ;*******************************************************************************
  477. ; TEMPO ROUTINES
  478. ;*******************************************************************************
  479.    
  480. ; TEMPO ROUTINE LVL 1
  481. TEMPO_1
  482.     MOVLW 0xFF
  483.     MOVWF i
  484.    
  485. DEC_I
  486.     DECF i
  487.     MOVLW 0x00
  488.     CPFSEQ i
  489.         GOTO DEC_I
  490.        
  491.     RETURN
  492.  
  493. ; TEMPO ROUTINE LVL 2
  494. TEMPO_2
  495.     MOVLW 0xFF
  496.     MOVWF j
  497.    
  498. DEC_J
  499.     CALL TEMPO_1
  500.     DECF j
  501.     MOVLW 0x00
  502.     CPFSEQ j
  503.         GOTO DEC_J
  504.        
  505.     RETURN
  506.    
  507. ; TEMPO ROUTINE LVL 3
  508. TEMPO_3    
  509.     MOVLW 0x05
  510.     MOVWF k
  511.    
  512. DEC_K
  513.     CALL TEMPO_2
  514.     DECF k
  515.     MOVLW 0x00
  516.     CPFSEQ k
  517.         GOTO DEC_K
  518.        
  519.     RETURN
  520.  
  521. ;*******************************************************************************
  522. ; MATRIX STREAMING (FROM VECTOR)
  523. ;*******************************************************************************
  524.  
  525. ; STREAM A MATRIX TILE
  526. TILE
  527.     CALL VEC_PULL
  528.     CALL LED
  529.     CALL VEC_PULL
  530.     CALL LED
  531.     CALL VEC_PULL
  532.     CALL LED
  533.     CALL VEC_PULL
  534.     CALL LED
  535.     INCF TILE_ITR
  536.    
  537.     RETURN
  538.    
  539. ; STREAM A MATRIX WIDTH    
  540. WIDTH
  541.     ; Reset TILE_ITR
  542.     MOVLW 0x00
  543.     MOVWF TILE_ITR
  544.    
  545.     ; Do TILE while TILE_ITR < MATRIX_WIDTH
  546. WIDTH_DO_TILE
  547.     CALL TILE
  548.     MOVF MATRIX_WIDTH, 0
  549.     CPFSLT TILE_ITR
  550.         RETURN
  551.    
  552.     GOTO WIDTH_DO_TILE
  553.    
  554.     RETURN
  555.  
  556. ; STREAM ALL THE MATRIX
  557. FILL_MAT
  558.     ; Reset MATRIX_ITR
  559.     MOVLW 0x00
  560.     MOVWF MATRIX_ITR
  561.    
  562.     ; Do WIDTH while MATRIX_ITR < MATRIX_HEIGHT
  563. HEIGHT_DO_TILE
  564.     CALL WIDTH
  565.     INCF MATRIX_ITR
  566.     MOVF MATRIX_HEIGHT, 0
  567.     CPFSLT MATRIX_ITR
  568.         RETURN
  569.    
  570.     GOTO HEIGHT_DO_TILE
  571.    
  572.     RETURN
  573.  
  574. ;*******************************************************************************
  575. ; TILE LEVELS WRITING (INTO VECTOR)
  576. ;*******************************************************************************
  577.    
  578. ; TILE LEDS FOR NO LVL (NO COLORS)
  579. TILE_LVL_0
  580.     MOVLW 0x00
  581.     CALL VEC_PUSH
  582.     MOVLW 0x00
  583.     CALL VEC_PUSH
  584.     MOVLW 0x00
  585.     CALL VEC_PUSH
  586.     MOVLW 0x00
  587.     CALL VEC_PUSH
  588.    
  589.     RETURN
  590.  
  591. ; TILE LEDS FOR COLOR LVL 1
  592. TILE_LVL_1    
  593.     MOVLW 0x00
  594.     CALL VEC_PUSH
  595.     MOVLW 0x60
  596.     CALL VEC_PUSH
  597.     MOVLW 0x20
  598.     CALL VEC_PUSH
  599.     MOVLW 0x00
  600.     CALL VEC_PUSH
  601.     RETURN
  602.    
  603. ; TILE LEDS FOR COLOR LVL 2
  604. TILE_LVL_2
  605.     MOVLW 0x00
  606.     CALL VEC_PUSH
  607.     MOVLW 0x00
  608.     CALL VEC_PUSH
  609.     MOVLW 0xA0
  610.     CALL VEC_PUSH
  611.     MOVLW 0x00
  612.     CALL VEC_PUSH
  613.    
  614.     RETURN
  615.    
  616. ; TILE LEDS FOR COLOR LVL 3
  617. TILE_LVL_3
  618.     MOVLW 0x90
  619.     CALL VEC_PUSH
  620.     MOVLW 0x00
  621.     CALL VEC_PUSH
  622.     MOVLW 0x10
  623.     CALL VEC_PUSH
  624.     MOVLW 0x00
  625.     CALL VEC_PUSH
  626.     RETURN
  627.    
  628. ; TILE LEDS FOR COLOR LVL 4
  629. TILE_LVL_4
  630.     MOVLW 0x70
  631.     CALL VEC_PUSH
  632.     MOVLW 0x00
  633.     CALL VEC_PUSH
  634.     MOVLW 0x40
  635.     CALL VEC_PUSH
  636.     MOVLW 0x00
  637.     CALL VEC_PUSH
  638.     RETURN
  639.    
  640. ; TILE LEDS FOR COLOR LVL 5
  641. TILE_LVL_5
  642.     MOVLW 0x30
  643.     CALL VEC_PUSH
  644.     MOVLW 0x80
  645.     CALL VEC_PUSH
  646.     MOVLW 0x00
  647.     CALL VEC_PUSH
  648.     MOVLW 0x00
  649.     CALL VEC_PUSH
  650.     RETURN
  651.    
  652. ; TILE LEDS FOR COLOR LVL 6
  653. TILE_LVL_6
  654.     MOVLW 0x58
  655.     CALL VEC_PUSH
  656.     MOVLW 0x28
  657.     CALL VEC_PUSH
  658.     MOVLW 0x00
  659.     CALL VEC_PUSH
  660.     MOVLW 0x00
  661.     CALL VEC_PUSH
  662.     RETURN
  663.    
  664. ; TILE LEDS FOR COLOR LVL 7
  665. TILE_LVL_7
  666.     MOVLW 0x20
  667.     CALL VEC_PUSH
  668.     MOVLW 0x70
  669.     CALL VEC_PUSH
  670.     MOVLW 0x00
  671.     CALL VEC_PUSH
  672.     MOVLW 0x00
  673.     CALL VEC_PUSH
  674.     RETURN
  675.    
  676. ; TILE LEDS FOR COLOR LVL 8
  677. TILE_LVL_8
  678.     MOVLW 0x00
  679.     CALL VEC_PUSH
  680.     MOVLW 0xB0
  681.     CALL VEC_PUSH
  682.     MOVLW 0x00
  683.     CALL VEC_PUSH
  684.     MOVLW 0x00
  685.     CALL VEC_PUSH
  686.     RETURN
  687.  
  688. ;*******************************************************************************
  689. ; COLUMN FILL LEVELS WRITING (INTO VECTOR)
  690. ;*******************************************************************************
  691.    
  692. ; FILL COLUMN FOR LEVEL 0
  693. COL_LVL_0
  694.     CALL TILE_LVL_0
  695.     CALL TILE_LVL_0
  696.     CALL TILE_LVL_0
  697.     CALL TILE_LVL_0
  698.     CALL TILE_LVL_0
  699.     CALL TILE_LVL_0
  700.     CALL TILE_LVL_0
  701.     CALL TILE_LVL_0
  702.     CALL TILE_LVL_0
  703.     CALL TILE_LVL_0
  704.     CALL TILE_LVL_0
  705.     CALL TILE_LVL_0
  706.     CALL TILE_LVL_0
  707.     CALL TILE_LVL_0
  708.     CALL TILE_LVL_0
  709.     CALL TILE_LVL_0
  710.    
  711.     RETURN
  712.    
  713. ; FILL COLUMN FOR LEVEL 1
  714. COL_LVL_1
  715.     CALL TILE_LVL_1
  716.     CALL TILE_LVL_0
  717.     CALL TILE_LVL_0
  718.     CALL TILE_LVL_0
  719.     CALL TILE_LVL_0
  720.     CALL TILE_LVL_0
  721.     CALL TILE_LVL_0
  722.     CALL TILE_LVL_0
  723.     CALL TILE_LVL_1
  724.     CALL TILE_LVL_0
  725.     CALL TILE_LVL_0
  726.     CALL TILE_LVL_0
  727.     CALL TILE_LVL_0
  728.     CALL TILE_LVL_0
  729.     CALL TILE_LVL_0
  730.     CALL TILE_LVL_0
  731.    
  732.     RETURN
  733.    
  734. ; FILL COLUMN FOR LEVEL 2
  735. COL_LVL_2
  736.     CALL TILE_LVL_1
  737.     CALL TILE_LVL_2
  738.     CALL TILE_LVL_0
  739.     CALL TILE_LVL_0
  740.     CALL TILE_LVL_0
  741.     CALL TILE_LVL_0
  742.     CALL TILE_LVL_0
  743.     CALL TILE_LVL_0
  744.     CALL TILE_LVL_1
  745.     CALL TILE_LVL_2
  746.     CALL TILE_LVL_0
  747.     CALL TILE_LVL_0
  748.     CALL TILE_LVL_0
  749.     CALL TILE_LVL_0
  750.     CALL TILE_LVL_0
  751.     CALL TILE_LVL_0
  752.    
  753.     RETURN
  754.    
  755. ; FILL COLUMN FOR LEVEL 3
  756. COL_LVL_3
  757.     CALL TILE_LVL_1
  758.     CALL TILE_LVL_2
  759.     CALL TILE_LVL_3
  760.     CALL TILE_LVL_0
  761.     CALL TILE_LVL_0
  762.     CALL TILE_LVL_0
  763.     CALL TILE_LVL_0
  764.     CALL TILE_LVL_0
  765.     CALL TILE_LVL_1
  766.     CALL TILE_LVL_2
  767.     CALL TILE_LVL_3
  768.     CALL TILE_LVL_0
  769.     CALL TILE_LVL_0
  770.     CALL TILE_LVL_0
  771.     CALL TILE_LVL_0
  772.     CALL TILE_LVL_0
  773.    
  774.     RETURN
  775.    
  776. ; FILL COLUMN FOR LEVEL 4
  777. COL_LVL_4
  778.     CALL TILE_LVL_1
  779.     CALL TILE_LVL_2
  780.     CALL TILE_LVL_3
  781.     CALL TILE_LVL_4
  782.     CALL TILE_LVL_0
  783.     CALL TILE_LVL_0
  784.     CALL TILE_LVL_0
  785.     CALL TILE_LVL_0
  786.     CALL TILE_LVL_1
  787.     CALL TILE_LVL_2
  788.     CALL TILE_LVL_3
  789.     CALL TILE_LVL_4
  790.     CALL TILE_LVL_0
  791.     CALL TILE_LVL_0
  792.     CALL TILE_LVL_0
  793.     CALL TILE_LVL_0
  794.    
  795.     RETURN
  796.    
  797. ; FILL COLUMN FOR LEVEL 5
  798. COL_LVL_5
  799.     CALL TILE_LVL_1
  800.     CALL TILE_LVL_2
  801.     CALL TILE_LVL_3
  802.     CALL TILE_LVL_4
  803.     CALL TILE_LVL_5
  804.     CALL TILE_LVL_0
  805.     CALL TILE_LVL_0
  806.     CALL TILE_LVL_0
  807.     CALL TILE_LVL_1
  808.     CALL TILE_LVL_2
  809.     CALL TILE_LVL_3
  810.     CALL TILE_LVL_4
  811.     CALL TILE_LVL_5
  812.     CALL TILE_LVL_0
  813.     CALL TILE_LVL_0
  814.     CALL TILE_LVL_0
  815.    
  816.     RETURN
  817.    
  818. ; FILL COLUMN FOR LEVEL 6
  819. COL_LVL_6
  820.     CALL TILE_LVL_1
  821.     CALL TILE_LVL_2
  822.     CALL TILE_LVL_3
  823.     CALL TILE_LVL_4
  824.     CALL TILE_LVL_5
  825.     CALL TILE_LVL_6
  826.     CALL TILE_LVL_0
  827.     CALL TILE_LVL_0
  828.     CALL TILE_LVL_1
  829.     CALL TILE_LVL_2
  830.     CALL TILE_LVL_3
  831.     CALL TILE_LVL_4
  832.     CALL TILE_LVL_5
  833.     CALL TILE_LVL_6
  834.     CALL TILE_LVL_0
  835.     CALL TILE_LVL_0
  836.    
  837.     RETURN
  838.    
  839. ; FILL COLUMN FOR LEVEL 7
  840. COL_LVL_7
  841.     CALL TILE_LVL_1
  842.     CALL TILE_LVL_2
  843.     CALL TILE_LVL_3
  844.     CALL TILE_LVL_4
  845.     CALL TILE_LVL_5
  846.     CALL TILE_LVL_6
  847.     CALL TILE_LVL_7
  848.     CALL TILE_LVL_0
  849.     CALL TILE_LVL_1
  850.     CALL TILE_LVL_2
  851.     CALL TILE_LVL_3
  852.     CALL TILE_LVL_4
  853.     CALL TILE_LVL_5
  854.     CALL TILE_LVL_6
  855.     CALL TILE_LVL_7
  856.     CALL TILE_LVL_0
  857.    
  858.     RETURN
  859.    
  860. ; FILL COLUMN FOR LEVEL 8
  861. COL_LVL_8
  862.     CALL TILE_LVL_1
  863.     CALL TILE_LVL_2
  864.     CALL TILE_LVL_3
  865.     CALL TILE_LVL_4
  866.     CALL TILE_LVL_5
  867.     CALL TILE_LVL_6
  868.     CALL TILE_LVL_7
  869.     CALL TILE_LVL_8
  870.     CALL TILE_LVL_1
  871.     CALL TILE_LVL_2
  872.     CALL TILE_LVL_3
  873.     CALL TILE_LVL_4
  874.     CALL TILE_LVL_5
  875.     CALL TILE_LVL_6
  876.     CALL TILE_LVL_7
  877.     CALL TILE_LVL_8
  878.    
  879.     RETURN
  880.    
  881. ; WRITE A COLUMN
  882. WRITE_COL_VEC
  883.     MOVWF COL_LEVEL
  884.  
  885. ; COLUMN: TEST FOR LEVEL 1
  886. WRITE_COL_VEC_1
  887.     MOVLW 0x01
  888.     CPFSEQ COL_LEVEL
  889.         GOTO WRITE_COL_VEC_2
  890.     CALL COL_LVL_1
  891.     GOTO WRITE_COL_VEC_END
  892.    
  893. ; COLUMN: TEST FOR LEVEL 2    
  894. WRITE_COL_VEC_2
  895.     MOVLW 0x02
  896.     CPFSEQ COL_LEVEL
  897.         GOTO WRITE_COL_VEC_3
  898.     CALL COL_LVL_2
  899.     GOTO WRITE_COL_VEC_END
  900.  
  901. ; COLUMN: TEST FOR LEVEL 3
  902. WRITE_COL_VEC_3
  903.     MOVLW 0x03
  904.     CPFSEQ COL_LEVEL
  905.         GOTO WRITE_COL_VEC_4
  906.     CALL COL_LVL_3
  907.     GOTO WRITE_COL_VEC_END
  908.  
  909. ; COLUMN: TEST FOR LEVEL 4
  910. WRITE_COL_VEC_4
  911.     MOVLW 0x04
  912.     CPFSEQ COL_LEVEL
  913.         GOTO WRITE_COL_VEC_5
  914.     CALL COL_LVL_4
  915.     GOTO WRITE_COL_VEC_END
  916.  
  917. ; COLUMN: TEST FOR LEVEL 5    
  918. WRITE_COL_VEC_5
  919.     MOVLW 0x05
  920.     CPFSEQ COL_LEVEL
  921.         GOTO WRITE_COL_VEC_6
  922.     CALL COL_LVL_5
  923.     GOTO WRITE_COL_VEC_END
  924.  
  925. ; COLUMN: TEST FOR LEVEL 6  
  926. WRITE_COL_VEC_6
  927.     MOVLW 0x06
  928.     CPFSEQ COL_LEVEL
  929.         GOTO WRITE_COL_VEC_7
  930.     CALL COL_LVL_6
  931.     GOTO WRITE_COL_VEC_END
  932.  
  933. ; COLUMN: TEST FOR LEVEL 7
  934. WRITE_COL_VEC_7
  935.     MOVLW 0x07
  936.     CPFSEQ COL_LEVEL
  937.         GOTO WRITE_COL_VEC_8
  938.     CALL COL_LVL_7
  939.     GOTO WRITE_COL_VEC_END
  940.  
  941. ; COLUMN: TEST FOR LEVEL 8
  942. WRITE_COL_VEC_8
  943.     MOVLW 0x08
  944.     CPFSEQ COL_LEVEL
  945.         GOTO WRITE_COL_VEC_0
  946.     CALL COL_LVL_8
  947.     GOTO WRITE_COL_VEC_END
  948.  
  949. ; COLUMN: DEFAULT LEVEL 0
  950. WRITE_COL_VEC_0
  951.     CALL COL_LVL_0
  952.  
  953. ; COLUMN: END POINT    
  954. WRITE_COL_VEC_END
  955.     RETURN
  956.  
  957. ;*******************************************************************************
  958. ; ADC AND FREQUENCY LEVELS UTILS
  959. ;*******************************************************************************
  960.  
  961. ; WAIT FOR ADC TO COMPUTE
  962. POLL
  963.     BTFSC ADCON0, 0
  964.     GOTO POLL
  965.    
  966.     RETURN
  967.  
  968. ; SHOW CURRENT ADC LEVEL ON RIGHT SIDE LEDS
  969. LED_LEVEL
  970.     ; INIT: TURN OFF LEDs
  971.     MOVLW 0x00
  972.     MOVWF LATC
  973.    
  974.     MOVLW 0x80      ; > 0, turn on LED0
  975.     CPFSLT TEMP
  976.     BSF LATC, 7
  977.    
  978.     MOVLW 0x90      ; > 32, turn on LED3
  979.     CPFSLT TEMP
  980.     BSF LATC, 6
  981.    
  982.     MOVLW 0xA0      ; > 64, turn on LED2
  983.     CPFSLT TEMP
  984.     BSF LATC, 5
  985.    
  986.     MOVLW 0xB0     ; > 96, turn on LED2
  987.     CPFSLT TEMP
  988.     BSF LATC, 4
  989.    
  990.     MOVLW 0xC0      ; > 128, turn on LED2
  991.     CPFSLT TEMP
  992.     BSF LATC, 3
  993.    
  994.     MOVLW 0xD0      ; > 160, turn on LED2
  995.     CPFSLT TEMP
  996.     BSF LATC, 2
  997.    
  998.     MOVLW 0xE0      ; > 192, turn on LED2
  999.     CPFSLT TEMP
  1000.     BSF LATC, 1
  1001.    
  1002.     MOVLW 0xF0      ; > 224, turn on LED2
  1003.     CPFSLT TEMP
  1004.     BSF LATC, 0
  1005.    
  1006.     RETURN
  1007.  
  1008. ;*******************************************************************************
  1009. ; FREQUENCY LEVELS ADJUSTERS
  1010. ;*******************************************************************************
  1011.  
  1012. ; FREQUENCY LEVEL SETTERS
  1013. ; SET FREQUENCY LEVEL TO 1 AND GO TO FREQUENCY CALCULATION END POINT
  1014. SET_FREQ_1
  1015.     MOVLW 0x01
  1016.     GOTO CALC_FREQ_END
  1017.  
  1018. ; SET FREQUENCY LEVEL TO 2 AND GO TO FREQUENCY CALCULATION END POINT
  1019. SET_FREQ_2
  1020.     MOVLW 0x02
  1021.     GOTO CALC_FREQ_END
  1022.  
  1023. ; SET FREQUENCY LEVEL TO 3 AND GO TO FREQUENCY CALCULATION END POINT
  1024. SET_FREQ_3
  1025.     MOVLW 0x03
  1026.     GOTO CALC_FREQ_END
  1027.    
  1028. ; SET FREQUENCY LEVEL TO 4 AND GO TO FREQUENCY CALCULATION END POINT
  1029. SET_FREQ_4
  1030.     MOVLW 0x04
  1031.     GOTO CALC_FREQ_END
  1032.    
  1033. ; SET FREQUENCY LEVEL TO 5 AND GO TO FREQUENCY CALCULATION END POINT
  1034. SET_FREQ_5
  1035.     MOVLW 0x05
  1036.     GOTO CALC_FREQ_END
  1037.    
  1038. ; SET FREQUENCY LEVEL TO 6 AND GO TO FREQUENCY CALCULATION END POINT
  1039. SET_FREQ_6
  1040.     MOVLW 0x06
  1041.     GOTO CALC_FREQ_END
  1042.    
  1043. ; SET FREQUENCY LEVEL TO 7 AND GO TO FREQUENCY CALCULATION END POINT
  1044. SET_FREQ_7
  1045.     MOVLW 0x07
  1046.     GOTO CALC_FREQ_END
  1047.    
  1048. ; SET FREQUENCY LEVEL TO 8 AND GO TO FREQUENCY CALCULATION END POINT
  1049. SET_FREQ_8
  1050.     MOVLW 0x08
  1051.     GOTO CALC_FREQ_END
  1052.  
  1053. ; FREQUENCY CALCULATION END POINT
  1054. CALC_FREQ_END
  1055.     RETURN
  1056.    
  1057. ; RETURN A VALUE IN W [0, 8] DEPENDING ON THE (LOW ?) FREQUENCY VOLTAGE
  1058. CALC_FREQ_LOW
  1059.     ; > 4.67V (238, 0xEE)
  1060.     MOVLW 0xDB
  1061.     CPFSLT TEMP
  1062.     GOTO SET_FREQ_8
  1063.    
  1064.     ; > 4.34V (221, 0xDD)
  1065.     MOVLW 0xD1
  1066.     CPFSLT TEMP
  1067.     GOTO SET_FREQ_7
  1068.    
  1069.     ; > 4V (204, 0xCC)
  1070.     MOVLW 0xC8
  1071.     CPFSLT TEMP
  1072.     GOTO SET_FREQ_6
  1073.    
  1074.     ; > 3.67V (187, 0xBB)
  1075.     MOVLW 0xBE
  1076.     CPFSLT TEMP
  1077.     GOTO SET_FREQ_5
  1078.    
  1079.     ; > 3.34V (170, 0xAA)
  1080.     MOVLW 0xB5
  1081.     CPFSLT TEMP
  1082.     GOTO SET_FREQ_4
  1083.    
  1084.     ; > 3V (153, 0x99)
  1085.     MOVLW 0xAB
  1086.     CPFSLT TEMP
  1087.     GOTO SET_FREQ_3
  1088.    
  1089.     ; > 2.67V (136, 0x88)
  1090.     MOVLW 0xA2
  1091.     CPFSLT TEMP
  1092.     GOTO SET_FREQ_2
  1093.    
  1094.     ; > 2.36V (120, 0x77)
  1095.     MOVLW 0x99
  1096.     CPFSLT TEMP
  1097.     GOTO SET_FREQ_1
  1098.    
  1099.     ; DEFAULT VALUE = 0x00
  1100.     MOVLW 0x00
  1101.    
  1102.     RETURN
  1103.    
  1104. ;*******************************************************************************
  1105. ; ADC FREQUENCY COMPUTION
  1106. ;*******************************************************************************
  1107.  
  1108. ; GET LOW FREQUENCY VALUE FROM ADC
  1109. GET_FREQ_LOW
  1110.     MOVLW b'00000000'   ; ANA0
  1111.     MOVLB 0x0F
  1112.     MOVWF ADPCH, 1      ; SELECT ANA0
  1113.     BSF ADCON0, 0       ; START ADC
  1114.     CALL POLL           ; WAIT FOR RESULT
  1115.     MOVFF ADRESH, TEMP
  1116.    
  1117.     CALL CALC_FREQ_LOW  ; CALCUL FREQUENCY LEVEL
  1118.    
  1119.     RETURN
  1120.  
  1121. ; GET MEDIUM LOW FREQUENCY VALUE FROM ADC
  1122. GET_FREQ_MEDIUM_LOW
  1123.     MOVLW b'00000001'   ; ANA1
  1124.     MOVLB 0x0F
  1125.     MOVWF ADPCH, 1      ; SELECT ANA1
  1126.     BSF ADCON0, 0       ; START ADC
  1127.     CALL POLL           ; WAIT FOR RESULT
  1128.     MOVFF ADRESH, TEMP
  1129.    
  1130.     CALL CALC_FREQ_LOW  ; CALCUL FREQUENCY LEVEL
  1131.    
  1132.     RETURN
  1133.  
  1134. ; GET MEDIUM HIGH FREQUENCY VALUE FROM ADC
  1135. GET_FREQ_MEDIUM_HIGH
  1136.     MOVLW b'00000010'   ; ANA2
  1137.     MOVLB 0x0F
  1138.     MOVWF ADPCH, 1      ; SELECT ANA2
  1139.     BSF ADCON0, 0       ; START ADC
  1140.     CALL POLL           ; WAIT FOR RESULT
  1141.     MOVFF ADRESH, TEMP
  1142.    
  1143.     CALL CALC_FREQ_LOW  ; CALCUL FREQUENCY LEVEL
  1144.    
  1145.     RETURN
  1146.    
  1147. ; GET HIGH FREQUENCY VALUE FROM ADC
  1148. GET_FREQ_HIGH
  1149.     MOVLW b'00000011'   ; ANA3
  1150.     MOVLB 0x0F
  1151.     MOVWF ADPCH, 1      ; SELECT ANA3
  1152.     BSF ADCON0, 0       ; START ADC
  1153.     CALL POLL           ; WAIT FOR RESULT
  1154.     MOVFF ADRESH, TEMP
  1155.    
  1156.     CALL CALC_FREQ_LOW  ; CALCUL FREQUENCY LEVEL
  1157.    
  1158.     RETURN
  1159.    
  1160. ; UP LEDs DEPENDING ON THE VOLUME
  1161. LED_VOLUME
  1162.     MOVLW b'00000100'   ; ANA4
  1163.     MOVLB 0x0F
  1164.     MOVWF ADPCH, 1      ; SELECT ANA3
  1165.     BSF ADCON0, 0       ; START ADC
  1166.     CALL POLL           ; WAIT FOR RESULT
  1167.     MOVFF ADRESH, TEMP
  1168.    
  1169.     CALL LED_LEVEL
  1170.    
  1171.     RETURN
  1172.    
  1173. ;*******************************************************************************
  1174. ; MAIN CODE - RUN
  1175. ;*******************************************************************************
  1176.  
  1177. RUN
  1178.     ; Init values
  1179.     CALL INIT
  1180.    
  1181.    
  1182.     ; --- MAIN LOOP
  1183.     LOOP
  1184.         CALL LED_VOLUME
  1185.    
  1186.         CALL RESET_PTR0 ; RESET VECTOR POSITION
  1187.        
  1188.         CALL GET_FREQ_LOW   ; GET LOW FREQUENCY LEVEL
  1189.         CALL WRITE_COL_VEC  ; WRITE COLUMN
  1190.         ;CALL TEMPO_2
  1191.        
  1192.         CALL GET_FREQ_MEDIUM_LOW   ; GET LOW FREQUENCY LEVEL
  1193.         CALL WRITE_COL_VEC  ; WRITE COLUMN
  1194.         ;CALL TEMPO_2
  1195.        
  1196.         CALL GET_FREQ_MEDIUM_HIGH   ; GET LOW FREQUENCY LEVEL
  1197.         CALL WRITE_COL_VEC  ; WRITE COLUMN
  1198.         ;CALL TEMPO_2
  1199.        
  1200.         CALL GET_FREQ_HIGH   ; GET LOW FREQUENCY LEVEL
  1201.         CALL WRITE_COL_VEC  ; WRITE COLUMN
  1202.         ;CALL TEMPO_2
  1203.        
  1204.         ; FILL MATRIX
  1205.         CALL RESET_PTR0
  1206.         CALL FILL_MAT
  1207.        
  1208.         ;MOVLW 0x00
  1209.         ;MOVWF ADRESH
  1210.        
  1211.         ; WAIT
  1212.         CALL TEMPO_2
  1213.        
  1214.         GOTO LOOP
  1215.        
  1216.     GOTO $
  1217.  
  1218.     END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement