; Microchip MPASM ; AsmTest01.asm ;1/3/2009 ;dhenson@certifiednetworks.com ;pic 16f887 assembly example ;Description: ; This assembly code demonstrates the following: ; display counter on portb ; flash portd on and off ; OSCON register use ;Comments ; Good for learning assembly on midrange microchip pic 16f887 ;Hardware ; pic16f887 ; internal oscillator ; 8 leds on portB ; 8 leds on portD processor 16f887 include ; defines addresses of things like PORTB radix DEC ;numbers treated as decimal by default ;__config _HS_OSC & _WDT_OFF ; & _PWRTE_ON ;for 16f88 __CONFIG _CONFIG1, _INTRC_OSC_CLKOUT & _DEBUG_ON & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF ; osc options: _INTRC_OSC_CLKOUT &_HS_OSC & _XT_OSC __CONFIG _CONFIG2, _WRT_OFF & _BOR21V ;variables cblock H'20' LOOP ; loop counter LOOPA ; loop counter ALLON endc goto INIT MyDelay movlw D'128' ;outer loop start, flip at 0 movwf LOOP movlw D'1' ;inner loop start, flip at 0 movwf LOOPA movfw LOOP movwf PORTB incfsz LOOPA,F goto $-1 incfsz LOOP,F goto $-5 return INIT ;setup ports banksel PORTD clrf PORTB clrf PORTD banksel TRISD clrf TRISA clrf TRISB clrf TRISC clrf TRISD clrf TRISE ;set internal osc speed and source banksel OSCCON ;bit0 1 = internal, 0=set by config1 ;bits 6-4, internal speed 111=8mhz, 110=4mhz, etc. movlw b'00100001' movwf OSCCON ;variables ;;allon is a bitmask variable used later banksel ALLON movlw b'11111111' movwf ALLON banksel PORTD START ;Turn PORTD leds on nop ; two cycles wasted here to make output duty cycle even... nop ; ....the goto START below takes two cycles movfw ALLON movwf PORTD call MyDelay ;Turn PORTD leds off movlw b'00000000' movwf PORTD call MyDelay goto START end