წაკითხვის პორტები AVR in Si. AVR Microcontroller Command System- ის შესწავლა

შესავალი

ყველა I / O PORTS (PVW) AVR Microcontrollers მუშაობენ პრინციპზე მოსმენით-შეცვლის-ჩაწერისას, როდესაც მათ იყენებენ უნივერსალური I / O პორტების პორტების გამოყენება. ეს იმას ნიშნავს, რომ SBI- სა და CBI- ის ერთ-ერთი პორტის პორტის მითითების შეცვლა SBI- სა და CBI ბრძანების მიერ სხვა პორტის ნაწილების მიმართულებით ცრუ ცვლილებების გარეშე მოხდება. ეს ასევე ვრცელდება ლოგიკური დონის შეცვლისთვის (თუ პორტის ხაზი კონფიგურირებულია გამომავალი) ან ჩართვა / გამორთვა გამორთვა Resistors (თუ ხაზი კონფიგურირებულია შესვლისთვის). თითოეული გამომავალი ბუფერული აქვს სიმეტრიული კონტროლის დამახასიათებელი მაღალი მიედინება და მიედინება გამომავალი დენებისაგან. გამომავალი მძღოლს აქვს დატვირთვის მოცულობა, რომელიც საშუალებას გაძლევთ პირდაპირ აკონტროლონ LED ინდიკატორები. ალტერნატიულად შერჩევითი რეზისტენტული ძალა ძალაუფლების ძალაუფლებისთვის შეიძლება დაკავშირებული ყველა პორტის ხაზებთან, რომლის წინააღმდეგობა არ არის დამოკიდებული მიწოდების ძაბვის შესახებ. ყველა PVV ხაზის, დამცავი დიოდები დამონტაჟებულია, რომლებიც დაკავშირებულია VCC- სა და გენერალურ (GND), როგორც ეს არის ფიგურა 29. PVV პარამეტრების დეტალური ჩამონათვალი მოცემულია სექციაში "ელექტრო თვისებები".

ფიგურა 29 - ეკვივალენტური PVV ხაზი დიაგრამა

რეგისტრატორის რეგისტრაციისა და ბიტების ბმულები ეს სექცია Dases ზოგადად. ამავდროულად, "X" სიმბოლო ცვლის PVV- ს სახელით, ხოლო "N" სიმბოლო ცვლის PVV გამონადენის ნომერს. თუმცა, პროგრამის შექმნისას, თქვენ უნდა გამოიყენოთ ჩაწერის ზუსტი ფორმა. მაგალითად, PORTB3, რაც ნიშნავს 3 პორტის კატეგორიას, ამ დოკუმენტში ჩაწერილია პორტშია. ფიზიკური I / O რეესტრების მისამართები და მათი განმუხტვის განაწილება ნაჩვენებია "I / O პორტის რეგისტრაციის აღწერას".

თითოეული I / O- ში I / O მეხსიერებაში, სამი უჯრედი დაცულია: ერთი მონაცემების რეგისტრაცია - პორტრეტი, სხვა მონაცემთა მიმართულებების რეგისტრაცია - DDRX და მესამე პორტის პორტში - PINX. საკანში, რომელიც პორტების შეყვანისას ინახავს იმას, რომ მხოლოდ იკითხება და მონაცემთა რეგისტრატორებსა და მონაცემთა რეაგირებს აქვთ ბაიდირექციული წვდომა. გარდა ამისა, შექმნის გამკაცრება SFIOR PUD PUD \u200b\u200bPUD \u200b\u200bგამკაცრებელი რეზისტორების გამკაცრება Pud რეგისტრაცია გამორთულია ყველა პორტების ყველა შედეგებზე.

ქვემოთ არის I / O პორტის აღწერა უნივერსალური ციფრული I / O. პორტის დასკვნების უმეტესობა მხარს უჭერს ჩამონტაჟებული ალტერნატიული ფუნქციები Პერიფერიული მოწყობილობები მიკროკონტროლერი. ალტერნატიული ფუნქციის აღწერილობა შემდგომში "ალტერნატიული პორტის ფუნქციებით" ქვეპუნქტით არის გათვალისწინებული (იხ. აგრეთვე შესაბამისი პერიფერიული მოდულების ფუნქციების აღწერა).

გთხოვთ გაითვალისწინოთ, რომ ზოგიერთი პორტისთვის, ზოგიერთი დასკვნის ალტერნატიული ფუნქციების მოგვარება შეუძლებელს ხდის უნივერსალური ციფრული შეყვანის გამოყოფის სხვა შედეგებს.

პორტები, როგორც უნივერსალური ციფრული I / O

ყველა პორტების არის bidirectional I / O პორტების სურვილისამებრ pull-up რეზისტენტებს. ფიგურა 30 ასახავს ფუნქციის დიაგრამას ერთი შეყვანის პორტის ხაზის ფუნქცია, რომელიც მითითებულია PXN- ში.


ფიგურა 30 - უნივერსალური ციფრული I / O (1) ორგანიზაცია

დაახ. 1: WPX, WDX, RRX, RPX და RDX სიგნალები საერთო ერთ პორტში. Clki / O, ძილი, და Pud სიგნალები საერთო ყველა პორტების.

დასკვნები

თითოეული გამომავალი რეჟიმი და მდგომარეობა განისაზღვრება სამი რეესტრის შესაბამისი ციფრების ღირებულებით: DDXN, Portxn და Pinxn. როგორც ნაჩვენებია "I / O პორტის რეგისტრაციის აღწერას", DDXN ბიტების ხელმისაწვდომობა შესაძლებელია I / O სივრცეში DDRX- ის მისამართზე და, შესაბამისად, პორტქსის მისამართზე პორტქსის მისამართზე და Pinxn ბიტი Pinx- ზე.

DDXN DDRX DDRX ბიტი განსაზღვრავს I / O ხაზის მიმართულებას. თუ DDXN \u003d 1, მაშინ PXN არის კონფიგურირებული ჩვენება. თუ DDXN \u003d 0, მაშინ PXN არის კონფიგურირებული შესვლის.

თუ PortXN \u003d 1 პორტის ხაზის კონფიგურაციისას, დაშვებულია გამკაცრების გამკაცრების კავშირი. ამ რეზისტორის გამორთვა, თქვენ უნდა დაწეროთ პორტქსის ჟურნალი. 0 ან კონფიგურაცია პორტის ხაზი გამომავალი. გადატვირთვისას, ყველა პორტის ხაზი მესამე (მაღალი დაჭერით) სახელმწიფოა, მაშინაც კი, თუ სინქრონიზაცია არ მუშაობს.

თუ PortXN \u003d 1 პორტის ხაზის კონფიგურაციისას, გამომავალი სახელმწიფო განისაზღვრება პორტფელის ღირებულებით.

მას შემდეგ, რაც DDRX- სა და PortX- ის რეგისტრაციის ერთდროულად შესვლისას შეუძლებელია, მაშინ მესამე სახელმწიფოს შორის ((DDXN, Portxn) \u003d 0B00) და შესვლის გამოშვება. 1 (((DDXN, PORTXN) \u003d 0B11) შუალედური სახელმწიფო უნდა მოხდეს ან უკავშირდება გამკაცრებელი რეზისტენტობის ((DDXN, Portxn) \u003d 0B01) ან შესვლის გამოშვებას. 0 ((DDXN, PortXN) \u003d 0B10). როგორც წესი, გარდამავალი სახელმწიფოს მეშვეობით, რომელიც დაკავშირებულია Resistor- ის კავშირით, არის log.1- ის გამომავალი მდგომარეობის ექვივალენტი, თუ მიკროკონტროლერის გამომუშავება უკავშირდება მაღალკვალიფიციურ შეყვანას. წინააღმდეგ შემთხვევაში, აუცილებელია, რომ დაამყაროს SFIOR PUD PUD \u200b\u200bBIT, რათა გამორთოთ ყველა პორტი ყველა პორტში.

გადართვა შორის გამკაცრება რეზისტენტული და გამომავალი Დაბალი დონე ასოცირებული მსგავსი პრობლემა. აქედან გამომდინარე, მომხმარებელი იძულებულია გამოიყენოს ან მესამე სახელმწიფო ((DDXN, Portxn) \u003d 0B00) ან გამომავალი შესვლა. 1 ((DDXN, Portxn) \u003d 0B11) როგორც შუალედური ნაბიჯი.

ცხრილი 25 აჯამებს გამომავალი სტატუსის კონტროლის სიგნალების მოქმედებას.

ცხრილი 25 - პორტის გამომავალი

Ddxn. PORTXN. Pud (in sfior) შეყვანის გამომავალი გამკაცრება რეზისტორი კომენტირება
0 0 X. მიწოდება არა
0 1 0 მიწოდება დიახ PXN იქნება მიმდინარე წყარო, როდესაც გამოყენების გარე დაბალი დონე
0 1 1 მიწოდება არა მესამე სახელმწიფო (Z- სახელმწიფო)
1 0 X. პროდუქცია არა გამომავალი შესვლა. 0 (მიედინება მიმდინარე)
1 1 X. პროდუქცია არა გამომავალი შესვლა. 1 (მიედინება მიმდინარე)

გამოაქვეყნოს გამომავალი სტატუსი

DDXN მონაცემთა ფაილის ღირებულების მიუხედავად, პორტის გამომავალი სტატუსი შეიძლება გამოკითხულ იქნას PINXN- ის რეესტრში. როგორც ჩანს, ფიგურა 30-ში, Pinxn რეგისტრაცია ცოტა და გამოიწვევს latch წინსვლას სინქრონიზატორი. Ეს მიდგომა საშუალებას გაძლევთ თავიდან ასაცილებლად, თუ ცვლილება გამომავალი მოხდა შიდა სინქრონიზაციის წინ. თუმცა, ეს მიდგომა უკავშირდება დაგვიანებით. ფიგურა 31 წარმოადგენს დროებითი სინქრონიზაციის დიაგრამას კვლევის დროს გარედან გამომავალი დონეზე. სიგნალის დისტრიბუციის მინიმალური და მაქსიმალური დაგვიანებით ხანგრძლივობა აღინიშნება TPD, MAX და TPD, მინ.


ფიგურა 31 - სინქრონიზაცია გამომავალზე გამოყენებული დონის კვლევის დროს

ქვემოთ მოყვანილი მაგალითებით, ნაჩვენებია, თუ როგორ უნდა დააინსტალიროთ პორტის მე -5 და 1-ის ხაზები. 1, და ხაზები 2 და 3 - შესვლა. 0, ისევე, როგორც თუ როგორ უნდა კონფიგურაცია ხაზები 4 ... 7 შეყვანის კავშირი გამკაცრება რეზისტენტებს ხაზები 6 და 7. შედეგად მიღებული სტატუსი ხაზები იკითხება უკან, მაგრამ, გათვალისწინებით ზემოთ, NOP განცხადებაში ჩართულია, რათა უზრუნველყოს უკან დაბრუნების შესაძლებლობა მხოლოდ გარკვეული დასკვნების შესახებ.

ნიმუშის კოდი შეკრების შესახებ (1) ...; ნება მომეცით გაიყვანოს და დააყენოთ მაღალი გამომავალი დონე; განსაზღვრავს LDI R16 პორტების ამ ხაზების მიმართულებებს (1<

დაახ. 1: Assembler პროგრამა იყენებს ორჯერ რეგისტრაციას, რათა შეამცირონ დროის ინტერვალი, რომლითაც გადანაწილდეს რეზისტენტობის რეგულირება 0, 1, 6 და 7-ზე გამოსწორების მიმართულებით. 0 ხაზები 2 და 3 და შეცვალა მაღალი დონის discharges 0 და 1, ჩამოყალიბდა დამაკავშირებელი გამკაცრება რეზისტენტებს მაღალი დონის მაღალი დონის მაღალი დონის.

ციფრული შეყვანის რეზოლუცია და ძილის რეჟიმი

როგორც ნაჩვენებია სურათზე 30-ში, შეყვანის ციფრული სიგნალი შეიძლება უმასპინძლოს სულ Schmita Trigger შეყვანის. სიგნალი აღინიშნება ფიგურაში, როგორც ძილი, როდესაც Microcontroller არის თარგმნილი ძალაუფლების ქვემოთ რეჟიმში, ეკონომიკური რეჟიმი, მოვალეობა რეჟიმი და მოწინავე მოვალეობა რეჟიმი. ეს თავიდან აცილებს მიმდინარე მოხმარების ზრდას, თუ ზოგიერთი შეყვანის სიგნალები მცურავი სახელმწიფოშია ან შეყვანის ანალოგური სიგნალის დონე იქნება VCC / 2-თან.

ძილის სიგნალი იგნორირებულია გარე შეფერხების საშუალებებით. თუ გარე შეფერხების მოთხოვნები გამორთულია, ძილი მოქმედებს ამ დასკვნებზე. ძილი ასევე იგნორირებულია ზოგიერთ სხვა საშუალებებში, როდესაც მათი ალტერნატიული ფუნქციების შესრულებისას (იხ. "ალტერნატიული პორტის ფუნქციები").

თუ გარე ასინქრონული შეწყვეტის გამოშვებაში, კონფიგურირებულია მზარდი ფრონტის შეწყვეტა, წინა ან რაიმე ცვლილება, არის შესვლის დონე. 1 და ამავე დროს გარე შეფერხება არ არის ნებადართული, გარეგნული შეწყვეტის შესაბამისი დროშა იქნება მითითებული ზემოაღნიშნული ძილის რეჟიმების გასასვლელად, რადგან შეყვანის Shunt ფუნქცია ძილის რეჟიმი შედეგების ლოგიკური ცვლილებები.

არაკომერციული დასკვნები

თუ რამდენიმე დასკვნა გამოუყენებელია, რეკომენდირებულია კონკრეტული ლოგიკური დონის არსებობის გარანტია. მიუხედავად იმისა, რომ ყველაზე ციფრული შეყვანა გამორთულია ღრმა ძილის რეჟიმებზე, როგორც ზემოთ აღწერილია, აუცილებელია მცურავი საშუალებებით, რათა თავიდან იქნას აცილებული მიკროკონტროლერის ყველა სხვა რეჟიმი, სადაც ციფრული შეყვანა დასაშვებია (გადატვირთვა, აქტიური რეჟიმი და Idle Mode).

გამოუყენებელი გამტარუნარიანობის შესახებ გარკვეული დონის არსებობის გარანტირების უმარტივესი მეთოდი არის შიდა გამკაცრების რეზისტორის კავშირი. თუმცა, ამ შემთხვევაში, გადატვირთვის რეჟიმში, გამორთული რეზისტორების გამორთულია. თუ დაბალი მოხმარება საჭიროა და გადატვირთვის რეჟიმში, აუცილებელია გარე გამკაცრების რეზისტენტობის დამონტაჟება პლუს ან მინუს ძალაუფლებისთვის. დამაკავშირებელი შედეგები პირდაპირ VCC ან GND არ არის რეკომენდირებული, რადგან საშიში მიმდინარე შეიძლება იყოს შემთხვევითი კონფიგურაცია ასეთი გამომავალი მონაცემების გამომავალი.

Bitched ოპერაციები ეფუძნება ლოგიკური ოპერაციების, რომ ჩვენ უკვე განვიხილეთ ადრე. ისინი მნიშვნელოვან როლს თამაშობენ პროგრამირების AVR Microcontrollers და სხვა ტიპები. თითქმის არ არის პროგრამის ხარჯები ნაცემი ოპერაციების გამოყენების გარეშე. მანამდე, ჩვენ განზრახ თავიდან აცილებული მათ ხელი შეუწყონ MK- ის პროგრამირების პროცესს.

ყველა წინა სტატიაში, ჩვენ მხოლოდ I / O პორტების დაპროგრამებული და არ გამოიყენოთ დამატებითი ჩადგმული კვანძები, მაგალითად, როგორიცაა ქრონომეტრი, ანალოგური ციფრული კონვერტორები, interrupts და სხვა შიდა მოწყობილობები, რომლის გარეშეც MK კარგავს ყველა ძალაუფლებას.

ჩაშენებული MK მოწყობილობების განვითარების დაწყებამდე თქვენ უნდა გაიგოთ, თუ როგორ უნდა მართოთ ან შეამოწმოთ AVR MK- ის ინდივიდუალური ბიტი. ადრე, ჩვენ შევქმენით გამშვები ან განვახორციელეთ გამორთვა ერთდროულად. მოდით გაუმკლავდეთ რა არის განსხვავება, შემდეგ კი გაგრძელდება.

ჩამოსხმის ოპერაციები

ყველაზე ხშირად, როდესაც პროგრამირების AVR Microcontrollers, ჩვენ ვიყენებთ, რადგან მას აქვს უფრო დიდი ხილვადობა შედარებით და კარგად ნათელია დამწყები პროგრამისტების MK. მაგალითად, ჩვენ უნდა დააყენოთ მხოლოდ მე -3 ბიტი პორტის დ. ამისათვის, როგორც უკვე ვიცით, შეგიძლიათ გამოიყენოთ შემდეგი ორობითი კოდი:

PORTD \u003d 0B00001000;

თუმცა, ამ გუნდის მე -3 კატეგორიას და ყველა სხვა (0, 1, 2, 4, 5, 6 და მე -7) ჩვენ ნულოვანია. ახლა მოდით წარმოგიდგინოთ სიტუაცია, რომ მე -6 და მე -7 განმუხტვა ჩართულია ADC- ის საშუალებებით და ამ დროისთვის MK- ს შესაბამისი დასკვნების მიღება ნებისმიერი მოწყობილობიდან სიგნალს, და ზემოთ აღვნიშნეთ, ამ სიგნალების გადატვირთვა. შედეგად, მიკროკონტროლერი ვერ ხედავს მათ და მიიჩნევს, რომ სიგნალები არ მოვიდნენ. აქედან გამომდინარე, ასეთი გუნდის ნაცვლად, ჩვენ უნდა მივმართოთ სხვა, რაც ერთეულზე მხოლოდ მე -3 ბიტი დამონტაჟდა, ხოლო სხვა ბიტების გავლენას არ ახდენს. ამისათვის, როგორც წესი, გამოიყენება შემდეგი ნაცემი ოპერაცია:

პორტალი | \u003d (1<<3);

სინტაქსი ჩვენ დეტალურად აღწერს ქვემოთ. და ახლა კიდევ ერთი მაგალითი. დავუშვათ, რომ ჩვენ უნდა შეამოწმოთ Pind რეგისტრაციის მე -3 გამონაბოლქვის სტატუსი, რითაც ღილაკის მდგომარეობის შემოწმება. თუ ეს გამონადენი გადატვირთულია ნულის, მაშინ ჩვენ ვიცით, რომ ღილაკი დაჭერილია და შემდეგ ბრძანების კოდექსი ხორციელდება, რომელიც შეესაბამება დაჭერით დაჭერით. ჩვენ ადრე გამოყენებული შემდეგი ჩანაწერი:

თუ (pind \u003d\u003d 0b00000000)

(ნებისმიერი კოდი)

თუმცა, დახმარებით, ჩვენ არ შეამოწმებთ არა ცალკე, - მე -3 და დაუყოვნებლივ ყველა ბიტი Pind რეგისტრაცია. აქედან გამომდინარე, მაშინაც კი, თუ ღილაკი დაჭერით და სასურველი გამონადენი გადატვირთულია, მაგრამ ამ დროს სიგნალი მიიღებს სიგნალს პორტის ნებისმიერ სხვა გამომავალზე, შესაბამისი სიცოცხლე დამონტაჟდება ერთსა და ფრჩხილებში ცრუ. შედეგად, Curly ფრჩხილებში მდებარე კოდი არ შესრულდება მაშინაც კი, როდესაც ღილაკი დაჭერილია. აქედან გამომდინარე, ინდივიდუალური მე -3 ნაწილის მდგომარეობის გადამოწმების მიზნით, Batch ოპერაცია უნდა იქნას გამოყენებული:

თუ (~ Pind & (1<<3))

(ნებისმიერი კოდი)

C პროგრამირების არსენალში მიკროკონტროლერის ცალკეული ბიტების მუშაობა, რომელთანაც შეგიძლიათ შეიცვალოთ ან შეამოწმოთ ერთი ან მეტი ინდივიდუალური სტატუსის შეცვლა.

ცალკე ცოტა ინსტალაცია

ცალკე ბიტი, მაგალითად, პორტი დ, მოხრილი ოპერაცია გამოიყენება ან. ეს იყო ის, რომ სტატიის დასაწყისში ვიყენებდით.

პორტდა \u003d 0B00011100; // თავდაპირველი მნიშვნელობა

PORTD \u003d PORTD | (ერთი<<0); применяем побитовую ИЛИ

პორტალი | \u003d (1<<0); // сокращенная форма записи

PORTD \u003d\u003d 0B00011101; // შედეგი

ეს ბრძანება ასრულებს ნულოვანი გამონადენის მონტაჟს და დარჩენილი ფოთლები უცვლელი რჩება.

მაგალითად, დააყენეთ სხვა მე -6 კატეგორიის პორტი D.

პორტდა \u003d 0B00011100; // პორტის თავდაპირველი მდგომარეობა

პორტალი | \u003d (1<<6); //

პორტდა \u003d\u003d 0B01011100; // შედეგი

ერთეულის დაუყოვნებლივ ჩაწერას რამდენიმე ცალკე ბიტი, როგორიცაა ნულოვანი, მეექვსე და მეშვიდე პორტი ბ. შემდეგი ჩანაწერი ვრცელდება.

Portb \u003d 0b00011100; // თავდაპირველი მნიშვნელობა

პორტალი | \u003d (1<<0) | (1<<6) | (1<<7); //

Portb \u003d\u003d 0b1011101; // შედეგი

გადატვირთვა (გადატვირთვა) ინდივიდუალური ბიტი

ცალკეული ბიტის გადატვირთვა, სამი ადრე განხილული ბრძანებები გამოიყენება: .

მოდით გადავწყვიტოთ პორტების მე -3 კატეგორიის რეგისტრაცია და დატოვეთ დანარჩენი.

Portc \u003d 0b00011100;

პორტალი & \u003d ~ (1<<3);

პორტალი \u003d\u003d 0B00010100;

ასრულებს მსგავსი ქმედებების მე -2 და მე -4 კატეგორიებს:

Portc \u003d 0b00111110;

პორტალი & \u003d ~ (1<<2) | (1<<4));

პორტალი \u003d\u003d 0B00101010;

Bit გადართვა

გარდა ამისა, ინსტალაციისა და გადატვირთვის გარდა, სასარგებლო ბრძანება ასევე გამოიყენება, რომელიც ცალკეულ მდგომარეობას ახდენს საპირისპირო მდგომარეობაში: ერთი ნულოვანი და პირიქით. ეს ლოგიკური ოპერაცია ფართოდ გამოიყენება სხვადასხვა განათების ეფექტების მშენებლობაში, მაგალითად, საახალწლო გვირგვინი. განვიხილოთ პორტის მაგალითი

Porta \u003d 0b00011111;

Porta ^ \u003d (1<<2);

Porta \u003d\u003d 0B00011011;

შეცვალეთ ნულოვანი, მეორე და მეექვსე ბიტი:

Porta \u003d 0b00011111;

Porta ^ \u003d (1<<0) | (1<<2) | (1<<6);

Porta \u003d\u003d 0B01011010;

შეამოწმეთ ცალკე ბიტი. ნება მომეცით შეგახსენოთ, რომ I / O პორტის ინსპექტირება (აქედან გამომდინარე) ხორციელდება PIN- ის რეესტრის მონაცემების წაკითხვით.

ყველაზე ხშირად, შემოწმება ხორციელდება ორი ციკლის ოპერატორით: თუ და ხოლო. ჩვენ უკვე კარგად ვიცნობთ ამ ოპერატორებს.

შემოწმების გამონადენი ლოგიკური ნულის (გადატვირთვის) თანდასწრებით თუ

თუ (0 \u003d\u003d (Pind & (1<<3)))

თუ პორტის მესამე ციფრი გადატვირთულია, მაშინ კოდექსი 1 შესრულებულია. წინააღმდეგ შემთხვევაში, Code2 შესრულებულია.

მსგავსი ქმედებები ასრულებს ჩაწერის ფორმას:

თუ (~ Pind & (1<<3))

შეამოწმეთ გამონადენი ლოგიკური ერთეულის თანდასწრებით (მონტაჟი) თუ

თუ (0! \u003d (Pind & (1<<3)))

თუ (PIND & (1<<3))

ზემოთ აღნიშნული ორი ციკლის მსგავსად, მაგრამ პროგრამირების ენის მოქნილობის გამო, აქვს სხვადასხვა ფორმის ჩანაწერი. ოპერაცია! \u003d მიუთითებს არ არის თანაბარი. თუ PD I / O პორტის მესამე გამონადენი არის მითითებული (ერთეული), იგი შესრულებულია კოდი 1, თუ არა - Code2.

ველოდები ბიტი პერიოდი

ხოლო (Pind & (1<<5))

კოდი 1 შესრულდება, ხოლო Pind- ის მე -5 კატეგორიის რეგისტრაცია. გადატვირთვისას, CODE2 შესრულდება.

ველოდები Battal მონტაჟი პერიოდი

აქ არის სინტაქსი ენის C- ს საშუალებას გაძლევთ დაწეროთ კოდი ორი ყველაზე გავრცელებული გზით. პრაქტიკაში გამოიყენება ორივე ტიპის ჩანაწერი.

Microcontroller პროგრამირების ერთ-ერთი უმნიშვნელოვანესი ასპექტი არის რეესტრებისა და პორტების მუშაობა. AVR Series Microcontrollers- ს აქვს რამდენიმე I / O რეესტრი და 32 ზოგადი დანიშნულების რეგისტრაცია. პროგრამისტი არ შეუძლია პირდაპირ დაწეროს რიცხვი შეყვანის / გამომავალი რეესტრისთვის. ამის ნაცვლად, მან უნდა დაწეროს რიცხვი ზოგადი დანიშნულების რეგისტრაციისთვის, შემდეგ კი ამ რეესტრის ღირებულება I / O რეესტრში. სამუშაო რეგისტრაცია მითითებულია R1, R2, ..., R31.

წერილობითი პროგრამების გამარტივების მიზნით, ძალიან მოსახერხებელია, რომ დარეგისტრირდეს სახელი. მიზანშეწონილია შენახული ინფორმაციის შესაბამისი სახელები. მაგალითად, თუ R16 რეესტრი გამოიყენება დროებითი ინფორმაციის შესანახად, მაშინ მას შეუძლია ეწოდოს Temp. ეს კეთდება შემდეგნაირად:

იმისათვის, რომ არ "მოვუწოდებთ" I / O რეგისტრატორებს და Microcontroller- ის ძირითად რეესტრს, საკმარისია პროგრამის დასაწყისში, რომელიც დაკავშირებულია სათაურის ფაილზე, რომელიც გამოიყენება მიკროკონტროლერისთვის. ისინი. ეს არ უნდა მისცეს პორტების პორტების, ქრონომეტრების / მრიცხველების სახელები და ა.შ. მაგალითად, თუ პროგრამა განკუთვნილია AT90S8515 Microcontroller:

მოიცავს "8515def.inc"

AT90S1200 Microcontroller- ისთვის, პირველი AVR Microcontroller, შეყვანის / გამომავალი რეგისტრაცია ნომრები $ 0-დან $ 3-მდე (დამოკიდებულია MK- ის მოდელზე). ცალკე, თქვენ შეგიძლიათ აირჩიოთ პორტატული I / O რეგისტრაცია, Pinb, Portd, Pind (მათ აქვთ ანბანის ნოტაცია 1200DEF.INC- ის დამაკავშირებელი და მათი მისამართები $ 18, $ 16, $ 12, $ 10 - თანხმობას ძალიან რთულია ციფრული მუდმივების შენარჩუნება ჩემი უფროსი, ადვილი წერილი სახელები). უახლესი Microcontrollers AVR პორტები გაცილებით უფრო დიდია, მათ უწოდებენ A, B, C, D, E ...

განვიხილოთ პოპულარული მიკროკონტროლერის Atiny2313- ის დასკვნების ადგილმდებარეობა. ფეხები 2-9, 11 სახელები PD0 - PD7 არის პორტი D, ანალოგიურად პორტი B. გთხოვთ გაითვალისწინოთ, რომ პორტი B არის რვა ბიტიანი, და პორტი D არის შვიდი.

პორტებს შეუძლიათ შეადგინონ შეყვანა და როგორც შედეგები. იმ შემთხვევაში, თუ პორტი მუშაობს როგორც შეყვანის, შემდეგ, რათა ითვლიან ღირებულებებს, თქვენ უნდა წვდომის pinb ან pind რეგისტრაცია - იმის მიხედვით, თუ რომელი პორტი არის წაკითხული. თუ ზოგიერთი pines არის მაღალი დონე, რომელიც შეესაბამება ჟურნალს. "1", მაშინ "1" -ში დამონტაჟებული ღირებულებების შესაბამისი ბიტი. დასკვნებს შეუძლიათ გააგრძელონ მიმდინარე 20 მ-მდე, მაგრამ არ დაივიწყონ პორტის ყველა პორტების მთლიანი მიმდინარეობა. არსებობს შეზღუდვები. თუ პორტი გამომავალია, პორტის ხაზების ღირებულებები დამონტაჟებულია პორტ-პორტების ან პორტფელის პორტის რეესტრში შესაბამისი ღირებულების ჩაწერებით. ჩამოყალიბება შესვლა. "1" პორტში გამომავალი, PORTB- ში ან პორტდ რეესტრში უნდა იყოს დამონტაჟებული.

პორტთან მუშაობის ყველაზე მნიშვნელოვანი წერტილი არის პორტფელის რეესტრში, რომელიც პასუხისმგებელია პორტის ხაზების ექსპლუატაციაში შეყვანის ან გასასვლელად. ამ რეესტრის სახელი DDRX, სადაც X არის პორტის წერილი. იმისათვის, რომ ფეხები შედეგები, ჩვენ უნდა დავწერო შესაბამისი ბიტი "1". მაგალითად, ჩვენ გვინდა, რომ PB7 პორტის პორტი შესასვლელთან და დარჩენილი ფეხების შედეგები, მაშინ ამისათვის საჭიროა DDRB რეესტრის ღირებულების 0B01111111. პრეფიქსი 0b ნიშნავს, რომ ნომერი ჩაწერილია ორობითი ფორმით. დაწყებისას, DDRX რეგისტრაცია გადატვირთულია, ანუ. ყველა ფეხები შეყვანისას. რეკომენდებული გამოუყენებელი ფეხები მოწყობილობებში შეყვანის მიზნით.

განვიხილოთ მარტივი პროგრამა, რომელიც მუშაობს მიკროკონტროლერის პორტში:

მოიცავს "8515def.inc"; დაკავშირება ფაილი რეესტრის აღწერილობით. Def Temp \u003d R16 RJMP გადატვირთვა; გარდამავალი ვექტორი ხელახლა გადატვირთვისას: LDI Temp, 0B00000011; განსაზღვრა PC0 და PC1 როგორც DDRC, Temp LDI Temp, 0B00000001; ჩვენ ვსაუბრობთ LED LED ON OC0 OUT PORTC, Temp Temp, Pinc; წაიკითხეთ დონეზე პორტი C ... loop:; მთავარი ციკლი NOP RJMP Loop

ლაგამი

კითხვა / წერა

Საწყისი ღირებულება

· ცოტა 7 - ყველა შეფერხების ნებართვა. შეფერხების გადასაჭრელად, ეს ცოტა უნდა იყოს მითითებული 1. კონკრეტული ჩარევის რეზოლუცია ახორციელებს EIMSK- სა და TIMSK- ს ინტერპრეტაციას. თუ ეს ცოტა გაწმენდილია (\u003d 0), მაშინ არცერთი ინტერპრეტაცია არ არის დამუშავებული. Bit აპარატურა გაწმენდილია მას შემდეგ, რაც შეწყვეტის შემდეგ და დამონტაჟებულია შემდგომი შეფერხების რეზოლუციისთვის რეტი ბრძანებით.
· ცოტა 6 - კოპირება კონსერვაციის ბიტი. Blod და BST ბიტი ასლი ბრძანებები გამოიყენოთ ეს ცოტა, როგორც წყარო და მიმღები დროს ბრძოლები. BST- ის ბრძანების ზოგადი მიზნისთვის გადაწერილია Bit T, Bld ბრძანება Bit T- ს გადაეცემა ზოგადი დანიშნულების რეგისტრაციის ბიტი.
· ცოტა ხნის 5 - ნახევრად მანიენოს დროშა. ეს მიუთითებს Tetrad- ს შორის გადაცემისას, როდესაც არითმეტიკული ოპერაციების შესრულებისას.
· ცოტა 4 - ნიშანი ნიშანი. Bit S- ს აქვს ნეგატიური ღირებულების (N) დროშის (N) და დამატებების ფლაგმანი ოპერაციის შედეგად (n (+) v) შედეგების ღირებულება.

· ცოტა 3 - ორი overflow დროშა. იგი მხარს უჭერს არითმეტიკას დამატებების ორი.
· ცოტა 2 - უარყოფითი ღირებულების დროშა. ეს დროშა მიუთითებს რიგი არითმეტიკული და ლოგიკური ოპერაციების უარყოფით შედეგს.
· ცოტა 1 - ნულოვანი ღირებულების დროშა. ეს დროშა მიუთითებს ნულოვანი შედეგი არითმეტიკული და ლოგიკური ოპერაციების ნულოვანი შედეგი.
· ცოტა 0 - გადაცემის დროშა. ეს დროშა მიუთითებს არითმეტიკული და ლოგიკური ოპერაციების გადაცემას.

AT90S8535 Microcontroller აქვს 4 პარალელური I / O პორტები A, B, C და D.
პორტი A არის 8 ბიტიანი bidirectional პორტი. პორტის ურთიერთქმედება ტარდება მონაცემთა შეყვანის / გამომავალი ფართი: მონაცემთა რეგისტრაცია - პორტატული, $ 1B ($ 3b), მონაცემთა დირექტორია რეგისტრაცია - DDRA, $ 1A ($ 3A), შეყვანის მონაცემთა რეგისტრაცია - Pina, $ 19 ($ 39). Pina რეგისტრაცია მხოლოდ მოსმენის შესაძლებლობას იძლევა და პორტტა და DDRA რეგისტრაცია არის მოსმენისა და წერის შესაძლებლობა. Pina რეგისტრაცია არ არის რეგისტრაცია სრული მნიშვნელობით სიტყვა. მიმართვა მას უზრუნველყოფს თითოეული პორტის გამომავალი ფიზიკური მდგომარეობის წაკითხვას. პორტი ასევე ემსახურება ანალოგური A / D სიგნალების შესასვლელად.

პორტის მონაცემები რეგისტრაცია A -პორტატული

ლაგამი

კითხვა / წერა

Საწყისი ღირებულება

პორტის მონაცემების მონაცემების რეგისტრაცია A -DDRA

ლაგამი

კითხვა / წერა

Საწყისი ღირებულება

პორტი A -პინა.

ლაგამი

კითხვა / წერა

Საწყისი ღირებულება

პორტი B არის 8 ბიტიანი Bidirectional I / O პორტი. ისევე, როგორც პორტის პორტი და პორტთან ურთიერთქმედება ხორციელდება მონაცემთა შეყვანის / გამომავალი სივრცედან: მონაცემთა რეგისტრაცია - პორტატული, $ 18 ($ 38), მონაცემთა მიმართულებით რეგისტრაცია - DDRB, $ 17 ($ 37) და შეყვანის რეგისტრაცია - PINB, $ 16 ($ 36). Pinb რეგისტრაცია მხოლოდ კითხულობს. Pinb რეგისტრაცია არ არის რეგისტრაცია სიტყვის სრული მნიშვნელობით. მიმართვა მას უზრუნველყოფს თითოეული პორტის გამომავალი ფიზიკური მდგომარეობის წაკითხვას. პორტის სურათები შეიძლება ასრულებს ცხრილში მითითებულ ალტერნატიულ ფუნქციებს. 2.1.

ცხრილი 2.1. პორტის შედეგების ალტერნატიული ფუნქციები

პორტის გამომავალი

ალტერნატიული ფუნქცია

T0 - ტაიმერი / ტაიმერი / Counter კუდი შეყვანის 0

T1 - ტაიმერის საათი შესვლის / მეტრი 1

Ain0 - დადებითი შედარებითი დასკვნა

Ain1 - უარყოფითი შედარებითი დასკვნა

- შესასვლელად SPI

MOSI - ინსტალაციის წამყვანი გამომავალი / სიჩქარე SPI შეყვანა

Miso - სამონტაჟო LID შესვლა / სიჩქარე გამოყვანის Spi

SCK - SPI საათის სიგნალი

ალტერნატიული ფუნქციების დასკვნების გამოყენებისას პორტების რეგისტრაცია, DDRB უნდა დამონტაჟდეს შესაბამისად.

პორტის მონაცემების რეგისტრაციაბ.პორტალები.

ლაგამი

კითხვა / წერა

Საწყისი ღირებულება

სარეგისტრაციო პორტის მონაცემები B -DDRB.

ლაგამი

კითხვა / წერა

Საწყისი ღირებულება

შეყვანის მონაცემები რეგისტრაცია B -Pinb.

ლაგამი

კითხვა / წერა

Საწყისი ღირებულება

პორტი C არის 8 ბიტიანი bidirectional I / O პორტი. ასევე, როგორ პორტების A და პორტი C- სთან ურთიერთქმედების პროცესში ჩატვირთვა მონაცემთა მეხსიერების / გამომავალი / გამომავალი ფართი: მონაცემთა რეგისტრაცია - პორტალი, $ 15 ($ 35), მონაცემთა მიმართულებით რეგისტრაცია - DDRC, $ 14 ($ 34) და შეყვანის მონაცემთა რეგისტრაცია - Pinc, $ 13 ($ 33). Pinc რეგისტრაცია მხოლოდ მოსმენის შესაძლებლობას იძლევა და პორტს და DDRC- ს რეესტრს წარმოადგენს კითხვისა და წერის შესაძლებლობა. Pinc რეგისტრაცია არ არის რეგისტრაცია სრული მნიშვნელობით სიტყვა. მიმართვა მას უზრუნველყოფს თითოეული პორტის გამომავალი ფიზიკური მდგომარეობის წაკითხვას.
პორტში მხოლოდ ორი შედეგებით შეუძლია ალტერნატიული ფუნქციების შესრულება: PC6 და PC7 დასკვნები ასრულებს TOSC1 და TOSC2 Timer / Counter 2- ის ფუნქციებს.

პორტის მონაცემების რეგისტრაციაC.პორტალი.

ლაგამი

კითხვა / წერა

Საწყისი ღირებულება

სარეგისტრაციო პორტის მონაცემები C -DDRC.

ლაგამი

კითხვა / წერა

Საწყისი ღირებულება

შეყვანის მონაცემები რეგისტრაცია C -Pinc.

ლაგამი

კითხვა / წერა

Საწყისი ღირებულება

პორტი D არის 8 ბიტიანი bidirectional I / O პორტი. ასევე, როგორც პორტებში, B და პორტის საშუალებით, მონაცემთა შეყვანის / გამომავალი სივრცის მეშვეობით სამი რეესტრით: მონაცემთა რეგისტრაცია - პორტდა, $ 12 ($ 32), მონაცემთა მიმართულებით რეგისტრაცია - DDRD, $ 11 ($ 31) და შეყვანის რეგისტრაცია - Pind, $ 10 ($ 30). Pind რეგისტრაცია უზრუნველყოფს კითხვა, და პორტფელი და DDRD რეგისტრაცია კითხულობს და წერს. Pind რეგისტრაცია არ არის რეგისტრაცია სიტყვის სრული მნიშვნელობით. მიმართვა მას უზრუნველყოფს თითოეული პორტის გამომავალი ფიზიკური მდგომარეობის წაკითხვას.
პორტი D დასკვნები შეიძლება ასრულებს ცხრილში მითითებულ ალტერნატიულ ფუნქციებს. 2.2.

ცხრილი 2.2. პორტის დასკვნების ალტერნატიული ფუნქციები დ

პორტის გამომავალი

ალტერნატიული ფუნქცია

RXD - UART მიმღების შესასვლელი

TXD - UART გადამცემი გამომავალი

Int0 - გარე დაბერების შეყვანა 0

INT1 - გარე შეყვანის შეყვანა 1

OC1B - Timer / Counter 1- ის გამომავალი შედარება

OC1A - გამომავალი შედარება და ტაიმერი / Counter 1

ICP - ტაიმერი Capture Trigger Entry 1

OC2 - ტაიმერი / Counter გამომავალი შედარება გამომავალი 2

ალტერნატიული ფუნქციების გამოყენებისას, პორტფელი, დდდდ რეგისტრაცია უნდა იყოს დამონტაჟებული.

პორტის მონაცემების რეგისტრაციად.პორტდა.

ლაგამი

კითხვა / წერა

Საწყისი ღირებულება

პორტის მონაცემების რეგისტრაციად.DDRD.

ლაგამი

კითხვა / წერა

Საწყისი ღირებულება

პორტის შეყვანის რეგისტრაციად.Pind.

ლაგამი

კითხვა / წერა

Საწყისი ღირებულება

მას შემდეგ, რაც პირველი განსახილველად არის პირველი, მაშინ ყველა სტუდენტი პირველად იმავე სამუშაოს გააკეთებს სტუდენტური უნარ-ჩვევების შეძენისთვის ლაბორატორიულ კომპლექსთან მუშაობისთვის. მათი სამუშაო ადგილებისგან, ისინი გაეცნობიან PEVM- ს მე -5 3-ში, რომელიც მე -5 მე -5 პუნქტში, რომელიც ნაჩვენებია 1.5.3.1 პუნქტში. პროგრამის შედგენის შემდეგ, იგი წერია სამუშაო ადგილის მიკროკონტროლერისთვის და მისი ნამუშევარი ასახავს მასწავლებელს.
კომპლექსთან ასეთი გაცნობა, სტუდენტი იწყებს ინდივიდუალურ ამოცანას. დროის თანდასწრებით, მასწავლებელს შეუძლია გაართულოს ინდივიდუალური ამოცანა.