질문게시판 > 8051 프로그램

인기검색어 > 아두이노 센서 ATMEGA128

최신글 질문게시판 동영상강좌 가입하기

▼ BASIC4MCU 후원업체 신제품 정보 ▼

▲ BASIC4MCU 후원업체 신제품 정보 ▲

BASIC4MCU > 질문게시판

8051 프로그램

페이지 정보

작성자 QumQ 작성일19-06-03 16:32 조회3,560회 댓글0건

본문

 

                                                                                  #include <io51.h>

 

#define L_PPI_A *((unsigned char *) 0x1c008)

#define L_PPI_B *((unsigned char *) 0x1c009)

#define L_PPI_C *((unsigned char *) 0x1c00a)

#define L_PPI_CR *((unsigned char *) 0x1c00b)

 

#define D_PPI_A *((unsigned char *) 0x1c014)

#define D_PPI_B *((unsigned char *) 0x1c015)

#define D_PPI_C *((unsigned char *) 0x1c016)

#define D_PPI_CR *((unsigned char *) 0x1c017)

 

#define R_PPI_A *((unsigned char *) 0x1c01c)

#define R_PPI_B *((unsigned char *) 0x1c01d)

#define R_PPI_C *((unsigned char *) 0x1c01e)

#define R_PPI_CR *((unsigned char *) 0x1c01f)

#define TO_L_SHIFT 0x18

 

bit led1 = P1.0;

bit led2 = P1.1;

bit led3 = P1.2;

bit led4 = P1.3;

 

bit SW1 = P1.4;

bit SW2 = P1.5;

bit SW3 = P1.6;

bit SW4 = P1.7;

 

void delay(long i)

{

    while(i--);

}

 

void f_w(unsigned char pb_font)

{

   int k;

   for(k=0; k<8; k++)

   {

       D_PPI_A = 0x00; D_PPI_B = pb_font; D_PPI_C = 0x00;

       delay(12500);

       D_PPI_A = 0xff;

       pb_font = (pb_font << 1);

       D_PPI_C = 0xff;

   }

}

 

void bosig(unsigned char sig_ext)

{

   R_PPI_B = 0xf0;

   delay(100000);

   R_PPI_B = 0x0f;

   delay(100000);

}

 

void car_sig(void)

{

   led1=0;

   delay(80000);

   led1=1;

   led2=0;

   delay(50000);

   led2=1;

   led3=0;

   delay(80000);

}

 

void busy_flag_check(void)

{

    data unsigned char ir_value;

    L_PPI_CR = 0x92;

    L_PPI_C = 0xf3;

 

    do

    {

        L_PPI_C = 0xf6;

        ir_value = L_PPI_B;

        L_PPI_C = 0xf2;

    } while(ir_value& 0x80);

    L_PPI_CR = 0x90;

    L_PPI_C = 0xf3;

}

 

void msg_cmd_write(unsigned char msg_cmd )

{

    busy_flag_check();

    L_PPI_C = 0xf4;

    L_PPI_B = msg_cmd;

    L_PPI_C = 0xf0;

    L_PPI_C = 0xf3;

}

 

void msg_char_display(char write_char)

{

    busy_flag_check();

    L_PPI_C = 0xf5;

    L_PPI_B = write_char;

    L_PPI_C = 0xf0;

    L_PPI_C = 0xf3;

}

 

void msg_string_display(char *write_string)

{

    while(*write_string)

    {

        msg_char_display(*write_string);

        write_string++;

        delay(1000);

    }

}

 

interrupt[0x13]void msg_lcd(void)

{

   EA=0;

   if(led3==0)

   { int k=0;

   msg_cmd_write(0x01);

   msg_string_display("Please wait a moment");

   for(k=0; k<14; k++)

            {

            msg_cmd_write(TO_L_SHIFT);

            }

   EA = 1;

   }

   

   else if(led1==0)

   {  int k=0;

      msg_cmd_write(0x01);

      msg_string_display("the signal changed go through");

      for(k=0; k<12; k++)

            {

            msg_cmd_write(TO_L_SHIFT);

            }

      EA=1;

   }

    return;

}

 

 

void main(void)

{

   int k=0;

   R_PPI_CR=0x80;

   D_PPI_CR=0x80;

   do

   {

      if(SW1==1)

         {  msg_lcd;

            led3=0;

            R_PPI_B=0x0f;

            delay(80000);

            led3=1;

            led2=0;

            delay(50000);

            led2=1;

            led1=0;

            R_PPI_B=0xf0;

            f_w(0xff);

            led1=1;

            PX0=1;

            IT0=1;

            EX0=1;

            EA=1;

         }

 

      else if (SW2==1)

      {

         led2=0;

         delay(5000);

         led2=1;

         delay(5000);

         R_PPI_B=0xff;

         P1=0xff;

         SW1=0xff;

         SW2=0xff;

         led1=0xff;

         led2=0xff;

         led3=0xff;

         msg_cmd_write(0x01);

      }

 

      else

      {

         P1=0xff;

         R_PPI_B=0xff;

         SW1=0xff;

         SW2=0xff;

         led1=0xff;

         led2=0xff;

         led3=0xff;

         msg_cmd_write(0x01);

      }

   } while(1);

}

 

현재 이렇게 해서 신호등과 비슷한 효과를 내려하고 있습니다.

다른 작동은 다 잘 되는데 인터럽트 스위치만 계속 이상하게 작동되서 질문드려요

인터럽트 스위치는 시각장애인 버튼이라는 가정하에 led3=0; 즉 차량신호등의 초록불이 켜있을 때는 인터럽트 스위치를 누를 시 LCD판에 기다려 달라는 메세지가 뜨고 일정 시간 후l ed3=1; 소등되고 led1=0; (차량 적색불) R_PPI_B=0xf0; (보행자 초록불)로 변경되면 LCD판에 불이 바뀌었으니 건너도 좋다 라고 하고 싶었습니다.

그런데 처음 신호를 주면 인터럽트 스위치를 누르기 전까지는 운행이 잘 되나 인터럽트 스위치를 누르면 현재 진행중이던 프로그램 중에 작동되지 않고 한 번의 프로그래밍 후 눌렀던 인터럽트 스위치의 작동이 되면서 led3 차량 녹색불 점등과 메세지만 뜨고 다른 작동을 안합니다. (버튼 누르면 계속 메세지만 리셋)

추가로 신호등 작동중에 인터럽트를 눌러도 아무 반응이 없고 한 번의 진행이 끝나고 나서야 넘어갑니다..... 어찌해야하나요

  • BASIC4MCU 작성글 SNS에 공유하기
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기
  • 카카오톡으로 보내기

댓글 : 0

조회수 : 3,560

등록된 댓글이 없습니다.

게시물 검색

BASIC4MCU > 질문게시판 목록

제목 날짜
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은… 스태프  19-01-15
공지 사이트 이용 안내 댓글[25] master  17-10-29
질문 빵판없이 디스플레이 넣을 수 있을까요? 댓글[2] 첨부파일오소로롯 새글 22-06-29
질문 라즈베리파이4 신형 선택문제 댓글[1] maximum  22-06-26
질문 음전압 ADC 댓글[2] 412904  22-06-26
질문 아두이노 센서값 출력 질문입니다! 댓글[1] 아궁2  22-06-24
질문 ATmega128, ATmega28 RS232통신 첨부파일Moon4201  22-06-24
답변 답변 : ATmega128, ATmega28 RS232… 댓글[1] master  22-06-25
질문 서보모터, 온습도센서 코드 질문 댓글[2] 첨부파일kshdlfaldfh  22-06-22
답변 답변 : 서보모터, 온습도센서 코드 질문 댓글[15] master  22-06-22
질문 steppermulti5 질문 응애  22-06-21
답변 답변 : steppermulti5 질문 댓글[1] master  22-06-22
질문 atmega128 avr usart 질문 snoflak  22-06-21
답변 답변 : atmega128 avr usart 질문 댓글[5] master  22-06-21
질문 사용자 정의 함수 변환 하는 방법 댓글[2] 첨부파일da0800  22-06-21
질문 atmega128 댓글[1] 양의노래  22-06-20
질문 아두이노 동시동작 재질문 댓글[9] 첨부파일죠르디  22-06-20
질문 초음파센서로 dc모터 제어하기 댓글[1] 첨부파일난쟁2  22-06-20
질문 아두이노 동시동작 댓글[7] 죠르디  22-06-19
질문 ATMEGA128 UART,FND 연동 질문 JMOD  22-06-19
답변 답변 : ATMEGA128 UART,FND 연동 질문 댓글[1] master  22-06-20
질문 atmeg128 질문이요 댓글[1] 첨부파일공대생er  22-06-18
질문 atmega128 초음파 센서로 신호등 시간초 늘리기 서동씨  22-06-18
답변 답변 : atmega128 초음파 센서로 신호등 시간초… 댓글[1] master  22-06-18
질문 atmega128 댓글[2] 망경이  22-06-18
질문 앱인벤터 이용해서 수동 자동 할라고하는데 ..잘안됩니다… 댓글[1] 따랑해영  22-06-18
답변 질문 : 앱인벤터 이용해서 수동 자동 할라고하는데 ..… 댓글[1] 첨부파일따랑해영  22-06-19
답변 질문 : 앱인벤터 이용해서 수동 자동 할라고하는데 .… 첨부파일따랑해영  22-06-19
질문 서보모터와 초음파센서 댓글[1] 브링미히어  22-06-17
질문 LCD 도와주세요 ㅜㅠㅠㅠ 댓글[2] 첨부파일dentist22  22-06-17
게시물 검색


Privacy Policy
MCU BASIC ⓒ 2017
PC버전