หัวข้อ: ช่วยหน่อย timer0 ของ 16f877 เริ่มหัวข้อโดย: Dumrong007 ที่ กันยายน 25, 2011, 01:04:45 am คือว่าผมอยากเขียนโปรแกรม CountDown Timer แสดงผล 7segment 4 หลัก
ผมไม่รู้ว่าจะกำหนดค่าเริ่มต้นการนับ ของ timer0 ยังไง มันต้องดูตรงไหน ในdata sheet ก็ดูไม่เป็น ขอตัวอย่างโปรแกรมพร้อมคำอธิบายหน่อยครับ ของ 16f877 นะครับ พอดีแถวบ้านมีขายแต่เบอร์นี้ อีกอย่าง ขอที่กำหนดเวลาการนับได้ด้วยนะครับ ขอบพระคุณล่วงหน้าครับ thank2 หัวข้อ: Re: ช่วยหน่อย timer0 ของ 16f877 เริ่มหัวข้อโดย: Dumrong007 ที่ กันยายน 25, 2011, 01:08:38 am อีกอย่าง ขอเป็นภาษาซี นะครับ
หัวข้อ: Re: ช่วยหน่อย timer0 ของ 16f877 เริ่มหัวข้อโดย: kiano♥ ที่ กันยายน 25, 2011, 06:27:20 am ดาต้าชีท http://www.es.co.th/Schemetic/PDF/PIC16F87X.PDF
อ่านหน้า 49 หมวดหัวข้อ TIMER0 MODULE การใช้งาน TMR0 ต้องกำหนด register ดังนี้ - OPTION_REG REGISTER เพื่อกำหนดคุณสมบัติของ TMR0 - INTCON เพื่อกำหนด Interrupt จาก TMR0 แค่นี้มันก็จะทำงานนับเวลาแล้ว พอมันเกิดการ Overflow ก็จะมีการสั่งงานไปที่ Fanction Interrupt จากนั้นท่านต้องการให้มันทำอะไรก็กำหนดในฟังก์ชั่นนี้ เช่น เพิ่มค่าวินาทีขึ้น 1 ค่าเมื่อเกิดการ Interrupt การศึกษาโปรแกรม Count Down ต้องเริ่มจากต่อไปนี้ - ตัวแปรแบบ Aray เพื่อเก็บข้อมูลการแสดงผลของจอ 7-Segment - การต่อและการเขียนโปรแกรมควบคุม 7-segment แบบมัลติเพล็กซ์ - การใช้งาน Timer0 Module - การเขียนโปรแกรมแบบ Interrupt Fanction ถ้ายังเริ่มต้นไม่ถูกจริงๆ ขอแนะนำหนังสือ PIC Works Example and C Source Code http://www.thaieasyelec.com/Education/Books/PIC-Works-Examples-and-C-Source-Code-Book.html หัวข้อ: Re: ช่วยหน่อย timer0 ของ 16f877 เริ่มหัวข้อโดย: Dumrong007 ที่ กันยายน 25, 2011, 12:01:26 pm ขอบคุณครับ พี่
หัวข้อ: Re: ช่วยหน่อย timer0 ของ 16f877 เริ่มหัวข้อโดย: Dumrong007 ที่ กันยายน 25, 2011, 03:09:05 pm ไปไม่ถูกจริงๆ รบกวนพี่ช่วยเขียนโปรแกรมให้หน่อยครับ
ตามวงจรเลยครับ ใช้ 16f877 Crystal 10MHz ใช้ Switch 3 ตัว s1_start ต่อกับ portRD5 s2_+1 ต่อกับ portRD6 s3_-1 ต่อกับ portRD7 (http://www.uppices.com/images/23938786209204790169.jpg) ไฟล์ทั้งหมด http://www.tempf.com/getfile.php?id=1054573&key=4e7ee02ef2b19 (http://www.tempf.com/getfile.php?id=1054573&key=4e7ee02ef2b19) หัวข้อ: Re: ช่วยหน่อย timer0 ของ 16f877 เริ่มหัวข้อโดย: kiano♥ ที่ กันยายน 25, 2011, 05:58:47 pm จากพื้นฐานการต่อวงจรแล้ว ยังต้องศึกษาอีกเยอะ
ไฟล์ที่แนบมาประกอบด้วย - ไฟล์โปรเจคทั้งหมดที่เขียนด้วย MikroC Pro - ไฟล์วงจร เขียนด้วย Proteus (ตัว PIC ผมเซตไว้ที่ 1Mhz เพื่อคอมพิวเตอร์จะซิมการทำงานได้) การทำงานของโค๊ดโปรแกรมคือ แสดงตัวเลขขึ้นทีละ 1 ค่าต่อ 1 วินาที จาก 0000 ถึง 1000 โดยการนับด้วย TMR0 ลองโหลดไปศึกษาดู http://www.4shared.com/file/x5vQY-9G/counter4digit.html หัวข้อ: Re: ช่วยหน่อย timer0 ของ 16f877 เริ่มหัวข้อโดย: Dumrong007 ที่ กันยายน 25, 2011, 07:37:53 pm ขอบพระคุณเป็นอย่างสูงครับพี่
ขออีกหน่อยครับ void show_display(void){ // scan display 4 digit char col1, col2, col3, col4; col1=count/1000; col2=(count/100)%10; col3=(count/10)%10; col4=count%10; ไม่เข้าใจตรงนี้ครับ เข้าใจว่า / หมายถึงหาร แต่ว่าทำไมต้องหาร 1000,100,10 แล้ว % หมายถึงอะไรครับ ชี้แนะหน่อย หัวข้อ: Re: ช่วยหน่อย timer0 ของ 16f877 เริ่มหัวข้อโดย: kiano♥ ที่ กันยายน 25, 2011, 09:39:17 pm ตัวแปร count ถูกกำหนดเป็นแบบ 16 บิต มีค่าตั้งแต่ 0 ~ 65535 แต่ให้มันนับเลขแค่ 0 ~ 1000 นั่นก็คือ 4 หลัก
ตัวแปร col1 col2 col3 col4 คือตัวแปรของค่าที่จะแสดงผลแต่ละหลัก ถ้าให้ตัวแปร count มีค่า 0962 col1 คือค่าของหลักพัน col1=count/1000; ตัวแปร col1 จะมีค่าเท่ากับ 0962/1000=0 col2 คือค่าของหลักร้อย col2=(count/100)%10; ตัวแปร col2 จะมีค่าเท่ากับ 0962/100=09 09%10=9 col3 คือค่าของหลักสิบ col3=(count/10)%10; ตัวแปร col3 จะมีค่าเท่ากับ 0962/10=096 096%10=6 col4 คือค่าของหลักหน่วย col4=count%10; ตัวแปร col4 จะมีค่าเท่ากับ 0962%10=2 % คือตัวดำเนินการทางคณิตศาสตร์ ของพื้นฐานของภาษาซี หมายถึงการหารเอาเศษ หัวข้อ: Re: ช่วยหน่อย timer0 ของ 16f877 เริ่มหัวข้อโดย: Dumrong007 ที่ กันยายน 26, 2011, 12:16:25 am แจ่ม
ขอคุณครับพี่ thank2 หัวข้อ: Re: ช่วยหน่อย timer0 ของ 16f877 เริ่มหัวข้อโดย: yanyongs ที่ มกราคม 31, 2012, 12:47:25 pm วิธีการต่อ sw น้า ใช้ไม่ได้ครับ
เวลา กด ตัวหนึง มันจะเป็นกด ทั้ง 3 ไม่แตกต่างครับ ping! ผมจะใส่ตัวอย่าง แต่ลงรูปไม่เป็น sleep!! |