PIC สวิช กดติด กดตัด
หน้า: [1]   ลงล่าง
  พิมพ์  
ผู้เขียน หัวข้อ: PIC สวิช กดติด กดตัด  (อ่าน 4902 ครั้ง)
sawingkee
ชุมชนคนรักอาชีพช่าง
member
*

คะแนน1
ออฟไลน์ ออฟไลน์

กระทู้: 56


« เมื่อ: กันยายน 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 อีกที ไฟกระพริบก็ดับลงไปใส่ ค่าอย่างไรครับ
ขอบคุณครับ


บันทึกการเข้า

kiano♥
kiano555@gmail.com
กลุ่มสนับสนุนLSV+มีน้ำใจ
member
****

คะแนน337
ออฟไลน์ ออฟไลน์

กระทู้: 570


การให้น่าภูมิใจกว่าได้รับ Line ID : Tech64

kiano555@windowslive.com kiano555@yahoo.com
เว็บไซต์ อีเมล์
« ตอบ #1 เมื่อ: กันยายน 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
บันทึกการเข้า
JUB
Full Member
member
**

คะแนน81
ออฟไลน์ ออฟไลน์

กระทู้: 1157



« ตอบ #2 เมื่อ: กันยายน 23, 2012, 10:12:42 am »

โจทย์ง่ายแต่ไม่หมูนะครับสำหรับมือใหม่ ทำยังไงจะให้การตอบสนองการสั่งงานได้ทันที  Smiley
บันทึกการเข้า
หน้า: [1]   ขึ้นบน
  พิมพ์  
 
กระโดดไป: