Advertisement
Guest User

projet.asm

a guest
Nov 27th, 2016
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pic 16 4.85 KB | None | 0 0
  1.     LIST p=16f88
  2.     #include <p16F88.inc>
  3.     errorlevel -302
  4.     __CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_ON & _MCLR_ON & _PWRTE_ON & _WDT_OFF & _INTRC_IO
  5.     __CONFIG  _CONFIG2, _IESO_OFF & _FCMEN_OFF
  6.  
  7.     #define BANK0 BCF STATUS,RP0
  8.     #define BANK1 BSF STATUS,RP0
  9.     #define SCL PORTB,0
  10.     #define SDA PORTB,1
  11.     #define CARRY STATUS,0
  12.     #define SW1 PORTB, 6
  13.     #define SW2 PORTB, 7
  14.     #define SW3 PORTA, 7
  15.  
  16.     CBLOCK  0x20
  17.     vACK_NACK
  18.     vCOMPTEUR
  19.     vCOMPTEUR_BYTE
  20.     vADDR_CHIP
  21.     vCONFIG
  22.     vCOMMAND
  23.     vVOLTAGE_HIGH
  24.     vVOLTAGE_LOW
  25.     vECHELLE
  26.     vRETOUR
  27.     vSELECT
  28.     vACCEPTE
  29.     vCHECKSUM
  30.     ENDC
  31.  
  32.     MOVLF MACRO X, Y
  33.     MOVLW X
  34.     MOVWF Y
  35.     ENDM
  36.  
  37.     SCAN MACRO
  38.     MOVF vVOLTAGE_HIGH, W
  39.     ADDLW -0xE0
  40.     BTFSS STATUS, Z
  41.     GOTO SCALE
  42.     INCF vCONFIG, F
  43.     CALL vSTART_PCF8591P
  44.     ENDM
  45.  
  46. ORG 0x000
  47.     CLRF PCLATH
  48.     GOTO MAIN
  49. ORG 0x004
  50. MAIN
  51.     CALL INIT_PIC
  52.     CALL INIT_RS_232
  53.     MOVLF 0x90, vADDR_CHIP
  54.     MOVLF 0x53, vCOMMAND
  55. LOOP_MAIN
  56.     CALL SCAN_SCALE
  57.     CALL CHECKSUM
  58.     CALL SEND_FRAME
  59.     CALL DELAI_100_MS
  60.     GOTO LOOP_MAIN
  61.  
  62. INIT_PIC
  63.     BCF STATUS, RP1
  64.     BANK1
  65.     BCF INTCON, GIE
  66.     CLRF ANSEL
  67.     MOVLF b'01111000', OSCCON
  68.     MOVLF b'11111111', TRISA
  69.     MOVLF b'11100110', TRISB
  70.     BANK0
  71.     RETURN
  72.  
  73. TX_232
  74.     BTFSS  PIR1,TXIF
  75.     GOTO TX_232
  76.     MOVWF TXREG
  77.     RETURN
  78.  
  79. INIT_RS_232
  80.     MOVLF b'10010000', RCSTA
  81.     BANK1
  82.     MOVLF b'00100100', TXSTA
  83.     MOVLF .8, SPBRG
  84.     BANK0
  85.     RETURN
  86.  
  87. SDA0
  88.     BCF SDA
  89.     BANK1
  90.     BCF TRISB,1
  91.     BANK0
  92.     RETURN
  93. SDA1
  94.     BANK1
  95.     BSF TRISB,1
  96.     BANK0
  97.     RETURN
  98. SCL0
  99.     BCF SCL
  100.     BANK1
  101.     BCF TRISB,0
  102.     BANK0
  103.     RETURN
  104. SCL1
  105.     BANK1
  106.     BSF TRISB,0
  107.     BANK0
  108.     RETURN
  109.  
  110. START_BIT_I2C
  111.     CALL SDA1
  112.     NOP
  113.     CALL SCL1
  114.     CALL DELAI_5_US
  115.     CALL SDA0
  116.     CALL DELAI_5_US
  117.     GOTO SCL0
  118.  
  119. STOP_BIT_I2C
  120.     CALL SDA0
  121.     CALL DELAI_5_US
  122.     CALL SCL1
  123.     CALL DELAI_5_US
  124.     CALL SDA1
  125.     GOTO DELAI_5_US
  126.  
  127. LIRE_1_BIT_I2C
  128.     CALL SDA1
  129.     CALL SCL1
  130.     CALL DELAI_5_US
  131.     BCF CARRY
  132.     BTFSC SDA
  133.     BSF CARRY
  134.     CALL SCL0
  135.     GOTO DELAI_5_US
  136.  
  137. ECRIRE_1_BIT_I2C
  138.     BTFSC CARRY
  139.     CALL SDA1
  140.     BTFSS CARRY
  141.     CALL SDA0
  142.     CALL DELAI_5_US
  143.     CALL SCL1
  144.     CALL DELAI_5_US
  145.     CALL SCL0
  146.     GOTO DELAI_5_US
  147.  
  148. LIRE_8_BITS_I2C
  149.     MOVLF 0x08, vCOMPTEUR_BYTE
  150. LOOP_LIRE_8_BITS_I2C
  151.     CALL LIRE_1_BIT_I2C
  152.     RLF vVOLTAGE_HIGH, F
  153.     DECFSZ vCOMPTEUR_BYTE, F
  154.     GOTO LOOP_LIRE_8_BITS_I2C
  155.     RRF vACK_NACK, F
  156.     GOTO ECRIRE_1_BIT_I2C
  157.  
  158. ECRIRE_8_BITS_I2C    
  159.     MOVLF 0x08, vCOMPTEUR_BYTE
  160. LOOP_ECRIRE_8_BITS_I2C    
  161.     BSF CARRY
  162.     BTFSS INDF, 7
  163.     BCF CARRY
  164.     RLF INDF, F
  165.     CALL ECRIRE_1_BIT_I2C
  166.     DECFSZ vCOMPTEUR_BYTE, F
  167.     GOTO LOOP_ECRIRE_8_BITS_I2C
  168.     CALL LIRE_1_BIT_I2C
  169.     RLF vACK_NACK, F
  170.     RETURN
  171.  
  172. SEND_FRAME
  173.     MOVLF 0x25, FSR
  174.     MOVLF 0x08, vCOMPTEUR
  175. LOOP_SEND_FRAME
  176.     MOVF INDF, W
  177.     CALL TX_232
  178.     INCF FSR, W
  179.     DECFSZ vCOMPTEUR, F
  180.     GOTO LOOP_SEND_FRAME
  181.     RETURN
  182.  
  183. vSTART_PCF8591P
  184.     CLRF vACK_NACK
  185.     MOVLF 0x23, FSR
  186.     MOVLF '1', vRETOUR
  187.     MOVWF vSELECT
  188.     MOVWF vACCEPTE
  189.     CALL START_BIT_I2C
  190.     CALL ECRIRE_8_BITS_I2C
  191.     INCF FSR, F
  192.     CALL ECRIRE_8_BITS_I2C
  193.     CALL LIRE_8_BITS_I2C
  194.     GOTO STOP_BIT_I2C
  195.  
  196. SCAN_SCALE
  197.     MOVLF '0', vECHELLE
  198.     CLRF vCONFIG
  199.     CALL vSTART_PCF8591P
  200.     SCAN
  201.     SCAN
  202. SCALE
  203.     MOVF vCONFIG, W
  204.     ADDWF vECHELLE, F
  205. CONV_ASCII
  206.     MOVF vVOLTAGE_HIGH, W
  207.     CALL CONVERT
  208.     MOVWF vVOLTAGE_LOW
  209.     SWAPF vVOLTAGE_HIGH, W
  210.     CALL CONVERT
  211.     MOVWF vVOLTAGE_HIGH
  212.     RETURN
  213. CONVERT
  214.     ANDLW 0x0F
  215.     ADDLW -.10
  216.     BTFSC STATUS, Z
  217.     ADDLW 'A'-'0'
  218.     ADDLW '0'+.10
  219.     RETURN
  220.  
  221. CHECKSUM
  222.     MOVLF 0x06, vCOMPTEUR
  223.     MOVLF 0x53, vCHECKSUM
  224.     MOVLF 0x26, FSR
  225. LOOP_CHECKSUM
  226.     MOVF INDF, W
  227.     ADDWF vCHECKSUM, F
  228.     INCF FSR, F
  229.     DECFSZ vCOMPTEUR, F
  230.     GOTO LOOP_CHECKSUM
  231.     COMF vCHECKSUM, F
  232.     INCF vCHECKSUM, F
  233.     RETURN
  234.  
  235. DELAI_5_US
  236.     NOP
  237.     NOP
  238.     NOP
  239.     NOP
  240.     NOP
  241.     NOP
  242.     RETURN
  243.  
  244. DELAI_5_MS
  245.     MOVLF .208, vCOMPTEUR
  246. LOOP_DELAI_5_MS
  247.     NOP
  248.     CALL DELAI_5_US
  249.     NOP
  250.     CALL DELAI_5_US
  251.     NOP
  252.     CALL DELAI_5_US
  253.     NOP
  254.     CALL DELAI_5_US
  255.     NOP
  256.     DECFSZ vCOMPTEUR, F
  257.     GOTO LOOP_DELAI_5_MS
  258.     CALL DELAI_5_US
  259.     RETURN
  260.  
  261. DELAI_100_MS
  262.     MOVLF .20, vCOMPTEUR_BYTE
  263.     MOVLF '1', vRETOUR
  264.     MOVWF vSELECT
  265.     MOVWF vACCEPTE
  266. LOOP_DELAI_100_MS
  267.     CALL DELAI_5_MS
  268. SW1ON
  269.     BTFSC SW1
  270.     GOTO SW2ON
  271.     MOVLF '0', vRETOUR
  272.     GOTO SW1ON
  273. SW2ON
  274.     BTFSC SW2
  275.     GOTO SW3ON
  276.     MOVLF '0', vSELECT
  277.     GOTO SW2ON
  278. SW3ON
  279.     BTFSC SW3
  280.     GOTO SW3OFF
  281.     MOVLF '0', vACCEPTE
  282.     GOTO SW3ON
  283. SW3OFF
  284.     DECFSZ vCOMPTEUR_BYTE
  285.     GOTO LOOP_DELAI_100_MS
  286.     RETURN
  287.  
  288.     END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement