ยินดีต้อนรับแขกผู้มาเยือน กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน
ส่งอีเมล์ยืนยันการใช้งาน?
 
Please Login!

ผู้เขียน หัวข้อ: การเขียนโปรแกรมควบคุมไมโครคอนโทรลเลอร์ [AT89C51] ด้วยภาษา C  (อ่าน 17610 ครั้ง)

0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

ออฟไลน์ sornram9254.com

  • ผู้สนับสนุน
  • *
  • โพสต์: 573
  • คูลเฟิร์ม: 3676
  • zula: 549.5
  • เพศ: ชาย
    • ดูรายละเอียด
    • Sornram9254
  • OS: WindowsBrowser: Firefox
  • เทคนิคคอมพิวเตอร์

  • ล็อคอิน @ 08 พฤษภาคม 2013, 04:40:37


ใช้โปรแกรม Proteus และ Keil uVision3 และภาษา C ในการทำ
- - - - - - - - - - - - - - - - - - - - - - - - - - -
ก่อนเริ่มเขียน เราควรมีพื้นฐานภาษา C อยู่ด้วย รูปแบบการเขียนโปรแกรม
- - - - - - - - - - - - - - - - - - - - - - - - - - -
#include <reg51.h>                                     // เป็นคำสั่งใช้รวมไฟล์ส่วนหัวเข้ามาในโปรแกรม ซึ่งมีหลายแบบ เช่น stdio.h , conio.h , reg51.h ฯลฯ
void main()                                                // เป็น function หลักของโปรแกรม และเราสามารถสร้างเพิ่มเองได้ เดี๋ยวจะอธิบายในคราวต่อไป
{                                                             // ตั้งแต่ { จนถึง } คือคำสั่งที่เราต้องการให้ทำงานหรือแสดงผลเช่นการคำนวน ฯลฯ
     โค้ดโปรแกรม;
}
- - - - - - - - - - - - - - - - - - - - - - - - - - -
คำสั่งที่ใช้งานบ่อยๆก็มีประมาณนี้ครับ
reg51.h               เป็นการประกาศว่าจะใช้ special function register
stdio.h                ประกาศ prototype สำหรับ I/O ฟังก์ชัน

for  คือการทำซ้ำ
โค๊ด: [Select]
for(count=0; count<10; count++)         // count++ เพิ่มขึ้น 1 , count-- ลดลง 1  ฯลฯ
{
     คำสั่งที่ต้องการให้ทำซ้ำ..
}

while       การทำซ้ำอย่างมีเงื่อนไข
โค๊ด: [Select]
while(เงื่อนไข)
{
     คำสั่งที่ต้องการให้ทำซ้ำ..
}

คำสั่งตรวจสอบเงื่อนไข [ if...elseif...else]
คือ ถ้าเป็นจริง จะให้ทำอะไรต่อไป และถ้าเป็นเท็จ จะให้ทำอะไรต่อไป
     - if
          ตัวอย่างการใช้งาน
         
โค๊ด: [Select]
          if (a<b)
          {
               printf("ok");
          }
     - if...else
          ตัวอย่างการใช้งาน
         
โค๊ด: [Select]
          if (a<b)
          {
               printf("ok");
          }
          else
          {
               printf("no");
          }
     - if...elseif...else
          ตัวอย่างการใช้งาน
         
โค๊ด: [Select]
          if (a<b)
          {
               printf("ok1");
          }
          elseif (a<c)
          {
               printf("ok2");
          }
          elseif (a<d)
          {
               printf("ok3");
          }
          else
          {
               printf("no");
          }

sbit                 =        เป็นการควบคุมบิตของไมโครคอนโทรลเลอร์แบบเจาะจงบิต
sbit ชื่อตัวแปร = P1^บิตที่เท่าไหร่ก็ว่าไป;
โค๊ด: [Select]
                    sbit SW = P1^0;           // ควบคุมพอร์ต P1 ที่บิต 0

delay               =        เป็นคำสั่งหน่วงเวลา

เครื่องหมายเปรียบเทียบ
อ้างถึง
       >               =       มากกว่าหรือไม่
       <               =       น้อยกว่าหรือไม่
       >=             =       มากกว่าหรือเท่ากันหรือไม่
       <=             =       น้อยกว่าหรือเท่ากันหรือไม่
       !=              =       ไม่เท่ากันหรือไม่
       ==             =       เท่ากันหรือไม่
       &&             =       ตรวจสอบว่าเป็นจริงทั้งหมดหรือไม่ ดูภาพประกอบจะได้เข้าใจมากขึ้น
                                 

       ||              =       ตรวจสอบว่าเป็นจริงทั้งหมดหรือมีส่วนใดส่วนหนึ่งเป็นจริงหรือไม่ ดูภาพประกอบจะได้เข้าใจมากขึ้น
                                 
ตัวแปร 
     - char [ ตัวอักษร ]                                  ได้แก่ ตัวอักษร ตัวเลข และกลุ่มตัวอักขระพิเศษใช้พื้นที่ในการเก็บข้อมูล 1 ไบต์
     - int [ จำนวนเต็ม ]                                   ได้แก่ จำนวนเต็มบวก จำนวนเต็มลบ ศูนย์ ใช้พื้นที่ในการเก็บ 2 ไบต์
     - long [ จำนวนเต็มที่มีขนาด 2 เท่า ]                ข้อมูลที่มีเลขเป็นจำนวนเต็ม  ใช้พื้นที่  4 ไบต์
     - float [ เลขทศนิยม ]                               ข้อมูลที่เป็นเลขทศนิยม ขนาด 4 ไบต์
- - - - - - - - - - - - - - - - - - - - - - - - - - -
ในการเขียนโปรแกรมควบคุมไมโครคอนโทรลเลอร์บางคำสั่งต้องใช้เลขฐาน 16 ในการเขียน

การแปลงเลขฐาน 2 เป็น ฐาน 16
สมมุติเราต่อหลอดไฟที่พอร์ต P1.0 , P1.3 , P1.7
ให้เราทำตามนี้
0 =  เป็นจริง ,  1 = เป็นเท็จ

ก็จะได้ 89 เวลาใช้ให้เขียนเป็น 0x89
ตัวอย่าง[/b]
โค๊ด: [Select]
...
void main()
{
     if(sw==0)
     {
          P1=0x0f;
     }
     else
     {
          P1=0x89
     }
}




วิธีสร้าง Project เพื่อใช้ในการเขียนโปรแกรม เชิญชม VDO ด้านล่างเลยครับ  [$2$]
http://www.zone-it.com/forum/index.php?topic=175324.msg1134806#msg1134806




- - - - - - - - - - - - - - - - - - - - - - - - - - -
**กำลังลงข้อมูล(เห็นใจคนใช้แอร์การ์ดด้วยครับ อิอิ)**

update!!! 15/04/2555
ว่างๆเดี๋ยวมาอัพเดทอีกครับ รู้สึกไม่ได้อัพมานานมาก -.-
« แก้ไขครั้งสุดท้าย: 15 เมษายน 2012, 00:12:10 โดย sornram9254.com »






ออฟไลน์ di_cpex

  • นักเรียนประถม
  • *
  • โพสต์: 25
  • คูลเฟิร์ม: 48
  • zula: 23.5
    • ดูรายละเอียด
  • OS: WindowsBrowser: Firefox

  • ล็อคอิน @ 22 พฤษภาคม 2011, 21:35:50
ขอวิธีใช้โปรแกรม Proteus หน่อยดิคับ ใช้ไงอ่ะคับ
Coolfirmed by (0)สมาชิก:
 

ออฟไลน์ sornram9254.com

  • ผู้สนับสนุน
  • *
  • โพสต์: 573
  • คูลเฟิร์ม: 3676
  • zula: 549.5
  • เพศ: ชาย
    • ดูรายละเอียด
    • Sornram9254
  • OS: WindowsBrowser: Firefox
  • เทคนิคคอมพิวเตอร์

  • ล็อคอิน @ 08 พฤษภาคม 2013, 04:40:37
เดี๋ยวเขียนต่อพรุ่งนี้ครับ ^^
Coolfirmed by (0)สมาชิก:
 






ออฟไลน์ svrnuke

  • นักเรียนมัธยม
  • *
  • โพสต์: 94
  • คูลเฟิร์ม: 190
  • zula: 93
    • ดูรายละเอียด
  • OS: OSXBrowser: Firefox

  • ล็อคอิน @ 12 กรกฎาคม 2011, 00:39:19
รอดูบทความดี ๆ ครับ
Coolfirmed by (0)สมาชิก:
 

ออฟไลน์ pencil

  • นักศึกษา
  • *
  • โพสต์: 486
  • คูลเฟิร์ม: 672
  • zula: 514.5
    • ดูรายละเอียด
  • OS: WindowsBrowser: Chrome

  • ล็อคอิน @ 10 กุมภาพันธ์ 2013, 18:51:58
ดีครับเอาให้ผมทำเป็นเลยนะ
Coolfirmed by (0)สมาชิก:
 
มาเขียน เฮลโลเวิลด์ กัน " http://th.wikipedia.org/wiki/เฮลโลเวิลด์ "

ออฟไลน์ ๐เซเลอร์มูนตัวผู้๐

  • เจ้าพ่อโซนไอที
  • *****
  • โพสต์: 475
  • คูลเฟิร์ม: 4329
  • zula: 868
    • ดูรายละเอียด
  • OS: WindowsBrowser: IE
  • ~กะดิ๊บ กะดิ๊บ~

  • ล็อคอิน @ 07 เมษายน 2013, 00:33:30
อนคต ไกล ถ้า มี ค่า รถ อิ ๆๆ
Coolfirmed by (1)สมาชิก:

ออฟไลน์ atorsound

  • นักเรียนอนุบาล
  • *
  • โพสต์: 3
  • คูลเฟิร์ม: 10
  • zula: 5
  • เพศ: ชาย
    • ดูรายละเอียด
  • OS: WindowsBrowser: Firefox
  • เราทำให้เสียงดีน่าฟัง ไม่ใช่ดังอย่างไร้สาระ

  • ล็อคอิน @ 12 มกราคม 2011, 13:15:14
เป็นสมาชิกใหม่ครับ

ช่วยผมได้เยอะเลยครับ ผมกำลังเรียนไมโครตัวนี้อยู่ครับ

อ.ให้เขียนโปรแกรมนับ0-99และ0-ff ด้วยภาษาซีครับ

พรุ่งนี้พรีเซนต์ครับ เขียนออกแล้วครับ แต่อธิบายยังไม่ค่อย

รู้เรื่องเท่าไร ดีครับที่ได้อ่านกระทู้พี่โดนเต็มๆเลยครับเปีะ!!เลย

พรุ่งนี้จะเอาคะแนนแรปเต็มครับ..ขอบคุณครับสำหรับข้อมูล

มีรัยสงสัยจะเข้ามาปรึกษาครับ
Coolfirmed by (0)สมาชิก:
 
นักศึกษา มหาวิทยาลัยเทคโนโลยีราชมงคลอีสาน วิทยาเขตขอนแก่น
คณะคุรุศาสตร์อุตสาหกรรมบัณฑิต สาขาวิชาโปรแกรมอีเล็กทรอนิกส์-ทั่วไป ปีที่2

ออฟไลน์ atorsound

  • นักเรียนอนุบาล
  • *
  • โพสต์: 3
  • คูลเฟิร์ม: 10
  • zula: 5
  • เพศ: ชาย
    • ดูรายละเอียด
  • OS: WindowsBrowser: Firefox
  • เราทำให้เสียงดีน่าฟัง ไม่ใช่ดังอย่างไร้สาระ

  • ล็อคอิน @ 12 มกราคม 2011, 13:15:14
พรีเซนต์มาแล้วครับ

ได้คะแนนเต็มเลย
Coolfirmed by (0)สมาชิก:
 
นักศึกษา มหาวิทยาลัยเทคโนโลยีราชมงคลอีสาน วิทยาเขตขอนแก่น
คณะคุรุศาสตร์อุตสาหกรรมบัณฑิต สาขาวิชาโปรแกรมอีเล็กทรอนิกส์-ทั่วไป ปีที่2

ออฟไลน์ sornram9254.com

  • ผู้สนับสนุน
  • *
  • โพสต์: 573
  • คูลเฟิร์ม: 3676
  • zula: 549.5
  • เพศ: ชาย
    • ดูรายละเอียด
    • Sornram9254
  • OS: WindowsBrowser: Firefox
  • เทคนิคคอมพิวเตอร์

  • ล็อคอิน @ 08 พฤษภาคม 2013, 04:40:37
ดีครับที่ได้อ่านกระทู้พี่โดนเต็มๆเลยครับเปีะ!!เลย

โหะๆ ไม่เป็นรัยครับ แต่.. . อย่าเรียกพี่เลยครับ ผมอายุ 17 เอง ^0^ |n1:|
Coolfirmed by (0)สมาชิก:
 






ออฟไลน์ OoNoNoO

  • พาวเวอร์ยูสเซอร์
  • *
  • โพสต์: 1,385
  • คูลเฟิร์ม: 9653
  • zula: 5201.5
  • เพศ: ชาย
    • ดูรายละเอียด
    • http://www.MrNonz.com
  • OS: WindowsBrowser: Firefox

  • ล็อคอิน @ 17 พฤษภาคม 2013, 18:29:47
ดีครับที่ได้อ่านกระทู้พี่โดนเต็มๆเลยครับเปีะ!!เลย

โหะๆ ไม่เป็นรัยครับ แต่.. . อย่าเรียกพี่เลยครับ ผมอายุ 17 เอง ^0^ |n1:|

อ่า น้องเก่งจังครับ

วันหลังลงบทความดีๆๆอีก นะครับ เป็นกำลังใจให้ครับน้อง  |n4:|
Coolfirmed by (0)สมาชิก:
 

ออฟไลน์ atorsound

  • นักเรียนอนุบาล
  • *
  • โพสต์: 3
  • คูลเฟิร์ม: 10
  • zula: 5
  • เพศ: ชาย
    • ดูรายละเอียด
  • OS: WindowsBrowser: Firefox
  • เราทำให้เสียงดีน่าฟัง ไม่ใช่ดังอย่างไร้สาระ

  • ล็อคอิน @ 12 มกราคม 2011, 13:15:14
หรอครับ..เก่งกว่าพี่อีกน่ะ

Coolfirmed by (0)สมาชิก:
 
นักศึกษา มหาวิทยาลัยเทคโนโลยีราชมงคลอีสาน วิทยาเขตขอนแก่น
คณะคุรุศาสตร์อุตสาหกรรมบัณฑิต สาขาวิชาโปรแกรมอีเล็กทรอนิกส์-ทั่วไป ปีที่2

ออฟไลน์ sornram9254.com

  • ผู้สนับสนุน
  • *
  • โพสต์: 573
  • คูลเฟิร์ม: 3676
  • zula: 549.5
  • เพศ: ชาย
    • ดูรายละเอียด
    • Sornram9254
  • OS: WindowsBrowser: Firefox
  • เทคนิคคอมพิวเตอร์

  • ล็อคอิน @ 08 พฤษภาคม 2013, 04:40:37
อ่า น้องเก่งจังครับ
|n11:|    :d1:    |n3:|

ว่าจะไม่พูดแล้วเชียว เนื่องจากมีสมาชิคบางท่านติงมา
คือน้องนนท์ครับ ควรให้ความเคารพรุ่นพี่รุ่นน้องหน่อยก็ดีนะครับ  [{-11-}]
ความจริงผมไม่อยากพูดหรอกเพราะท่านคงพูดเล่นๆ แต่คนภายนอกเขามองอีกอย่างสิครับ (มองอย่างไรน่าจะทราบนะครับ)  [$6$]
ปล. ไม่ได้เจตนาว่านะครับ พอดีคนอื่นเขาติงมา [$2$] 
Coolfirmed by (0)สมาชิก:
 
« แก้ไขครั้งสุดท้าย: 23 พฤษภาคม 2011, 06:07:56 โดย sornram9254 »






ออฟไลน์ kujala13

  • นักเรียนอนุบาล
  • *
  • โพสต์: 17
  • คูลเฟิร์ม: 11
  • zula: 5.5
    • ดูรายละเอียด
  • OS: WindowsBrowser: Chrome

  • ล็อคอิน @ 20 กุมภาพันธ์ 2013, 22:43:22
ขอบคุณคับท่าน
Coolfirmed by (0)สมาชิก:
 

ออฟไลน์ [PS]XPSL

  • แฟนพันธุ์แท้
  • *
  • โพสต์: 642
  • คูลเฟิร์ม: 1621
  • zula: 775.5
  • เพศ: ชาย
    • ดูรายละเอียด
  • OS: UbuntuBrowser: Firefox
  • ละอ่อนเจียงฮาย ครับผ้ม!

  • ล็อคอิน @ 06 เมษายน 2013, 10:38:29
เทคคอม จงเจริญ....เอิ๊กๆ  5555+
Coolfirmed by (0)สมาชิก:
 
กด coolfirm! แทนคำขอบคุณ..ให้กำลังใจกัน แถมยัง ทำให้ประหยัดทรัพยากรของเว็ป zone-it อีกด้วย

               สำนึกดี... สังคมดี...มีน้ำใจ...รู้จักแบ่งปัน                         
                           ความคิดแตกต่างได้.....แต่สังคมไทย...
                                        ไม่ควรแตกแยก...!!

================================================================

จำเป็นต้องใช้ FlashPlayer

ออฟไลน์ pencil

  • นักศึกษา
  • *
  • โพสต์: 486
  • คูลเฟิร์ม: 672
  • zula: 514.5
    • ดูรายละเอียด
  • OS: WindowsBrowser: Chrome

  • ล็อคอิน @ 10 กุมภาพันธ์ 2013, 18:51:58
ปักมุดไว้่หน่อยครับมันหายาก
Coolfirmed by (0)สมาชิก:
 
มาเขียน เฮลโลเวิลด์ กัน " http://th.wikipedia.org/wiki/เฮลโลเวิลด์ "

ออฟไลน์ sornram9254.com

  • ผู้สนับสนุน
  • *
  • โพสต์: 573
  • คูลเฟิร์ม: 3676
  • zula: 549.5
  • เพศ: ชาย
    • ดูรายละเอียด
    • Sornram9254
  • OS: WindowsBrowser: Firefox
  • เทคนิคคอมพิวเตอร์

  • ล็อคอิน @ 08 พฤษภาคม 2013, 04:40:37
ขออภัยทุกๆท่านนะครับที่หายไปนานไม่ได้มาตอบเลย   ตั้งแต่ปลายปีที่แล้วยันตอนนี้ผมยุ่งๆอ่ะครับ ตอนนี้ก็ติดฝึกงานอีก  [{-20-}] 
และเนื่องจากผมกำลังทำบทเรียนช่วยสอนให้รุ่นน้องที่แผนก เลยลองเอามาให้ชมกันครับ (แบบพื้นฐานนะครับ) สำหรับใครที่เขียนเป็นแล้วก็อย่ามาบ่นนะครับว่ามันง่ายไป  ;)
ถ้าช่วงใหนว่างๆ ผมก็จะทะยอยทำ vdo มาสอนอีกครับ รอบต่อๆไปจะมีการสอนต่อ 7segment ด้วยครับ  :P


อ้อเกือบลืม :ถ้าใครก็ตามแต่ ที่ copy บทความหรือ vdo ที่ผมทำไว้ก็ช่วยให้เครดิตหน่อยเถอะครับ  [{-11-}]
ไม่ไหวๆ เจอบ่อยมาก พอบอกไปด่าผมกลับอีก ผมคนเขียนแท้ๆ  [$6$]  สงสัยพวกนั้น "เกรียนจนเป็นสั น ดา น"ซะแล้วมั้งครับ! (ขอหยาบนิดนึงนะครับ ชักเบื่อและ  [$05$] )




สร้าง project เพื่อใช้ในการเขียนโปรแกรม
#http://www.sornram9254.com/blog/


สร้างวงจร(อย่างง่าย)เพื่อใช้ในการ simulator
#http://www.sornram9254.com/blog/


เขียนโปรแกรมและขั้นตอนการ simulator
#http://www.sornram9254.com/blog/

Coolfirmed by (3)สมาชิก:






ออฟไลน์ sornram9254.com

  • ผู้สนับสนุน
  • *
  • โพสต์: 573
  • คูลเฟิร์ม: 3676
  • zula: 549.5
  • เพศ: ชาย
    • ดูรายละเอียด
    • Sornram9254
  • OS: WindowsBrowser: Firefox
  • เทคนิคคอมพิวเตอร์

  • ล็อคอิน @ 08 พฤษภาคม 2013, 04:40:37
เทคคอม จงเจริญ....เอิ๊กๆ  5555+
Technic computer จงเจริญ!!   เฮ้!!!!!!!
 [{-10-}] [{-10-}] [{-10-}]

ปักมุดไว้่หน่อยครับมันหายาก
ต้องบอก admin  หรือไม่ก็ mod อ่ะครับ  [{-11-}]
Coolfirmed by (1)สมาชิก:






ออฟไลน์ ??? $?????s ?

  • นักเรียนมัธยม
  • *
  • โพสต์: 51
  • คูลเฟิร์ม: 468
  • zula: 271
  • เพศ: ชาย
    • ดูรายละเอียด
    • เวปรวมรูปดาราไทย เกาหลี ญี่ปุ่น
  • OS: WindowsBrowser: Firefox
  • BAD sectors

  • ล็อคอิน @ 07 พฤษภาคม 2013, 18:34:20
เคยเขียน ภาษา asm ทำโปรเจค ส่ง ง่ายๆ 7secment นับเลข [{-10-}]
Coolfirmed by (0)สมาชิก:
 

ออฟไลน์ sornram9254.com

  • ผู้สนับสนุน
  • *
  • โพสต์: 573
  • คูลเฟิร์ม: 3676
  • zula: 549.5
  • เพศ: ชาย
    • ดูรายละเอียด
    • Sornram9254
  • OS: WindowsBrowser: Firefox
  • เทคนิคคอมพิวเตอร์

  • ล็อคอิน @ 08 พฤษภาคม 2013, 04:40:37

สร้างวงจรเพิ่มเติม , มีการนำ 7segment และ switch เพิ่มเข้ามาในวงจร
#http://www.sornram9254.com/blog/

edit
วงจรแปลกๆ สงสัยผมทำผิด(รึเปล่า) พอดีมึนๆอ่ะครับ งานเยอะด้วย  ถ้าว่างๆเดี๋ยวมาแก้ให้ครับ  [$2$]


อ้างถึง
ดันต่อ SW ลง GND โดยตรง ทำให้ได้รับ ลอจิก 0 เงื่อนไข if(sw1==0) { P1=0xff; } เลยเป็นจริง ต้องสลับตำแหน่ง R กับ SW เวลากดถึงจะเป็น แรงดัน +V ทำให้ P3.0 ได้รับลอจิก 1
Coolfirmed by (1)สมาชิก:
« แก้ไขครั้งสุดท้าย: 28 พฤษภาคม 2011, 18:44:03 โดย sornram9254 »






ออฟไลน์ jasoland

  • นักเรียนประถม
  • *
  • โพสต์: 27
  • คูลเฟิร์ม: 34
  • zula: 10
  • เพศ: ชาย
    • ดูรายละเอียด
    • gd
  • เล่นแต่เกมส์

  • ล็อคอิน @ 29 ธันวาคม 2012, 20:45:38
เราสามารถเอาไปประยุกต์ใช้กับพวกโค้ดเกมส์ได้ไหม
Coolfirmed by (1)สมาชิก:
เล่นเกมส์ออนไลน์บนเว็บฟรีมากมาย