#include p16f877.inc __config h'3FF2' DELAYT EQU H'20' ;USED FOR DELAY ROUTINE DELAYT1 EQU H'21' CURRENTBIT EQU H'22' RSRECV EQU H'23' ;RECIVED SERIAL BYTE GOES HERE RS232 RSSEND EQU H'24' ;byte to send RS232 PS2IN EQU H'25' ;CURRENT STATUS OF PORTB PS2OUT EQU H'26' PARITY EQU H'27' ;BIT0 FOR PARITY, BIT1 FOR TIMEOUT TIMEOUT_TIMER EQU H'28' P1 EQU H'29' ;PS2 PACKET FILES P2 EQU H'2A' P3 EQU H'2B' P4 EQU H'2C' P5 EQU H'2D' P6 EQU H'2E' XPOS_H EQU H'2F' XPOS_L EQU H'30' YPOS_H EQU H'31' YPOS_L EQU H'32' TEMP EQU H'33' HUNDREDS EQU H'34' ; BCD HUNDREDS RESULT TENS_AND_ONES EQU H'35'; BCD TENS AND ONES RESULT BIN EQU H'36' XPOS_8 EQU H'37' YPOS_8 EQU H'38' Z_VAL EQU H'39' PKNUM EQU H'3A' ;PACKET NUMBER PKTEMP EQU H'3B' PK1 EQU H'3C' ;RF OUTPUT PACKET PK2 EQU H'3D' ;THESE MUST STAY IN ORDER!!! PK3 EQU H'3E' PK4 EQU H'3F' CRC_1 EQU H'40' CRC_2 EQU H'41' CELL EQU H'49' ;0 = NO CONTACT ;(1-9) CELL ON TRACKPAD ;10 =VERT SCROLL, 11 = HORZ SCROLL VERT_S EQU H'42' ;VERTICAL SCROL VALUE (0-90) HORZ_S EQU H'43' ;HORIZONTAL SCROLL VALUE (0-110) CELL_OLD EQU H'50' ;BUTTON THINGGYGYG, SET ME FREEEEEEEEEEEEEEE TEMP1 EQU H'44' ;MORE TEMP VALUES FOR NESTED DELAYS ECT TEMP2 EQU H'45' TEMP3 EQU H'46' TEMP_LOOP EQU H'47' MODE_OLD EQU H'47' ;USED MY MODE SELECT MODE EQU H'48' ;CURRENT MODE DEVICE IS IN ;1 = MOUSE MODE ;2 = WINAMP MODE ;3 = RADIO COUNTER EQU H'51' MOUSE_BUT EQU H'52' ;MOUSE BUTTON STATE MOUSE_BUT_OLD EQU H'53' RSPORT EQU PORTE RSTRIS EQU TRISE RSTX EQU 0 ;RS232 TRANS RSRE EQU 1 ;RS232 RECIVE RFPORT EQU PORTA RFTRIS EQU TRISA RFDATA EQU 0 LCDPORT EQU PORTA LCDTRIS EQU TRISA LCDRS EQU 3 LCDRW EQU 4 LCDE EQU 5 LCD_BL_TRIS EQU TRISC LCD_BL EQU 2 LED_PORT EQU PORTB LED_TRIS EQU TRISB Y_LED EQU 1 G_LED EQU 2 R_LED EQU 3 BUTTON_PORT EQU PORTB BUTTON_TRIS EQU TRISB BUT1 EQU 7 BUT2 EQU 6 BUT3 EQU 5 BUT4 EQU 4 P8PORT EQU PORTD P8TRIS EQU TRISD PS2PORT EQU PORTA PS2TRIS EQU TRISA PS2CLOCK EQU 1 PS2DATA EQU 2 ;PROGRESS OF GETTING INFO ORG 0x00 GOTO START ;;---------------INTERUPT GOES HERE------------------------- ORG 0x04 INTERPUT: BTFSC INTCON,1 CALL GETBYTE2 CALL RESETINT1 RETFIE ;(return from interupt) ;------------------------------------------------------------- ;ORG 0x1F00,0x1FFF {} ORG 0X10 resetint: bcf INTCON,0 ;(RBIF), SET WHEN PORTB CHANGEs bcf INTCON,1 ;set when rb0/int changes bcf INTCON,3 ;ENABLE PORTB INTERUPTS, RBIE bsf INTCON,4 ;enable rb0/int bsf OPTION_REG,6 ;(SET RB0.INT EDGE TRIGGER , (INTEDG??) (set=rising edge,low to high,clear=falling) bsf INTCON,7 ;ENABLE ALL INTERUPTS (GIE??) return ;----INT RESET------ RESETINT1: bcf INTCON,1 ;set when rb0/int changes bsf INTCON,7 ;ENABLE ALL INTERUPTS (GIE??) RETURN ;---DELAY ROUTINE--------- DELAY: ;;delay is (delayt X 3) + 5 DECFSZ DELAYT,1 GOTO DELAY RETURN ;;;;;;;;;STARTS HERE;;;;;;;;;;;;;;;;;;;;; START: ;;; SET PORTS UP;;;;;;;;;; CLRF PORTA CLRF PORTB CLRF PORTC CLRF PORTD CLRF PORTE CLRF MOUSE_BUT BSF STATUS, RP0 ;MEM1 MOVLW 0X06 ;MAKE ALL PORTS DIGITAL NOT ANALOGU MOVWF ADCON1 BSF PS2TRIS,PS2CLOCK ;MAKE PS2 INPUTS BSF PS2TRIS,PS2DATA BSF RSTRIS,RSRE ;SETUP RS232 IO BCF RSTRIS,RSTX BCF LCDTRIS,LCDRS ;SETUP LCD IO TO OUTPUTS BCF LCDTRIS,LCDRW BCF LCDTRIS,LCDE BCF LED_TRIS,Y_LED ;LEDS BCF LED_TRIS,G_LED ;LEDS BCF LED_TRIS,R_LED ;LEDS BSF BUTTON_TRIS,BUT1 ;SETUP BUTTON PORTS BSF BUTTON_TRIS,BUT2 ;SETUP BUTTON PORTS BSF BUTTON_TRIS,BUT3 ;SETUP BUTTON PORTS BSF BUTTON_TRIS,BUT4 ;SETUP BUTTON PORTS BCF RFTRIS,RFDATA ;RF OUTPUT BCF LCD_BL_TRIS,LCD_BL ;BACKLIGHT AS OUTPUT BCF STATUS, RP0 ;MEM0 MOVLW D'15' ;SETUP PWM FOR LCD BACKLIGHT MOVWF CCP1CON MOVLW D'5' MOVWF T2CON ;ENABLE TIMER2 FOR PWM MOVLW D'128' MOVWF CCPR1L ;DUTY CYCLE BSF RSPORT,RSTX ;SET HIGH BCF LCDPORT,LCDE ;SET INITIAL LOW BCF RFPORT,RFDATA ;LOW BSF LED_PORT,G_LED ;GREEN LED ON BSF LED_PORT,R_LED ;GREEN LED ON ;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;CALL resetint ;;;;;-----------------------MAIN LOOP---------------------;;;;;;;;;; MAIN: MOVLW D'85' MOVWF PK1 MOVLW D'4' MOVWF PK2 MOVLW D'8' MOVWF PK3 MOVLW D'16' MOVWF PK4 CALL SEND_RF CLRF STATUS CALL DELAY_1MS CALL DELAY_1MS CALL DELAY_1MS CALL PS2INPUT ;WAIT FOR PAD TO CALIBRATE CALL RESET_PS2 ;---------50MS---------- MOVLW D'50' ;50MS WAIT MOVWF TEMP START_WAIT CALL DELAY_1MS DECFSZ TEMP,F GOTO START_WAIT ;--------------------- CALL SETUP_LCD CALL STARTUP_MESSAGE CALL MODE_SELECT ;---------------------------------------------------------------------- ;---------------------------------------------------------------------- ;---------------------------------------------------------------------- ;-------------------------MODE SELECT---------------------------------- ;---------------------------------------------------------------------- ;---------------------------------------------------------------------- ;---------------------------------------------------------------------- MODE_SELECT; ;MODE USED TO SELECT WHICH MODE TO GO INTO CALL CLEAR_DISPLAY MOVLW B'10000001' ;FIRST LINE CALL WRITE_LCD_IR CALL LCD_BUSY MOVLW "<" ;DISPLAY "