หัวข้อ: PIC สวิช กดติด กดตัด เริ่มหัวข้อโดย: sawingkee ที่ กันยายน 22, 2012, 06:10:03 pm void main() {
trisa=0x0F; trisb=0x00; cmcon=0x0F; portb.F0=0; portb.f1=0; while(1) { while(porta.F0==0) { portb.F0=~portb.F0; portb.F1=0; while(porta.F0==0) { delay_ms(100); } } while(porta.F1==0) { portb.F1=~portb.F1; portb.F0=0; while(porta.F1==0) { delay_ms(100); } } เป็นสวิช กดติด กดตัด 2ช่อง ครับ อินพุตเป็น porta เอาพุตเป็น portb อยากให้ porta.f1 เป็น กดแล้วมีไฟกระพริบที่ portb.f1 ซัก 500 ms ครับ กด สวิช porta.f1 อีกที ไฟกระพริบก็ดับลงไปใส่ ค่าอย่างไรครับ ขอบคุณครับ หัวข้อ: Re: PIC สวิช กดติด กดตัด เริ่มหัวข้อโดย: kiano♥ ที่ กันยายน 23, 2012, 09:27:21 am การทำงานที่ดี และถูกต้องคือวาดแนวคิดออกมาเป็นโฟว์ชาร์ทก่อน
จึงจะรู้ที่มาที่ไปของคำสั่ง และแก้ไข+เพิ่มเติมได้ ในกรณีที่มันทำงานไม่ถูกต้องตามที่เราคิด กรณีนี้ผมเคยทำ ตอนที่หัดทำใหม่ๆ ทำไฟกระพริบเล่น แล้วมีสวิทช์กด ให้เลือกค่าต่างๆได้ เ่ช่น เลือกรูปแบบการกระพริบ เลือกความเร็วในการกระพริบ หลักการตามโฟว์ชาร์ทที่ได้แนบมาคือ ให้สร้างตัวแปรขึ้นมา 2 ตัว ตัวแปร sw_temp0 เอาไว้เก็บค่าการกดสวิทช์จาก portA.F0 ตัวแปร sw_temp1 เอาไว้เก็บค่าการกดสวิทช์จาก portA.F1 ส่วนที่ 1 เป็นการทำงานเก็บค่าการกดสวิทช์ไว้ในตัวแปร ถ้าดูเงื่อนไขแล้ว ค่าของตัวแปรจะมีค่าได้ 2 ค่าคือ 0 กับ 1 ส่วนที่ 2 เป็นการนำค่าของตัวแปร มาเป็นเงื่อนไขในการแสดงผล ถ้าค่าของตัวแปรเป็น 0 หลอดไฟก็จะไม่ติด ถ้าค่าของตัวแปรเป็น 1 หลอดไฟก็จะติดดับ สลับกันไปทีละ 500 ms แล้ววนลูปการทำงาน โฟว์ชาร์ทนี้เป็นแค่แนวทางของการเขียนโปรแกรมรับค่าคำสั่งจากการกดสวิทช์ ใช้งานได้จริง แต่มีข้อเสียคือ 1. ถ้าหลอดกระพริบพร้อมกัน จะกระพริบไม่ต่อเนื่อง 2. เวลากดสวิทช์ ต้องรอจังหวะวนลูป 3. ... ต่อไปการทำงานได้จริง ต้องทำแยกเป็นฟังก์ชั่นย่อย ทำงานแต่ละหน้าที่กัน หรือจะกำหนดให้ portB ต่อกับสวิืทช์ แล้วเลือกการใช้งานแบบอินเตอร์รัพ จากการกดสวิทช์ http://www.4shared.com/get/69E388bY/pic_test_sw.html หัวข้อ: Re: PIC สวิช กดติด กดตัด เริ่มหัวข้อโดย: JUB ที่ กันยายน 23, 2012, 10:12:42 am โจทย์ง่ายแต่ไม่หมูนะครับสำหรับมือใหม่ ทำยังไงจะให้การตอบสนองการสั่งงานได้ทันที :)
|