해보기는 했어?

오늘 안됐다고 포기하지 말고 용기내서 내일 다시 해 보자.

MEGAWIN

MG82F6D Series ADC with Interrupt - 1

롬돌이 2022. 11. 8. 14:33
반응형

1. 프로그램 개요

P22Green 0 LED, P24 Red LED, P26Green 1 LED가 연결되어 있다.

P10에 연결된 회로의 Analog값을 측정하기 위하여 Interrupt 방식의 ADC를 구현한다. 측정된 값은 64개를 취득하면 시리얼로 그 데이터를 전송한다.

시리얼 통신은 Timer 1Overflow를 이용한 방식으로 설정하고, BaudRtae9600이다.

Timer 0을 이용해서 1ms Interrupt를 생성하고, 200ms 타이머를 생성한다. 200ms 마다 Red Led의 출력이 반전이 되도록 하여 시스템이 동작 중 임을 표시한다.

 

 

2. 회로도

/* LED 부분 회로도 추가 */

 

3. Code

main routine

void main()

{

    u8 i;

    InitSystem();            // 포트초기화, 타이머초기화, 시리얼포트초기화, ADC핀 초기화

    bAdcflag=FALSE;       // ADC완료 플래그

    INT_EnAll();             // Enable global interrupt.

    printf("\nHello");       // 프로그램 시작을 시리얼로 전송

    LED_G_0=0;LED_R=0;LED_G_1=0;          // LED ALL ON

    DelayXms(1000);                             // 1초 딜레이

    LED_G_0=1;LED_R=1;LED_G_1=1;          // LED ALL OFF

    INT_EnADC();                                // Enable ADC interrupt.

 

    while(1)                                       // 시스템 동작 루틴

    {

        if(LedTime==0)                         // LedTime의 값이 0이면(타이머 인터럽트에서 1ms마마 1씩 감소중

        {

            LED_R = !LED_R;                   // LED_R을 반전시켜서 LED_R에 출력시킴. RED LED 토글

            LedTime=200;            // 200ms 딜레이를 위한 변수 값 저장

        }

           if(bAdcflag==TRUE)                   // ADC64회 완료 되었는가?

           {

            printf("\nADC:");                   // 줄을 바꾸라는 명령과 “ADC”출력

               for(i=0;i<TEST_ADC_DATA_CNT;i++)      // 64회동안 루프를 돌면서

               {    

                     printf("%04X ",TestBuf[i].W);         // ADC 결과값 버퍼의 값을 출력함, 4자리 HEX 값 출력

               }

               bAdcflag=FALSE;                  // ADC 완료 플래그를 클리어시킴

               TestBufLen=0;                     // TestBufLen도 클리어시켜 다음 ADC 인터럽트를 대비함

               INT_EnADC();                      // 64AD변환 후 ADC 인터럽트를 Disable 시켜두었으므로 다시 AD 변환을

                                    // 위해서는 인터럽트를 Enable 시켜야함

        }

    }

}

반응형

'MEGAWIN' 카테고리의 다른 글

MG82F6D Series ADC with Interrupt - 4  (0) 2022.11.08
MG82F6D Series ADC with Interrupt - 3  (0) 2022.11.08
MG82F6D Series ADC with Interrupt - 2  (0) 2022.11.08
MG32F02A072 SPI  (0) 2022.10.27
MG82F6D16 GPIO MODE  (0) 2022.10.25