Can 16877

Disponible uniquement sur Etudier
  • Pages : 5 (1032 mots )
  • Téléchargement(s) : 0
  • Publié le : 16 novembre 2009
Lire le document complet
Aperçu du document
; *
; Filename: can.asm *
;***********************************************************************************
;
; Notes: Conversion analogique numérique (en mode sleep, réveil par interruption)
; entrée AN0:broche2
; Vref+:VDD
; Vref-:VSS
; Sortie: -liaison série en binaire sur 10 bits (justifié à droite)
; choisir pour Teraterma la police Terminal
; -PORTB+PORTD
;***********************************************************************************


list p=16f877 ; list directive to define processor
#include ; processor specific labels definitions#include "bank.mac" ; fichier "macro"
errorlevel -302 ; supprime les messages "op. not in bank0"
errorlevel -306 ; supprime les message "Crossing page"
errorlevel -303 ; supprime les messages "word too large..."
errorlevel -202 ; supprime les messages "Argument out of range. Least significant bits used..."
__CONFIG _CP_OFF & _WDT_ON & _BODEN_ON & _PWRTE_ON & _HS_OSC & _WRT_ENABLE_ON& _LVP_ON & _DEBUG_OFF & _CPD_OFF
;----------------------------------------------------------------------
; constantes
SerialSetup equ 0x1fd6 ;sous prog dans le bootloader bootRT

TAB equ 0x09 ; tabulation (ASCII)

;------------------------------------------------------------------------
;variables
CBLOCK 0x20
cpt1: 1
cpt2: 1
cpt3: 1
dat: 1

temp1: 1
temp2: 1ENDC

;***** VARIABLE DEFINITIONS
w_temp EQU 0x70 ; variable used for context saving (non utilisée ici)
status_temp EQU 0x71 ; variable used for context saving (non utilisée ici)

;**********************************************************************
ORG 0x000 ; processor reset vector
clrf PCLATH
goto debut

ORG 0x004; interrupt vector location
; movwf w_temp ; save off current W register contents (inutile ici)
; movf STATUS,w ; move status register into W register (inutile ici)
; movwf status_temp ; save off contents of STATUS register (inutile ici)

BCF PIR1, ADIF ; Clear A/D interrupt flag bit (indispensable)

; movf status_temp,w ; retrieve copyof STATUS register (inutile ici)
; movwf STATUS ; restore pre-isr STATUS register contents (inutile ici)
; swapf w_temp,f
; swapf w_temp,w ; restore pre-isr W register contents (inutile ici)
retfie

debut

nop

movlw high SerialSetup ;appel du sous-prog SerialSetup
movwf PCLATH ; dans le bootloader
call SerialSetup ;
clrf PCLATH;restaure page0

call Texte0

Bank1
movlw B'10001110' ;justifié à droite, une entrée anal(AN0)
movwf ADCON1 ; Vref+=VDD, Vref-=VSS
BSF PIE1, ADIE ; Enable A/D interrupts
clrf TRISB
clrf TRISD

BCF STATUS, RP0 ; Bank0
movlw B'11000001' ; RC Clock, Chanel 0 (AN0), A/D on
MOVWF ADCON0 ;
BCF PIR1, ADIF ; Clear A/D interrupt flag bit
BSF INTCON,PEIE ; Enable peripheral interrupts
BSF INTCON, GIE ; Enable all interrupts
;
; Ensure that the required sampling time for the selected input
; channel has elapsed. Then the conversion may be started.
;
loop
call Tempo ; indispensable!!
BSF ADCON0, GO ; Start A/D Conversion

; btfss ADCON0,GO ;attend la fin de la conversion
; goto $-1 ; si le mode sleep non utilisésleep

movf ADRESH,w
movwf PORTB
call OutGraph
movlw ' '
call SerialTransmit
Bank1
movf ADRESL,w
Bank0
movwf PORTD
call OutGraph

movlw 0x0d
call SerialTransmit
movlw 0x0a
call SerialTransmit
goto loop

; The ADIF bit will be set and the GO/DONE
; bit is cleared upon completion of the
; A/D Conversion.

Tempo movlw 2
movwf cpt1
T1...
tracking img