LED 인터페이싱은 마이크로 컨트롤러를 시작하면서 가장 먼저 시도 할 것입니다. 따라서이 튜토리얼 에서는 LED를 8051 마이크로 컨트롤러와 인터페이스하고 LED 를 깜박이는 C 프로그램을 작성합니다. 우리는 ATMEL의 8051 제품군 중 매우 인기있는 마이크로 컨트롤러 AT89S52를 사용했습니다.
자세히 알아보기 전에 마이크로 컨트롤러 AT89S52 에 대한 간략한 아이디어를 얻어야 합니다. 40 핀 마이크로 컨트롤러이며 4 개의 포트 (P0, P1, P2, P3)가 있으며 각 포트에는 8 개의 핀이 있습니다. 소프트웨어 관점에서 각 포트를 8 비트 레지스터로 간주 할 수 있습니다. 하나의 입력 / 출력 라인이있는 각 핀은 모든 핀이 입력 및 출력에 사용될 수 있음을 의미합니다. 즉, 센서와 같은 일부 장치에서 데이터를 읽거나 일부 출력 장치에 출력을 제공하는 데 사용할 수 있습니다. 일부 핀에는 아래 핀 다이어그램에서 괄호에 언급 된 이중 기능이 있습니다. 인터럽트, 카운터, 타이머 등과 같은 이중 기능.
AT89S52에는 두 가지 유형의 메모리가 있습니다. 첫 번째는 256 바이트의 메모리가있는 RAM이고 두 번째는 8k 바이트의 메모리가있는 EEPROM (Electronically Erasable and Programmable Read Only Memory)입니다. RAM은 프로그램 실행 중에 데이터를 저장하는 데 사용되며 EEPROM은 프로그램 자체를 저장하는 데 사용됩니다. EEPROM은 프로그램을 구울 때 사용한 플래시 메모리입니다.
회로도 및 설명
포트 1의 핀 1을 사용하여 LED를 연결합니다. 에서는 임베디드 C 프로그래밍 우리 P1_0를 사용하여 포트 (1)의 PIN (1)에 액세스 할 수있다. 11.0592MHz 주파수의 수정 발진기를 PIN 19 및 18, 즉 XTAL1 및 XTAL2에 연결했습니다. 수정 발진기는 클럭 펄스를 생성하는 데 사용되며 클럭 펄스는 모든 이벤트를 동기화하는 데 필수적인 타이밍 계산을위한 수단을 제공하는 데 사용됩니다. 이러한 유형의 크리스탈은 컴퓨터, 시계 등과 같은 거의 모든 현대 디지털 장비에 사용됩니다. 가장 일반적으로 사용되는 크리스탈은 석영입니다. 공진 발진기 회로이고 커패시터는 수정을 발진하는 데 사용되므로 여기에 22pf 커패시터를 연결했습니다. 더 많은 것을 알기 위해 "공진 회로"에 대해 읽을 수 있습니다.
8051 마이크로 컨트롤러 89S52와 연결되는 LED 의 회로도 는 위 그림에 나와 있습니다. 핀 31 (EA)은 액티브 로우 핀인 Vcc에 연결됩니다. 외부 메모리를 사용하지 않을 때는 Vcc에 연결해야합니다. 핀 30 (ALE) 및 핀 29 (PSEN)는 마이크로 컨트롤러를 외부 메모리에 연결하는 데 사용되며 핀 31은 마이크로 컨트롤러가 접지에 연결될 때 외부 메모리를 사용하도록 지시합니다. 외부 메모리를 사용하지 않으므로 Pin31을 Vcc에 연결했습니다.
핀 9 (RST)는 마이크로 컨트롤러를 재설정하고 프로그램을 처음부터 다시 시작하는 데 사용되는 재설정 PIN입니다. HIGH에 연결되면 마이크로 컨트롤러를 재설정합니다. RST 핀을 연결하기 위해 표준 리셋 회로, 10k 옴 저항 및 1uF 커패시터를 사용했습니다.
이제 여기서 흥미로운 부분은 LED를 반대로 연결한다는 것입니다. 마이크로 컨트롤러가 LED를 발광하기에 충분한 전력을 제공하지 않기 때문에 마이크로 컨트롤러가 LED를 발광하기에 충분한 전력을 제공하지 않기 때문에 여기에서 LED는 핀 P1_0이 1 일 때와 같이 부정적인 논리로 실행됩니다. 그러면 LED가 꺼지고 핀 출력이 0이면 LED가 켜집니다. PIN 출력이 0이면 접지처럼 동작하고 LED가 켜집니다.
코드 설명
헤더 REGX52.h가 기본 레지스터 정의를 포함하도록 포함되었습니다. int, char, unsigned int, float 등과 같은 임베디드 C에는 많은 유형의 변수와 상수가 있으며 쉽게 배울 수 있습니다. 여기서는 범위가 0에서 65535 사이 인 unsigned int를 사용합니다. 지연을 생성하기 위해 "for loop"를 사용하여 LED가 일정 시간 동안 (P1_0 = 0, 네거티브 LED 논리) 켜지고 (P1_0 = 1) 꺼집니다., 네거티브 LED 로직) 지연 시간. 일반적으로 "for loop"가 1275 번 실행되면 1ms의 지연이 발생하므로 DELAY 생성을위한 'delay'함수를 만들어 메인 프로그램 (main ())에서 호출했습니다. 주 함수에서 "delay"함수를 호출하는 동안 DELAY 시간 (ms 단위)을 전달할 수 있습니다. 프로그램에서“While (1)”은 프로그램이 무한히 실행됨을 의미합니다.
"for"루프를 1275 번 실행하면 1ms의 지연이 발생하는 방식에 대해 간략하게 설명합니다.
8051에서는 1 개의 기계주기를 실행하는 데 12 개의 수정 펄스가 필요하며 11.0592Mhz 수정을 사용합니다.
따라서 1 개의 기계주기에 필요한 시간: 12 / 11.0592 = 1.085us
따라서 1275 * 1.085 = 1.3ms, "for"루프의 1275 배는 거의 1ms의 지연을 제공합니다.
"C"프로그램에 의해 생성되는 정확한 시간 지연은 오실로스코프 (CRO)에서 측정 할 때 계산하기 매우 어렵습니다. (j = 0; j <1275; j ++)는 거의 1ms의 지연을 제공하기 때문입니다.
따라서 우리는 LED를 8051 마이크로 컨트롤러와 간단히 인터페이스 함으로써 이해할 수 있습니다. 간단한 코딩으로 마이크로 컨트롤러 를 사용하는 소프트웨어 (프로그래밍)를 통해 하드웨어를 상호 작용하고 제어 할 수 있습니다. 또한 프로그래밍을 통해 마이크로 컨트롤러의 각 포트와 핀을 조작 할 수 있습니다.