 |

|
Elektronika.lt portalo forumas
Jūs esate neprisijungęs lankytojas. Norint dalyvauti diskusijose, būtina užsiregistruoti ir prisijungti prie forumo.
Prisijungę galėsite kurti naujas temas, atsakyti į kitų užduotus klausimus, balsuoti forumo apklausose.
Administracija pasilieka teisę pašalinti pasisakymus bei dalyvius,
kurie nesilaiko forumo taisyklių.
Pastebėjus nusižengimus, prašome pranešti.
Dabar yra 2025 07 06, 17:30. Visos datos yra GMT + 2 valandos.
|
|
|
 |
Forumas » Mikrovaldikliai » problemos programavime (C kalba)
|
Jūs negalite rašyti naujų pranešimų į šį forumą Jūs negalite atsakinėti į pranešimus šiame forume Jūs negalite redaguoti savo pranešimų šiame forume Jūs negalite ištrinti savo pranešimų šiame forume Jūs negalite dalyvauti apklausose šiame forume
|
|
|
Puslapis 1 iš 2 Pereiti prie 1, 2 Toliau |
|
 |
problemos programavime (C kalba) |
Parašytas: 2008 10 02, 21:11 |
|
|
|
na nezinau, niekaip nepavyksta kad led eilute begiotu pirmyn atgal, parasiau koda, tai eilute nubega ir parbega viena kart ir viskas nors ciklas begalinis, pataisykit jei matot kur klaida
Kodas: |
#include <avr/io.h>
void velinam();
int main( void )
{DDRD=255;
unsigned char a=128;
while(1){
PORTD=a;
velinam();
a=a/2;
if (a==0){
for(a=1; a<=128; a=a*2)
{
PORTD=a;
velinam();
}
a=128;
}
}}
void velinam()
{unsigned int i=0;
for(i=0; i<65535; i++){}}
|
|
|
|
|
|
 |
problemos programavime (C kalba) |
Parašytas: 2008 10 02, 21:31 |
|
|
|
Visų pirma kas čia?
Gal geriau iškart rašyk
Nes return sakinio tai nėra.
O klaida pas tave yra tame kad blogai suformuluotas ciklas. Naudok pvz bool b, b:=1 kai dalint a reikšme nori, b=0 kai daugint.
Kodas: |
while(1){
PORTD=a;
velinam();
if (b==0)
a=a*2;
else a=a/2;
if (a==1 or a==128) b=not b;
} |
Bandyk gal šitą, bet klaidas išsitaisyk nes c kalbos nelabai moku... |
|
|
|
|
 |
problemos programavime (C kalba) |
Parašytas: 2008 10 03, 16:50 |
|
|
|
kazkas panasaus
Kodas: |
int main(){
unsigned char a,i;
while(1){
a = 128;
for(i=0; i<8; i++){
PORTD = a;
a = a/2;
velinam();
}
a = 1;
for(i=0; i<8; i++){
PORTD = a;
a = a * 2;
velinam();
}
}
} |
|
|
|
|
|
 |
 |
 |
problemos programavime (C kalba) |
Parašytas: 2008 12 09, 00:53 |
|
|
|
Problema panaši tad nekuriam naujų temų.
Tikiuosi ir man padėsit, nes su mikrokontroleriais ir C kalba žaidęs esu dar labai mažai.
Reikia nesudėtingo dalyko- bėgiojančios 16 ar daugiau LED'ų eilutės. Bėgti turi į vieną pusę iš eilės visi LED'ai.
Naudoju ATMEGA16, kvarcas 4MHz, kompiliuoju su IAR Embedded Workbench for AVR ir įrašinėju PonyProg'u per LPT programatorių.
Reikalas tame kad kai ankščiau reikėjo vos kelių kojų, tai užtekdavo PD portų, o dabar reikia dar ir PC. Manau kad klaidų privėliau ir registrų aprašyme. Paskutinis variantas štai čia:
/* Data Direction Register, Port C */
#define DDC7 7
#define DDC6 6
#define DDC5 5
#define DDC4 4
#define DDC3 3
#define DDC2 2
#define DDC1 1
#define DDC0 0
/* Data Direction Register, Port D */
#define DDD7 7
#define DDD6 6
#define DDD5 5
#define DDD4 4
#define DDD3 3
#define DDD2 2
#define DDD1 1
#define DDD0 0
/* Data Register, Port C */
#define PORTC7 7
#define PORTC6 6
#define PORTC5 5
#define PORTC4 4
#define PORTC3 3
#define PORTC2 2
#define PORTC1 1
#define PORTC0 0
/* Data Register, Port D */
#define PORTD7 7
#define PORTD6 6
#define PORTD5 5
#define PORTD4 4
#define PORTD3 3
#define PORTD2 2
#define PORTD1 1
#define PORTD0 0
#include <iom16.h>
void velinam(); //
int main( void )
{DDRD=255; DDRC=255;
unsigned char a=128;
while(1){//
int i=0;
i++;
if (i <= { PORTD=a; PORTC = 0; }
if ((i > && (i <= 16)) ;{ PORTC = a; PORTD = 0;}
if (i == 16) { i = 0; }
velinam();
a=a/2;
if (a==0){a=128;}
}}
void velinam()
{unsigned int i=0;
for(i=0; i<10000; i++){}}
Labai laukiu pastabų ir patarimų, nes rezultatas bus naudojamas renginio dekoracijų kūrime, tad dar reikia kad būtų ir patikima. Ačiū.  |
|
|
|
|
 |
 |
problemos programavime (C kalba) |
Parašytas: 2008 12 09, 01:08 |
|
|
|
lengviausia spresti tokiu dalykus naudojanti C kalba o ne imituojant asambleri taip kaip tu darai
o tam reikia tiesiog daryti kaip pries tai rodytoje programoje tik kintamaji padaryti int o ne char ir ir paskui ji iskirstyti i 2 portus.
o tai padaroma gana lengvai
PORTC= a>>8;
PORTD=(a & 0xff)
visa kita kaip zap programoje
tik
unsigned char a=128;
keisk i
unsigned int a=0x8000;
ir attitinkamai visur kitur 128 keisk i 0x8000
nors jei tau tik i viena puse begancio tereikia tai visai paprasta
int a,x
while(1){
for (x=0;x<15;x++){
a=(1<<x)
PORTC= a>>8;
PORTD=(a & 0xff)
}
} |
|
|
|
|
 |
problemos programavime (C kalba) |
Parašytas: 2008 12 09, 23:11 |
|
|
|
Neveikia nei vienu nei kitu atvėjų...
O kaip turi atrodyti registrai? Gal reikia numeracijos iki 16 ar kaip? |
|
|
|
|
 |
problemos programavime (C kalba) |
Parašytas: 2008 12 10, 01:36 |
|
|
|
o kas tau vyskta?
mano progremoje reikia dar uzdelsima ideti kur nors
o siaip turetu veikti ar bent jau kazkas turi vykti |
|
|
|
|
 |
problemos programavime (C kalba) |
Parašytas: 2008 12 10, 21:26 |
|
|
|
C porte kartu yra JTAG`as, kuris po default`u būna įjungtas, jis neduoda pilnai valdyti C porto, pabandyk jį išjungti. |
|
_________________ nepamirškit, klysti žmogiška
privatas - privatiems klausimams
arch linux  |
|
|
|
 |
problemos programavime (C kalba) |
Parašytas: 2008 12 12, 21:58 |
|
|
|
bega i viena puse:
Kodas: |
void main(void){
unsigned short a;
unsigned char i;
DDRC = 255;
DDRD = 255;
a = 1;
while(1){
for(i=0; i<16; i++){
PORTC = a;
PORTD = a / 256;
a = a * 2;
velinam();
}
a = 1;
}
}
|
ir dar, kaip rase, reikia JTAG isjungti, kad normaliai PORTC veiktu... |
|
|
|
|
 |
problemos programavime (C kalba) |
Parašytas: 2008 12 13, 22:43 |
|
|
|
Gal kas zino kaip pritaikyti funkcija shift_left( Buffer, 4, i); kuri naudojama CCS, mikroC kompiliatoriui,nes mikroC tokios funkcijos ner.Cia pas mane Buffer[9]; o i gali buti 1 arba 0. Bandziua rasyt
Buffer[4]<<i; bet kazkas ne taip gaunasi. |
|
|
|
|
 |
problemos programavime (C kalba) |
Parašytas: 2008 12 13, 23:37 |
|
|
|
jei nera kazkokios funkcijos ja reikia pasirasyti paciam.
ir pirma reikia zinoti ka ji isvis turi daryti |
|
|
|
|
 |
problemos programavime (C kalba) |
Parašytas: 2008 12 14, 11:26 |
|
|
|
Tai kad ir nezinau ka turi daryti funkcija shift_left( Buffer, 4, i); ,o man ja reikia parasyti paprastai,be bibliotekiniu funkciju,jei zinoc tai gal ir parasysiu,todel ir klausiu. |
|
|
|
|
 |
problemos programavime (C kalba) |
Parašytas: 2008 12 14, 12:43 |
|
|
|
Kam tau jos reikia? Kąnors paprasčiau sugalvok, o jei nori į kairę perstumti bitus tai:
Kodas: |
int i;
char bufer[9];
char ca;
void shift_left(){
ca=bufer[0];
for (i=0; i<8;i++)
bufer[i]=bufer[i+1];
bufer[8]=ca;
} |
|
|
|
|
|
 |
problemos programavime (C kalba) |
Parašytas: 2008 12 14, 12:51 |
|
|
|
Aš spėju, kad ta tavo funkcija perstumia per kelis vienetus į kairę (Tavo atveju 4), o i reiškia kokiais bitais bus užpildyti paskutinieji bitai (jų neatkels iš pradžios tikriausiai) |
|
|
|
|
|
 |
Google paieška forume |
|
 |
Naujos temos forume |
|
 |
FS25 Tractors
Farming Simulator 25 Mods,
FS25 Maps,
FS25 Trucks |
 |
ETS2 Mods
ETS2 Trucks,
ETS2 Bus,
Euro Truck Simulator 2 Mods
|
 |
FS22 Tractors
Farming Simulator 22 Mods,
FS22 Maps,
FS25 Mods |
 |
VAT calculator
VAT number check,
What is VAT,
How much is VAT |
 |
FS25 Mods
FS25 Harvesters,
FS25 Tractors Mods,
FS25 Maps Mods |
 |
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija |
 |
FS25 Mods
FS25 Maps,
FS25 Cheats,
FS25 Install Mods |
 |
FS25 Mods
Farming Simulator 25 Mods,
FS25 Maps |
 |
ATS Trailers
American Truck Simulator Mods,
ATS Trucks,
ATS Maps |
 |
Football Training Kit
Football Training Equipment,
Football Skills,
Football Training |
|

|
 |