해보기는 했어?

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

MEGAWIN

MG82F6D Series GPIO P6

롬돌이 2022. 11. 9. 16:06
반응형

 

1. 프로그램 개요

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

P60, P60 High 출력을 유지하다가 500ms 마다 100us진폭으로 Low 출력을 만든다.

 

2. 회로도

       

                 

 

3. Code

main routine

void main()

{

InitSystem();                                              // 시스템 초기화

LED_G_0=0;LED_R=0;LED_G_1=0;                      // LED 전체 ON

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

LED_G_0=1;LED_R=1;LED_G_1=1;                      // LED 전체 OFF

while(1)

{

LED_R=!LED_R;                                        // RED LED Toggle

DelayXms(500);                                        // Delay 500ms

P60=0;                                                  // P60 clear

P61=0;                                                  // P61 clear

DelayXus(100);                                         // 100us delay

P60=1;                                                  // P60 Set

P61=1;                                                  // P61 Set

DelayXus(100);                                         // 100us delay

}

}

 

 

 

⑵ 시스템 초기화 루틴

/***********************************************************************************

*Function:   void InitSystem(void)

*Description:           Initialize MCU

*Input:  

*Output:    

*************************************************************************************/

void InitSystem(void)

{

           InitPort();                  // 포트 설정

}

- 포트 설정만 수행한다.

 

 

Port 초기화

/***********************************************************************************

*Function:   void InitPort(void)

*Description:            Initialize IO Port

*Input:  

*Output:    

*************************************************************************************/

void InitPort(void)

{

           PORT_SetP2PushPull(BIT2|BIT4|BIT6);                   // Set P22,P24,P26 as Push-Pull,For LED.

 

           //PORT_SetP6AInputOnly(BIT0|BIT1);          // Set P60,P61 as Analog-Input-Only

           //PORT_SetP6OpenDrainPu(BIT0|BIT1);       // Set P60,P61 as Open-Drain with Pull-High,such as Quasi-Bidirectional

           //PORT_SetP6OpenDrain(BIT0|BIT1); // Set P60,P61 as Open-Drain

           PORT_SetP6PushPull(BIT0|BIT1);                // Set P60,P61 as Push-Pull,

}

 

- LED 구동을 위한 핀 설정 : P22, P24, P26Push-Pull 로 설정한다.

PORT_SetP2PushPull(BIT2|BIT4|BIT6);

#define PORT_SetP2PushPull(x)                                      P2M0=P2M0|(x); SFRPI=1;P2M1=P2M1&(~(x));SFRPI=0

Port 2 Push-Pull 설정, P2M0SFR 0Page에있고, P2M1SFR 1Page에 있으므로 데이터 변경 전에 SFRPI=1, SFRPI=0을 사용해서 SFR Page를 변경시켜준다.

 

- P60, P61의 포트를 아날로그 입력으로 설정한다.

PORT_SetP6AInputOnly(BIT0|BIT1);

#define PORT_SetP6AInputOnly(x)                                   SFRPI=1;P6M0=P6M0&(~(x));SFRPI=3;P6M1=P6M1|(x) ;SFRPI=0

P6M0SFR PAGE 1에 있고, P6M1SFR PAGE 3에 있다. 그러므로 위의 매크로와 같이 해당 레지스터를 제어하기 전에 반드시 SFRPISFR PAGE의 번호를 저장한다.

 

- P60, P61을 풀업이 된 Open Drain 타입으로 설정

PORT_SetP6OpenDrainPu(BIT0|BIT1);

PORT_SetP6OpenDrain(x)                                      SFRPI=1;P6M0=P6M0&(~(x));SFRPI=3;P6M1=P6M1&(~(x));SFRPI=0

 

- P60, P61 Open Drain 타입으로 설정

PORT_SetP6OpenDrain(BIT0|BIT1);

#define PORT_SetP6OpenDrain(x)                                    SFRPI=1;P6M0=P6M0&(~(x));SFRPI=3;P6M1=P6M1&(~(x));SFRPI=0

 

- P60, P61Push Pull 타입으로 설정

PORT_SetP6PushPull(BIT0|BIT1);

#define PORT_SetP6PushPull(x)                                      SFRPI=1;P6M0=P6M0|(x); SFRPI=3;P6M1=P6M1&(~(x));SFRPI=0

해당 핀에 디지털 출력(1 or 0)을 출력 시키므로 Push-Pull 타입으로 설정하였음

* 포트 설정 시 설정에 필요한 레지스터가 SFR Page 몇 번에 있는지 필히 확인 해야 함

** SFRPI의 값은 필요한 페이지 번호로 변경했다가 레지스터의 제어가 마무리 되면 반드시 0번으로 바꾸어 둠

 

*** 사용된 매크로함수는 “API_Macro_MG82FG6D16.H”에서 찾아볼 수 있다.

\Megawin 8051\(EN)MG82F6D16_SampleCode_v1.20\MG82F6D16_GPIO_P60\code\include

 

4. 프로그램 실행

*** Keil compiler가 인스톨되어 있어야함 ***

해당 Example 폴더를 찾아가 KeilPrj폴더를 Open 한다.

\Megawin 8051\(EN)MG82F6D16_SampleCode_v1.20\ MG82F6D16_GPIO_P60\KeilPrj

 

해당 폴더의 Keil project 파일을 더블 클릭하여 실행시킨다.(MG82F6D16_DEMO.uvproj)

 

Rebuild 아이콘을 클릭하여 프로젝트를 컴파일 한다.

 

Demo BoardUSB Connector를 연결하여 전원을 인가하고, 전원 스위치를 ON시키고, OCD ICE를 연결한 상태에서 위 이미지의 Start/Stop Debug Session(Ctrl+F5) 버튼을 눌러 컴파일된 프로젝트의 디버그 데이터를 다운로드 시킨다.(컴파일 시 에러가 발생하지 않아야함)

 

 

다운로드 후 Run(F5) 버튼을 클릭하면 프로그램이 동작한다.

5. 동작 영상

https://youtube.com/shorts/QjQs6PIGTS8?feature=share

 

 

 

반응형

'MEGAWIN' 카테고리의 다른 글

MG82F6D Series CLK ILRCO P60OC  (0) 2022.11.11
MG82F6D Series CLK xtal  (0) 2022.11.10
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