list p=16f877 include p16f877.inc count1 equ 0x20 count2 equ 0x21 count3 equ 0x22 lo_byte equ 0x30 A0 equ D'7' A1 equ D'6' A2 equ D'5' REG equ D'0' WAIT equ D'1' RESET equ D'2' RDY equ D'3' WE equ D'4' OE equ D'5' CE2 equ D'0' CE1 equ D'1' CD1 equ D'2' org 0x00 init_pic bcf STATUS,RP0 bcf STATUS,RP1 clrf PORTA clrf PORTB clrf PORTC clrf PORTD clrf PORTE bsf STATUS,RP0 movlw 0x06 movwf ADCON1 movlw B'00001010' movwf TRISA movlw B'00000000' movwf TRISB movlw B'00000100' movwf TRISC movlw B'00000000' movwf TRISD movlw B'00000000' movwf TRISE bcf STATUS, RP0 clrf PORTA clrf PORTB clrf PORTC clrf PORTD clrf PORTE clrf lo_byte init_cf movlw B'00110001' movwf PORTA movlw B'00000000' movwf PORTB movlw B'00000001' movwf PORTC movlw B'00000000' movwf PORTD movlw B'00000000' movwf PORTE nop nop nop nop goto main delay movlw D'10' ;20 * 250 * 200us = 0,5s movwf count3 set2 movlw D'250' ;250 * 200 us = 50 ms movwf count2 set1 movlw D'250' ;200us bei 20 MHz (5 MHz) movwf count1 loop nop decfsz count1,F goto loop decfsz count2,F goto set1 decfsz count3,F goto set2 return chk_ready btfss PORTA,RDY goto chk_cf nop return main BSF PORTA,RESET ;Reset NOP NOP BCF PORTA,RESET NOP NOP call delay bsf PORTB,A0 bsf PORTB,A1 bsf PORTB,A2 movlw 0xEC movwf PORTD call chk_cf BCF PORTA,WE NOP NOP NOP BSF PORTA,WE CALL chk_cf BSF STATUS,RP0 movlw 0xFF movwf TRISD BCF STATUS,RP0 NOP CLRF PORTD NOP BCF PORTA,OE NOP NOP NOP movf PORTD,W movwf lo_byte NOP BSF PORTA,OE NOP NOP goto main end