; basic configuration ; Title "lcd1 for ap0201." ; list P = 16F877 ; include "p16f877.inc" ; use definition file for 16F877 ; ; __CONFIG b'11111101111001' ; ; memory - counters and max timing values in memory + rot value list CBLOCK 0x20 ; RAM starts at address 20h var1 var2 count1 count2 count3 count4 datal datah addrl addrh ENDC indf equ 0x00 ORG 0x0000 ;reset vector clrf 0x3 ;zero status movlw 0x00 ;high byte of long jump movwf 0xA ;zero PCLATH goto start start movlw b'00000000' ; all port pins = low movwf PORTA movlw b'00000000' movwf PORTC movlw b'00000000' movwf PORTD movlw b'00000000' movwf PORTE bcf STATUS,RP1 bsf STATUS,RP0 ; set RAM Page 1 for TRIS registers ; INITIALISE PORTS ; binary used to see individual pin IO status movlw b'11101111' ; IO pins movwf TRISA movlw b'00000000' movwf TRISB movlw b'00000000' movwf TRISC ; ???? serial? movlw b'00000000' ;in and out movwf TRISD movlw b'00000000' movwf TRISE movlw b'0000010' ; analog pins movwf ADCON1 bcf STATUS,RP0 ; back to RAM page 0 movlw 0x00 movwf addrl movwf addrh movlw 0x10 movwf count3 ;lcd test hello call blanks call del_5 call initlcd loop call self ;self display code and loop here call disp16 movlw 0x10 movwf count4 loop1 call del_5 decfsz count4,f goto loop1 goto loop initlcd bcf PORTE,1 bcf PORTB,0 ;ale low bcf PORTE,2 ; en low bcf PORTE,0 ;rs low for control call del_125 movlw 0x38 movwf PORTD call pulse movlw 0x0c movwf PORTD call pulse movlw 0x06 movwf PORTD call pulse call del_5 return del_125 movlw 0x2a movwf count1 repeat decfsz count1,f goto repeat return del_5 movlw 0x29 movwf count2 delay call del_125 decfsz count2,f goto delay return pulse bsf PORTE,2 nop bcf PORTE,2 call del_125 return blanks movlw 0x10 movwf count1 movlw 0x30 movwf FSR movlw 0x20 store movwf indf decfsz count1,f goto incfsr return incfsr incf FSR,f goto store hello movlw 'H' movwf 0x30 movlw 'E' movwf 0x31 movlw 'L' movwf 0x32 movwf 0x33 movlw '0' movwf 0x34 return self ; loop through writing 16 bytes to 0x30 + movlw 0x08 movwf count1 movlw 0x30 movwf FSR store2 movf addrl,w bsf STATUS,RP1 bcf STATUS,RP0 movwf EEADR movlw 0x00 movwf EEADRH bsf STATUS,RP0 bsf EECON1,EEPGD bsf EECON1,RD nop nop bcf STATUS,RP0 movf EEDATA,w bcf STATUS,RP1 movwf datal bsf STATUS,RP1 movf EEDATH,w bcf STATUS,RP1 movwf datah movf datal,w movwf indf incf FSR,f movf datah,w movwf indf incf FSR,f incf addrl,f decfsz count1,f goto store2 decfsz count3,f return reset1 movlw 0x00 movwf addrl movlw 0x10 movwf count3 return disp16 bcf PORTE,2 bcf PORTE,0 movlw 0x80 movwf PORTD call pulse bsf PORTE,0 call del_125 movlw 0x30 movwf FSR getchar movf 0x00,w movwf PORTD call pulse movlw 0x37 subwf FSR,w btfsc STATUS,Z goto half movlw 0x3f subwf FSR,w btfsc STATUS,Z return incf FSR,f goto getchar half bcf PORTE,0 call del_125 movlw 0xc0 movwf PORTD call pulse bsf PORTE,0 incf FSR,f call del_125 goto getchar end