ផ្នែករឹង xor សម្រាប់ម្ជុលលទ្ធផលនៅលើ avr microconstrollogers

តើអ្នកដឹងទេថាបន្ទះសៀគ្វី avr ជាច្រើនមានប្រភេទផ្នែករឹងផ្តាច់មុខឬ (XOR) នៅពេលដែលវាទាក់ទងនឹងកម្រិតតក្កវិជ្ជានៃម្ជុលទិន្នផល? ប្រសិនបើអ្នកមើលទៅក្នុង datasheet (រូបភាពខាងលើគឺជារូបថតអេក្រង់ពីទិន្នន័យ attix13) អ្នកនឹងឃើញផ្នែកមួយនៅលើបិទបើកម្ជុល។ វាប្រែថាប្រសិនបើអ្នកបានកំណត់កំពង់ផែជាលទ្ធផលការសរសេរតក្កវិជ្ជាមួយទៅលេខកូដសម្ងាត់ដែលត្រូវនឹងការចុះឈ្មោះនឹងមានកំណត់ហេតុតក្កវិជ្ជា។ នេះពិតជាងាយស្រួលក្នុងការធ្វេសប្រហែសប្រសិនបើអ្នកកំពុងសរសេរនៅក្នុង C ប៉ុន្តែខ្ញុំបានធ្វើការក្នុងការរៀនភាសារបស់អ្នកប្រមូលផ្តុំបន្តិចហើយបានរកឃើញថាវាមានប្រយោជន៍ខ្លាំងណាស់។ បន្តអានបន្ទាប់ពីការសម្រាកហើយខ្ញុំនឹងប្រាប់អ្នកពីរបៀបដែលខ្ញុំបានកើតឡើងលើព័ត៌មាននេះនិងអ្វីដែលល្អសម្រាប់។

ដូច្នេះដំបូងសូមនិយាយអំពីមូលហេតុដែលបញ្ហានេះមិនមានបញ្ហាច្រើនប្រសិនបើអ្នកកំពុងសរសេរនៅក្នុងកូដ C ។ ជាធម្មតាប្រសិនបើអ្នកចង់បិទបើកម្ជុលទិន្នផលមួយចំនួនអ្នកនឹងសរសេរខ្សែមួយលីនដែល xor របស់ xor មានរូបភាព:

ចេក
portb ^ = 0xff;

នេះគឺបន្តិចនៃ C shorthand (ស្វែងយល់បន្ថែមអំពីរឿងនេះពីស៊េរីការបង្រៀនរបស់ខ្ញុំ) ដែលដំណើរការ XOR នៅកម្រិតទិន្នផលបច្ចុប្បន្នហើយសរសេរលទ្ធផលត្រឡប់ទៅកំពង់ផែវិញ។ ប៉ុន្តែរឿងដដែលនេះអាចត្រូវបានធ្វើនៅក្នុងផ្នែករឹងដោយសរសេររូបភាពទៅ Pinb ចុះឈ្មោះ:

ចេក
pinb = 0xff;

អ្នកពិតជាមិនយកចិត្តទុកដាក់ទេព្រោះវាគ្រាន់តែជាខ្សែមួយប៉ុណ្ណោះ។ តាមពិតវាប្រហែលជាសាមញ្ញជាងគេហទំព័រ XOR Portb ព្រោះវាកាន់តែមានអារម្មណ៍កាន់តែច្រើន។ ប៉ុន្តែអ្នកចងក្រងនេះអាចបញ្ចប់ដោយប្រើវដ្តច្រើនជាងប្រសិនបើអ្នកបានសរសេរទៅលេខសម្ងាត់ចុះឈ្មោះ។

ខ្ញុំបានកើតឡើងនៅទូទាំងលក្ខណៈពិសេសនេះពីព្រោះខ្ញុំកំពុងភ្លឹបភ្លែតៗខ្លះដែលជាមធ្យោបាយមួយដើម្បីរៀនអ្នកចូលរួម។ ខ្ញុំមានលេខកូដនេះជាទម្លាប់នៃសេវាកម្មដែលរំខាន:

ចេក
2
បី
4
ldi myreg, 0xff
នៅក្នុង Tring, Portb
EOR Intreg, Myreg
ចេញមក Portb, Intreg

វាផ្ទុក bitmask ចូលក្នុងការចុះឈ្មោះមួយផ្ទុកក្នុងតក្កវិជ្ជាបច្ចុប្បន្នពីផតថលទៅអ្នកចុះឈ្មោះមួយផ្សេងទៀតអនុវត្ត XOR នៃពីរហើយសរសេរលទ្ធផលត្រឡប់ទៅកំពង់ផែវិញ។ នេះចំណាយពេល 4 វដ្តហើយតម្រូវឱ្យមានអ្នកចុះឈ្មោះពីរនាក់។ ការបិទដំណើរការប៊ីតគឺប្រតិបត្ដិការដ៏អស្ចារ្យមួយដែលខ្ញុំមានការភ្ញាក់ផ្អើលមិនមានការភ្ញាក់ផ្អើលទេដែលមិនមានពាក្យបញ្ជាសម្រាប់ Xor Bits ដោយផ្ទាល់ទេដូច្នេះខ្ញុំចាប់ផ្តើមស្វែងរក។ ខ្ញុំបានឆ្លងកាត់អត្ថបទខ្លីនេះនៅ Avr Freaks ដែលបានធ្វើឱ្យខ្ញុំចូលទៅក្នុងមុខងារបិទបើកប៊ីត។ ឥឡូវខ្ញុំអាចបន្ថយកូដរបស់អ្នកប្រមូលផ្តុំរបស់ខ្ញុំដូចខាងក្រោមៈ

ចេក
2
LDI Integ2, 0xff; Sonteg2 ជារបាំងបន្តិចបន្តួច
ចេញ pinb, Intreg2; ការសរសេរទៅ PINBIFIC មានប្រសិទ្ធភាពមិនផ្តាច់មុខឬនៅលើកំពង់ផែ

លទ្ធផលនេះមានប្រសិទ្ធិភាពបិទដំណើរការដូចគ្នាប៉ុន្តែត្រូវចំណាយពេលត្រឹមតែពីរវដ្តហើយត្រូវការការចុះឈ្មោះតែមួយប៉ុណ្ណោះ។

អ្វីដែលខ្ញុំបានរកឃើញគួរឱ្យចាប់អារម្មណ៍ជាច្រើនគឺថាមិនថាខ្ញុំប្រើបន្ទះឈីប AVR ប៉ុន្មានក៏ដោយដែលមិនមានកង្វះការភ្ញាក់ផ្អើលដែលកំពុងរង់ចាំនៅក្នុង datasheet នេះទេ។

Leave a Reply

Your email address will not be published. Required fields are marked *