Advertisement
Guest User

projet.asm

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