Thai microtron community

Electronic Knowledge Base => Microcontoller & Electronics => Topic started by: enics on December 18, 2009, 01:31:27 PM



Title: module sw input 4ตัว กับ portb
Post by: enics on December 18, 2009, 01:31:27 PM
ผมอยากทดสอบใช้ module sw input 4ตัว กับ portb โดยใช้คำสั่ง ดังนี้


@   DEVICE  PIC16F877A,HS_OSC,LVP_OFF,BOD_OFF,WDT_OFF
DEFINE  OSC         20
'------------------------------------
    S2 VAR PORTB.5   
    L1 VAR PORTD.5
        TRISA = %111111
        TRISB = %00000000
        ADCON1 = 7
        OPTION_REG=%10000111
START:
        IF S1= 1 THEN GOTO LOWS
        HIGH L1
        PAUSE 100
LOWS:   LOW L1
        GOTO START
        END

เรื่องมันมีอยู่ว่า  module sw1 มันอยู่ที่ portb 4 แต่พอรันโปรแกรม led ติดเลยครับ แต่พอเปลี่ยนเป็น sw2 ที่ portb5 ทำงานปกติครับ ส่วนsw3 sw4 ที่ portb6 portb7  เหมือนกับ sw1 ครับ
ช่วยหน่อย


Title: Re: module sw input 4ตัว กับ portb
Post by: s_engine on December 20, 2009, 02:46:08 PM
ใช้คอมไพเลอร์ อะไรเขียนหรอครับ อยากจะแนะนำแต่กะไม่ใช่เซียน ถ้าเป็น ccs compiler ผมกะพอจะแนะนำได้บ้าง
แล้วทดสอบ ยังไงหรอครับ ต่อวงจรจริงหรือ ซิม เอาครับ


Title: Re: module sw input 4ตัว กับ portb
Post by: s_engine on December 20, 2009, 05:25:48 PM

#include <16F877.H>
#fuses XT, NOWDT, NOPROTECT, BROWNOUT, PUT, NOLVP
#use delay(clock = 20000000)



void main (void){
set_tris_b (0xff);  // set port B to input
set_tris_d (0x00);  // set port D to output
OUTPUT_d(0x00);     // start output port d is all low

while(true){
   if(!input(pin_b4)){                 // B4 ถูกกด D4 ติด 1 วิ
      output_high(PIN_d4);
      delay_ms(1000);
   }
   if(!input(pin_b5)){                 // B5 ถูกกด D5 ติด 1 วิ
      output_high(PIN_d5);
      delay_ms(1000);
   }
   if(!input(pin_b6)){                 // B6 ถูกกด D6 ติด 1 วิ

      output_high(PIN_d6);
      delay_ms(1000);
   }
   if(!input(pin_b7)){                 // B7 ถูกกด D7 ติด 1 วิ

      output_high(PIN_d7);
      delay_ms(1000);
   }   
   OUTPUT_d(0x00);   
  }
}


(http://www.myuppic.com/io/testio1.jpg) (http://www.myuppic.com/show.php?id=6bab19f825c40a1dfc1df0d8551ae8d6)
Thanks: อัพรูป (http://www.myuppic.com) smsฟรี (http://www.uppicweb.com) hositng (http://www.nethispeed.com)
ccs c compiler v.4.057
proteus v7.4 sp3
อัพให้ไปลองเล่นดูนะครับ ข้างในมีทั้ง .c .hex  และ ไฟล์ สำหรับ ซิมมูเลต
(http://www.uploadtoday.com/images/partner/download_file.jpeg) (http://www.beupload.com/download/?674353&A=965708)


Title: Re: module sw input 4ตัว กับ portb
Post by: siriwat1977 on December 28, 2009, 11:19:33 PM
DEFINE OSC 20

SW1     VAR     PORTB.4
SW2     VAR     PORTB.5
SW3     VAR     PORTB.6
SW4     VAR     PORTB.7

L1      VAR     PORTD.4
L2      VAR     PORTD.5
L3      VAR     PORTD.6
L4      VAR     PORTD.7

LOW  L1
LOW  L2
LOW  L3
LOW  L4

TRISB   = 255
TRISD   = 0

START:
IF (SW1=1)AND(SW2=1)AND(SW3=1)AND(SW4=1) THEN GOTO START
IF (SW1=0)AND(SW2=1)AND(SW3=1)AND(SW4=1) THEN GOSUB LOOP1
IF (SW1=1)AND(SW2=0)AND(SW3=1)AND(SW4=1) THEN GOSUB LOOP2
IF (SW1=1)AND(SW2=1)AND(SW3=0)AND(SW4=1) THEN GOSUB LOOP3
IF (SW1=1)AND(SW2=1)AND(SW3=1)AND(SW4=0) THEN GOSUB LOOP4
GOTO START

LOOP1:
HIGH  L1
PAUSE 1000
LOW   L1
PAUSE 10
RETURN

LOOP2:
HIGH  L2
PAUSE 1000
LOW   L2
PAUSE 10
RETURN

LOOP3:
HIGH  L3
PAUSE 1000
LOW   L3
PAUSE 10
RETURN

LOOP4:
HIGH  L4
PAUSE 1000
LOW   L4
PAUSE 10
RETURN


เป็นภาษาเบสิค ใช้ pic basic pro คอมไพเลอร์  ลองดูนะครับ