LIST L=ON, P=16C84 include "PIC84HDR.EQU" RS equ 2H ;vystup na LCD ENAB equ 3H ;vystup na LCD KEYS equ 4H UPKEY equ 2H DNKEY equ 1H STKEY equ 0H SDA equ 1H SCL equ 0H ;*** registers *********************************************************** TEMP equ 0CH TEMP2 equ 0DH TEMP3 equ 0EH STOV equ 0FH DESI equ 10H JEDN equ 11H DSTI equ 12H SETI equ 13H PLLREAD equ 14H UPPER equ 15H DOWNER equ 16H CT1 equ 17H ERS equ 18H ;************************************************************************** org Reset goto Start MainLoop btfss PORT_B,UPKEY call FreqUp btfss PORT_B,DNKEY call FreqDown btfss PORT_B,STKEY call StatusKey call HomeLCD call I2CRead call Refresh movlw 0FFh subwf CT1,W btfsc SWR,Z goto MainLoop incf CT1 movlw 0FEH subwf CT1,W btfss SWR,Z goto MainLoop incf CT1 call ResetLCD call Del1s call WriteD goto MainLoop FreqUp movlw 8h subwf UPPER,W btfss SWR,Z goto FUApply movlw 70h subwf DOWNER,W btfsc SWR,Z goto FUExit FUApply movlw 0FFh subwf DOWNER,W btfss SWR,Z goto FUNot incf UPPER clrf DOWNER goto FUDigi FUNot incf DOWNER FUDigi incf SETI incf SETI incf SETI incf SETI incf SETI movlw 0Ah subwf SETI,W btfss SWR,Z goto AllKeysOut clrf SETI incf DSTI movlw 0Ah subwf DSTI,W btfss SWR,Z goto AllKeysOut clrf DSTI incf JEDN movlw 0Ah subwf JEDN,W btfss SWR,Z goto AllKeysOut clrf JEDN incf DESI movlw 0Ah subwf DESI,W btfss SWR,Z goto AllKeysOut clrf DESI incf STOV movlw 0Ah subwf STOV,W btfss SWR,Z return FUExit movlw 06h movwf UPPER movlw 0CCh movwf DOWNER movlw 0h movwf STOV movlw 8h movwf DESI movlw 7h movwf JEDN movlw 0h movwf DSTI movlw 0h movwf SETI return FreqDown movlw 6h subwf UPPER,W btfss SWR,Z goto FDApply movlw 0CCh subwf DOWNER,W btfsc SWR,Z goto FDExit FDApply movlw 0h subwf DOWNER,W btfss SWR,Z goto FDNot decf UPPER movlw 0FFh movwf DOWNER goto FDDigi FDNot decf DOWNER FDDigi movlw .5 subwf SETI,1 btfsc SWR,Z goto AllKeysOut btfsc SWR,C goto AllKeysOut movlw .5 movwf SETI movlw .1 subwf DSTI,1 btfsc SWR,Z goto AllKeysOut btfsc SWR,C goto AllKeysOut movlw .9 movwf DSTI movlw .1 subwf JEDN,1 btfsc SWR,Z goto AllKeysOut btfsc SWR,C goto AllKeysOut movlw .9 movwf JEDN movlw .1 subwf DESI,1 btfsc SWR,Z goto AllKeysOut btfsc SWR,C goto AllKeysOut movlw .9 movwf DESI movlw .1 subwf STOV,1 goto AllKeysOut FDExit movlw 08h movwf UPPER movlw 70h movwf DOWNER movlw 1h movwf STOV movlw 0h movwf DESI movlw 8h movwf JEDN movlw 0h movwf DSTI movlw 0h movwf SETI return AllKeysOut call Del10ms call Del10ms call Del10ms clrf CT1 call I2CWrite return StatusKey btfss PORT_B,STKEY goto StatusKey call ClearLCD call HomeLCD StKey1 call I2CRead call HomeLCD call Status btfss PORT_B,STKEY goto Rmem goto StKey1 Rmem btfss PORT_B,STKEY goto Rmem call ClearLCD call HomeLCD Rmem1 call HomeLCD call MemoryRead btfss PORT_B,UPKEY goto Rmem2 btfss PORT_B,STKEY goto Wmem goto Rmem1 Rmem2 call ReadM call Del10ms Rmem3 btfss PORT_B,UPKEY goto Rmem3 call I2CWrite clrf CT1 return Wmem btfss PORT_B,STKEY goto Wmem call ClearLCD call HomeLCD Wmem1 call HomeLCD call MemoryWrite btfss PORT_B,UPKEY goto Wmem2 btfss PORT_B,STKEY goto Mres goto Wmem1 Wmem2 call WriteM call Del10ms Wmem3 btfss PORT_B,UPKEY goto Wmem3 return Mres btfss PORT_B,STKEY goto Mres call ClearLCD call HomeLCD Mres1 call HomeLCD call MemoryReset btfss PORT_B,UPKEY goto Mres2 btfss PORT_B,STKEY goto StOut goto Mres1 Mres2 call FirstWrite call Del10ms call I2CWrite Mres3 btfss PORT_B,UPKEY goto Mres3 return StOut btfss PORT_B,STKEY goto StOut return ; *** I2C **************************************************** I2CWrite bsf PORT_A,SCL ;nastavi SDA do HIGH bsf PORT_A,SDA ;nastavi SDL do HIGH call StartI2C ;START ;Prvni byte -------------------------------------------------- call Send1 ;Adresa call Send1 ;Adresa call Send0 ;Adresa call Send0 ;Adresa call Send0 ;Adresa call Send0 ;MA1 = 0 call Send1 ;MA0 = 0 call Send0 ;R/W na zapis call Ack ;ACKO BIT ;Druhy byte -------------------------------------------------- call Send0 ;N/A btfss UPPER,6 ;N14 call Send0 btfsc UPPER,6 call Send1 btfss UPPER,5 ;N13 call Send0 btfsc UPPER,5 call Send1 btfss UPPER,4 ;N12 call Send0 btfsc UPPER,4 call Send1 btfss UPPER,3 ;N11 call Send0 btfsc UPPER,3 call Send1 btfss UPPER,2 ;N10 call Send0 btfsc UPPER,2 call Send1 btfss UPPER,1 ;N9 call Send0 btfsc UPPER,1 call Send1 btfss UPPER,0 ;N8 call Send0 btfsc UPPER,0 call Send1 call Ack ;ACKO BIT ;Treti byte -------------------------------------------------- btfss DOWNER,7 ;N7 call Send0 btfsc DOWNER,7 call Send1 btfss DOWNER,6 ;N6 call Send0 btfsc DOWNER,6 call Send1 btfss DOWNER,5 ;N5 call Send0 btfsc DOWNER,5 call Send1 btfss DOWNER,4 ;N4 call Send0 btfsc DOWNER,4 call Send1 btfss DOWNER,3 ;N3 call Send0 btfsc DOWNER,3 call Send1 btfss DOWNER,2 ;N2 call Send0 btfsc DOWNER,2 call Send1 btfss DOWNER,1 ;N1 call Send0 btfsc DOWNER,1 call Send1 btfss DOWNER,0 ;N0 call Send0 btfsc DOWNER,0 call Send1 call Ack ;ACKO BIT ;Ctvrty byte -------------------------------------------------- call Send1 ;N/A call Send0 ;CP call Send0 ;T1 call Send0 ;T0 call Send1 ;N/A call Send1 ;N/A call Send1 ;N/A call Send0 ;OS call Ack ;ACKO BIT ;Paty byte ---------------------------------------------------- call Send0 ;P7 call Send0 ;P6 call Send0 ;P5 call Send0 ;P4 call Send0 ;P3 call Send0 ;P2 call Send0 ;P1 call Send0 ;P0 call StopI2C ;STOP return ;Podprogramy -------------------------------------------------- Send0 bcf PORT_A,SDA ;posle LOW na TSA call Impuls call Wait return Send1 bsf PORT_A,SDA ;posle HIGH na TSA call Impuls call Wait bcf PORT_A,SDA return Impuls bsf PORT_A,SCL ;vytvori DataValid puls call Wait bcf PORT_A,SCL return Ack bsf PORT_A,SCL movlw b'00000010' ;POZOR ZMENA I/O PORTU A tris TRIS_A ;NUTNO UPRAVIT SDA movlw ERS movwf 0FFh nop AckLoop btfss PORT_A,SDA goto AckLoop2 decfsz ERS,f goto AckLoop goto AckErr AckLoop2 movlw b'00000000' ;POZOR ZMENA I/O PORTU A tris TRIS_A ;NUTNO UPRAVIT SDA bcf PORT_A,SCL call Wait return StartI2C call Wait bcf PORT_A,SDA call Wait bcf PORT_A,SCL call Wait return StopI2C call Wait bsf PORT_A,SCL call Wait bsf PORT_A,SDA call Wait return Wait movlw 0FFh ;zpozdeni movwf TEMP WaitLoop nop nop decfsz TEMP goto WaitLoop return SCLDown bcf PORT_A,SCL call Wait return SCLUp bsf PORT_A,SCL call Wait return I2CRead clrf PLLREAD bsf PORT_A,SCL ;nastavi SDA do HIGH bsf PORT_A,SDA ;nastavi SDL do HIGH call StartI2C ;START call Send1 call Send1 call Send0 call Send0 call Send0 call Send0 ;MA1=0 call Send1 ;MA0=0 call Send1 call Ack call Del10ms movlw b'00000010' ;SDA jako vstup TRIS TRIS_A call SCLUp btfsc PORT_A,SDA bsf PLLREAD,7 call SCLDown call SCLUp btfsc PORT_A,SDA bsf PLLREAD,6 call SCLDown call SCLUp btfsc PORT_A,SDA bsf PLLREAD,5 call SCLDown call SCLUp btfsc PORT_A,SDA bsf PLLREAD,4 call SCLDown call SCLUp btfsc PORT_A,SDA bsf PLLREAD,3 call SCLDown call SCLUp btfsc PORT_A,SDA bsf PLLREAD,2 call SCLDown call SCLUp btfsc PORT_A,SDA bsf PLLREAD,1 call SCLDown call SCLUp btfsc PORT_A,SDA bsf PLLREAD,0 call SCLDown movlw b'00000000' ;SDA a SCL jako vystupy TRIS TRIS_A call StopI2C return ;**** EEPROM ************************************************** ProgEE bsf SWR,RP0 bsf EECON1,WREN movlw 55h movwf EECON2 movlw 0AAh movwf EECON2 bsf EECON1,WR ProgTest btfsc EECON1,WR goto ProgTest bcf SWR,RP0 return ReadEE bsf SWR,RP0 bsf EECON1,RD ReadTest btfsc EECON1,RD goto ReadTest bcf SWR,RP0 return WriteD movlw 47h movwf EEDATA movlw 0h movwf EEADR call ProgEE movfw UPPER movwf EEDATA movlw 1h movwf EEADR call ProgEE movfw DOWNER movwf EEDATA movlw 2h movwf EEADR call ProgEE movfw STOV movwf EEDATA movlw 3h movwf EEADR call ProgEE movfw DESI movwf EEDATA movlw 4h movwf EEADR call ProgEE movfw JEDN movwf EEDATA movlw 5h movwf EEADR call ProgEE movfw DSTI movwf EEDATA movlw 6h movwf EEADR call ProgEE movfw SETI movwf EEDATA movlw 7h movwf EEADR call ProgEE return WriteM movlw 47h movwf EEDATA movlw 10h movwf EEADR call ProgEE movfw UPPER movwf EEDATA movlw 11h movwf EEADR call ProgEE movfw DOWNER movwf EEDATA movlw 12h movwf EEADR call ProgEE movfw STOV movwf EEDATA movlw 13h movwf EEADR call ProgEE movfw DESI movwf EEDATA movlw 14h movwf EEADR call ProgEE movfw JEDN movwf EEDATA movlw 15h movwf EEADR call ProgEE movfw DSTI movwf EEDATA movlw 16h movwf EEADR call ProgEE movfw SETI movwf EEDATA movlw 17h movwf EEADR call ProgEE return ReadD movlw 01h movwf EEADR call ReadEE movfw EEDATA movwf UPPER movlw 02h movwf EEADR call ReadEE movfw EEDATA movwf DOWNER movlw 03h movwf EEADR call ReadEE movfw EEDATA movwf STOV movlw 04h movwf EEADR call ReadEE movfw EEDATA movwf DESI movlw 05h movwf EEADR call ReadEE movfw EEDATA movwf JEDN movlw 06h movwf EEADR call ReadEE movfw EEDATA movwf DSTI movlw 07h movwf EEADR call ReadEE movfw EEDATA movwf SETI return ReadM movlw 11h movwf EEADR call ReadEE movfw EEDATA movwf UPPER movlw 12h movwf EEADR call ReadEE movfw EEDATA movwf DOWNER movlw 13h movwf EEADR call ReadEE movfw EEDATA movwf STOV movlw 14h movwf EEADR call ReadEE movfw EEDATA movwf DESI movlw 15h movwf EEADR call ReadEE movfw EEDATA movwf JEDN movlw 16h movwf EEADR call ReadEE movfw EEDATA movwf DSTI movlw 17h movwf EEADR call ReadEE movfw EEDATA movwf SETI return ;---- Delays ----------------------- Del100us movlw .160 movwf TEMP Del100Loop decfsz TEMP,f goto Del100Loop return Del2ms movlw .20 movwf TEMP2 Del2Loop call Del100us decfsz TEMP2,f goto Del2Loop return Del10ms call Del2ms call Del2ms call Del2ms call Del2ms call Del2ms return Del1s movlw .35 movwf TEMP3 Del1sLoop call Del10ms decfsz TEMP3,f goto Del1sLoop return ;*** OVLADANI LCD DISPLEJE *** ResetLCD call Del10ms ;20ms call Del10ms movlw 38h call SendCmd ;38 call Del2ms ;6ms call Del2ms call Del2ms call SendCmd ;38 call Del2ms ;2ms call SendCmd ;38 call Del100us ;100us call SendCmd ;38 Function Set call Del100us ;100us movlw 06h call SendCmd ;6 Entry Mode Set call Del100us ;100us movlw b'00001100' call SendCmd ;E Display ON/OFF Ctrl call Del100us ;100us movlw 01h call SendCmd ;ClearDisplay call Del2ms return MainLogo movlw b'00101010' ;* call SendData movlw b'00101010' ;* call SendData movlw b'00101010' ;* call SendData movlw b'11111110' ;separation call SendData movlw b'01010010' ;R call SendData movlw b'01000001' ;A call SendData movlw b'01000100' ;D call SendData movlw b'01001001' ;I call SendData movlw b'01001111' ;O call SendData movlw b'01001101' ;M call SendData movlw b'01000001' ;A call SendData movlw b'01011000' ;X call SendData movlw b'11111110' ;separation call SendData movlw b'00101010' ;* call SendData movlw b'00101010' ;* call SendData movlw b'00101010' ;* call SendData return Refresh movlw 0h subwf STOV,f btfss SWR,Z goto RefreshNext movlw 0FEh ;mezera call SendData goto RefreshOne RefreshNext movfw STOV call SendNumber RefreshOne movfw DESI call SendNumber movfw JEDN call SendNumber movlw b'00101110' call SendData movfw DSTI call SendNumber movfw SETI call SendNumber movlw 0h ;0 call SendNumber movlw b'01001101' ;M call SendData movlw b'01001000' ;H call SendData movlw b'01111010' ;z call SendData movlw b'11111110' ;mezera call SendData btfss PLLREAD,6 goto RefreshFail movlw b'01001100' call SendData movlw b'01001111' call SendData movlw b'01000011' call SendData movlw b'01001011' call SendData return RefreshFail movlw b'01000110' call SendData movlw b'01000001' call SendData movlw b'01001001' call SendData movlw b'01001100' call SendData return Status movlw 55h ;U call SendData movlw 6Ch ;l call SendData movlw 61h ;a call SendData movlw 64h ;d call SendData movlw 3Ah ;: call SendData btfsc PLLREAD,2 goto Vco2 btfsc PLLREAD,1 goto Vco2 btfsc PLLREAD,0 goto Vco2 movlw .1 ;1 call SendNumber goto VcoNext Vco2 btfsc PLLREAD,2 goto Vco3 btfsc PLLREAD,1 goto Vco3 btfss PLLREAD,0 goto Vco3 movlw .2 ;2 call SendNumber goto VcoNext Vco3 btfsc PLLREAD,2 goto Vco4 btfss PLLREAD,1 goto Vco4 btfsc PLLREAD,0 goto Vco4 movlw .3 ;3 call SendNumber goto VcoNext Vco4 btfsc PLLREAD,2 goto Vco5 btfss PLLREAD,1 goto Vco5 btfss PLLREAD,0 goto Vco5 movlw .4 ;4 call SendNumber goto VcoNext Vco5 btfss PLLREAD,2 goto VcoNext btfsc PLLREAD,1 goto VcoNext btfsc PLLREAD,0 goto VcoNext movlw .5 ;5 call SendNumber VcoNext movlw 2Fh ;/ call SendData movlw .5 call SendNumber movlw 0FEh ;mezera call SendData movlw 0FEh ;mezera call SendData movlw 50h ;P call SendData movlw 77h ;w call SendData movlw 72h ;r call SendData movlw 3A ;: call SendData btfss PLLREAD,7 goto VcoX movlw .1 ;1 call SendNumber return VcoX movlw .0 ;0 call SendNumber return MemoryWrite movlw 57h ;W call SendData movlw 72h ;r call SendData movlw 69h ;i call SendData movlw 74h ;t call SendData movlw 65h ;e call SendData movlw 4Dh ;M call SendData movlw 65h ;e call SendData movlw 6Dh ;m call SendData movlw 0FEh ;mezera call SendData movlw 55h ;U call SendData movlw 50h ;P call SendData movlw 3Dh ;= call SendData movlw 59h ;Y call SendData movlw 45h ;E call SendData movlw 53h ;S call SendData return MemoryRead movlw 0FEh ;mezera call SendData movlw 52h ;R call SendData movlw 65h ;e call SendData movlw 61h ;a call SendData movlw 64h ;d call SendData movlw 4Dh ;M call SendData movlw 65h ;e call SendData movlw 6Dh ;m call SendData movlw 0FEh ;mezera call SendData movlw 55h ;U call SendData movlw 50h ;P call SendData movlw 3Dh ;= call SendData movlw 59h ;Y call SendData movlw 45h ;E call SendData movlw 53 ;S call SendData return MemoryReset movlw 0FEh ;mezera call SendData movlw 0FEh ;mezera call SendData movlw 0FEh ;mezera call SendData movlw 52h ;R call SendData movlw 65h ;e call SendData movlw 73h ;s call SendData movlw 65h ;e call SendData movlw 74h ;t call SendData movlw 0FEh ;mezera call SendData movlw 55h ;U call SendData movlw 50h ;P call SendData movlw 3Dh ;= call SendData movlw 59h ;Y call SendData movlw 45h ;E call SendData movlw 53h ;S call SendData return AckErr call ClearLCD call HomeLCD movlw 45h ;E call SendData movlw 72h ;r call SendData movlw 72h ;r call SendData movlw 41h ;A call SendData movlw 43h ;C call SendData movlw 4B ;K call SendData AckErrLoop goto AckErrLoop ClearLCD movlw 01h call SendCmd call Del2ms return HomeLCD movlw 02h call SendCmd call Del2ms return SendCmd bsf PORT_A,KEYS movwf PORT_B movlw 0h TRIS TRIS_B bsf PORT_A,ENAB ;Vytvori 100us impuls call Del100us bcf PORT_A,ENAB movlw 0FFh TRIS TRIS_B bcf PORT_A,KEYS return SendData bsf PORT_A,KEYS movwf PORT_B movlw 0h TRIS TRIS_B bsf PORT_A,RS bsf PORT_A,ENAB call Del100us bcf PORT_A,ENAB bcf PORT_A,RS movlw 0FFh TRIS TRIS_B bcf PORT_A,KEYS call Del100us return SendNumber bsf PORT_A,KEYS movwf PORT_B movlw 0h TRIS TRIS_B bcf PORT_B,7 bcf PORT_B,6 bsf PORT_B,5 bsf PORT_B,4 bsf PORT_A,RS bsf PORT_A,ENAB call Del100us bcf PORT_A,ENAB bcf PORT_A,RS movlw 0FFh TRIS TRIS_B bcf PORT_A,KEYS call Del100us return ;-------------------------------------------------------------- Start movlw 0h TRIS TRIS_A movlw 0FFh TRIS TRIS_B clrf PORT_A clrf PORT_B call ResetLCD call MainLogo call Del1s call Del1s movlw 00h ;precteni 1St Flagu 47h movwf EEADR call ReadEE movlw 47h subwf EEDATA,W ;odecte W a EEDATA btfss SWR,Z call FirstWrite ;v eeprom neni 47 call ReadD movlw b'11000011' movwf PLLREAD call ClearLCD call HomeLCD clrf CT1 movlw 0FFh movwf CT1 call I2CWrite goto MainLoop FirstWrite movlw 06h movwf UPPER movlw 0CCh movwf DOWNER movlw 0h movwf STOV movlw 8h movwf DESI movlw 7h movwf JEDN movlw 0h movwf DSTI movlw 0h movwf SETI call WriteD call WriteM return end