Page 143 - เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์เบื้องต้น
P. 143

เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์เบื้องต้น    16



               ดังนั้นถ้าก าหนดค่าให้ PORTD = B00110001 ก็คือต้องการให้ขา 2, 3 และ 7 เป็น HIGH ในกรณีนี้ไม่ต้องเปลี่ยน

               ค่าสถานะของขา 0 และ 1 ซึ่งปกติแล้วฮาร์ดแวร์ของ Arduino ใช้ในการสื่อสารแบบอนุกรม ถ้าไปเปลี่ยนค่าแล้วจะ
               กระทบต่อการสื่อสารแบบอนุกรม

                      อัลกอริธึมส าหรับโปรแกรมเป็นดังนี้

                     อ่านค่าจาก PORTD แล้วล้างค่าเฉพาะบิตที่ต้องการควบคุม (ใช้ตัวกระท าแบบบิต AND)

                     น าค่า PORTD ที่แก้ไขจากข้างต้นมารวมกับค่าบิตที่ต้องการควบคุม (ใช้ตัวกระท าแบบบิต OR)
                      ซึ่งเขียนเป็นโปรแกรมได้ ดังนี้

                                     int i; // counter variable
                                     int j;

                                     void setup()

                                     {
                                     DDRD = DDRD | B11111100;

                              // set direction bits for pins 2 to 7,

                              // leave 0 and 1 untouched (xx | 00 == xx)
                              // same as pinMode(pin,OUTPUT) for pins 2 to 7

                                     Serial.begin(9600);

                                     }
                                     void loop()

                                     {
                                     for (i=0; i<64; i++)

                                     {

                                     PORTD = PORTD & B00000011;
                              // clear out bits 2 - 7, leave pins 0

                              // and 1 untouched (xx & 11 == xx)
                                     j = (i << 2);

                              // shift variable up to pins 2 - 7

                              // to avoid pins 0 and 1
                                     PORTD = PORTD | j;

                              // combine the port information with

                              // the new information for LED pins
                                     Serial.println(PORTD, BIN);

                              // debug to show masking




               หน่วยที่ 3 โครงสร้างโปรแกรมของ Arduino                                                                 เรียบเรียงโดยครูทันพงษ์  ภู่รักษ์
   138   139   140   141   142   143   144   145   146   147   148