S
scmael
Guest
Vážení přátelé Potřebuji pomoc jsem projekt, který má pic16c74 dnes je velmi obtížné najít a příliš drahé Jak nahradit PIC16F877 Konektor je stejný.
;************************************************* *************
Scénář HAYSSAM Serhan *
; COPYRIGHT HOME VZORY - 961 9 221737 *
; *
; ADRESA RAMI Serhan *
, C / O HAYSSAM Serhan *
; Americké univerzitě v BEJRÚT *
, POBOX: 11-0236/F6 *
; BEJRÚT *
; LIBANON *
; *
; DATE 28.7.97 *
; Soubor uložen AS DISPLAY.ASM *
; PRO PIC16C74 WDT = OFF CP = OFF *
; CLOCK 18,00 MHZ RESONATOR *
;************************************************* *************
HLAVA "DISPLAY.ASM - RTCLOCK klávesnice PC LCD EEPROM INTERFACE DISPLAY"
LIST P = 16C74
;
; HARDWARE SETUP
; Port setup
; LCD řídicí vedení
; RA4 = RS (REGISTER SELECT)
; RA5 = E (ENABLE)
; LCD DATA POLOŽKY
; RA <3: 0>
; B port setup
; Klávesnice PC INTERFACE
; RB0/INT = KLÁVESNICE hodinový signál
; RB1 = KLÁVESNICE datových signálů
; DATA Výběrová komise
; RB2 = CS0
; RB3 = CS1
; RB4 = CS2
; RB5 = CS3
; RB6 = CS4
; RB7 = CS5
; C port setup
; RC0 = RTC řídicí vedení
; RC1 = RTC I / O
; RC2 = RTC CLOCK
; Signál SHIFT REGISTER
; RC3 = CLK signálu do SHIFT REGISTER
; RC6 = DATA signál SHIFT REGISTER
; RC4 = SPARE
; RC5 = SPARE
; RC7 = SPARE; D port setup
; Výstup dat TO DISPLAY
; RD <7: 0>
; E port setup
; EEPROM INTERFACE
; RE0 = SCL
; RE1 = SDA
; RE2 = SPARE
INCLUDE <P16C74.INC>
;
;------------------------------------------------- ---------------------------
; REGISTER OBRÁZEK PŘIDĚLENÍ
;------------------------------------------------- ---------------------------
; PROGRAM MADLA čtení a psaní DS1302 Hodiny reálného času
; REGISTRY.Rovněž umožňuje, Číst a Zapisovat bloku 31 BYTES
; Paměti Z / RTC netěkavých datové oblasti.
; Přidělování portů
LCD_DATA EQU PORTA, LCD DAT JE NA NIŽŠÍ 4-BITS
LCD_DATA_TRIS EQU TRISA; REGISTRU TRIS PRO LCD DATA
LCD_CNTL EQU PORTA; dva ovládací prvky LINKY
E EQU 5; LCD umožní kontrolu LINE
RS EQU 4; LCD REGISTER SELECT KONTROLA LINE
; B přidělování portů
KEYPOR EQU PORTB; PORTB
RB1 EQU 1
CS0 EQU 2
CS1 EQU 3
CS2 EQU 4
CS3 EQU 5
CS4 EQU 6
CS5 EQU 7
; C přidělování portů
RTCRES EQU 0; RTC řídicí vedení
RTCIO EQU 1; RTC I / O
RTCCLK EQU 2; RTC CLOCK
ISPCLK EQU 3; SERIAL SHIFT REGISTER CLOCK
ISPDAT EQU 6; SERIAL SHIFT REGISTER vstup dat
; D přidělování portů
DISPDAT EQU PORTD
; E přidělování portů
SCL EQU ,0; EEROM hodiny bitů
SDA EQU ,1; EEROM datový bit
SDPORT EQU PORTE; EEROM datový port
SCPORT EQU PORTE; EEROM hodiny port
SHIFT EQU ,1
KEY EQU ,2
BEG EQU ,6
HI EQU ,7
; VARIABLE PŘIDĚLENÍ
GP1 EQU 0x20; UNIVERZÁLNÍ REGISTRY
GP2 EQU GP1 1
FSRCOPY EQU GP2 1; KOPIE FSR
SERIAL EQU FSRCOPY 1; GP LISTINA pro přenesení ETC.
; ********** Hodiny reálného času REGISTER KOPIE ****
RTCD EQU SERIAL 1; DAYS
RTCH EQU RTCD 1; HODIN
RTCM EQU RTCH 1; ZÁPIS
RTC EQU RTCM 1; SECONDS
WCOPY EQU RTC 1; kopie registru W při přerušení push
SCOPY EQU WCOPY 1; Kopie statutu registru v přerušení push
PCOPY EQU SCOPY 1; Kopie pclath v přerušení push
VLAJKY EQU PCOPY 1; generální bitů účel vlajky zde
KEYVAL EQU VLAJKA 1; Používá se k formě klíčových kód
; ********** Sériovou EEPROM REGISTER ***********
COUNT EQU KEYVAL 1
EESER COUNT EQU 1
EEPAGE EQU EESER 1; Číslo stránky
EEBYTE EQU EEPAGE 1; Byte counter
EESTART EQU EEBYTE 1; eerom začít řešit v blokovém LOW
EECOUNT EQU EESTART 1; Bit počítat při řazení
FLA EQU EECOUNT 1; Misc příznakových bitů
STRCOM EQU FLA 1; EEROM strana / adresa ukazatel
; **************** RTC INTERMEDIATE LISTINA *******
MSDH1 EQU STRCOM 1
LSDH1 EQU MSDH1 1
MSDM1 EQU LSDH1 1
LSDM1 EQU MSDM1 1
MSDS1 EQU LSDM1 1
LSDS1 EQU MSDS1 1
; **************** ************ PC klávesnice REGISTRU
NBITS EQU LSDS1 1
Nbytes EQU NBITS 1
KEYTEMP EQU Nbytes 1
LASTKEY EQU KEYTEMP 1
KEYBUFF EQU LASTKEY 1
Flag1 EQU KEYBUFF 1
KTMP EQU flag1 1
BLL EQU KTMP 1
; ************** RTC UNIVERZÁLNÍ REGISTER ******
MSD EQU BLL 1; TEMP.REGISTER, drží NEJDŮLEŽITĚJŠÍ
; Číslici bin BCD PŘEPOČET
LSD EQU MSD 1; TEMPORARY REGISTER, drží nejméně významný
; Číslici bin BCD PŘEPOČET
TEMP EQU LSD 1; DOČASNÁ REGISTRU
CHAR EQU TEMP 1; TEMPORARY REGISTER,
USD EQU CHAR 1;
TSD EQU USD 1;
MSDH EQU TSD 1
MSDM EQU MSDH 1
MSDS EQU MSDM 1
LSDH EQU MSDS 1
LSDM EQU LSDH 1
LSDS EQU LSDM 1
;*************** UNIVERZÁLNÍ REGISTER ***********
EECH EQU LSDS 1; eerom začít řešit v blokovém HIGH
STRNUM EQU EECH 1
TTT EQU STRNUM 1
TTTF EQU TTT 1
PPP EQU TTTF 1
TABOFF EQU PPP 1
EECL EQU TABOFF 1; eerom začít řešit v blokovém LOW
DISPCON EQU EECL 1
LCDH EQU DISPCON 1
AAA EQU LCDH 1
BBB EQU AAA 1
CCC BBB EQU 1
LL EQU CCC 1
HH EQU LL 1
EL EQU HH 1
EH EQU EL 1
LLL EQU EH 1
INL EQU 0x70
INH EQU INL 1
ILH EQU INH 1
CSHIFT EQU ILH 1
WAY EQU CSHIFT 1
WAY2 EQU WAY 1
CoLo EQU WAY2 1
TCOLO EQU CoLo 1
IEE EQU TCOLO 1
OTYO EQU IEE 1
TBUFF EQU OTYO 1
CH1 EQU 0xA0
CH2 EQU CH1 1
CH3 EQU CH2 1
CH4 EQU CH3 1
CH5 EQU CH4 1
CH6 EQU CH5 1
CH7 EQU CH6 1
CH8 EQU CH7 1
CH9 EQU CH8 1
CH10 EQU CH9 1
CH11 EQU CH10 1
CH12 EQU CH11 1
CH13 EQU CH12 1
CH14 EQU CH13 1
CH15 EQU CH14 1
CH16 EQU CH15 1
CH17 EQU CH16 1
CH18 EQU CH17 1
CH19 EQU CH18 1
CH20 EQU CH19 1
Ch21 EQU CH20 1
CH22 EQU ch21 1
CH23 EQU CH22 1
CH24 EQU CH23 1
CH25 EQU CH24 1
CH26 EQU CH25 1
CH27 EQU CH26 1
CH28 EQU CH27 1
CH29 EQU CH28 1
CH30 EQU CH29 1
CH31 EQU CH30 1
CH32 EQU CH31 1
;
CLKR EQU 100h; Přejíždějte hodnotu pro RTC - odečíst počet
, Hodnota z tohoto nastavit odpočítávat čas.
DIV256 EQU b'00000111 '; 256us prescale nastavení
ROMBASE EQU 0; Spuštění programu ROM
;
DEV_FREQ EQU D'28000000 '; ZAŘÍZENÍ frekvence je 20 MHZ
DEV_FREQ2 EQU D'3.000.000 '; ZAŘÍZENÍ frekvence 2 MHz
DB_HI_BYTE EQU (HIGH (((DEV_FREQ / 4) * 1 / D'1000 ') / 3)) 1
LCD_INIT_DELAY EQU (HIGH (((DEV_FREQ / 4) * D'46 '/ D'10000') / 3)) 1
LCD_INIT_DELAY2 EQU (HIGH (((DEV_FREQ2 / 4) * D'46 '/ D'10000') / 3)) 1
;
T1OSO EQU 0; RC0 / T1OSO / T1CKI
;
RESET_V EQU 0x0000; ADRESA RESET VECTOR
ISR_V EQU 0x0004; ADRESA vektor přerušení
TABLE_ADDR EQU 0x07E0, ADRESA, kde začít TABULKY
TAB_ASC1 EQU 0x067B
TAB_ASC2 EQU 0x0754
;
; LCD MODULE PŘÍKAZY
;
DISP_ON EQU 0x00C; DISPLAY NA
DISP_ON_C EQU 0x00E, DISPLAY ON, kurzor na
DISP_OFF EQU 0x008; DISPLAY OFF
CLR_DISP EQU 0x001; CLEAR DISPLAY
ENTRY_INC EQU 0x006;
ENTRY_INC_S EQU 0x007;
ENTRY_DEC EQU 0x004;
ENTRY_DEC_S EQU 0x005;
DD_RAM_ADDR EQU 0x080, nejméně významný 7-BIT JSOU NA ADRESU
DD_RAM_UL EQU 0x080; coner levé horní části displeje
DD_RAM_AD1 EQU 0x08C;
DD_RAM_AD2 EQU 0x0C0;;------------------------------------------------- ---------------------------
; Vlajka bitové přiřazení
;------------------------------------------------- ---------------------------
; Bitů v VLAJKY jsou zde definovány
KEYIN EQU 0; Set-li klíč hit čeká v KEYMAKE
; CONSTANT PŘIDĚLENÍ
; RTC CHIP (DS1302) - CLOCK COMMAND konstanty.
, Tyto se zapisují do RTC v RTCWR NEBO RTCRD.
COMWR EQU B'10001110 '
SECWR EQU B'10000000 '; příkaz umožňuje zapsat RTC SECONDS
MINWR EQU B'10000010 '; příkaz umožňuje zapsat RTC ZÁPIS
HOUWR EQU B'10000100 '; příkaz umožňuje zapsat RTC HODINY
DAYWR EQU B'10001010 '; příkaz umožňuje zapsat RTC DAYS
SECRD EQU B'10000001 '; COMMAND přečíst RTC SECONDS
MINRD EQU B'10000011 '; COMMAND přečíst RTC ZÁPIS
HOURD EQU B'10000101 '; COMMAND přečíst RTC HODINY
DAYRD EQU B'10001011 '; COMMAND přečíst RTC DAYS
; PORT NASTAVENÍ SMĚRU NEPOSKYTUJE RTC LINE DATA výstup / vstup
RTCDOUT EQU B'00000000 '; RTC LINE DATA OUTPUT
RTCDIN EQU B'00000010 '; RTC DATA LINE INPUT
; PORT NASTAVENÍ SMĚRU NEPOSKYTUJE EEPROM SDA LINE výstup / vstup
SDAIN EQU b'00000010 '; SDA je vstup, když TRIS provádí
SDAOUT EQU b'00000000 '; SDA je výstup při TRIS provádí
;------------------------------------------------- --------------------------
; EEROM rutiny
;------------------------------------------------- --------------------------
; 24LC65 EEROM manipulaci.
; READEE / WRITEE čtení / zápis 16 bajtů na začátku EEFSR (60 H) použití
; EERD a EEWR.
; V klidovém stavu mimo eerom rutiny linka SCL musí být
; Rozhodl nízké, pokud datová linka je sdílená s ostatními zařízeními.
; Rutiny READEE / WRITEE volání jedné úrovni podprogramů.
: Když se EERD a EEWR volal, jak nastavit --
; EESTART - eerom začít číst nízké adresu 8 bitů
, Na výstupu --
; EEBYTE - dluh kód stavu na výstupu
, NOP Všimněte si, že to může být třeba zpomalit rozhraní tak, aby
; Eerom některých částí.
; EEROM konstantní - kód zařízení a hardwarovou adresu
EECONT EQU b'10100000 '; 7 bitový byte pouze
; Zařízení kód 1010 pro 24LC65B
; V bitech 7-4.
; Hardwarovou adresu zařízení, jak je stanoveno podle A0, 1,2
, Je umístěn v bitech 3-1.
; Tyto ram registry jsou použity a musí být stavěna na roveň
; Vhodné hodnoty, aby BASE RAM STRANA přístup při eerom čtení / zápis.
; EESER, EEBYTE, EESTART, EECOUNT, STRCOM
; Tyto hodnoty nastaví pro čtení / zápis ram start adresa
EEFSR EQU b'01100000 '; místo na začátku ram
;
;------------------------------------------------- ---------------------------
; Bit přiřazení
;------------------------------------------------- ---------------------------
; VLAJKA bity jsou zde definovány
EEREAD EQU 0; Sada pro čtení při vstupu na EERDWR
;*********************** Makra ************************* *
; BANK0 vybírá LISTINA FILE BANK 0
BANK0 MACRO
BCF STATUS, Rp0, vybrané bankovní 0
ENDM
; BANK1 vybírá LISTINA FILE BANK 1
BANK1 MACRO
BSF STATUS, Rp0, SELECT BANK 1
ENDM
; PAGE0 vybírá ROM STRANA 0
PAGE0 MACRO
BCF PCLATH, 3; ROM SELECT PAGE 0
ENDM
; Stránka1 vybírá ROM STRANA 1
Stránka1 MACRO
BSF PCLATH, 3; SELECT ROM STRANA 1
ENDM
; RTCCLO SOUPRAVY RTC CLOCK LINE LOW
RTCCLO MACRO
BCF PORTC, RTCCLK
ENDM
; RTCCHI SOUPRAVY RTC CLOCK LINE HIGH
RTCCHI MACRO
BSF PORTC, RTCCLK
ENDM
; RTCDLO SOUPRAVY RTC LINE DATA LOW
RTCDLO MACRO
BCF PORTC, RTCIO
ENDM
; RTCDHI SOUPRAVY RTC DATA LINE HIGH
RTCDHI MACRO
BSF PORTC, RTCIO
ENDM
; RTCRLO SOUPRAVY RTC RESET LINE LOW
RTCRLO MACRO
BCF PORTC, RTCRES
ENDM
; RTCRHI SOUPRAVY RTC RESET LINE HIGH
RTCRHI MACRO
BSF PORTC, RTCRES
ENDM
; RTCIDLE SOUPRAVY DO RTC do klidového stavu
RTCIDLE MACRO
RTCRLO
RTCDLO
RTCCLO
ENDM
;******
; PUSH uloží W, STATUS, PCLATH registrů při přerušení
PUSH MACRO
MOVWF WCOPY; Ušetřete na bankovních curent
SWAPF STATUS, W; dovolené Z trochu jako je
BANK0; Uložit zbytek na bankovních 0
MOVWF SCOPY
MOVFW PCLATH, STATUS a W jsou v bezpečí - nyní ušetřit PCLATH
MOVWF PCOPY
ENDM;******
; PULL obnovuje W, STATUS, PCLATH registruje po PUSH
PULL MACRO
BANK0, Obnovit z banky 0
MOVFW PCOPY; Obnovit PCLATH první
MOVWF PCLATH
SWAPF SCOPY, W; Obnovit okusovat pozici STAV
MOVWF STATUS
SWAPF WCOPY, F
SWAPF WCOPY, W, Z dovolené trochu jako je
ENDM;******
; TSTRTC tahů TIMER0 na reg. W a sady ZERO stav
TSTRTC MACRO
MOVFW TMR0; Test timeout
ENDM
;******
; EEBIT hodiny nést trochu na linku eerom dat.
EEBIT MACRO
MÍSTNÍ EEBIT1, EEBIT2
SKPNC
GOTO EEBIT1
; Carry je jasné,
BCF SDPORT, SDA
GOTO EEBIT2
; Carry je nastaven
EEBIT1 BSF SDPORT, SDA
; Hodiny eerom
EEBIT2 NOP
BSF SCPORT, SCL, vysoká Clock
NOP
BCF SCPORT, SCL; Hodiny nízká
ENDM;******
; EEGET hodiny byte (vlevo) do EESER z eerom.Počet bitů
, Je tím, '0 'vlajku EESER.
; Konec s SCL a SDA nízká a to jak výstupy
EEGET MACRO
MÍSTNÍ EEGET1
MOVLW b'11111110 ', 8 datových bitů je třeba vykládat tak, vlajka je 8. bitů
MOVWF EESER
MOVLW SDAIN; SDA je vstupní
BANK1
MOVWF TRISE
BANK0
EEGET1 BSF SCPORT, SCL, Hodiny vysoké získat data bitů
CLRC; Předpokládejme, že data jsou nyní nízké
BTFSC SDPORT, SDA, SDA Test bitů
SETC; Data byla opravdu vysoká!
RLF EESER; Carry = datový bit na údaje, řazení
BCF SCPORT, SCL; Hodiny s nízkou po čtení dat
BC EEGET1; Bit počet flag test - smyčky až 0 nezobrazí
; Byte byla přijata na EESER, obnovit autobusem do výstupy
MOVLW SDAOUT, SDA, je výstup
BANK1
MOVWF TRISE
BANK0
ENDM
;******
; EEPUT hodiny byte (vlevo) v EESER do eerom.Počet bitů
, Je v EECOUNT.
EEPUT MACRO
MÍSTNÍ EEPUT1
EEPUT1 RLF EESER; si dat trochu
EEBIT; Carry na EEROM data a hodiny se
DECFSZ EECOUNT; Počet bitů
GOTO EEPUT1, smyčky, dokud se všechny bity odeslána
ENDM
;******
; TABSET zřizuje lcd stůl offset ukazatel před řetězec výstup
; Začíná
TABSET MACRO
MOVLW b'11111111 '; Offset je zvýšeno na každém volání
, Tabulky - první výzva musí vytvářet hodnoty nula
; Ofset.
MOVWF TABOFF
ENDM;******
; BOD inkrementuje ukazatel řetězec offset a přidá ji do
, PCL připravené pro smyčcový vyhledávání
BOD MACRO
INCF TABOFF
MOVFW TABOFF
ADDWF PCL
ENDM
;******
; POINT8 inkrementuje ukazatel řetězec offset a přidá ji do
; PLC připraven pro smyčcový vyhledávání.Sady PCLATH až 8
POINT8 MACRO
MOVLW ,8
MOVWF PCLATH
INCF TABOFF
MOVFW TABOFF
ADDWF PCL
ENDM
;******
; POINT9 inkrementuje ukazatel řetězec offset a přidá ji do
, PCL připravené pro smyčcový vyhledávání.Sady PCLATH až 9
POINT9 MACRO
MOVLW ,9
MOVWF PCLATH
INCF TABOFF
MOVFW TABOFF
ADDWF PCL
ENDM
;******
; POINT10 inkrementuje ukazatel řetězec offset a přidá ji do
, PCL připravené pro smyčcový vyhledávání.Sady PCLATH 10
POINT10 MACRO
MOVLW ,10
MOVWF PCLATH
INCF TABOFF
MOVFW TABOFF
ADDWF PCL
ENDM
;******
; POINT11 inkrementuje ukazatel řetězec offset a přidá ji do
, PCL připravené pro smyčcový vyhledávání.Sady PCLATH až 11
POINT11 MACRO
MOVLW ,11
MOVWF PCLATH
INCF TABOFF
MOVFW TABOFF
ADDWF PCL
ENDM
;******
; POINT12 inkrementuje ukazatel řetězec offset a přidá ji do
, PCL připravené pro smyčcový vyhledávání.Sady PCLATH až 12
POINT12 MACRO
MOVLW ,12
MOVWF PCLATH
INCF TABOFF
MOVFW TABOFF
ADDWF PCL
ENDM
;******
; POINT13 inkrementuje ukazatel řetězec offset a přidá ji do
, PCL připravené pro smyčcový vyhledávání.Sady PCLATH až 13
POINT13 MACRO
MOVLW ,13
MOVWF PCLATH
INCF TABOFF
MOVFW TABOFF
ADDWF PCL
ENDM
;******
; POINT14 inkrementuje ukazatel řetězec offset a přidá ji do
, PCL připravené pro smyčcový vyhledávání.Sady PCLATH až 14
POINT14 MACRO
MOVLW ,14
MOVWF PCLATH
INCF TABOFF
MOVFW TABOFF
ADDWF PCL
ENDM
;******
; POINT15 inkrementuje ukazatel řetězec offset a přidá ji do
, PCL připravené pro smyčcový vyhledávání.Sady PCLATH až 15
POINT15 MACRO
MOVLW ,15
MOVWF PCLATH
INCF TABOFF
MOVFW TABOFF
ADDWF PCL
ENDM
; RESET ADRESA.DETERMINE DRUH RESET
;
ORG RESET_V; RESET VECTOR LOKALITA
GOTO START; ANO
;
;******
, Vektor přerušení - klávesnice PC
ORG ISR_V
GOTO INT
;
;************************* Podprogramy *********************** *****
;******
; STRING posílá řetězec s číslem v registru W - k plemenitbě
STRING
MOVWF STRNUM
TABSET, Xero offset
Stránka1
CALL DOSTR; znaků z řetězce
PAGE0; rom Obnovit stránku
RETURN
;******
; Řetězec2 posílá řetězec s číslem v registru W - na LCD
Řetězec2
MOVWF STRNUM
TABSET, Xero offset
Stránka1
CALL DOSTR2; znaků z řetězce
PAGE0; rom Obnovit stránku
RETURN
INIT_DISPLAY MOVLW DISP_ON_C, DISPLAY ON, CURSON NA
CALL SEND_CMD; odeslání tohoto příkazu TO DISPLAY MODULE
MOVLW CLR_DISP; CLEAR DISPLAY
CALL SEND_CMD; odeslání tohoto příkazu TO DISPLAY MODULE
MOVLW ENTRY_INC; SET VSTUP MODE INC, žádný posun
CALL SEND_CMD; odeslání tohoto příkazu TO DISPLAY MODULE
RETURN
CLEAR_DISP
MOVLW CLR_DISP; CLEAR DISPLAY
CALL SEND_CMD; odeslání tohoto příkazu TO DISPLAY MODULE
RETURN
;
DISPLAY
MOVLW DD_RAM_AD2;
CALL SEND_CMD;
CALL LOAD_HRS, NE, DO NOMAL DISPLAY
CALL LOAD_COLON;
CALL LOAD_MIN;
CALL LOAD_COLON;
CALL LOAD_SEC;
RETURN
;
;
LOAD_HRS
MOVF MSDH, W; LOAD MSD hodnoty do WREG
CALL NUM_TABLE; GET ASCII kód
CALL SEND_CHAR; POSLAT tohoto znaku na displej
;
MOVF LSDH, W; LOAD LSD hodnotu do WREG
CALL NUM_TABLE; Get ASCII kód
CALL SEND_CHAR; Poslat tento znak displeje
RETURN
;
LOAD_COLON MOVLW ''; ASCII hodnota volné místo
BTFSC LSDS, 0; Je sudý nebo lichý druhé
ADDLW ':' - '', je lichá, druhá dvojtečka je zapnutá.
; ADD delta vyrovnání do ASCII znaků
CALL SEND_CHAR; Poslat tento znak na displej
RETURN
;
LOAD_MIN
MOVF MSDM, W; Load hodnoty MSD do Wreg
CALL NUM_TABLE; Získejte ASCII kód
CALL SEND_CHAR; Poslat tento znak displeje
;
MOVF LSDM, W; Load hodnoty LSD do Wreg
CALL NUM_TABLE; Získejte ASCII kód
CALL SEND_CHAR; Poslat tento znak displeje
RETURN
LOAD_SEC
MOVF BL, W; Load hodnoty MSD do Wreg
CALL NUM_TABLE; Získejte ASCII kód
CALL SEND_CHAR; Poslat tento znak displeje
;
MOVF LSDS, W; Load hodnoty LSD do Wreg
CALL NUM_TABLE; Získejte ASCII kód
CALL SEND_CHAR; Poslat tento znak displeje
RETURN
;
;************************************************* ************************
; * SendChar - Pošle znak na LCD *
; * Tato rutina rozdělí znaku do horní a dolní *
; * Křupky a odešle na LCD, horní okusovat první.*
; * Údaje jsou přenášeny na PORT <3:0> piny *
;************************************************* ************************
SEND_CHAR
MOVWF CHAR, znak, který bude odeslán v W
CALL LCD_DELAY; Počkejte na LCD, které mají být připraveny
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
SWAPF CHAR, W;
ANDLW 0x0F; Get horní okusovat
MOVWF LCD_DATA; Odesílání dat na LCD
BSF LCD_CNTL, RS, Set LCD datový režim
BSF LCD_CNTL, E, E přepínač pro LCD
NOP
BCF LCD_CNTL, E
MOVF CHAR, W
ANDLW 0x0F; Get nižší okusovat
MOVWF LCD_DATA; Odesílání dat na LCD
BSF LCD_CNTL, RS, Set LCD datový režim
BSF LCD_CNTL, E, E přepínač pro LCD
NOP
BCF LCD_CNTL, E
; BCF LCD_CNTL, RS
RETURN
;************************************************* **************
; * Sendcmd - odešle příkaz na lcd *
; * Tato rutina rozdělí příkaz na horní a dolní *
; * Křupky a posílá je do lcd, horní nible první.*
; * Údaje jsou přenášeny na PORT <3:0> piny *
;************************************************* **************
SEND_CMD
MOVWF CHAR; znaků, je třeba zaslat do Z
CALL LCD_DELAY; Počkejte na LCD, které mají být připraveny
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
SWAPF CHAR, W;
ANDLW 0x0F; Get horní okusovat
MOVWF LCD_DATA; Odesílání dat na LCD
BCF LCD_CNTL, RS, Set LCD příkazovém režimu
BSF LCD_CNTL, E, E přepínač pro LCD
NOP
BCF LCD_CNTL, E
MOVF CHAR, W
ANDLW 0x0F; Get nižší okusovat
MOVWF LCD_DATA; Odesílání dat na LCD
BSF LCD_CNTL, E, E Přepínač pro LCD
NOP
BCF LCD_CNTL, E
RETURN
;
; Tato rutina se počítá časy, které potřebuje delay loop
; Být proveden na základě LCD_INIT_DELAY přirovnávat, která zahrnuje
, Frekvence provozu.Tato použití registry předtím, než jsou potřebné pro
; Uložení času.
;
LCD_DELAY MOVLW LCD_INIT_DELAY;
MOVWF USD; Použití MSD a LSD rejstříků na Initilize LCD
CLRF TSD;
Loop2 DECFSZ TSD; Delay time = MSD * ((3 * 256) 3) * Tcy
GOTO loop2;
DECFSZ USD;
END_LCD_DELAY
GOTO loop2;
RETURN;
LCD_DELAY3 MOVLW LCD_INIT_DELAY2;
MOVWF USD; Použití MSD a LSD rejstříků na Initilize LCD
CLRF TSD;
LOOP23 DECFSZ TSD; Delay time = MSD * ((3 * 256) 3) * Tcy
GOTO LOOP23;
DECFSZ USD;
END_LCD_DELAY3
GOTO LOOP23;
RETURN;
, Což je podprogram pro pc klávesnice přerušení
INT PUSH, Uložit W, STATUS, PCLATH
MOVLW 0
MOVWF PCLATH; Povolit pro volání do vyhledávací tabulky
BTFSC INTCON, INTF; TEST PRO zastavení při INT/RB0
GOTO KBD
GOTO INTX; Odejít z přerušení
KBD
MOVFW NBITS
SUBLW 0x00
BNZ BIT1_8
BIT0
GOTO BUMP
BIT1_8
MOVFW NBITS
SUBLW 0x09
BZ Bit9
MOVFW NBITS
SUBLW 0x0A
BZ BIT10
CLRC
BTFSC KEYPOR, RB1
SETC
SRR KEYTEMP
GOTO BUMP
Bit9
GOTO BUMP
BIT10
MOVFW KEYTEMP
SUBLW 0x12
BZ TAT
MOVFW KEYTEMP
SUBLW 0x59
BNZ NOTLS
TAT
MOVFW LASTKEY
SUBLW 0xF0
BNZ MAKELS
BCF flag1, SHIFT
MOVLW 0x12
MOVWF LASTKEY
GOTO Tidy
MAKELS
BSF flag1, SHIFT
MOVLW 0x12
MOVWF LASTKEY
GOTO Tidy
NOTLS
MOVFW KEYTEMP
SUBLW 0x14
BNZ NOTCTRL
NOP
GOTO Tidy
NOTCTRL
MOVFW KEYTEMP
SUBLW 0xF0
BNZ NOTBREAK
MOVFW KEYTEMP
MOVWF LASTKEY
GOTO Tidy
NOTBREAK
MOVFW LASTKEY
SUBLW 0xF0
BNZ NOT_F0
MOVLW 0x00
MOVWF LASTKEY
GOTO Tidy
NOT_F0
MOVFW KEYTEMP
MOVWF LASTKEY
MOVWF KTMP
BTFSC flag1, SHIFT
GOTO posunul
UNSHIFTED
CALL ASC1
GOTO SKIP1
Posunul
CALL ASC2
SKIP1NOT0
MOVWF KEYBUFF
BSF flag1, KEY
MOVLW 0x01
MOVWF Nbytes
Tidy
MOVLW 0x00
MOVWF NBITS
MOVWF KEYTEMP
GOTO INTDONE
BUMP
INCF NBITS
INTDONE
BCF INTCON, INTF
PULL
RETFIE
; Obecné odchod z přerušení
INTX BCF INTCON, RBIF; Clear interrypt volání flag
BCF INTCON, INTF
BCF PIR1, RCIF
PULL; Obnovit W, STATUS a PCLATH
RETFIE
; RTCGET čte DS1302 Hodiny reálného času dnů, hodin, minut, SECS,
; PIC RAM.
RTCGET MOVLW SECRD, připravit se na PŘEČTĚTE RTC SECONDS
MOVWF SERIAL; ZŘÍZENÉHO COMMAND
CALL RTCRD; GET SECONDS DATA
MOVFW SERIAL
MOVWF RTC; vytvořit lokální kopii SECONDS RTC
MOVLW MINRD, připravit se na PŘEČTĚTE RTC ZÁPIS
MOVWF SERIAL; ZŘÍZENÉHO COMMAND
CALL RTCRD; GET ZÁPIS DAT
MOVFW SERIAL
MOVWF RTCM; vytvořit lokální kopii RTC ZÁPIS
MOVLW HOURD, připravit se na PŘEČTĚTE RTC HODINY
MOVWF SERIAL; ZŘÍZENÉHO COMMAND
CALL RTCRD; GET hodin DATA
MOVFW SERIAL
MOVWF RTCH; vytvořit lokální kopii RTC HODIN
MOVLW DAYRD, připravit se na PŘEČTĚTE RTC DAYS
MOVWF SERIAL; ZŘÍZENÉHO COMMAND
CALL RTCRD; GET dní Data
MOVFW SERIAL
MOVWF RTCD; vytvořit lokální kopii RTC DAYS
RETURN; VÝSTUP Z NOVÉ ČTENÍ ČAS OD RTC
; RTCPUT píše NOVÝ ČAS RTC DS1302 Z PIC RAM A
; Restartuje RTC
RTCPUT
MOVLW COMWR
MOVWF SERIAL
MOVLW B'00000000 '
GP1 MOVWF
CALL RTCWR
CALL CLKSTOP; zastavit hodiny při psaní NOVÉ HODINY
; A minuty.TENTO nuly sekund a
; Také zabraňuje překlopení JAKÉKOLI CHYBY MEZI
; Zápisem nového hodin a minut.
MOVLW DAYWR; NAPIŠTE Příkaz pro RTC
MOVWF SERIAL; RTC SET příkaz umožňuje zapsat NOVÉ HODINY
MOVFW RTCD; GET NOVÉ RTC DAYS
GP1 MOVWF, zakládání nových dní Data
CALL RTCWR, napsat nové dnů k RTC
MOVLW HOUWR; NAPIŠTE Příkaz pro RTC
MOVWF SERIAL; RTC SET příkaz umožňuje zapsat NOVÉ HODINY
MOVFW RTCH; GET NOVÉ RTC HODINY
GP1 MOVWF, zakládání nových hodiny DATA
CALL RTCWR, napsat nové hodiny RTC
MOVLW MINWR; NAPIŠTE RTC
MOVWF SERIAL; RTC SET příkaz umožňuje zapsat NOVÝ ZÁPIS
MOVFW RTCM; GET NOVÉ RTC ZÁPIS
GP1 MOVWF, zakládání nových ZÁPIS DAT
CALL RTCWR, napsat nové minut na RTC
MOVLW SECWR; NAPIŠTE RTC
MOVWF SERIAL; RTC SET příkaz umožňuje zapsat NOVÉ SECONDS
MOVFW RTC; GET NOVÉ RTC ZÁPIS
GP1 MOVWF, zakládání nových SECONDS DATA
CALL RTCWR, napsat nové Seconds To RTC
CALL CLKGO; RESTART RTC
MOVLW COMWR
MOVWF SERIAL
MOVLW B'10000000 '
GP1 MOVWF
CALL RTCWR
RETURN; VÝSTUP Z psaní nových ČAS RTC
; CLKGO ZAČÍNÁ RTC CHIP.
CLKGO MOVLW SECRD; GET vteřin od RTC
MOVWF SERIAL
CALL RTCRD; GET je nyní
BCF SERIAL, 7; TOP BIT CLEAR TO START CLOCK
MOVFW SERIAL
GP1 MOVWF; START CLOCK ve stejném časovém
MOVLW SECWR; odepsat sekund RUN 'flag'
MOVWF SERIAL
CALL RTCWR
RETURN
; CLKSTOP zastaví RTC CHIP.
CLKSTOP MOVLW SECWR
MOVWF SERIAL
MOVLW 0FFH; NAPIŠTE RTC SECS SE VŠEMI '1 'S zastavit to
GP1 MOVWF
CALL RTCWR
RETURN
; RTCWR píše reálný čas CHIP s příkazem BYTE v sériové
A písemných údajů byte v GP1 v binární.
, Předpokládá, že při vstupu RST RTC / A SCLK jsou nízké.
; NA VÝCHOD RST RTC / PONECHÁNO VYSOKÉ A SCLK PONECHÁNO LOW READY PRO
; Čtení / zápis do konat.
RTCWR
RTCCLO; RTC CLOCK linka by měla být velmi málo, jestliže --
RTCRHI, - RTC RESET LINE HIGH EPOS
CALL RTCTX; velení v SERIAL TO RTC
MOVFW GP1; GET DATA BYTE --
MOVWF SERIAL, - a nastaví PŘEPÍNAČ
CALL RTCTX; DATA NA RTC
RTCRLO; data byla zapsána do RTC
RETURN; VÝSTUP Z RTC NAPIŠTE velení a údaje
; RTCRD čte reálný čas CHIP s příkazem BYTE v sériové
, A PŘEČTĚTE SI DAT BYTE se vrátil v seriál v BCD.
, Předpokládá, že při vstupu RST RTC / A SCLK jsou nízké.
; NA VÝCHOD RST RTC / PONECHÁNO VYSOKÉ A SCLK PONECHÁNO LOW READY PRO
; Čtení / zápis do konat.
RTCRD RTCCLO; RTC CLOCK linka by měla být velmi málo, jestliže --
RTCRHI, - RTC RESET LINE HIGH EPOS
CALL RTCTX; velení v SERIAL TO RTC
MOVLW RTCDIN; MAKE RTC I / O PORT PIN INPUT
BANK1
MOVWF TRISC
BANK0
VÝZVA RTCRX; DATA Z RTC
MOVLW RTCDOUT; MAKE RTC I / O PORT PIN OUTPUT
BANK1
MOVWF TRISC
BANK0
RTCRLO; data byla zapsána do RTC
RETURN; VÝSTUP Z RTC NAPIŠTE velení a PŘEČÍST
; RTCTX přenáší MIMO ÚDAJE SERIAL TO RTC
; POUŽITÍ GP2 a sériové
RTCTX
MÍSTNÍ RTX1, RTX2
MOVLW ,8, počet bitů, které SHIFT
MOVWF GP2
RTX1 RTCDLO; SEBE DAT bit bude '0 'O TEĎ
SRR SERIAL; GET DATA BIT
BNC RTX2, pobočky, pokud byly údaje '0 '
RTCDHI; BIT DATA ZS '1 'SKUTEČNĚ
RTX2 RTCCHI; CLOCK ÚDAJŮ DO RTC
RTCCLO
DECF GP2, COUNT BITS, jak jsou zapsány do RTC
BNZ RTX1; LOOP Do Všechny zasílané RTC
RETURN
; RTCRX přijímá data vyslaná z RTC do sériové
; POUŽITÍ GP2 a sériové
RTCRX
MÍSTNÍ RRX1, RRX2
MOVLW ,8, počet bitů, které SHIFT
MOVWF GP2
RRX1 CLRC; SEBE DAT bit bude '0 'O TEĎ
BTFSC PORTC, RTCIO; PŘEČTĚTE kousek od RTC
SETC; DATA bylo opravdu '1 '
SRR SERIAL; SHIFT DATA BIT do sériové
RRX2 RTCCHI; CLOCK ÚDAJŮ DO RTC
RTCCLO
DECF GP2, COUNT BITS, jak jsou zapsány do RTC
BNZ RRX1; LOOP Do Všechny zasílané RTC
RETURN
;
;******
; KEY testy, pokud keyhit čeká bude zpracován --
; Vrací klíč KEYVAL s přenosným SET
GETKE1
CLRC; Předpokládejme, žádné tlačítko pro tuto chvíli
BTFSS flag1, KEY
; Žádné klíče, takže výstup s sebou nosí jasnou
RETURN; Odejít z KEY
; Key hit čeká tak pípnutí, rukojeť vlajky a provést nastavení výstupu
BCF flag1, KEY; Vymazat příznak říká hlavní hit čeká
SETC; Příznak volajícího, že KEYVAL je platná
RETURN; Odejít z TKEY
;******
; BSTART Začíná eerom sdělení SCL, SDA vysoké vstupy.
; Generuje start bit - SCL velké, zatímco SDA jde HIGH / LOW následuje
; Slave adresu - čtení / zápis trochu NENÍ poslali sem.
, Formát je --
; BIT 7,6,5,4 Slave adresu - 1010
; BIT 3,2,1 eerom pager
, Vstup je s SDA, SDL jako vstupy a je nasazena vysoko.
; EXIT s SDA, SCL nízké a výstupy
BSTART
BSF SDPORT, SDA
NOP
BSF SCPORT, SCL
NOP
BCF SDPORT, SDA, SDA nízká, s vysokou SCL
, To je začátek hrana
NOP
BCF SCPORT, SCL, SCL nízká
; Forma kontrolní byte s adresou stránky
MOVLW 0x00
MOVWF EESER
CLRC, Připraveno pro posun
RLF EESER; Page vybrat v bitech 3,2,1
MOVLW EECONT; Získejte kontrolu byte s ls okusovat nula
IORWF EESER; Nastavit kontrolní byte
MOVLW ,7; Set trochu počítat
MOVWF EECOUNT
EEPUT
RETURN
;******
; BSTOP končí eerom komunikace.Generuje stop bit - SCL
; Velké, zatímco SDA jde LOW / HIGH.Pak pokles SCL.
BSTOP
BCF SDPORT, SDA, SDA nízká
NOP
BSF SCPORT, SCL, SCL vysoké
NOP
BSF SDPORT, SDA, SDA vysoké
NOP
BCF SCPORT, SCL, SCL nízká
NOP
RETURN;******
; GETACK dostane ack z eerom.
; Ukázalo kolo SDA linie a hodiny přístroj - východy EESER s jasnou
If ACK je vidět.Eerom je ponechána SDA / SCL jako výstupy a nízké.
GETACK
MOVLW SDAIN; SDA je vstupní
BANK1
MOVWF TRISE
BANK0
BSF SCPORT, SCL, SCL vysoké
NOP; muset počkat až do 4 nás
NOP
CLRF EESER; ack Předpokládejme, že bude vidět!
BTFSC SDPORT, SDA, SDA Test bitů pro LOW ack
Comf EESER, Ack nebyl pozorován
BCF SCPORT, SCL, SCL nízká
MOVLW SDAOUT, SDA, je výstup
BANK1
MOVWF TRISE
BANK0
RETURN
;******
;
; READEE / WRITEE čtení / zápis 16 bajtů RAM s eerom číslo stránky
, V EEPAGE a začít řešit EESTART.
; EEROM 16 byte přečíst na adrese hranici 16 byte
READEE
BSF FLA, EEREAD; vlajka čtení
GOTO WRITEE1
; EEROM 8 byte psát na adresu hranici 8 byte
WRITEE
BCF FLA, EEREAD; vlajka psaní
WRITEE1
MOVWF STRCOM; Uložit eerom strana / adresa hodnoty
MOVLW ,16; čtení / zápis 16 bajtů
;
; Form eerom číst začít řešit
EERDWR
MOVWF EEBYTE; čtení / zápis 16 bajtů
MOVFW STRCOM
MOVWF EESTART; Set eerom začít řešit
; Vytvořit start bit a kontrolní byte, který zahrnuje
; Číslo stránky
CALL BSTART; Vygenerujte start a kontrolní byte s
, Číslo stránky (7 bitů)
CLRC; Chceš číst data, ale zařízení potřebuje psát
, Přijmout slovo adresu
EEBIT; Poslat trochu na eerom
CALL GETACK; Kontrola potvrdit z eerom
BTFSC EESER, 0; Přeskočit pokud ack bylo vidět z eerom
GOTO EERDQ, Chyba zde - ack nebyl pozorován
; Nastavení začátku adresy
MOVFW EECH; Get the start adresu
MOVWF EESER; Shift adresu zde eerom
MOVLW 8; Nastavte počet bitů
MOVWF EECOUNT
EEPUT; Hodiny adresu eerom
CALL GETACK; Kontrola potvrdit z eerom
BTFSC EESER, 0; Přeskočit pokud ack bylo vidět z eerom
GOTO EERDQ, Chyba zde - ack nebyl pozorovánMOVFW EESTART; Get the start adresu
MOVWF EESER; Shift adresu zde eerom
MOVLW 8; Nastavte počet bitů
MOVWF EECOUNT
EEPUT; Hodiny adresu eerom
CALL GETACK; Kontrola potvrdit z eerom
BTFSC EESER, 0; Přeskočit pokud ack bylo vidět z eerom
GOTO EERDQ, Chyba zde - ack nebyl pozorován; Test-li číst a psát a akce (čtení, je označen '1 ')
BTFSC FLA, EEREAD; Skip li písemně
;
; Přečtěte si eerom
GOTO EERD
;******
, Píše bytů z FSR ram poukázal na eerom, jak řešit EESTART
; Po vstupu -----
; EEBYTE se počet bytů.
; EESTART má eerom začít řešit.
; FSR poukazuje na začátku ram oblasti.
; Na výstupu -----
; EESTART je zachována
; EEBYTE je nulová, pokud dojde k chybě autobusu, pokud je nastaven na hodnotu 1.; Get data byte a napište eerom
EEWR MOVFW 0; Použijte FSR k načtení dat z bytu ram
MOVWF EESER; Data pro řazení
MOVLW 8; Nastavit trochu počítat
MOVWF EECOUNT
EEPUT, Byte, aby eerom
CALL GETACK; Kontrola potvrdit z eerom
BTFSC EESER, 0; Přeskočit pokud ack bylo vidět z eerom
GOTO EEWRQ, Chyba zde - ack nebyl pozorován
; Písemné byte - test, zda je více bytů pro odesílání a opatření, pokud ano
DECF EEBYTE; Další byte psát?
BZ EEWRX; Konec není-li více bytů psát
INCF FSR; Přesun berana číst ukazatel
GOTO EEWR
; Handle chybového stavu
EEWRQ MOVLW 1
MOVWF EEBYTE, ESP, že autobus došlo k chybě
CALL BSTOP
GOTO EEWRZ1
; Všechny byty napsány tak ukončit cyklus zápisu a čekat na eerom
, Které mají být nečinný.
EEWRX CALL BSTOP; Poslat stop
MOVLW b'00000111 '; TMR0 Sada pro 1 / 4 sekundy klíšťaty
BANK1
MOVWF OPTION_REG, a to
BANK0
MOVLW CLKR-,44, 40 dává 11 ms zpoždění
MOVWF TMR0; předvolby dělič
EEWRZ MOVF TMR0, W; Zkouška timeout
BNZ EEWRZ; Loop do vypršení časového limitu
EEWRZ1
RETURN; Odejít zpět k volajícímu
;******
; EERD čte z eerom.
; Po vstupu -----
; EEBYTE se počet bytů.
; EESTART má eerom začít řešit.
; Na výstupu -----
; Page 3 má číst data
; EESTART je zachována
; EEBYTE je nulová, pokud dojde k chybě autobusu, pokud je nastaven na hodnotu 1.EERD
CALL BSTART; Vytváření podmínek začít znovu!
SETC; čtení dat tak říct eerom
EEBIT; Poslat trochu na eerom
CALL GETACK; Kontrola potvrdit z eerom
BTFSC EESER, 0; Přeskočit pokud ack bylo vidět z eerom
GOTO EERDQ, Chyba zde - ack nebyl pozorován
; Eerom je nastaven pro čtení - ack datových bytů do 8. přečetl a
, Pak zastávka je odesílat a číst je ukončen
EERDB EEGET; Get bytu z eerom --
MOVFW EESER, - do tohoto reg!
MOVWF 0, - a ušetřit na nepřímé adresy
DECF EEBYTE; Počet bytů číst z eerom
BZ EERDX; Odejít ze čtení, při čtení všech bytů
; Další byte číst tak ack a smyčky
BCF SDPORT, SDA, SDA low, nic se na ACK eerom
MOVLW b'00000000 '; SDA out:
NOP
BSF SCPORT, SCL, SCL hodin až nízká ACK na eerom
NOP; Pošlete ack pro 4 nás
BCF SCPORT, SCL, SCL nízká
INCF FSR; Přesun berana psát ukazatel
GOTO EERDB; Loop do bloku dat se načítá
; Handle chybového stavu
EERDQ MOVLW 1
MOVWF EEBYTE, ESP, že autobus došlo k chybě
GOTO EERDX1, Jump a výstupu
; Všechny bytů číst tak ukončit čtení cyklu.
EERDX CALL BSTOP; Stop stav na eerom
, Na výstupu, je-li příznak nastaven, skok vrátit do řetězce poslat rutinní
EERDX1
RETURN; Odejít zpět k volajícímu
;************************************************* *********
AFFDISP
MOVFW AAA
MOVWF FSR
MOVFW INDF
MOVWF PORTD
BSF PORTB, CS0
NOP
NOP
BCF PORTB, CS0
INCF FSR
MOVFW INDF
MOVWF PORTD
BSF PORTB, CS1
NOP
NOP
BCF PORTB, CS1
MOVFW AAA
ADDLW 0x10
MOVWF FSR
MOVFW INDF
MOVWF PORTD
BSF PORTB, CS2
NOP
NOP
BCF PORTB, CS2
INCF FSR
MOVFW INDF
MOVWF PORTD
BSF PORTB, CS3
NOP
NOP
BCF PORTB, CS3
MOVFW AAA
ADDLW 0x20
MOVWF FSR
MOVFW INDF
MOVWF PORTD
BSF PORTB, CS4
NOP
NOP
BCF PORTB, CS4
INCF FSR
MOVFW INDF
MOVWF PORTD
BSF PORTB, CS5
NOP
NOP
BCF PORTB, CS5
CALL LCD_DELAY3
INCF AAA
INCF AAA
RETURN
;************************************************* *********
;
ROTAT
MOVFW CSHIFT
MOVWF ILH
REPEAT
CLRC
RLF INL; MYŠLENÍ PŘEVOD
RLF INH; MYŠLENÍ PŘEVOD
DECF ILH
BNZ REPEAT
RETURN
ROTAT2
MOVFW CSHIFT
MOVWF ILH
REPEAT2
CLRC
SRR INH; MYŠLENÍ PŘEVOD
SRR INL; MYŠLENÍ PŘEVOD
DECF ILH
BNZ REPEAT2
RETURN
;************************************************* ********
DTIME
CALL RTCGET
MOVFW RTCH
ANDLW 0x0F
MOVWF LSDH
SRR RTCH
SRR RTCH
SRR RTCH
SRR RTCH
MOVFW RTCH
ANDLW 0x0F
MOVWF MSDH
;
MOVFW RTCM
ANDLW 0x0F
MOVWF LSDM
SRR RTCM
SRR RTCM
SRR RTCM
SRR RTCM
MOVFW RTCM
ANDLW 0x0F
MOVWF MSDM
;
MOVFW RTC
ANDLW 0x0F
MOVWF LSDS
SRR RTC
SRR RTC
SRR RTC
SRR RTC
MOVFW RTC
ANDLW 0x0F
MOVWF MSDS
RETURN
;************************************************* ********
RECOR
MOVWF KEYBUFF
MOVLW EEFSR
MOVWF FSR
MOVLW 0x30
SUBWF KEYBUFF, 0
CALL STRING
MOVLW EEFSR; místo na začátku čtení / zápis ram
MOVWF FSR; Nastavit start ukazatel
MOVFW EECL; Get STRANA 1 BLOK 1 identita
CALL WRITEE, napiš 16 bytů zpět od eerom
MOVFW EECL
ADDLW 0x10
ADDCF EECH
MOVWF EECL
CALL LCD_DELAY
CALL LCD_DELAY
RETURN
; INIT *************************** ********************* **
;
;************************************************* *********************
;***** Program Začněte zde, el - K obnovení došlo
;************************************************* *********************
;
START; Power_ON Reset (začátek programu)
BANK0; Bank 0
CLRF STATUS; Do Inicializace (banka 0)
CLRF INTCON
CLRF PIR1
CLRF T1CON; RC1 NEJSOU převáží TCKO
CLRF NBITS
CLRF KEYTEMP
CLRF KEYBUFF
CLRF flag1
CLRF KTMP
CLRF LASTKEY
CLRF EECL
CLRF EECH
MOVLW 0x07
BANK1; Banka 1
MOVWF ADCON1
MOVLW 0x80
MOVWF OPTION_REG;
CLRF PIE1; Zakázat periferních přerušení
BANK0; Bank 0
CLRF ADCON0
CLRF PORTD; ALL výstupní port, výstup by měl Low.
CLRF PORTE
CLRF PORTB
CLRF PORTA
BCF SCPORT, SCL
;************** Port setup ********************************* *****
BANK1
; Port setup
MOVLW B'00000000 '
MOVWF TRISA
; B port setup
MOVLW b'00000011 '; Nastavit port směry
MOVWF TRISB
; C port setup
MOVLW B'00000000 '; set port DATA KUDY
MOVWF TRISC
; D port setup
MOVLW B'00000000 '
MOVWF TRISD
; E port setup
MOVLW B'00000000 '
MOVWF TRISE
, BSF PIE1, RCIE
BANK0
;******
, Nastavení časovače volby
; Timer0 je stanovena pro vnitřní, 1 / 4 ms pre stupnice
; TIMER1
; TIMER2 se používá k debounce klávesnici v přerušení POUZE
, Je stanovena na 256 nám přírůstek v PR2
MOVLW b'01111111 '; Prescale 16, postscale 16, časovač povoleny
MOVWF T2CON
; Set různé vlajky
CLRF VLAJKA
;
; Inicializace LCD Display Module
;
CLRF LCD_CNTL; ALL výstupní port, výstup by měl nízké.
DISPLAY_INIT
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
MOVLW 0x03; Command pro 4-bit interface
MOVWF LCD_DATA;
BSF LCD_CNTL, E;
NOP
NOP
BCF LCD_CNTL, E;
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
MOVLW 0x03; Command pro 4-bit interface
MOVWF LCD_DATA;
BSF LCD_CNTL, E;
NOP
NOP
BCF LCD_CNTL, E;
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
MOVLW 0x03; Command pro 4-bit interface
MOVWF LCD_DATA;
BSF LCD_CNTL, E;
NOP
NOP
BCF LCD_CNTL, E;
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
MOVLW 0x02; Command pro 4-bit interface
MOVWF LCD_DATA;
BSF LCD_CNTL, E;
NOP
NOP
BCF LCD_CNTL, E;
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
;
; Command sekvence pro 2 řádky 5x7 znaků
;
CMD_SEQ MOVLW 0x02
MOVWF LCD_DATA
BSF LCD_CNTL, E;
NOP
NOP
BCF LCD_CNTL, E;
MOVLW 0x08;
MOVWF LCD_DATA;
BSF LCD_CNTL, E;
NOP
NOP
BCF LCD_CNTL, E;
;
; Busy vlajka by měla v platnosti i po tomto bodě
;
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
MOVLW DISP_OFF;
CALL SEND_CMD;
MOVLW CLR_DISP;
CALL SEND_CMD;
MOVLW ENTRY_INC;
CALL SEND_CMD;
MOVLW DISP_ON_C;
CALL SEND_CMD;
MOVLW DD_RAM_ADDR;
CALL SEND_CMD;
; Global přerušení umožňují
BCF INTCON, RBIF; Zrušit klávesnici jen v případě,
BCF INTCON, INTF
BSF INTCON, INTE
BSF INTCON, PEIE
BSF INTCON, GIE; Povolit všechny Interrupts
RTCIDLE; IDLE CLOCK ROZHRANÍ
; CLEAR DISPLAY na tomto místě, tak musíme SHIFT DO 32 nul
; IspLSI 2032
BCF PORTC, 3
NOP
BSF PORTC, 6
CLRF DISPCON
CONTI
BSF PORTC, 3
NOP
NOP
BCF PORTC, 3
INCF DISPCON
BTFSS DISPCON, 5
GOTO CONTI
IDLE
MOVLW EEFSR; místo na začátku čtení / zápis ram
MOVWF FSR; Nastavit start ukazatel
; BCF INTCON, GIE; Povolit všechny Interrupts
CALL CLEAR_DISP;
CLRF TTTF
CLRF TTT
CLRF LSDS
MOVLW DD_RAM_ADDR
CALL SEND_CMD
MOVLW ,11
CALL řetězec2
MOVLW ,12
CALL řetězec2
MOVLW DD_RAM_AD2
CALL SEND_CMD
MOVLW ,13
CALL řetězec2
MOVLW ,14
CALL řetězec2
; BSF INTCON, GIE; Povolit všechny Interrupts
;------------------------------------------------- -------------------------
; ČEKÁNÍ LOOP aby zjistil, zda chce uživatel PROGRAM NOVÉ údaje do BILLBOARD
; LOOP bude čekat přibližně 8 sekund, POKUD F8 klíč není lisovaný v toto zpoždění
, Poté se zobrazí BILLBOARD stará data
;------------------------------------------------- --------------------------
CLRF OTYO
CLRF TTT
BEGIN
CALL RTCGET; číst z reálný čas
BTFSS RTC, 0
GOTO GEN
BTFSC OTYO, 0
GOTO TEN
BSF OTYO, 0
INCF TTT
BEN
BTFSC TTT, 3
GOTO AFF11
GOTO TEN
GEN
BCF OTYO, 0
TEN
CALL GETKE1
BNC BEGIN; Jen smyčky až klíčovým zjištěním
CALL LCD_DELAY;
CALL LCD_DELAY;
MOVLW 0x0A; F8
SUBWF KTMP, W
BZ DRY
MOVLW 0x09; F10
SUBWF KTMP, W
BZ AFF11
GOTO BEGIN
DRY
MOVLW 0xA0
MOVWF DISPCON
DATAEN
CLRF IEE
DATAENTRY
; BCF INTCON, GIE; Povolit všechny Interrupts
CALL CLEAR_DISP
MOVLW DD_RAM_ADDR;
CALL SEND_CMD
MOVFW IEE
ADDLW 0x01
CALL řetězec2
MOVFW IEE
ADDLW 0x02
CALL řetězec2
MOVLW DD_RAM_AD2;
CALL SEND_CMD
MOVFW IEE
ADDLW 0x03
CALL řetězec2
MOVFW IEE
ADDLW 0x04
CALL řetězec2
; BSF INTCON, GIE; Povolit všechny Interrupts
CLRF CoLo
DAE
; CALL GETKE1
; BNC DAE; Jen smyčky až klíčovým zjištěním
; Zadejte registru W - rozebírat to
; MOVLW 0xE0
; SUBWF KTMP, W
; BNZ DAE2
TRW
CALL GETKE1
BNC TRW; Jen smyčky až klíčovým zjištěním
CALL LCD_DELAY;
CALL LCD_DELAY;
MOVLW 0x75; UP
SUBWF KTMP, W
BZ TEW
MOVLW 0x72; DOWN
SUBWF KTMP, W
BNZ DAE2
MOVLW 0x0A
SUBWF IEE, W
BZ DAE
INCF IEE
INCF IEE
GOTO DATAENTRY
TEW
MOVLW 0x00
SUBWF IEE, W
BZ DAE
DECF IEE
DECF IEE
GOTO DATAENTRY
DAE2
MOVLW 0x05; F1: SO PROGRAM RTCCLOCK S NOVÝM TIME
SUBWF KTMP, W; ve formátu hhmmss
BZ PTIME
MOVLW 0x06; F2: PROGRAM vývěsní tabule s data, která jsou
SUBWF KTMP, W; VYSTAVIT zprava doleva (Poznámka: Počet
BZ PRL; znaků se n * 16, ne-li SYSTÉM
; BUDE dokončit, SPACE)
MOVLW 0x04; F3: PROGRAM vývěsní tabule s data, která jsou
SUBWF KTMP, W; VYSTAVIT z dolů až (Poznámka: hodnota musí být
BZ PDU, 12 znaků zprávy)
Tato funkce mohou být naprogramovány mnoha časových AS
; CHCEME
MOVLW 0x0C; F4: PROGRAM vývěsní tabule s data, která jsou
SUBWF KTMP, W; VYSTAVIT Zleva doprava LIKE ZAHÁJENÍ
BZ PLR, záclona na MESSAGE (Poznámka: hodnota musí být 12
; POSTAVY Zpráva také)
Tato funkce mohou být naprogramovány mnoha časových AS
; CHCEME
MOVLW 0x09; F10
SUBWF KTMP, W
BZ AFF11
MOVLW 0x03; F5: ČTĚTE reálný čas
SUBWF KTMP, W
BNZ DAE
;************************************************* **********************
RRTC
; BCF INTCON, GIE; Povolit všechny Interrupts
CALL CLEAR_DISP
MOVLW DD_RAM_ADDR;
CALL SEND_CMD
MOVLW ,10
CALL řetězec2
; BSF INTCON, GIE; Povolit všechny Interrupts
ZPĚT
CALL DTIME
CALL DISPLAY
CALL LCD_DELAY
CALL LCD_DELAY
CALL GETKE1
BNC ZPĚT; Jen smyčky až klíčovým zjištěním
GOTO DATAENTRY
;************************************************* **********************
PLR
; BCF INTCON, GIE; Povolit všechny Interrupts
CLRF TTT
CALL CLEAR_DISP
MOVLW DD_RAM_ADDR
CALL SEND_CMD
MOVLW ,8
CALL řetězec2
MOVLW DD_RAM_AD2
CALL SEND_CMD
; BSF INTCON, GIE; Povolit všechny Interrupts
MOVFW DISPCON
MOVWF FSR
MOVLW 0x02
MOVWF INDF
INCF FSR
MOVFW FSR
MOVWF DISPCON
GOTO WAI
;************************************************* **********************
PTIME
; BCF INTCON, GIE; Povolit všechny Interrupts
CALL CLEAR_DISP
MOVLW DD_RAM_ADDR
CALL SEND_CMD
MOVLW ,2
CALL řetězec2
MOVLW DD_RAM_AD2
CALL SEND_CMD
; BSF INTCON, GIE; Povolit všechny Interrupts
ID1
CALL GETKE1
BNC ID1
MOVFW KEYBUFF
CALL SEND_CHAR
MOVFW KEYBUFF
ANDLW 0x0F
MOVWF MSDH
ID2
CALL GETKE1
BNC ID2Omlouváme se, ale musíte přihlásit do zobrazení tuto přílohu
;************************************************* *************
Scénář HAYSSAM Serhan *
; COPYRIGHT HOME VZORY - 961 9 221737 *
; *
; ADRESA RAMI Serhan *
, C / O HAYSSAM Serhan *
; Americké univerzitě v BEJRÚT *
, POBOX: 11-0236/F6 *
; BEJRÚT *
; LIBANON *
; *
; DATE 28.7.97 *
; Soubor uložen AS DISPLAY.ASM *
; PRO PIC16C74 WDT = OFF CP = OFF *
; CLOCK 18,00 MHZ RESONATOR *
;************************************************* *************
HLAVA "DISPLAY.ASM - RTCLOCK klávesnice PC LCD EEPROM INTERFACE DISPLAY"
LIST P = 16C74
;
; HARDWARE SETUP
; Port setup
; LCD řídicí vedení
; RA4 = RS (REGISTER SELECT)
; RA5 = E (ENABLE)
; LCD DATA POLOŽKY
; RA <3: 0>
; B port setup
; Klávesnice PC INTERFACE
; RB0/INT = KLÁVESNICE hodinový signál
; RB1 = KLÁVESNICE datových signálů
; DATA Výběrová komise
; RB2 = CS0
; RB3 = CS1
; RB4 = CS2
; RB5 = CS3
; RB6 = CS4
; RB7 = CS5
; C port setup
; RC0 = RTC řídicí vedení
; RC1 = RTC I / O
; RC2 = RTC CLOCK
; Signál SHIFT REGISTER
; RC3 = CLK signálu do SHIFT REGISTER
; RC6 = DATA signál SHIFT REGISTER
; RC4 = SPARE
; RC5 = SPARE
; RC7 = SPARE; D port setup
; Výstup dat TO DISPLAY
; RD <7: 0>
; E port setup
; EEPROM INTERFACE
; RE0 = SCL
; RE1 = SDA
; RE2 = SPARE
INCLUDE <P16C74.INC>
;
;------------------------------------------------- ---------------------------
; REGISTER OBRÁZEK PŘIDĚLENÍ
;------------------------------------------------- ---------------------------
; PROGRAM MADLA čtení a psaní DS1302 Hodiny reálného času
; REGISTRY.Rovněž umožňuje, Číst a Zapisovat bloku 31 BYTES
; Paměti Z / RTC netěkavých datové oblasti.
; Přidělování portů
LCD_DATA EQU PORTA, LCD DAT JE NA NIŽŠÍ 4-BITS
LCD_DATA_TRIS EQU TRISA; REGISTRU TRIS PRO LCD DATA
LCD_CNTL EQU PORTA; dva ovládací prvky LINKY
E EQU 5; LCD umožní kontrolu LINE
RS EQU 4; LCD REGISTER SELECT KONTROLA LINE
; B přidělování portů
KEYPOR EQU PORTB; PORTB
RB1 EQU 1
CS0 EQU 2
CS1 EQU 3
CS2 EQU 4
CS3 EQU 5
CS4 EQU 6
CS5 EQU 7
; C přidělování portů
RTCRES EQU 0; RTC řídicí vedení
RTCIO EQU 1; RTC I / O
RTCCLK EQU 2; RTC CLOCK
ISPCLK EQU 3; SERIAL SHIFT REGISTER CLOCK
ISPDAT EQU 6; SERIAL SHIFT REGISTER vstup dat
; D přidělování portů
DISPDAT EQU PORTD
; E přidělování portů
SCL EQU ,0; EEROM hodiny bitů
SDA EQU ,1; EEROM datový bit
SDPORT EQU PORTE; EEROM datový port
SCPORT EQU PORTE; EEROM hodiny port
SHIFT EQU ,1
KEY EQU ,2
BEG EQU ,6
HI EQU ,7
; VARIABLE PŘIDĚLENÍ
GP1 EQU 0x20; UNIVERZÁLNÍ REGISTRY
GP2 EQU GP1 1
FSRCOPY EQU GP2 1; KOPIE FSR
SERIAL EQU FSRCOPY 1; GP LISTINA pro přenesení ETC.
; ********** Hodiny reálného času REGISTER KOPIE ****
RTCD EQU SERIAL 1; DAYS
RTCH EQU RTCD 1; HODIN
RTCM EQU RTCH 1; ZÁPIS
RTC EQU RTCM 1; SECONDS
WCOPY EQU RTC 1; kopie registru W při přerušení push
SCOPY EQU WCOPY 1; Kopie statutu registru v přerušení push
PCOPY EQU SCOPY 1; Kopie pclath v přerušení push
VLAJKY EQU PCOPY 1; generální bitů účel vlajky zde
KEYVAL EQU VLAJKA 1; Používá se k formě klíčových kód
; ********** Sériovou EEPROM REGISTER ***********
COUNT EQU KEYVAL 1
EESER COUNT EQU 1
EEPAGE EQU EESER 1; Číslo stránky
EEBYTE EQU EEPAGE 1; Byte counter
EESTART EQU EEBYTE 1; eerom začít řešit v blokovém LOW
EECOUNT EQU EESTART 1; Bit počítat při řazení
FLA EQU EECOUNT 1; Misc příznakových bitů
STRCOM EQU FLA 1; EEROM strana / adresa ukazatel
; **************** RTC INTERMEDIATE LISTINA *******
MSDH1 EQU STRCOM 1
LSDH1 EQU MSDH1 1
MSDM1 EQU LSDH1 1
LSDM1 EQU MSDM1 1
MSDS1 EQU LSDM1 1
LSDS1 EQU MSDS1 1
; **************** ************ PC klávesnice REGISTRU
NBITS EQU LSDS1 1
Nbytes EQU NBITS 1
KEYTEMP EQU Nbytes 1
LASTKEY EQU KEYTEMP 1
KEYBUFF EQU LASTKEY 1
Flag1 EQU KEYBUFF 1
KTMP EQU flag1 1
BLL EQU KTMP 1
; ************** RTC UNIVERZÁLNÍ REGISTER ******
MSD EQU BLL 1; TEMP.REGISTER, drží NEJDŮLEŽITĚJŠÍ
; Číslici bin BCD PŘEPOČET
LSD EQU MSD 1; TEMPORARY REGISTER, drží nejméně významný
; Číslici bin BCD PŘEPOČET
TEMP EQU LSD 1; DOČASNÁ REGISTRU
CHAR EQU TEMP 1; TEMPORARY REGISTER,
USD EQU CHAR 1;
TSD EQU USD 1;
MSDH EQU TSD 1
MSDM EQU MSDH 1
MSDS EQU MSDM 1
LSDH EQU MSDS 1
LSDM EQU LSDH 1
LSDS EQU LSDM 1
;*************** UNIVERZÁLNÍ REGISTER ***********
EECH EQU LSDS 1; eerom začít řešit v blokovém HIGH
STRNUM EQU EECH 1
TTT EQU STRNUM 1
TTTF EQU TTT 1
PPP EQU TTTF 1
TABOFF EQU PPP 1
EECL EQU TABOFF 1; eerom začít řešit v blokovém LOW
DISPCON EQU EECL 1
LCDH EQU DISPCON 1
AAA EQU LCDH 1
BBB EQU AAA 1
CCC BBB EQU 1
LL EQU CCC 1
HH EQU LL 1
EL EQU HH 1
EH EQU EL 1
LLL EQU EH 1
INL EQU 0x70
INH EQU INL 1
ILH EQU INH 1
CSHIFT EQU ILH 1
WAY EQU CSHIFT 1
WAY2 EQU WAY 1
CoLo EQU WAY2 1
TCOLO EQU CoLo 1
IEE EQU TCOLO 1
OTYO EQU IEE 1
TBUFF EQU OTYO 1
CH1 EQU 0xA0
CH2 EQU CH1 1
CH3 EQU CH2 1
CH4 EQU CH3 1
CH5 EQU CH4 1
CH6 EQU CH5 1
CH7 EQU CH6 1
CH8 EQU CH7 1
CH9 EQU CH8 1
CH10 EQU CH9 1
CH11 EQU CH10 1
CH12 EQU CH11 1
CH13 EQU CH12 1
CH14 EQU CH13 1
CH15 EQU CH14 1
CH16 EQU CH15 1
CH17 EQU CH16 1
CH18 EQU CH17 1
CH19 EQU CH18 1
CH20 EQU CH19 1
Ch21 EQU CH20 1
CH22 EQU ch21 1
CH23 EQU CH22 1
CH24 EQU CH23 1
CH25 EQU CH24 1
CH26 EQU CH25 1
CH27 EQU CH26 1
CH28 EQU CH27 1
CH29 EQU CH28 1
CH30 EQU CH29 1
CH31 EQU CH30 1
CH32 EQU CH31 1
;
CLKR EQU 100h; Přejíždějte hodnotu pro RTC - odečíst počet
, Hodnota z tohoto nastavit odpočítávat čas.
DIV256 EQU b'00000111 '; 256us prescale nastavení
ROMBASE EQU 0; Spuštění programu ROM
;
DEV_FREQ EQU D'28000000 '; ZAŘÍZENÍ frekvence je 20 MHZ
DEV_FREQ2 EQU D'3.000.000 '; ZAŘÍZENÍ frekvence 2 MHz
DB_HI_BYTE EQU (HIGH (((DEV_FREQ / 4) * 1 / D'1000 ') / 3)) 1
LCD_INIT_DELAY EQU (HIGH (((DEV_FREQ / 4) * D'46 '/ D'10000') / 3)) 1
LCD_INIT_DELAY2 EQU (HIGH (((DEV_FREQ2 / 4) * D'46 '/ D'10000') / 3)) 1
;
T1OSO EQU 0; RC0 / T1OSO / T1CKI
;
RESET_V EQU 0x0000; ADRESA RESET VECTOR
ISR_V EQU 0x0004; ADRESA vektor přerušení
TABLE_ADDR EQU 0x07E0, ADRESA, kde začít TABULKY
TAB_ASC1 EQU 0x067B
TAB_ASC2 EQU 0x0754
;
; LCD MODULE PŘÍKAZY
;
DISP_ON EQU 0x00C; DISPLAY NA
DISP_ON_C EQU 0x00E, DISPLAY ON, kurzor na
DISP_OFF EQU 0x008; DISPLAY OFF
CLR_DISP EQU 0x001; CLEAR DISPLAY
ENTRY_INC EQU 0x006;
ENTRY_INC_S EQU 0x007;
ENTRY_DEC EQU 0x004;
ENTRY_DEC_S EQU 0x005;
DD_RAM_ADDR EQU 0x080, nejméně významný 7-BIT JSOU NA ADRESU
DD_RAM_UL EQU 0x080; coner levé horní části displeje
DD_RAM_AD1 EQU 0x08C;
DD_RAM_AD2 EQU 0x0C0;;------------------------------------------------- ---------------------------
; Vlajka bitové přiřazení
;------------------------------------------------- ---------------------------
; Bitů v VLAJKY jsou zde definovány
KEYIN EQU 0; Set-li klíč hit čeká v KEYMAKE
; CONSTANT PŘIDĚLENÍ
; RTC CHIP (DS1302) - CLOCK COMMAND konstanty.
, Tyto se zapisují do RTC v RTCWR NEBO RTCRD.
COMWR EQU B'10001110 '
SECWR EQU B'10000000 '; příkaz umožňuje zapsat RTC SECONDS
MINWR EQU B'10000010 '; příkaz umožňuje zapsat RTC ZÁPIS
HOUWR EQU B'10000100 '; příkaz umožňuje zapsat RTC HODINY
DAYWR EQU B'10001010 '; příkaz umožňuje zapsat RTC DAYS
SECRD EQU B'10000001 '; COMMAND přečíst RTC SECONDS
MINRD EQU B'10000011 '; COMMAND přečíst RTC ZÁPIS
HOURD EQU B'10000101 '; COMMAND přečíst RTC HODINY
DAYRD EQU B'10001011 '; COMMAND přečíst RTC DAYS
; PORT NASTAVENÍ SMĚRU NEPOSKYTUJE RTC LINE DATA výstup / vstup
RTCDOUT EQU B'00000000 '; RTC LINE DATA OUTPUT
RTCDIN EQU B'00000010 '; RTC DATA LINE INPUT
; PORT NASTAVENÍ SMĚRU NEPOSKYTUJE EEPROM SDA LINE výstup / vstup
SDAIN EQU b'00000010 '; SDA je vstup, když TRIS provádí
SDAOUT EQU b'00000000 '; SDA je výstup při TRIS provádí
;------------------------------------------------- --------------------------
; EEROM rutiny
;------------------------------------------------- --------------------------
; 24LC65 EEROM manipulaci.
; READEE / WRITEE čtení / zápis 16 bajtů na začátku EEFSR (60 H) použití
; EERD a EEWR.
; V klidovém stavu mimo eerom rutiny linka SCL musí být
; Rozhodl nízké, pokud datová linka je sdílená s ostatními zařízeními.
; Rutiny READEE / WRITEE volání jedné úrovni podprogramů.
: Když se EERD a EEWR volal, jak nastavit --
; EESTART - eerom začít číst nízké adresu 8 bitů
, Na výstupu --
; EEBYTE - dluh kód stavu na výstupu
, NOP Všimněte si, že to může být třeba zpomalit rozhraní tak, aby
; Eerom některých částí.
; EEROM konstantní - kód zařízení a hardwarovou adresu
EECONT EQU b'10100000 '; 7 bitový byte pouze
; Zařízení kód 1010 pro 24LC65B
; V bitech 7-4.
; Hardwarovou adresu zařízení, jak je stanoveno podle A0, 1,2
, Je umístěn v bitech 3-1.
; Tyto ram registry jsou použity a musí být stavěna na roveň
; Vhodné hodnoty, aby BASE RAM STRANA přístup při eerom čtení / zápis.
; EESER, EEBYTE, EESTART, EECOUNT, STRCOM
; Tyto hodnoty nastaví pro čtení / zápis ram start adresa
EEFSR EQU b'01100000 '; místo na začátku ram
;
;------------------------------------------------- ---------------------------
; Bit přiřazení
;------------------------------------------------- ---------------------------
; VLAJKA bity jsou zde definovány
EEREAD EQU 0; Sada pro čtení při vstupu na EERDWR
;*********************** Makra ************************* *
; BANK0 vybírá LISTINA FILE BANK 0
BANK0 MACRO
BCF STATUS, Rp0, vybrané bankovní 0
ENDM
; BANK1 vybírá LISTINA FILE BANK 1
BANK1 MACRO
BSF STATUS, Rp0, SELECT BANK 1
ENDM
; PAGE0 vybírá ROM STRANA 0
PAGE0 MACRO
BCF PCLATH, 3; ROM SELECT PAGE 0
ENDM
; Stránka1 vybírá ROM STRANA 1
Stránka1 MACRO
BSF PCLATH, 3; SELECT ROM STRANA 1
ENDM
; RTCCLO SOUPRAVY RTC CLOCK LINE LOW
RTCCLO MACRO
BCF PORTC, RTCCLK
ENDM
; RTCCHI SOUPRAVY RTC CLOCK LINE HIGH
RTCCHI MACRO
BSF PORTC, RTCCLK
ENDM
; RTCDLO SOUPRAVY RTC LINE DATA LOW
RTCDLO MACRO
BCF PORTC, RTCIO
ENDM
; RTCDHI SOUPRAVY RTC DATA LINE HIGH
RTCDHI MACRO
BSF PORTC, RTCIO
ENDM
; RTCRLO SOUPRAVY RTC RESET LINE LOW
RTCRLO MACRO
BCF PORTC, RTCRES
ENDM
; RTCRHI SOUPRAVY RTC RESET LINE HIGH
RTCRHI MACRO
BSF PORTC, RTCRES
ENDM
; RTCIDLE SOUPRAVY DO RTC do klidového stavu
RTCIDLE MACRO
RTCRLO
RTCDLO
RTCCLO
ENDM
;******
; PUSH uloží W, STATUS, PCLATH registrů při přerušení
PUSH MACRO
MOVWF WCOPY; Ušetřete na bankovních curent
SWAPF STATUS, W; dovolené Z trochu jako je
BANK0; Uložit zbytek na bankovních 0
MOVWF SCOPY
MOVFW PCLATH, STATUS a W jsou v bezpečí - nyní ušetřit PCLATH
MOVWF PCOPY
ENDM;******
; PULL obnovuje W, STATUS, PCLATH registruje po PUSH
PULL MACRO
BANK0, Obnovit z banky 0
MOVFW PCOPY; Obnovit PCLATH první
MOVWF PCLATH
SWAPF SCOPY, W; Obnovit okusovat pozici STAV
MOVWF STATUS
SWAPF WCOPY, F
SWAPF WCOPY, W, Z dovolené trochu jako je
ENDM;******
; TSTRTC tahů TIMER0 na reg. W a sady ZERO stav
TSTRTC MACRO
MOVFW TMR0; Test timeout
ENDM
;******
; EEBIT hodiny nést trochu na linku eerom dat.
EEBIT MACRO
MÍSTNÍ EEBIT1, EEBIT2
SKPNC
GOTO EEBIT1
; Carry je jasné,
BCF SDPORT, SDA
GOTO EEBIT2
; Carry je nastaven
EEBIT1 BSF SDPORT, SDA
; Hodiny eerom
EEBIT2 NOP
BSF SCPORT, SCL, vysoká Clock
NOP
BCF SCPORT, SCL; Hodiny nízká
ENDM;******
; EEGET hodiny byte (vlevo) do EESER z eerom.Počet bitů
, Je tím, '0 'vlajku EESER.
; Konec s SCL a SDA nízká a to jak výstupy
EEGET MACRO
MÍSTNÍ EEGET1
MOVLW b'11111110 ', 8 datových bitů je třeba vykládat tak, vlajka je 8. bitů
MOVWF EESER
MOVLW SDAIN; SDA je vstupní
BANK1
MOVWF TRISE
BANK0
EEGET1 BSF SCPORT, SCL, Hodiny vysoké získat data bitů
CLRC; Předpokládejme, že data jsou nyní nízké
BTFSC SDPORT, SDA, SDA Test bitů
SETC; Data byla opravdu vysoká!
RLF EESER; Carry = datový bit na údaje, řazení
BCF SCPORT, SCL; Hodiny s nízkou po čtení dat
BC EEGET1; Bit počet flag test - smyčky až 0 nezobrazí
; Byte byla přijata na EESER, obnovit autobusem do výstupy
MOVLW SDAOUT, SDA, je výstup
BANK1
MOVWF TRISE
BANK0
ENDM
;******
; EEPUT hodiny byte (vlevo) v EESER do eerom.Počet bitů
, Je v EECOUNT.
EEPUT MACRO
MÍSTNÍ EEPUT1
EEPUT1 RLF EESER; si dat trochu
EEBIT; Carry na EEROM data a hodiny se
DECFSZ EECOUNT; Počet bitů
GOTO EEPUT1, smyčky, dokud se všechny bity odeslána
ENDM
;******
; TABSET zřizuje lcd stůl offset ukazatel před řetězec výstup
; Začíná
TABSET MACRO
MOVLW b'11111111 '; Offset je zvýšeno na každém volání
, Tabulky - první výzva musí vytvářet hodnoty nula
; Ofset.
MOVWF TABOFF
ENDM;******
; BOD inkrementuje ukazatel řetězec offset a přidá ji do
, PCL připravené pro smyčcový vyhledávání
BOD MACRO
INCF TABOFF
MOVFW TABOFF
ADDWF PCL
ENDM
;******
; POINT8 inkrementuje ukazatel řetězec offset a přidá ji do
; PLC připraven pro smyčcový vyhledávání.Sady PCLATH až 8
POINT8 MACRO
MOVLW ,8
MOVWF PCLATH
INCF TABOFF
MOVFW TABOFF
ADDWF PCL
ENDM
;******
; POINT9 inkrementuje ukazatel řetězec offset a přidá ji do
, PCL připravené pro smyčcový vyhledávání.Sady PCLATH až 9
POINT9 MACRO
MOVLW ,9
MOVWF PCLATH
INCF TABOFF
MOVFW TABOFF
ADDWF PCL
ENDM
;******
; POINT10 inkrementuje ukazatel řetězec offset a přidá ji do
, PCL připravené pro smyčcový vyhledávání.Sady PCLATH 10
POINT10 MACRO
MOVLW ,10
MOVWF PCLATH
INCF TABOFF
MOVFW TABOFF
ADDWF PCL
ENDM
;******
; POINT11 inkrementuje ukazatel řetězec offset a přidá ji do
, PCL připravené pro smyčcový vyhledávání.Sady PCLATH až 11
POINT11 MACRO
MOVLW ,11
MOVWF PCLATH
INCF TABOFF
MOVFW TABOFF
ADDWF PCL
ENDM
;******
; POINT12 inkrementuje ukazatel řetězec offset a přidá ji do
, PCL připravené pro smyčcový vyhledávání.Sady PCLATH až 12
POINT12 MACRO
MOVLW ,12
MOVWF PCLATH
INCF TABOFF
MOVFW TABOFF
ADDWF PCL
ENDM
;******
; POINT13 inkrementuje ukazatel řetězec offset a přidá ji do
, PCL připravené pro smyčcový vyhledávání.Sady PCLATH až 13
POINT13 MACRO
MOVLW ,13
MOVWF PCLATH
INCF TABOFF
MOVFW TABOFF
ADDWF PCL
ENDM
;******
; POINT14 inkrementuje ukazatel řetězec offset a přidá ji do
, PCL připravené pro smyčcový vyhledávání.Sady PCLATH až 14
POINT14 MACRO
MOVLW ,14
MOVWF PCLATH
INCF TABOFF
MOVFW TABOFF
ADDWF PCL
ENDM
;******
; POINT15 inkrementuje ukazatel řetězec offset a přidá ji do
, PCL připravené pro smyčcový vyhledávání.Sady PCLATH až 15
POINT15 MACRO
MOVLW ,15
MOVWF PCLATH
INCF TABOFF
MOVFW TABOFF
ADDWF PCL
ENDM
; RESET ADRESA.DETERMINE DRUH RESET
;
ORG RESET_V; RESET VECTOR LOKALITA
GOTO START; ANO
;
;******
, Vektor přerušení - klávesnice PC
ORG ISR_V
GOTO INT
;
;************************* Podprogramy *********************** *****
;******
; STRING posílá řetězec s číslem v registru W - k plemenitbě
STRING
MOVWF STRNUM
TABSET, Xero offset
Stránka1
CALL DOSTR; znaků z řetězce
PAGE0; rom Obnovit stránku
RETURN
;******
; Řetězec2 posílá řetězec s číslem v registru W - na LCD
Řetězec2
MOVWF STRNUM
TABSET, Xero offset
Stránka1
CALL DOSTR2; znaků z řetězce
PAGE0; rom Obnovit stránku
RETURN
INIT_DISPLAY MOVLW DISP_ON_C, DISPLAY ON, CURSON NA
CALL SEND_CMD; odeslání tohoto příkazu TO DISPLAY MODULE
MOVLW CLR_DISP; CLEAR DISPLAY
CALL SEND_CMD; odeslání tohoto příkazu TO DISPLAY MODULE
MOVLW ENTRY_INC; SET VSTUP MODE INC, žádný posun
CALL SEND_CMD; odeslání tohoto příkazu TO DISPLAY MODULE
RETURN
CLEAR_DISP
MOVLW CLR_DISP; CLEAR DISPLAY
CALL SEND_CMD; odeslání tohoto příkazu TO DISPLAY MODULE
RETURN
;
DISPLAY
MOVLW DD_RAM_AD2;
CALL SEND_CMD;
CALL LOAD_HRS, NE, DO NOMAL DISPLAY
CALL LOAD_COLON;
CALL LOAD_MIN;
CALL LOAD_COLON;
CALL LOAD_SEC;
RETURN
;
;
LOAD_HRS
MOVF MSDH, W; LOAD MSD hodnoty do WREG
CALL NUM_TABLE; GET ASCII kód
CALL SEND_CHAR; POSLAT tohoto znaku na displej
;
MOVF LSDH, W; LOAD LSD hodnotu do WREG
CALL NUM_TABLE; Get ASCII kód
CALL SEND_CHAR; Poslat tento znak displeje
RETURN
;
LOAD_COLON MOVLW ''; ASCII hodnota volné místo
BTFSC LSDS, 0; Je sudý nebo lichý druhé
ADDLW ':' - '', je lichá, druhá dvojtečka je zapnutá.
; ADD delta vyrovnání do ASCII znaků
CALL SEND_CHAR; Poslat tento znak na displej
RETURN
;
LOAD_MIN
MOVF MSDM, W; Load hodnoty MSD do Wreg
CALL NUM_TABLE; Získejte ASCII kód
CALL SEND_CHAR; Poslat tento znak displeje
;
MOVF LSDM, W; Load hodnoty LSD do Wreg
CALL NUM_TABLE; Získejte ASCII kód
CALL SEND_CHAR; Poslat tento znak displeje
RETURN
LOAD_SEC
MOVF BL, W; Load hodnoty MSD do Wreg
CALL NUM_TABLE; Získejte ASCII kód
CALL SEND_CHAR; Poslat tento znak displeje
;
MOVF LSDS, W; Load hodnoty LSD do Wreg
CALL NUM_TABLE; Získejte ASCII kód
CALL SEND_CHAR; Poslat tento znak displeje
RETURN
;
;************************************************* ************************
; * SendChar - Pošle znak na LCD *
; * Tato rutina rozdělí znaku do horní a dolní *
; * Křupky a odešle na LCD, horní okusovat první.*
; * Údaje jsou přenášeny na PORT <3:0> piny *
;************************************************* ************************
SEND_CHAR
MOVWF CHAR, znak, který bude odeslán v W
CALL LCD_DELAY; Počkejte na LCD, které mají být připraveny
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
SWAPF CHAR, W;
ANDLW 0x0F; Get horní okusovat
MOVWF LCD_DATA; Odesílání dat na LCD
BSF LCD_CNTL, RS, Set LCD datový režim
BSF LCD_CNTL, E, E přepínač pro LCD
NOP
BCF LCD_CNTL, E
MOVF CHAR, W
ANDLW 0x0F; Get nižší okusovat
MOVWF LCD_DATA; Odesílání dat na LCD
BSF LCD_CNTL, RS, Set LCD datový režim
BSF LCD_CNTL, E, E přepínač pro LCD
NOP
BCF LCD_CNTL, E
; BCF LCD_CNTL, RS
RETURN
;************************************************* **************
; * Sendcmd - odešle příkaz na lcd *
; * Tato rutina rozdělí příkaz na horní a dolní *
; * Křupky a posílá je do lcd, horní nible první.*
; * Údaje jsou přenášeny na PORT <3:0> piny *
;************************************************* **************
SEND_CMD
MOVWF CHAR; znaků, je třeba zaslat do Z
CALL LCD_DELAY; Počkejte na LCD, které mají být připraveny
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
SWAPF CHAR, W;
ANDLW 0x0F; Get horní okusovat
MOVWF LCD_DATA; Odesílání dat na LCD
BCF LCD_CNTL, RS, Set LCD příkazovém režimu
BSF LCD_CNTL, E, E přepínač pro LCD
NOP
BCF LCD_CNTL, E
MOVF CHAR, W
ANDLW 0x0F; Get nižší okusovat
MOVWF LCD_DATA; Odesílání dat na LCD
BSF LCD_CNTL, E, E Přepínač pro LCD
NOP
BCF LCD_CNTL, E
RETURN
;
; Tato rutina se počítá časy, které potřebuje delay loop
; Být proveden na základě LCD_INIT_DELAY přirovnávat, která zahrnuje
, Frekvence provozu.Tato použití registry předtím, než jsou potřebné pro
; Uložení času.
;
LCD_DELAY MOVLW LCD_INIT_DELAY;
MOVWF USD; Použití MSD a LSD rejstříků na Initilize LCD
CLRF TSD;
Loop2 DECFSZ TSD; Delay time = MSD * ((3 * 256) 3) * Tcy
GOTO loop2;
DECFSZ USD;
END_LCD_DELAY
GOTO loop2;
RETURN;
LCD_DELAY3 MOVLW LCD_INIT_DELAY2;
MOVWF USD; Použití MSD a LSD rejstříků na Initilize LCD
CLRF TSD;
LOOP23 DECFSZ TSD; Delay time = MSD * ((3 * 256) 3) * Tcy
GOTO LOOP23;
DECFSZ USD;
END_LCD_DELAY3
GOTO LOOP23;
RETURN;
, Což je podprogram pro pc klávesnice přerušení
INT PUSH, Uložit W, STATUS, PCLATH
MOVLW 0
MOVWF PCLATH; Povolit pro volání do vyhledávací tabulky
BTFSC INTCON, INTF; TEST PRO zastavení při INT/RB0
GOTO KBD
GOTO INTX; Odejít z přerušení
KBD
MOVFW NBITS
SUBLW 0x00
BNZ BIT1_8
BIT0
GOTO BUMP
BIT1_8
MOVFW NBITS
SUBLW 0x09
BZ Bit9
MOVFW NBITS
SUBLW 0x0A
BZ BIT10
CLRC
BTFSC KEYPOR, RB1
SETC
SRR KEYTEMP
GOTO BUMP
Bit9
GOTO BUMP
BIT10
MOVFW KEYTEMP
SUBLW 0x12
BZ TAT
MOVFW KEYTEMP
SUBLW 0x59
BNZ NOTLS
TAT
MOVFW LASTKEY
SUBLW 0xF0
BNZ MAKELS
BCF flag1, SHIFT
MOVLW 0x12
MOVWF LASTKEY
GOTO Tidy
MAKELS
BSF flag1, SHIFT
MOVLW 0x12
MOVWF LASTKEY
GOTO Tidy
NOTLS
MOVFW KEYTEMP
SUBLW 0x14
BNZ NOTCTRL
NOP
GOTO Tidy
NOTCTRL
MOVFW KEYTEMP
SUBLW 0xF0
BNZ NOTBREAK
MOVFW KEYTEMP
MOVWF LASTKEY
GOTO Tidy
NOTBREAK
MOVFW LASTKEY
SUBLW 0xF0
BNZ NOT_F0
MOVLW 0x00
MOVWF LASTKEY
GOTO Tidy
NOT_F0
MOVFW KEYTEMP
MOVWF LASTKEY
MOVWF KTMP
BTFSC flag1, SHIFT
GOTO posunul
UNSHIFTED
CALL ASC1
GOTO SKIP1
Posunul
CALL ASC2
SKIP1NOT0
MOVWF KEYBUFF
BSF flag1, KEY
MOVLW 0x01
MOVWF Nbytes
Tidy
MOVLW 0x00
MOVWF NBITS
MOVWF KEYTEMP
GOTO INTDONE
BUMP
INCF NBITS
INTDONE
BCF INTCON, INTF
PULL
RETFIE
; Obecné odchod z přerušení
INTX BCF INTCON, RBIF; Clear interrypt volání flag
BCF INTCON, INTF
BCF PIR1, RCIF
PULL; Obnovit W, STATUS a PCLATH
RETFIE
; RTCGET čte DS1302 Hodiny reálného času dnů, hodin, minut, SECS,
; PIC RAM.
RTCGET MOVLW SECRD, připravit se na PŘEČTĚTE RTC SECONDS
MOVWF SERIAL; ZŘÍZENÉHO COMMAND
CALL RTCRD; GET SECONDS DATA
MOVFW SERIAL
MOVWF RTC; vytvořit lokální kopii SECONDS RTC
MOVLW MINRD, připravit se na PŘEČTĚTE RTC ZÁPIS
MOVWF SERIAL; ZŘÍZENÉHO COMMAND
CALL RTCRD; GET ZÁPIS DAT
MOVFW SERIAL
MOVWF RTCM; vytvořit lokální kopii RTC ZÁPIS
MOVLW HOURD, připravit se na PŘEČTĚTE RTC HODINY
MOVWF SERIAL; ZŘÍZENÉHO COMMAND
CALL RTCRD; GET hodin DATA
MOVFW SERIAL
MOVWF RTCH; vytvořit lokální kopii RTC HODIN
MOVLW DAYRD, připravit se na PŘEČTĚTE RTC DAYS
MOVWF SERIAL; ZŘÍZENÉHO COMMAND
CALL RTCRD; GET dní Data
MOVFW SERIAL
MOVWF RTCD; vytvořit lokální kopii RTC DAYS
RETURN; VÝSTUP Z NOVÉ ČTENÍ ČAS OD RTC
; RTCPUT píše NOVÝ ČAS RTC DS1302 Z PIC RAM A
; Restartuje RTC
RTCPUT
MOVLW COMWR
MOVWF SERIAL
MOVLW B'00000000 '
GP1 MOVWF
CALL RTCWR
CALL CLKSTOP; zastavit hodiny při psaní NOVÉ HODINY
; A minuty.TENTO nuly sekund a
; Také zabraňuje překlopení JAKÉKOLI CHYBY MEZI
; Zápisem nového hodin a minut.
MOVLW DAYWR; NAPIŠTE Příkaz pro RTC
MOVWF SERIAL; RTC SET příkaz umožňuje zapsat NOVÉ HODINY
MOVFW RTCD; GET NOVÉ RTC DAYS
GP1 MOVWF, zakládání nových dní Data
CALL RTCWR, napsat nové dnů k RTC
MOVLW HOUWR; NAPIŠTE Příkaz pro RTC
MOVWF SERIAL; RTC SET příkaz umožňuje zapsat NOVÉ HODINY
MOVFW RTCH; GET NOVÉ RTC HODINY
GP1 MOVWF, zakládání nových hodiny DATA
CALL RTCWR, napsat nové hodiny RTC
MOVLW MINWR; NAPIŠTE RTC
MOVWF SERIAL; RTC SET příkaz umožňuje zapsat NOVÝ ZÁPIS
MOVFW RTCM; GET NOVÉ RTC ZÁPIS
GP1 MOVWF, zakládání nových ZÁPIS DAT
CALL RTCWR, napsat nové minut na RTC
MOVLW SECWR; NAPIŠTE RTC
MOVWF SERIAL; RTC SET příkaz umožňuje zapsat NOVÉ SECONDS
MOVFW RTC; GET NOVÉ RTC ZÁPIS
GP1 MOVWF, zakládání nových SECONDS DATA
CALL RTCWR, napsat nové Seconds To RTC
CALL CLKGO; RESTART RTC
MOVLW COMWR
MOVWF SERIAL
MOVLW B'10000000 '
GP1 MOVWF
CALL RTCWR
RETURN; VÝSTUP Z psaní nových ČAS RTC
; CLKGO ZAČÍNÁ RTC CHIP.
CLKGO MOVLW SECRD; GET vteřin od RTC
MOVWF SERIAL
CALL RTCRD; GET je nyní
BCF SERIAL, 7; TOP BIT CLEAR TO START CLOCK
MOVFW SERIAL
GP1 MOVWF; START CLOCK ve stejném časovém
MOVLW SECWR; odepsat sekund RUN 'flag'
MOVWF SERIAL
CALL RTCWR
RETURN
; CLKSTOP zastaví RTC CHIP.
CLKSTOP MOVLW SECWR
MOVWF SERIAL
MOVLW 0FFH; NAPIŠTE RTC SECS SE VŠEMI '1 'S zastavit to
GP1 MOVWF
CALL RTCWR
RETURN
; RTCWR píše reálný čas CHIP s příkazem BYTE v sériové
A písemných údajů byte v GP1 v binární.
, Předpokládá, že při vstupu RST RTC / A SCLK jsou nízké.
; NA VÝCHOD RST RTC / PONECHÁNO VYSOKÉ A SCLK PONECHÁNO LOW READY PRO
; Čtení / zápis do konat.
RTCWR
RTCCLO; RTC CLOCK linka by měla být velmi málo, jestliže --
RTCRHI, - RTC RESET LINE HIGH EPOS
CALL RTCTX; velení v SERIAL TO RTC
MOVFW GP1; GET DATA BYTE --
MOVWF SERIAL, - a nastaví PŘEPÍNAČ
CALL RTCTX; DATA NA RTC
RTCRLO; data byla zapsána do RTC
RETURN; VÝSTUP Z RTC NAPIŠTE velení a údaje
; RTCRD čte reálný čas CHIP s příkazem BYTE v sériové
, A PŘEČTĚTE SI DAT BYTE se vrátil v seriál v BCD.
, Předpokládá, že při vstupu RST RTC / A SCLK jsou nízké.
; NA VÝCHOD RST RTC / PONECHÁNO VYSOKÉ A SCLK PONECHÁNO LOW READY PRO
; Čtení / zápis do konat.
RTCRD RTCCLO; RTC CLOCK linka by měla být velmi málo, jestliže --
RTCRHI, - RTC RESET LINE HIGH EPOS
CALL RTCTX; velení v SERIAL TO RTC
MOVLW RTCDIN; MAKE RTC I / O PORT PIN INPUT
BANK1
MOVWF TRISC
BANK0
VÝZVA RTCRX; DATA Z RTC
MOVLW RTCDOUT; MAKE RTC I / O PORT PIN OUTPUT
BANK1
MOVWF TRISC
BANK0
RTCRLO; data byla zapsána do RTC
RETURN; VÝSTUP Z RTC NAPIŠTE velení a PŘEČÍST
; RTCTX přenáší MIMO ÚDAJE SERIAL TO RTC
; POUŽITÍ GP2 a sériové
RTCTX
MÍSTNÍ RTX1, RTX2
MOVLW ,8, počet bitů, které SHIFT
MOVWF GP2
RTX1 RTCDLO; SEBE DAT bit bude '0 'O TEĎ
SRR SERIAL; GET DATA BIT
BNC RTX2, pobočky, pokud byly údaje '0 '
RTCDHI; BIT DATA ZS '1 'SKUTEČNĚ
RTX2 RTCCHI; CLOCK ÚDAJŮ DO RTC
RTCCLO
DECF GP2, COUNT BITS, jak jsou zapsány do RTC
BNZ RTX1; LOOP Do Všechny zasílané RTC
RETURN
; RTCRX přijímá data vyslaná z RTC do sériové
; POUŽITÍ GP2 a sériové
RTCRX
MÍSTNÍ RRX1, RRX2
MOVLW ,8, počet bitů, které SHIFT
MOVWF GP2
RRX1 CLRC; SEBE DAT bit bude '0 'O TEĎ
BTFSC PORTC, RTCIO; PŘEČTĚTE kousek od RTC
SETC; DATA bylo opravdu '1 '
SRR SERIAL; SHIFT DATA BIT do sériové
RRX2 RTCCHI; CLOCK ÚDAJŮ DO RTC
RTCCLO
DECF GP2, COUNT BITS, jak jsou zapsány do RTC
BNZ RRX1; LOOP Do Všechny zasílané RTC
RETURN
;
;******
; KEY testy, pokud keyhit čeká bude zpracován --
; Vrací klíč KEYVAL s přenosným SET
GETKE1
CLRC; Předpokládejme, žádné tlačítko pro tuto chvíli
BTFSS flag1, KEY
; Žádné klíče, takže výstup s sebou nosí jasnou
RETURN; Odejít z KEY
; Key hit čeká tak pípnutí, rukojeť vlajky a provést nastavení výstupu
BCF flag1, KEY; Vymazat příznak říká hlavní hit čeká
SETC; Příznak volajícího, že KEYVAL je platná
RETURN; Odejít z TKEY
;******
; BSTART Začíná eerom sdělení SCL, SDA vysoké vstupy.
; Generuje start bit - SCL velké, zatímco SDA jde HIGH / LOW následuje
; Slave adresu - čtení / zápis trochu NENÍ poslali sem.
, Formát je --
; BIT 7,6,5,4 Slave adresu - 1010
; BIT 3,2,1 eerom pager
, Vstup je s SDA, SDL jako vstupy a je nasazena vysoko.
; EXIT s SDA, SCL nízké a výstupy
BSTART
BSF SDPORT, SDA
NOP
BSF SCPORT, SCL
NOP
BCF SDPORT, SDA, SDA nízká, s vysokou SCL
, To je začátek hrana
NOP
BCF SCPORT, SCL, SCL nízká
; Forma kontrolní byte s adresou stránky
MOVLW 0x00
MOVWF EESER
CLRC, Připraveno pro posun
RLF EESER; Page vybrat v bitech 3,2,1
MOVLW EECONT; Získejte kontrolu byte s ls okusovat nula
IORWF EESER; Nastavit kontrolní byte
MOVLW ,7; Set trochu počítat
MOVWF EECOUNT
EEPUT
RETURN
;******
; BSTOP končí eerom komunikace.Generuje stop bit - SCL
; Velké, zatímco SDA jde LOW / HIGH.Pak pokles SCL.
BSTOP
BCF SDPORT, SDA, SDA nízká
NOP
BSF SCPORT, SCL, SCL vysoké
NOP
BSF SDPORT, SDA, SDA vysoké
NOP
BCF SCPORT, SCL, SCL nízká
NOP
RETURN;******
; GETACK dostane ack z eerom.
; Ukázalo kolo SDA linie a hodiny přístroj - východy EESER s jasnou
If ACK je vidět.Eerom je ponechána SDA / SCL jako výstupy a nízké.
GETACK
MOVLW SDAIN; SDA je vstupní
BANK1
MOVWF TRISE
BANK0
BSF SCPORT, SCL, SCL vysoké
NOP; muset počkat až do 4 nás
NOP
CLRF EESER; ack Předpokládejme, že bude vidět!
BTFSC SDPORT, SDA, SDA Test bitů pro LOW ack
Comf EESER, Ack nebyl pozorován
BCF SCPORT, SCL, SCL nízká
MOVLW SDAOUT, SDA, je výstup
BANK1
MOVWF TRISE
BANK0
RETURN
;******
;
; READEE / WRITEE čtení / zápis 16 bajtů RAM s eerom číslo stránky
, V EEPAGE a začít řešit EESTART.
; EEROM 16 byte přečíst na adrese hranici 16 byte
READEE
BSF FLA, EEREAD; vlajka čtení
GOTO WRITEE1
; EEROM 8 byte psát na adresu hranici 8 byte
WRITEE
BCF FLA, EEREAD; vlajka psaní
WRITEE1
MOVWF STRCOM; Uložit eerom strana / adresa hodnoty
MOVLW ,16; čtení / zápis 16 bajtů
;
; Form eerom číst začít řešit
EERDWR
MOVWF EEBYTE; čtení / zápis 16 bajtů
MOVFW STRCOM
MOVWF EESTART; Set eerom začít řešit
; Vytvořit start bit a kontrolní byte, který zahrnuje
; Číslo stránky
CALL BSTART; Vygenerujte start a kontrolní byte s
, Číslo stránky (7 bitů)
CLRC; Chceš číst data, ale zařízení potřebuje psát
, Přijmout slovo adresu
EEBIT; Poslat trochu na eerom
CALL GETACK; Kontrola potvrdit z eerom
BTFSC EESER, 0; Přeskočit pokud ack bylo vidět z eerom
GOTO EERDQ, Chyba zde - ack nebyl pozorován
; Nastavení začátku adresy
MOVFW EECH; Get the start adresu
MOVWF EESER; Shift adresu zde eerom
MOVLW 8; Nastavte počet bitů
MOVWF EECOUNT
EEPUT; Hodiny adresu eerom
CALL GETACK; Kontrola potvrdit z eerom
BTFSC EESER, 0; Přeskočit pokud ack bylo vidět z eerom
GOTO EERDQ, Chyba zde - ack nebyl pozorovánMOVFW EESTART; Get the start adresu
MOVWF EESER; Shift adresu zde eerom
MOVLW 8; Nastavte počet bitů
MOVWF EECOUNT
EEPUT; Hodiny adresu eerom
CALL GETACK; Kontrola potvrdit z eerom
BTFSC EESER, 0; Přeskočit pokud ack bylo vidět z eerom
GOTO EERDQ, Chyba zde - ack nebyl pozorován; Test-li číst a psát a akce (čtení, je označen '1 ')
BTFSC FLA, EEREAD; Skip li písemně
;
; Přečtěte si eerom
GOTO EERD
;******
, Píše bytů z FSR ram poukázal na eerom, jak řešit EESTART
; Po vstupu -----
; EEBYTE se počet bytů.
; EESTART má eerom začít řešit.
; FSR poukazuje na začátku ram oblasti.
; Na výstupu -----
; EESTART je zachována
; EEBYTE je nulová, pokud dojde k chybě autobusu, pokud je nastaven na hodnotu 1.; Get data byte a napište eerom
EEWR MOVFW 0; Použijte FSR k načtení dat z bytu ram
MOVWF EESER; Data pro řazení
MOVLW 8; Nastavit trochu počítat
MOVWF EECOUNT
EEPUT, Byte, aby eerom
CALL GETACK; Kontrola potvrdit z eerom
BTFSC EESER, 0; Přeskočit pokud ack bylo vidět z eerom
GOTO EEWRQ, Chyba zde - ack nebyl pozorován
; Písemné byte - test, zda je více bytů pro odesílání a opatření, pokud ano
DECF EEBYTE; Další byte psát?
BZ EEWRX; Konec není-li více bytů psát
INCF FSR; Přesun berana číst ukazatel
GOTO EEWR
; Handle chybového stavu
EEWRQ MOVLW 1
MOVWF EEBYTE, ESP, že autobus došlo k chybě
CALL BSTOP
GOTO EEWRZ1
; Všechny byty napsány tak ukončit cyklus zápisu a čekat na eerom
, Které mají být nečinný.
EEWRX CALL BSTOP; Poslat stop
MOVLW b'00000111 '; TMR0 Sada pro 1 / 4 sekundy klíšťaty
BANK1
MOVWF OPTION_REG, a to
BANK0
MOVLW CLKR-,44, 40 dává 11 ms zpoždění
MOVWF TMR0; předvolby dělič
EEWRZ MOVF TMR0, W; Zkouška timeout
BNZ EEWRZ; Loop do vypršení časového limitu
EEWRZ1
RETURN; Odejít zpět k volajícímu
;******
; EERD čte z eerom.
; Po vstupu -----
; EEBYTE se počet bytů.
; EESTART má eerom začít řešit.
; Na výstupu -----
; Page 3 má číst data
; EESTART je zachována
; EEBYTE je nulová, pokud dojde k chybě autobusu, pokud je nastaven na hodnotu 1.EERD
CALL BSTART; Vytváření podmínek začít znovu!
SETC; čtení dat tak říct eerom
EEBIT; Poslat trochu na eerom
CALL GETACK; Kontrola potvrdit z eerom
BTFSC EESER, 0; Přeskočit pokud ack bylo vidět z eerom
GOTO EERDQ, Chyba zde - ack nebyl pozorován
; Eerom je nastaven pro čtení - ack datových bytů do 8. přečetl a
, Pak zastávka je odesílat a číst je ukončen
EERDB EEGET; Get bytu z eerom --
MOVFW EESER, - do tohoto reg!
MOVWF 0, - a ušetřit na nepřímé adresy
DECF EEBYTE; Počet bytů číst z eerom
BZ EERDX; Odejít ze čtení, při čtení všech bytů
; Další byte číst tak ack a smyčky
BCF SDPORT, SDA, SDA low, nic se na ACK eerom
MOVLW b'00000000 '; SDA out:
NOP
BSF SCPORT, SCL, SCL hodin až nízká ACK na eerom
NOP; Pošlete ack pro 4 nás
BCF SCPORT, SCL, SCL nízká
INCF FSR; Přesun berana psát ukazatel
GOTO EERDB; Loop do bloku dat se načítá
; Handle chybového stavu
EERDQ MOVLW 1
MOVWF EEBYTE, ESP, že autobus došlo k chybě
GOTO EERDX1, Jump a výstupu
; Všechny bytů číst tak ukončit čtení cyklu.
EERDX CALL BSTOP; Stop stav na eerom
, Na výstupu, je-li příznak nastaven, skok vrátit do řetězce poslat rutinní
EERDX1
RETURN; Odejít zpět k volajícímu
;************************************************* *********
AFFDISP
MOVFW AAA
MOVWF FSR
MOVFW INDF
MOVWF PORTD
BSF PORTB, CS0
NOP
NOP
BCF PORTB, CS0
INCF FSR
MOVFW INDF
MOVWF PORTD
BSF PORTB, CS1
NOP
NOP
BCF PORTB, CS1
MOVFW AAA
ADDLW 0x10
MOVWF FSR
MOVFW INDF
MOVWF PORTD
BSF PORTB, CS2
NOP
NOP
BCF PORTB, CS2
INCF FSR
MOVFW INDF
MOVWF PORTD
BSF PORTB, CS3
NOP
NOP
BCF PORTB, CS3
MOVFW AAA
ADDLW 0x20
MOVWF FSR
MOVFW INDF
MOVWF PORTD
BSF PORTB, CS4
NOP
NOP
BCF PORTB, CS4
INCF FSR
MOVFW INDF
MOVWF PORTD
BSF PORTB, CS5
NOP
NOP
BCF PORTB, CS5
CALL LCD_DELAY3
INCF AAA
INCF AAA
RETURN
;************************************************* *********
;
ROTAT
MOVFW CSHIFT
MOVWF ILH
REPEAT
CLRC
RLF INL; MYŠLENÍ PŘEVOD
RLF INH; MYŠLENÍ PŘEVOD
DECF ILH
BNZ REPEAT
RETURN
ROTAT2
MOVFW CSHIFT
MOVWF ILH
REPEAT2
CLRC
SRR INH; MYŠLENÍ PŘEVOD
SRR INL; MYŠLENÍ PŘEVOD
DECF ILH
BNZ REPEAT2
RETURN
;************************************************* ********
DTIME
CALL RTCGET
MOVFW RTCH
ANDLW 0x0F
MOVWF LSDH
SRR RTCH
SRR RTCH
SRR RTCH
SRR RTCH
MOVFW RTCH
ANDLW 0x0F
MOVWF MSDH
;
MOVFW RTCM
ANDLW 0x0F
MOVWF LSDM
SRR RTCM
SRR RTCM
SRR RTCM
SRR RTCM
MOVFW RTCM
ANDLW 0x0F
MOVWF MSDM
;
MOVFW RTC
ANDLW 0x0F
MOVWF LSDS
SRR RTC
SRR RTC
SRR RTC
SRR RTC
MOVFW RTC
ANDLW 0x0F
MOVWF MSDS
RETURN
;************************************************* ********
RECOR
MOVWF KEYBUFF
MOVLW EEFSR
MOVWF FSR
MOVLW 0x30
SUBWF KEYBUFF, 0
CALL STRING
MOVLW EEFSR; místo na začátku čtení / zápis ram
MOVWF FSR; Nastavit start ukazatel
MOVFW EECL; Get STRANA 1 BLOK 1 identita
CALL WRITEE, napiš 16 bytů zpět od eerom
MOVFW EECL
ADDLW 0x10
ADDCF EECH
MOVWF EECL
CALL LCD_DELAY
CALL LCD_DELAY
RETURN
; INIT *************************** ********************* **
;
;************************************************* *********************
;***** Program Začněte zde, el - K obnovení došlo
;************************************************* *********************
;
START; Power_ON Reset (začátek programu)
BANK0; Bank 0
CLRF STATUS; Do Inicializace (banka 0)
CLRF INTCON
CLRF PIR1
CLRF T1CON; RC1 NEJSOU převáží TCKO
CLRF NBITS
CLRF KEYTEMP
CLRF KEYBUFF
CLRF flag1
CLRF KTMP
CLRF LASTKEY
CLRF EECL
CLRF EECH
MOVLW 0x07
BANK1; Banka 1
MOVWF ADCON1
MOVLW 0x80
MOVWF OPTION_REG;
CLRF PIE1; Zakázat periferních přerušení
BANK0; Bank 0
CLRF ADCON0
CLRF PORTD; ALL výstupní port, výstup by měl Low.
CLRF PORTE
CLRF PORTB
CLRF PORTA
BCF SCPORT, SCL
;************** Port setup ********************************* *****
BANK1
; Port setup
MOVLW B'00000000 '
MOVWF TRISA
; B port setup
MOVLW b'00000011 '; Nastavit port směry
MOVWF TRISB
; C port setup
MOVLW B'00000000 '; set port DATA KUDY
MOVWF TRISC
; D port setup
MOVLW B'00000000 '
MOVWF TRISD
; E port setup
MOVLW B'00000000 '
MOVWF TRISE
, BSF PIE1, RCIE
BANK0
;******
, Nastavení časovače volby
; Timer0 je stanovena pro vnitřní, 1 / 4 ms pre stupnice
; TIMER1
; TIMER2 se používá k debounce klávesnici v přerušení POUZE
, Je stanovena na 256 nám přírůstek v PR2
MOVLW b'01111111 '; Prescale 16, postscale 16, časovač povoleny
MOVWF T2CON
; Set různé vlajky
CLRF VLAJKA
;
; Inicializace LCD Display Module
;
CLRF LCD_CNTL; ALL výstupní port, výstup by měl nízké.
DISPLAY_INIT
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
MOVLW 0x03; Command pro 4-bit interface
MOVWF LCD_DATA;
BSF LCD_CNTL, E;
NOP
NOP
BCF LCD_CNTL, E;
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
MOVLW 0x03; Command pro 4-bit interface
MOVWF LCD_DATA;
BSF LCD_CNTL, E;
NOP
NOP
BCF LCD_CNTL, E;
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
MOVLW 0x03; Command pro 4-bit interface
MOVWF LCD_DATA;
BSF LCD_CNTL, E;
NOP
NOP
BCF LCD_CNTL, E;
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
MOVLW 0x02; Command pro 4-bit interface
MOVWF LCD_DATA;
BSF LCD_CNTL, E;
NOP
NOP
BCF LCD_CNTL, E;
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
;
; Command sekvence pro 2 řádky 5x7 znaků
;
CMD_SEQ MOVLW 0x02
MOVWF LCD_DATA
BSF LCD_CNTL, E;
NOP
NOP
BCF LCD_CNTL, E;
MOVLW 0x08;
MOVWF LCD_DATA;
BSF LCD_CNTL, E;
NOP
NOP
BCF LCD_CNTL, E;
;
; Busy vlajka by měla v platnosti i po tomto bodě
;
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
CALL LCD_DELAY;
MOVLW DISP_OFF;
CALL SEND_CMD;
MOVLW CLR_DISP;
CALL SEND_CMD;
MOVLW ENTRY_INC;
CALL SEND_CMD;
MOVLW DISP_ON_C;
CALL SEND_CMD;
MOVLW DD_RAM_ADDR;
CALL SEND_CMD;
; Global přerušení umožňují
BCF INTCON, RBIF; Zrušit klávesnici jen v případě,
BCF INTCON, INTF
BSF INTCON, INTE
BSF INTCON, PEIE
BSF INTCON, GIE; Povolit všechny Interrupts
RTCIDLE; IDLE CLOCK ROZHRANÍ
; CLEAR DISPLAY na tomto místě, tak musíme SHIFT DO 32 nul
; IspLSI 2032
BCF PORTC, 3
NOP
BSF PORTC, 6
CLRF DISPCON
CONTI
BSF PORTC, 3
NOP
NOP
BCF PORTC, 3
INCF DISPCON
BTFSS DISPCON, 5
GOTO CONTI
IDLE
MOVLW EEFSR; místo na začátku čtení / zápis ram
MOVWF FSR; Nastavit start ukazatel
; BCF INTCON, GIE; Povolit všechny Interrupts
CALL CLEAR_DISP;
CLRF TTTF
CLRF TTT
CLRF LSDS
MOVLW DD_RAM_ADDR
CALL SEND_CMD
MOVLW ,11
CALL řetězec2
MOVLW ,12
CALL řetězec2
MOVLW DD_RAM_AD2
CALL SEND_CMD
MOVLW ,13
CALL řetězec2
MOVLW ,14
CALL řetězec2
; BSF INTCON, GIE; Povolit všechny Interrupts
;------------------------------------------------- -------------------------
; ČEKÁNÍ LOOP aby zjistil, zda chce uživatel PROGRAM NOVÉ údaje do BILLBOARD
; LOOP bude čekat přibližně 8 sekund, POKUD F8 klíč není lisovaný v toto zpoždění
, Poté se zobrazí BILLBOARD stará data
;------------------------------------------------- --------------------------
CLRF OTYO
CLRF TTT
BEGIN
CALL RTCGET; číst z reálný čas
BTFSS RTC, 0
GOTO GEN
BTFSC OTYO, 0
GOTO TEN
BSF OTYO, 0
INCF TTT
BEN
BTFSC TTT, 3
GOTO AFF11
GOTO TEN
GEN
BCF OTYO, 0
TEN
CALL GETKE1
BNC BEGIN; Jen smyčky až klíčovým zjištěním
CALL LCD_DELAY;
CALL LCD_DELAY;
MOVLW 0x0A; F8
SUBWF KTMP, W
BZ DRY
MOVLW 0x09; F10
SUBWF KTMP, W
BZ AFF11
GOTO BEGIN
DRY
MOVLW 0xA0
MOVWF DISPCON
DATAEN
CLRF IEE
DATAENTRY
; BCF INTCON, GIE; Povolit všechny Interrupts
CALL CLEAR_DISP
MOVLW DD_RAM_ADDR;
CALL SEND_CMD
MOVFW IEE
ADDLW 0x01
CALL řetězec2
MOVFW IEE
ADDLW 0x02
CALL řetězec2
MOVLW DD_RAM_AD2;
CALL SEND_CMD
MOVFW IEE
ADDLW 0x03
CALL řetězec2
MOVFW IEE
ADDLW 0x04
CALL řetězec2
; BSF INTCON, GIE; Povolit všechny Interrupts
CLRF CoLo
DAE
; CALL GETKE1
; BNC DAE; Jen smyčky až klíčovým zjištěním
; Zadejte registru W - rozebírat to
; MOVLW 0xE0
; SUBWF KTMP, W
; BNZ DAE2
TRW
CALL GETKE1
BNC TRW; Jen smyčky až klíčovým zjištěním
CALL LCD_DELAY;
CALL LCD_DELAY;
MOVLW 0x75; UP
SUBWF KTMP, W
BZ TEW
MOVLW 0x72; DOWN
SUBWF KTMP, W
BNZ DAE2
MOVLW 0x0A
SUBWF IEE, W
BZ DAE
INCF IEE
INCF IEE
GOTO DATAENTRY
TEW
MOVLW 0x00
SUBWF IEE, W
BZ DAE
DECF IEE
DECF IEE
GOTO DATAENTRY
DAE2
MOVLW 0x05; F1: SO PROGRAM RTCCLOCK S NOVÝM TIME
SUBWF KTMP, W; ve formátu hhmmss
BZ PTIME
MOVLW 0x06; F2: PROGRAM vývěsní tabule s data, která jsou
SUBWF KTMP, W; VYSTAVIT zprava doleva (Poznámka: Počet
BZ PRL; znaků se n * 16, ne-li SYSTÉM
; BUDE dokončit, SPACE)
MOVLW 0x04; F3: PROGRAM vývěsní tabule s data, která jsou
SUBWF KTMP, W; VYSTAVIT z dolů až (Poznámka: hodnota musí být
BZ PDU, 12 znaků zprávy)
Tato funkce mohou být naprogramovány mnoha časových AS
; CHCEME
MOVLW 0x0C; F4: PROGRAM vývěsní tabule s data, která jsou
SUBWF KTMP, W; VYSTAVIT Zleva doprava LIKE ZAHÁJENÍ
BZ PLR, záclona na MESSAGE (Poznámka: hodnota musí být 12
; POSTAVY Zpráva také)
Tato funkce mohou být naprogramovány mnoha časových AS
; CHCEME
MOVLW 0x09; F10
SUBWF KTMP, W
BZ AFF11
MOVLW 0x03; F5: ČTĚTE reálný čas
SUBWF KTMP, W
BNZ DAE
;************************************************* **********************
RRTC
; BCF INTCON, GIE; Povolit všechny Interrupts
CALL CLEAR_DISP
MOVLW DD_RAM_ADDR;
CALL SEND_CMD
MOVLW ,10
CALL řetězec2
; BSF INTCON, GIE; Povolit všechny Interrupts
ZPĚT
CALL DTIME
CALL DISPLAY
CALL LCD_DELAY
CALL LCD_DELAY
CALL GETKE1
BNC ZPĚT; Jen smyčky až klíčovým zjištěním
GOTO DATAENTRY
;************************************************* **********************
PLR
; BCF INTCON, GIE; Povolit všechny Interrupts
CLRF TTT
CALL CLEAR_DISP
MOVLW DD_RAM_ADDR
CALL SEND_CMD
MOVLW ,8
CALL řetězec2
MOVLW DD_RAM_AD2
CALL SEND_CMD
; BSF INTCON, GIE; Povolit všechny Interrupts
MOVFW DISPCON
MOVWF FSR
MOVLW 0x02
MOVWF INDF
INCF FSR
MOVFW FSR
MOVWF DISPCON
GOTO WAI
;************************************************* **********************
PTIME
; BCF INTCON, GIE; Povolit všechny Interrupts
CALL CLEAR_DISP
MOVLW DD_RAM_ADDR
CALL SEND_CMD
MOVLW ,2
CALL řetězec2
MOVLW DD_RAM_AD2
CALL SEND_CMD
; BSF INTCON, GIE; Povolit všechny Interrupts
ID1
CALL GETKE1
BNC ID1
MOVFW KEYBUFF
CALL SEND_CHAR
MOVFW KEYBUFF
ANDLW 0x0F
MOVWF MSDH
ID2
CALL GETKE1
BNC ID2Omlouváme se, ale musíte přihlásit do zobrazení tuto přílohu