الوظائف المنطقية المركبة:
أولا : ألوظيفة (أو ألبوابة) ألمنطقية NAND :
أفترض (تخيل) أننا أتبعنا البوابة AND ببوابة NOT كما فى الشكل أ .
نتيجة وجود البوابة NOT هو عكس أى خرج من البوابة AND .
وكطريقة بديلة يمكن الحصول على نفس النتيجة تماما بوضع بوابة NOT عند كل مدخل ثم نتبع ذلك ببوابة OR كما فى الشكل ب .
وجدول الحقيقة كما فى الشكل .
لكى يكون الخرج 1 يجب أن يكون أى من A =0 أو B=0 على الأقل.
أى يتواجد الخرج عندما لا يوجد الدخل A أولا يوجد الدخل B .
هذا المزيج أو هذه التركيبة أو التوليفة من البوابات تسمى البوابة NAND .
الشكل يبين مخطط السلم للبوابة NAND .
· عندما يكون كل من الدخل A = 0 والدخل B = 0 أو أحدهما = 0 والاخر = 1فإن الخرج يكون 1 .
وعندما يكون كل من الدخل A = 1 والدخل B = 1 فإن الخرج يكون = 0 .
مثال لنظام تحكم يستخدم البوابة NAND : هو نظام إنذار ضوئى (لماكينة عمل أدوات ) يعمل اذا : لم يتم تعشيق أو عمل مفتاح الحماية وأيضا لم يتم عمل مفتاح النهاية الدال على وجود قطعة العمل .
البرنامج :
كود:
/*
* Project name:
NAND operator
* MCU: PIC16f877A
Oscillator: 4 MHz
*/
sbit OUT0 at PORTD.B0; // this is where OUTPUT OUT0 is fully defined
sbit OUT1 at PORTD.B1; // this is where OUTPUT OUT1 is fully defined
sbit OUT2 at PORTD.B2; // this is where OUTPUT OUT2 is fully defined
sbit OUT3 at PORTD.B3; // this is where OUTPUT OUT3 is fully defined
sbit OUT4 at PORTD.B4; // this is where OUTPUT OUT4 is fully defined
sbit OUT5 at PORTD.B5; // this is where OUTPUT OUT5 is fully defined
sbit OUT6 at PORTD.B6; // this is where OUTPUT OUT6 is fully defined
sbit OUT7 at PORTD.B7; // this is where OUTPUT OUT7 is fully defined
sbit IN0 at PORTC.B0; // this is where INPUT IN0 is fully defined
sbit IN1 at PORTC.B1; // this is where INPUT IN1 is fully defined
sbit IN2 at PORTC.B2; // this is where INPUT IN2 is fully defined
sbit IN3 at PORTC.B3; // this is where INPUT IN3 is fully defined
sbit IN4 at PORTC.B4; // this is where INPUT IN4 is fully defined
sbit IN5 at PORTC.B5; // this is where INPUT IN5 is fully defined
sbit IN6 at PORTC.B6; // this is where INPUT IN6 is fully defined
sbit IN7 at PORTC.B7; // this is where INPUT IN7 is fully defined
void main(){
TRISD = 0; // set PORTD as Output
TRISC = 0XFF; // PORTC as Inputs
PORTD = 0 ; //Clear Outputs
while (1) { // endless Loop
if((!IN0)|(!IN1)) OUT0=1; else OUT0=0;// if input0 NAND input1 is true , output0 will be ON else OFF
}
}
