S
saadh
Guest
# uključiti <C:\c51\inc\REG51.h>
# uključiti <AT89X51.H>
sbit RS = P1 ^ 3;
sbit RW = P1 ^ 4;
sbit E = P1 ^ 5;
sbit BF ^ P0 = 7;
sbit događanja ^ P2 = 1;
SFR DATA_BUS = 0x80; / / Port 0
pougljiti data1, data2;
nepotpisani pougljiti rcvd [2];
nepotpisani pougljiti J;
bitni ok = 0;
Serijski //************** inicijalizacija FUNKCIJA ************
void init ()
(
TMOD = 0x20; / / odabire način
tj. (korištenje timer1 u mode2)
TH1 = 0xFD; / / postavlja brzina prijenosa podataka (0xFD = 9600)
SCON = 0x50; / / s_mode 1, uart 1sb-8db-sb
TR1 = 1; / / pokreće timer1
)
//************** FUNKCIJA za slanje karakter STRING ************
poniłtava sendString (nepotpisano pougljiti * a)
(
dok (* a! = '\ 0')
(
SBUF =* A; / / SBUF se registrirati za slanje / primanje podataka serijski
a (TI == 0);
TI = 0; / / prenositi zastavom.
a ;
)
)
//************** Funkciju POŠALJI SINGLE karakter ************
poniłtava sendChar (nepotpisano pougljiti b)
(
SBUF = b;
a (TI == 0);
TI = 0;
)FUNKCIJA //************** za primanje karakter ************
nepotpisani pougljiti rcv ()
(
dok (RI == 0);
RI = 0; / / primanje flag
povratak SBUF;
)
//*************** Kašnjenje FUNKCIJA **********************
poniłtava kašnjenje (int a)
(
int i, j;
for (i = 0; i <= a; i )
for (j = 0; j <= 100; j );
)
//************** MOBILE ODGOVOR PREGLED FUNKCIJA ************
poniłtava checkOK ()
(
for (j = 0; j <2; j )
rcvd [j] = rcv ();
if (rcvd [0] == 'O' & & rcvd [1] == 'K')
ok = 1;
drugi
ok = 0;
)
//************************ Za provjeru LCD spremna ili ne ***************** **
int spreman ()
(
BF = 1;
Rs = 0;
RW = 1;
dok (BF == 1)
(
E = 0;
E = 1;
)
povratak 1;
)
/ / Funkcija Ready Završava
/*/************************ ZA kašnjenje (počinje) ****************** **
/ poniłtava kašnjenje ()
(
int x;for (x = 0, x <= 1000; x )
(
)
) * /
/ / Funkcija Delay Završavastatički poniłtava LCD_Pulse_E (int t) (
nepotpisani pougljiti I;
E = 1; for (i = 0; i <t; i ) i = i;
E = 0; for (i = 0; i <t; i ) i = i;
)
LCD //********************* Run FUNKCIJA ***********************
int LCD_Run_Command (nepotpisano pougljiti naredbu)
(
if (spreman ())
(
DATA_BUS = Command;
Rs = 0; zakašnjenja (100);
RW = 0; zakašnjenja (100);
LCD_Pulse_E (255);
)
povratak 1;
)
LCD //****************** SHOW ****************************
int LCD_Show (nepotpisano pougljiti karaktera)
(
if (spreman ())
(
DATA_BUS = lik;
RS = 1; zakašnjenja (100);
RW = 0; zakašnjenja (100);
LCD_Pulse_E (255);
zakašnjenja (100);
)
povratak 1;
)
//**************** LCD inicijalizirate ************************LCD_Initialize int () (
LCD_Run_Command (0x38); / /
8. Podaci linije, dvije linije, 5x7 Font.
LCD_Run_Command (0x0E); / / Display = ON, Cursor = ON, Cursor treptajućim = ON
LCD_Run_Command (0x01); / / Obriąi zaslon i vratiti pokazivač na početnu poziciju
LCD_Run_Command (0x06);
LCD_Run_Command (0x06); / / Tokom čitati / pisati samo rad pokazivača (ne teksta)
LCD_Run_Command (0x80), / / Pokazivač na Line 1, Pozicija 0
povratak 1;
)
//************** ČITANJE Primljene poruke *****************
poniłtava read_msg ()
(
int a = 0, b = 0, c = 0;
pougljiti rd_msg [10];
rd_msg [0] = 0;
RI = 0;
TI = 0;
sendString ( "AT CMGF = 1 \ r"); / / ove naredbe PDU mode pretvoriti u text modu
zakašnjenja (300);
zakašnjenja (300);
TI = 0;
sendString ( "AT CMGR = 1"); / / naredba čita ovu poruku iz memorije SIM
TI = 0;
dok je (! TI)
()
TI = 0;
SBUF = 0x0D; / / slanje prijevozu vratiti na raskinuti comand
TI = 0;
a (b == 0)
(
dok (RI == 1 & & b == 0)
(
rd_msg [a] = SBUF;
if (rd_msg [0 ]==' ')// ovaj korak pronalazi Command CMGR:
////////////////////////////////////////////////// /////////////////////////
(
RI = 0;
a ;
if (rd_msg [5 ]==':')
(
RI = 0;
if (rd_msg [1] == 'C' & & rd_msg [3] == 'G' & & rd_msg [4] == 'R')
(
if (rd_msg [6 ]!='#')// "#" symbol se koristi kao SMS protokol
(a = 6
if (rd_msg [6 ]=='#')
(
data1 = 'C' & (rd_msg [7]);ako (a ==
<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Hladno" border="0" />(b = 1 / / ovom izjavom je najudaljeniji, dok (b == 0) petlja
)
)
drugi
(
a = 0;
rd_msg [0] = 0;
)
)
ako (a == 6 & & rd_msg [5 ]!=':')
(
a = 0;
rd_msg [0] = 0;
)
)
drugi
(
RI = 0;
a = 0;
)
) / / KRAJ ", dok (RI == 1 & & b == 0)"
) / / KRAJ ", dok (b == 0)"
) / / END funkcije "poniłtava read_msg ()"
/************************************************* *************************/
/ * SNDING PORUKA BACK TO BASE STATION * /
/************************************************* *************************/
poniłtava sndng_msg ()
(
/ / check = 0;
RI = 0;
TI = 0;
sendString ( "AT CMGF = 1 \ r ");// ove naredbe PDU mode pretvoriti u text modu
zakašnjenja (100);
/ / kašnjenje ();
TI = 0;
sendString ( "AT CMGS =");
zakašnjenja (100);
sendString ( "\" 033345004994 \ "\ r");
zakašnjenja (100);
/ / TI = 0;
/ / Send_serial ( "Meter tačkama:");
/ / Kašnjenje ();
TI = 0;
SBUF = (0x30 | data2); / / slanje prvi broj SIM memoriji
dok je (! TI) / / ovo je cifra ORed sa 0x30 generirati ASCII kôd digit_1
()
TI = 0;
SBUF = 0x1A;
dok je (! TI)
()
TI = 0
//************************************************ *********
/ / * GLAVNE FUNKCIJE *
//************************************************ *********
poniłtava glavni ()
(
HNK int = 0;
int a, b, c, d, v, w, x, y, z;zakašnjenja (100);
LCD_Initialize ();
LCD_Show ( 'M');
LCD_Show ( 'E');
LCD_Show ( 'T');
LCD_Show ( 'E');
LCD_Show ( 'R');
LCD_Show ( '');
LCD_Show ( 'R');
LCD_Show ( 'E');
LCD_Show ( 'A');
LCD_Show ( 'D');
LCD_Show ( 'I');
LCD_Show ( 'N');
LCD_Show ( 'G');LCD_Run_Command (0xC0); / / pokazivač na redak 2
LCD_Show ( 'U');
LCD_Show ( 'N');
LCD_Show ( 'I');
LCD_Show ( 'T');
LCD_Show ( '');
LCD_Show ( '');
a (1)
(
LCD_Run_Command (0xC8);
događanja = 1;
if (događaji == 0)
(
dok (događaji == 0);
HNK HNK = 1;
)
init (); / / inicijalizira serijska komunikacija
zakašnjenja (100);
sendString ( "at");
sendChar (0x0d); / / 0x0d = oznaka kraja retka
checkOK ();
if (ok == 1)
(
zakašnjenja (100);
sendString ( "AT CPM =");
sendChar (0x22); / / 0x22 = "
sendString ( "ME"); / / za odabir memorije telefona
sendChar (0x22); / / 0x22 = "
zakašnjenja (100);
sendString ( "AT CMGF = 1"); / / Tekst za odabir načina rada
sendChar (0x0d); / / 0x0d = oznaka kraja retka
checkOK ();
if (ok == 1)
(
zakašnjenja (100);
read_msg ();
sendString ( "AT CMER = 0,0,0,1 \ r");
checkOK ();
zakašnjenja (100);
sndng_msg ();
)
)if (HNK> = 0 & & HNK <10)
(
x = HNK;
x = x 48;data1 = x;
LCD_Show (data1);
)else (if (HNK> = 10 & & HNK <100)
(
x = cnt/10;
HNK% y = 10;
y y = 48;
x = x 48;
data1 = x;
LCD_Show (data1);
data1 = y;
LCD_Show (data1)
drugi
(
if (HNK> = 100 & & HNK <1000)
(
x = cnt/10;
z = HNK% 10;
y = x% 10;
x = x/10;
x = x 48;
y y = 48;
z = z 48;
data1 = x;
LCD_Show (data1);
data1 = y;
LCD_Show (data1);
data1 = z;
LCD_Show (data1)
drugi
(
if (HNK> = 1000 & & HNK <10000)
(
x = cnt/10;
z = HNK% 10;
y = x% 10;
x = x/10;
w = x% 10;
x = x/10;
x = x 48;
w w = 48;
y y = 48;
z = z 48;
data1 = x;
LCD_Show (data1);
data1 = w;
LCD_Show (data1);
data1 = y;
LCD_Show (data1);
data1 = z;
LCD_Show (data1);
)
drugi
(
if (HNK> = 10000 & & HNK <99999)
(
x = cnt/10;
z = HNK% 10;
y = x% 10;
x = x/10;
w = x% 10;
x = x/10;
v = x% 10;
x = x/10;
x = x 48;
v =
48 V;
w w = 48;
y y = 48;
z = z 48;
data1 = x;
LCD_Show (data1);
data1 = v;
LCD_Show (data1);
data1 = w;
LCD_Show (data1);
data1 = y;
LCD_Show (data1);
data1 = z;
LCD_Show (data1);
)
drugi
(
HNK = 0;
LCD_Run_Command (0xC8);
x = 0;
LCD_Show (x);
v = 0;
LCD_Show (v);
w = 0;
LCD_Show (w);
y = 0;
LCD_Show ;
z = 0;
LCD_Show (z);
))
)
)
)
))
To je broj im koristeći brojati ibterrupts iz energetskog metar n pretvoriti ga pogodnim jedinice n zatim ih poslati putem T290-i slušalica automatski ..Ali to još uvijek ne radi, čak i ako taj program radi na simulator ?????
# uključiti <AT89X51.H>
sbit RS = P1 ^ 3;
sbit RW = P1 ^ 4;
sbit E = P1 ^ 5;
sbit BF ^ P0 = 7;
sbit događanja ^ P2 = 1;
SFR DATA_BUS = 0x80; / / Port 0
pougljiti data1, data2;
nepotpisani pougljiti rcvd [2];
nepotpisani pougljiti J;
bitni ok = 0;
Serijski //************** inicijalizacija FUNKCIJA ************
void init ()
(
TMOD = 0x20; / / odabire način
tj. (korištenje timer1 u mode2)
TH1 = 0xFD; / / postavlja brzina prijenosa podataka (0xFD = 9600)
SCON = 0x50; / / s_mode 1, uart 1sb-8db-sb
TR1 = 1; / / pokreće timer1
)
//************** FUNKCIJA za slanje karakter STRING ************
poniłtava sendString (nepotpisano pougljiti * a)
(
dok (* a! = '\ 0')
(
SBUF =* A; / / SBUF se registrirati za slanje / primanje podataka serijski
a (TI == 0);
TI = 0; / / prenositi zastavom.
a ;
)
)
//************** Funkciju POŠALJI SINGLE karakter ************
poniłtava sendChar (nepotpisano pougljiti b)
(
SBUF = b;
a (TI == 0);
TI = 0;
)FUNKCIJA //************** za primanje karakter ************
nepotpisani pougljiti rcv ()
(
dok (RI == 0);
RI = 0; / / primanje flag
povratak SBUF;
)
//*************** Kašnjenje FUNKCIJA **********************
poniłtava kašnjenje (int a)
(
int i, j;
for (i = 0; i <= a; i )
for (j = 0; j <= 100; j );
)
//************** MOBILE ODGOVOR PREGLED FUNKCIJA ************
poniłtava checkOK ()
(
for (j = 0; j <2; j )
rcvd [j] = rcv ();
if (rcvd [0] == 'O' & & rcvd [1] == 'K')
ok = 1;
drugi
ok = 0;
)
//************************ Za provjeru LCD spremna ili ne ***************** **
int spreman ()
(
BF = 1;
Rs = 0;
RW = 1;
dok (BF == 1)
(
E = 0;
E = 1;
)
povratak 1;
)
/ / Funkcija Ready Završava
/*/************************ ZA kašnjenje (počinje) ****************** **
/ poniłtava kašnjenje ()
(
int x;for (x = 0, x <= 1000; x )
(
)
) * /
/ / Funkcija Delay Završavastatički poniłtava LCD_Pulse_E (int t) (
nepotpisani pougljiti I;
E = 1; for (i = 0; i <t; i ) i = i;
E = 0; for (i = 0; i <t; i ) i = i;
)
LCD //********************* Run FUNKCIJA ***********************
int LCD_Run_Command (nepotpisano pougljiti naredbu)
(
if (spreman ())
(
DATA_BUS = Command;
Rs = 0; zakašnjenja (100);
RW = 0; zakašnjenja (100);
LCD_Pulse_E (255);
)
povratak 1;
)
LCD //****************** SHOW ****************************
int LCD_Show (nepotpisano pougljiti karaktera)
(
if (spreman ())
(
DATA_BUS = lik;
RS = 1; zakašnjenja (100);
RW = 0; zakašnjenja (100);
LCD_Pulse_E (255);
zakašnjenja (100);
)
povratak 1;
)
//**************** LCD inicijalizirate ************************LCD_Initialize int () (
LCD_Run_Command (0x38); / /
8. Podaci linije, dvije linije, 5x7 Font.
LCD_Run_Command (0x0E); / / Display = ON, Cursor = ON, Cursor treptajućim = ON
LCD_Run_Command (0x01); / / Obriąi zaslon i vratiti pokazivač na početnu poziciju
LCD_Run_Command (0x06);
LCD_Run_Command (0x06); / / Tokom čitati / pisati samo rad pokazivača (ne teksta)
LCD_Run_Command (0x80), / / Pokazivač na Line 1, Pozicija 0
povratak 1;
)
//************** ČITANJE Primljene poruke *****************
poniłtava read_msg ()
(
int a = 0, b = 0, c = 0;
pougljiti rd_msg [10];
rd_msg [0] = 0;
RI = 0;
TI = 0;
sendString ( "AT CMGF = 1 \ r"); / / ove naredbe PDU mode pretvoriti u text modu
zakašnjenja (300);
zakašnjenja (300);
TI = 0;
sendString ( "AT CMGR = 1"); / / naredba čita ovu poruku iz memorije SIM
TI = 0;
dok je (! TI)
()
TI = 0;
SBUF = 0x0D; / / slanje prijevozu vratiti na raskinuti comand
TI = 0;
a (b == 0)
(
dok (RI == 1 & & b == 0)
(
rd_msg [a] = SBUF;
if (rd_msg [0 ]==' ')// ovaj korak pronalazi Command CMGR:
////////////////////////////////////////////////// /////////////////////////
(
RI = 0;
a ;
if (rd_msg [5 ]==':')
(
RI = 0;
if (rd_msg [1] == 'C' & & rd_msg [3] == 'G' & & rd_msg [4] == 'R')
(
if (rd_msg [6 ]!='#')// "#" symbol se koristi kao SMS protokol
(a = 6
if (rd_msg [6 ]=='#')
(
data1 = 'C' & (rd_msg [7]);ako (a ==
<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Hladno" border="0" />(b = 1 / / ovom izjavom je najudaljeniji, dok (b == 0) petlja
)
)
drugi
(
a = 0;
rd_msg [0] = 0;
)
)
ako (a == 6 & & rd_msg [5 ]!=':')
(
a = 0;
rd_msg [0] = 0;
)
)
drugi
(
RI = 0;
a = 0;
)
) / / KRAJ ", dok (RI == 1 & & b == 0)"
) / / KRAJ ", dok (b == 0)"
) / / END funkcije "poniłtava read_msg ()"
/************************************************* *************************/
/ * SNDING PORUKA BACK TO BASE STATION * /
/************************************************* *************************/
poniłtava sndng_msg ()
(
/ / check = 0;
RI = 0;
TI = 0;
sendString ( "AT CMGF = 1 \ r ");// ove naredbe PDU mode pretvoriti u text modu
zakašnjenja (100);
/ / kašnjenje ();
TI = 0;
sendString ( "AT CMGS =");
zakašnjenja (100);
sendString ( "\" 033345004994 \ "\ r");
zakašnjenja (100);
/ / TI = 0;
/ / Send_serial ( "Meter tačkama:");
/ / Kašnjenje ();
TI = 0;
SBUF = (0x30 | data2); / / slanje prvi broj SIM memoriji
dok je (! TI) / / ovo je cifra ORed sa 0x30 generirati ASCII kôd digit_1
()
TI = 0;
SBUF = 0x1A;
dok je (! TI)
()
TI = 0
//************************************************ *********
/ / * GLAVNE FUNKCIJE *
//************************************************ *********
poniłtava glavni ()
(
HNK int = 0;
int a, b, c, d, v, w, x, y, z;zakašnjenja (100);
LCD_Initialize ();
LCD_Show ( 'M');
LCD_Show ( 'E');
LCD_Show ( 'T');
LCD_Show ( 'E');
LCD_Show ( 'R');
LCD_Show ( '');
LCD_Show ( 'R');
LCD_Show ( 'E');
LCD_Show ( 'A');
LCD_Show ( 'D');
LCD_Show ( 'I');
LCD_Show ( 'N');
LCD_Show ( 'G');LCD_Run_Command (0xC0); / / pokazivač na redak 2
LCD_Show ( 'U');
LCD_Show ( 'N');
LCD_Show ( 'I');
LCD_Show ( 'T');
LCD_Show ( '');
LCD_Show ( '');
a (1)
(
LCD_Run_Command (0xC8);
događanja = 1;
if (događaji == 0)
(
dok (događaji == 0);
HNK HNK = 1;
)
init (); / / inicijalizira serijska komunikacija
zakašnjenja (100);
sendString ( "at");
sendChar (0x0d); / / 0x0d = oznaka kraja retka
checkOK ();
if (ok == 1)
(
zakašnjenja (100);
sendString ( "AT CPM =");
sendChar (0x22); / / 0x22 = "
sendString ( "ME"); / / za odabir memorije telefona
sendChar (0x22); / / 0x22 = "
zakašnjenja (100);
sendString ( "AT CMGF = 1"); / / Tekst za odabir načina rada
sendChar (0x0d); / / 0x0d = oznaka kraja retka
checkOK ();
if (ok == 1)
(
zakašnjenja (100);
read_msg ();
sendString ( "AT CMER = 0,0,0,1 \ r");
checkOK ();
zakašnjenja (100);
sndng_msg ();
)
)if (HNK> = 0 & & HNK <10)
(
x = HNK;
x = x 48;data1 = x;
LCD_Show (data1);
)else (if (HNK> = 10 & & HNK <100)
(
x = cnt/10;
HNK% y = 10;
y y = 48;
x = x 48;
data1 = x;
LCD_Show (data1);
data1 = y;
LCD_Show (data1)
drugi
(
if (HNK> = 100 & & HNK <1000)
(
x = cnt/10;
z = HNK% 10;
y = x% 10;
x = x/10;
x = x 48;
y y = 48;
z = z 48;
data1 = x;
LCD_Show (data1);
data1 = y;
LCD_Show (data1);
data1 = z;
LCD_Show (data1)
drugi
(
if (HNK> = 1000 & & HNK <10000)
(
x = cnt/10;
z = HNK% 10;
y = x% 10;
x = x/10;
w = x% 10;
x = x/10;
x = x 48;
w w = 48;
y y = 48;
z = z 48;
data1 = x;
LCD_Show (data1);
data1 = w;
LCD_Show (data1);
data1 = y;
LCD_Show (data1);
data1 = z;
LCD_Show (data1);
)
drugi
(
if (HNK> = 10000 & & HNK <99999)
(
x = cnt/10;
z = HNK% 10;
y = x% 10;
x = x/10;
w = x% 10;
x = x/10;
v = x% 10;
x = x/10;
x = x 48;
v =
48 V;
w w = 48;
y y = 48;
z = z 48;
data1 = x;
LCD_Show (data1);
data1 = v;
LCD_Show (data1);
data1 = w;
LCD_Show (data1);
data1 = y;
LCD_Show (data1);
data1 = z;
LCD_Show (data1);
)
drugi
(
HNK = 0;
LCD_Run_Command (0xC8);
x = 0;
LCD_Show (x);
v = 0;
LCD_Show (v);
w = 0;
LCD_Show (w);
y = 0;
LCD_Show ;
z = 0;
LCD_Show (z);
))
)
)
)
))
To je broj im koristeći brojati ibterrupts iz energetskog metar n pretvoriti ga pogodnim jedinice n zatim ih poslati putem T290-i slušalica automatski ..Ali to još uvijek ne radi, čak i ako taj program radi na simulator ?????