Page 41 - ArduinoและPOP-BOT
P. 41
41
4.6.2 ตั วกระทํ าระดั บบิ ต OR (|)
คํ าสั่ งระดั บบิ ต OR ของภาษาซี เขี ยนได โดยใช เครื่ องหมาย |หนึ่ งตั ว โดยต องเขี ยนระหว างนิ พจน หรื อตั วแปร
ที่ เป นเลขจํ านวนเต็ ม การทํ างานจะนํ าข อมู ลแต ละบิ ตของตั วแปรทั้ งสองตั วมากระทํ าทางตรรกะหรื อ โดยมี กฎดั งนี้
ถ าอิ นพุ ตตั วใดตั วหนึ่ งหรื อทั้ งสองตั วเป น “1” เอาต พุ ตเป น “1” กรณี ที่ อิ นพุ ตเป น “0” ทั้ งคู เอาต พุ ตจึ งจะเป น
“0” ดั งตั วอย างต อไปนี้
0 0 1 1 Operand1
0 1 0 1 Operand2
——————————
0 1 1 1 Returned result
ตั วอย างที่ 4-16
ส วนของโปรแกรมแสดงการใช ตั วกระทํ าระดั บบิ ต OR
int a = 92; // in binary: 0000000001011100
int b = 101; // in binary: 0000000001100101
int c = a | b; // result: 0000000001111101 or 125 in decimal.
ตั วอย างที่ 4-17
โปรแกรมแสดงการใช ตั วกระทํ าระดั บบิ ต AND และ OR
ตั วอย างงานที่ ใช ตั วกระทํ าระดั บบิ ต AND และ OR เป นงานที่ โปรแกรมเมอร เรี ยกว า Read-Modify-Write
on a port สํ าหรั บไมโครคอนโทรลเลอร 8 บิ ต ค าที่ อ านหรื อเขี ยนไปยั งพอร ตมี ขนาด 8 บิ ต ซึ่ งแสดงค าอิ นพุ ตที่ ขา
ทั้ ง 8 ขา การเขี ยนค าไปยั งพอร ตจะเขี ยนค าครั้ งเดี ยวได ทั้ ง 8 บิ ต
ตั วแปรชื่ อ PORTD เป นค าที่ ใช แทนสถานะของขาดิ จิ ตอลหมายเลข 0,1,2,3,4,5,6,7 ถ าบิ ตใดมี ค าเป น 1
ทํ าให ขานั้ นมี ค าลอจิ กเป น HIGH (อย าลื มกํ าหนดให ขาพอร ตนั้ นๆ ทํ างานเป นเอาต พุ ตด วยคํ าสั่ ง pinMode()
ก อน) ดั งนั้ นถ ากํ าหนดค าให PORTD = B00110001; ก็ คื อต องการให ขา 2,3 และ 7 เป น HIGH ในกรณี นี้ ไม
ต องเปลี่ ยนค าสถานะของขา 0 และ 1 ซึ่ งปกติ แล วฮาร ดแวร ของ Arduino ใช ในการสื่ อสารแบบอนุ กรม ถ าไปเปลี่ ยน
ค าแล วจะกระทบต อการสื่ อสารแบบอนุ กรม
อั ลกอริ ธึ มสํ าหรั บโปรแกรมเป นดั งนี้
อ านค าจาก PORTD แล วล างค าเฉพาะบิ ตที่ ต องการควบคุ ม (ใช ตั วกระทํ าแบบบิ ต AND)
นํ าค า PORTD ที่ แก ไขจากข างต นมารวมกั บค าบิ ตที่ ต องการควบคุ ม (ใช ตั วกระทํ าแบบบิ ต OR)
ซึ่ งเขี ยนเป นโปรแกรมได ดั งนี้