LED ఇంటర్ఫేసింగ్ మొదటి విషయం, ఏదైనా మైక్రోకంట్రోలర్తో ప్రారంభించేటప్పుడు చేయడానికి ప్రయత్నిస్తారు. కాబట్టి ఇక్కడ ఈ ట్యుటోరియల్లో మనం 8051 మైక్రోకంట్రోలర్తో ఎల్ఈడీని ఇంటర్ఫేస్ చేయబోతున్నాం, మరియు ఎల్ఈడీని రెప్ప వేయడానికి సి ప్రోగ్రామ్ను వ్రాస్తాము. మేము ATMEL చేత 8051 కుటుంబానికి చెందిన అత్యంత ప్రాచుర్యం పొందిన మైక్రోకంట్రోలర్ AT89S52 ను ఉపయోగించాము.
వివరాల్లోకి వెళ్ళే ముందు, మైక్రోకంట్రోలర్ AT89S52 గురించి కొంత సంక్షిప్త ఆలోచన పొందాలి. ఇది 40 పిన్ మైక్రోకంట్రోలర్, మరియు 4 పోర్టులు (పి 0, పి 1, పి 2, పి 3) ఉన్నాయి, ప్రతి పోర్టులో 8 పిన్స్ ఉన్నాయి. సాఫ్ట్వేర్ దృక్కోణం నుండి మేము ప్రతి పోర్టును 8 బిట్ రిజిస్టర్గా పరిగణించవచ్చు. ప్రతి పిన్ ఒక ఇన్పుట్ / అవుట్పుట్ లైన్ కలిగి ఉంటుంది, అంటే ప్రతి పిన్ను ఇన్పుట్ కోసం మరియు అవుట్పుట్ కోసం ఉపయోగించవచ్చు, అనగా డేటాను చదవడం సెన్సార్ వంటి కొన్ని పరికరాలను ఏర్పరుస్తుంది లేదా దాని అవుట్పుట్ను కొన్ని అవుట్పుట్ పరికరానికి అందించడానికి. కొన్ని పిన్స్ ద్వంద్వ కార్యాచరణను కలిగి ఉన్నాయి, ఇది క్రింద పిన్ రేఖాచిత్రంలో బ్రాకెట్లో పేర్కొనబడింది. అంతరాయం, కౌంటర్లు, టైమర్లు మొదలైన వాటి కోసం ద్వంద్వ కార్యాచరణ.
AT89S52 లో రెండు రకాల మెమరీ ఉంది, మొదటిది 256 బైట్ల మెమరీని కలిగి ఉన్న RAM మరియు రెండవది 8K బైట్ల మెమరీని కలిగి ఉన్న EEPROM (ఎలక్ట్రానిక్ ఎరేజబుల్ మరియు ప్రోగ్రామబుల్ రీడ్ ఓన్లీ మెమరీ). ప్రోగ్రామ్ అమలు సమయంలో డేటాను నిల్వ చేయడానికి RAM ఉపయోగించబడుతుంది మరియు ప్రోగ్రామ్ను నిల్వ చేయడానికి EEPROM ఉపయోగించబడుతుంది. EEPROM అనేది మేము ప్రోగ్రామ్ను బర్న్ చేయడానికి ఉపయోగించిన ఫ్లాష్ మెమరీ.
సర్క్యూట్ రేఖాచిత్రం మరియు వివరణ
LED ని కనెక్ట్ చేయడానికి మేము పోర్ట్ 1 యొక్క పిన్ వన్ ఉపయోగిస్తున్నాము. లో ఎంబెడెడ్ C ప్రోగ్రామింగ్ మేము P1_0 ఉపయోగించి పోర్టు 1 యొక్క PIN 1 ప్రాప్యత చేయవచ్చు. మేము 11.0592MHz ఫ్రీక్వెన్సీ యొక్క క్రిస్టల్ ఓసిలేటర్ను పిన్ 19 మరియు 18 కి కనెక్ట్ చేసాము, అంటే XTAL1 మరియు XTAL2. గడియార పప్పులను ఉత్పత్తి చేయడానికి క్రిస్టల్ ఓసిలేటర్ ఉపయోగించబడుతుంది మరియు సమయ గణన కోసం సగటును అందించడానికి గడియారపు పల్స్ ఉపయోగించబడుతుంది, ఇది అన్ని సంఘటనలను సమకాలీకరించడానికి తప్పనిసరి. కంప్యూటర్లు, గడియారాలు వంటి ప్రతి ఆధునిక డిజిటల్ పరికరాలలో ఉపయోగించే ఈ రకమైన స్ఫటికాలు. సాధారణంగా ఉపయోగించే క్రిస్టల్ క్వార్ట్జ్. ఇది ప్రతిధ్వనించే ఓసిలేటర్ సర్క్యూట్ మరియు క్రిస్టల్ను డోలనం చేయడానికి కెపాసిటర్లను ఉపయోగిస్తారు, కాబట్టి మేము ఇక్కడ 22 పిఎఫ్ కెపాసిటర్లను అనుసంధానించాము. మరింత తెలుసుకోవడానికి మీరు “ప్రతిధ్వని సర్క్యూట్ల” గురించి చదువుకోవచ్చు.
8051 మైక్రోకంట్రోలర్ 89S52 అనుసంధానాన్ని LED కోసం సర్క్యూట్లో పైన చూపిన చిత్రంలో చూపించాం. పిన్ 31 (EA) Vcc కి కనెక్ట్ చేయబడింది, ఇది చురుకైన తక్కువ పిన్. మేము ఏదైనా బాహ్య మెమరీని ఉపయోగించనప్పుడు ఇది Vcc కి కనెక్ట్ చేయాలి. మైక్రోకంట్రోలర్ను బాహ్య మెమరీకి అనుసంధానించడానికి పిన్ 30 (ALE) మరియు పిన్ 29 (PSEN) ఉపయోగించబడతాయి మరియు పిన్ 31 మైక్రోకంట్రోలర్కు గ్రౌండ్కు కనెక్ట్ అయినప్పుడు బాహ్య మెమరీని ఉపయోగించమని చెబుతుంది. మేము బాహ్య మెమరీని ఉపయోగించడం లేదు కాబట్టి మేము పిన్ 31 ను విసిసికి కనెక్ట్ చేసాము.
పిన్ 9 (RST) అనేది రీసెట్ PIN, ఇది మైక్రోకంట్రోలర్ను రీసెట్ చేయడానికి ఉపయోగించబడుతుంది మరియు ప్రోగ్రామ్ మళ్లీ ప్రారంభం నుండి ప్రారంభమవుతుంది. HIGH కి కనెక్ట్ అయినప్పుడు ఇది మైక్రోకంట్రోలర్ను రీసెట్ చేస్తుంది. RST పిన్ను కనెక్ట్ చేయడానికి మేము ప్రామాణిక రీసెట్ సర్క్యూట్రీ, 10 కె ఓం రెసిస్టర్ మరియు 1 యుఎఫ్ కెపాసిటర్ను ఉపయోగించాము.
ఇప్పుడు ఇక్కడ ఆసక్తికరమైన భాగం ఏమిటంటే, మేము ఎల్ఈడీని రివర్స్లో కనెక్ట్ చేస్తాము, అంటే మైక్రోకంట్రోలర్ పిన్తో నెగటివ్ లెగ్ అని అర్ధం, ఎందుకంటే మైక్రోకంట్రోలర్ ఎల్ఈడీని మెరుస్తున్నంత శక్తిని ఇవ్వదు, కాబట్టి ఇక్కడ ఎల్ఈడీ ఎప్పుడు, పిన్ పి 1 0 0 అప్పుడు LED ఆఫ్ చేయబడుతుంది మరియు పిన్ అవుట్పుట్ 0 అయినప్పుడు LED ఆన్ చేయబడుతుంది. పిన్ అవుట్పుట్ 0 అయినప్పుడు, ఇది గ్రౌండ్ మరియు ఎల్ఈడి గ్లోస్ లాగా ప్రవర్తిస్తుంది.
కోడ్ వివరణ
ప్రాథమిక రిజిస్టర్ నిర్వచనాలను చేర్చడానికి హెడర్ REGX52.h చేర్చబడింది. Int, char, unsigned int, float etc వంటి ఎంబెడెడ్ C లో అనేక రకాల వేరియబుల్స్ మరియు స్థిరాంకాలు ఉన్నాయి, మీరు వాటిని సులభంగా నేర్చుకోవచ్చు. ఇక్కడ మేము సంతకం చేయని పూర్ణాంకాన్ని ఉపయోగిస్తున్నాము, దీని పరిధి 0 నుండి 65535 వరకు ఉంటుంది. ఆలస్యాన్ని సృష్టించడానికి మేము “ఫర్ లూప్” ని ఉపయోగిస్తున్నాము, తద్వారా LED కొంత సమయం వరకు ఉంటుంది (P1_0 = 0, నెగటివ్ LED లాజిక్) మరియు OFF (P1_0 = 1, ప్రతికూల LED తర్కం) ఆలస్యం సమయం కోసం. సాధారణంగా “ఫర్ లూప్” 1275 రెట్లు నడుస్తున్నప్పుడు, 1 ఎంఎస్ ఆలస్యం ఇస్తుంది, కాబట్టి మేము ఆలస్యాన్ని సృష్టించడానికి 'ఆలస్యం' ఫంక్షన్ను సృష్టించాము మరియు దానిని ప్రధాన ప్రోగ్రామ్ (మెయిన్ ()) నుండి పిలుస్తాము. ప్రధాన ఫంక్షన్ నుండి “ఆలస్యం” ఫంక్షన్ను పిలిచేటప్పుడు మనం ఆలస్యం సమయం (ఎంఎస్లో) పాస్ చేయవచ్చు. ప్రోగ్రామ్లో, “అయితే (1)” అంటే ప్రోగ్రామ్ అనంతంగా అమలు అవుతుంది.
నేను క్లుప్తంగా వివరిస్తున్నాను, “ఫర్” లూప్ యొక్క 1275 రెట్లు 1ms ఆలస్యం ఎలా ఇస్తాయి:
8051 లో, 1 యంత్ర చక్రానికి అమలు చేయడానికి 12 క్రిస్టల్ పప్పులు అవసరం మరియు మనకు 11.0592Mhz క్రిస్టల్ ఉపయోగించబడింది.
కాబట్టి 1 యంత్ర చక్రానికి సమయం అవసరం: 12 / 11.0592 = 1.085us
కాబట్టి 1275 * 1.085 = 1.3ms, “for” లూప్ యొక్క 1275 రెట్లు దాదాపు 1ms ఆలస్యం ఇస్తుంది.
(సి = ప్రోగ్రామ్ ద్వారా ఉత్పత్తి చేయబడిన ఖచ్చితమైన సమయం ఆలస్యం గణించడం చాలా కష్టం, ఓసిల్లోస్కోప్ (CRO) నుండి కొలిచేటప్పుడు, (j = 0; j <1275; j ++) దాదాపు 1ms ఆలస్యం ఇస్తుంది.
కాబట్టి 8051 మైక్రోకంట్రోలర్తో LED ని ఇంటర్ఫేస్ చేయడం ద్వారా మనం అర్థం చేసుకోవచ్చు, ఒక సాధారణ కోడింగ్తో, మైక్రోకంట్రోలర్ను ఉపయోగించి సాఫ్ట్వేర్ (ప్రోగ్రామింగ్) ద్వారా హార్డ్వేర్ను ఇంటరాక్ట్ చేయవచ్చు మరియు నియంత్రించవచ్చు. ప్రోగ్రామింగ్ ద్వారా మైక్రోకంట్రోలర్ యొక్క ప్రతి పోర్ట్ మరియు పిన్ను కూడా మనం మార్చవచ్చు.