displej s klávesnicí

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

 
Nazdar,

Nejjednodušší způsob, jak začít - změnit typ procesoru na nový čip P =
Budovat a to znovu v assembleru - to by měla ukázat nějaký kód chyby / změny nezbytné.Vkládá 5 hodin 11 minut:Hi again,

Právě při pohledu na kód a obvodů v bližší informace - pokud se nemýlím jste si vybral právě tento okruh odněkud?

I když se takový velký program a stejně velký obvod, chtěl bych si trochu více důkazů, že i kód a obvod je 100% než výdaje a čas nebo peníze na projekt.

Pokud se chcete připojit nebo odpoledne plné kód ve správném formátu jsem mohl zkusit budova je pro vás.

 
Dobrý den, wp100

Zde je kompletní návrh na displeji, pokud někdo chce zkusit, ale chápu, elektronika spuštění programu Mám potíže v assembleru.

Thanks ..................

 
Nazdar,

Dobrou zprávou, že v původním 16C74 kód staví v MPLAB bez chyb.

Prostě změnil typ čipu a zahrnoval Config prohlášení v kódu, který oscilátor HS pro 18MHz XTAL.

Opět to staví ok - soubory připojené.

Pokud chcete udělat sami, že je skutečně tichý snadné, pokud máte nainstalovaný Mikročipy MPLAB IDE - je schopen hovořit vás, pokud budete chtít.

Přestože kód staví v pořádku, se zdá, masivní a drahý hardware projekt uskutečnit pomocí někoho elses kód.Do you have any proof / knowledge that it does work as a project ? Já bych normálně navrhuji runing kód programu Simualtor, ale hardware je tak velká, že nemusí pracovat / fit.

Vím, že autor strávil spoustu času uvedení, že všechny informace, ale může dojít k chybě - stojí za pokus se s ním spojit, pokud můžete.

hodně štěstíAdded po 6 minutách:pardon - zapomněl připojit soubory ..
Omlouváme se, ale musíte přihlásit do zobrazení tuto přílohu

 

Welcome to EDABoard.com

Sponsor

Back
Top