Keil 언어를 사용한 임베디드 C 프로그래밍 자습서

문제를 제거하기 위해 도구를 사용해보십시오





Embedded C는 전자 장치 개발을위한 소프트웨어 분야에서 가장 널리 사용되는 프로그래밍 언어입니다. 각 프로세서는 임베디드 소프트웨어와 연결되어 있습니다. 임베디드 C 프로그래밍 프로세서가 특정 기능을 수행하는 데 중요한 역할을합니다. 우리는 일상 생활에서 세탁기, 휴대폰, 디지털 카메라 등과 같은 많은 전자 장치를 자주 사용하며 임베디드 C로 프로그래밍 된 마이크로 컨트롤러를 기반으로 작동합니다.

임베디드 시스템 프로그래밍

임베디드 시스템 프로그래밍



작성된 C 코드는 더 안정적이고 이식 가능하며 확장 가능하며 실제로 이해하기 훨씬 쉽습니다. 첫 번째이자 가장 중요한 도구는 임베디드 시스템의 작동을 결정하는 임베디드 소프트웨어입니다. 임베디드 C 프로그래밍 언어는 마이크로 컨트롤러를 프로그래밍하는 데 가장 자주 사용됩니다.


임베디드 C 프로그래밍 튜토리얼 (8051)

임베디드 C 프로그래밍은 완전한 하드웨어 관련 프로그래밍 기술이기 때문에 프로그램을 작성하려면 임베디드 설계자는 특정 프로세서 또는 컨트롤러의 하드웨어에 대한 충분한 지식이 있어야합니다.



프로그래밍 튜토리얼

프로그래밍 튜토리얼

이전에는 어셈블리 수준 프로그래밍을 사용하여 많은 임베디드 응용 프로그램이 개발되었습니다. 그러나 C, COBOL 및 Pascal과 같은 다양한 고급 언어의 출현으로이 문제를 극복 할 수있는 이식성을 제공하지 않았습니다. 그러나 광범위하게 수용된 것은 C 언어였습니다. 임베디드 시스템 애플리케이션 개발 , 계속 그렇게합니다.

임베디드 시스템

임베디드 시스템은 임베디드 C 프로그래밍 소프트웨어와 하드웨어 부품의 조합으로 정의되며 주로 마이크로 컨트롤러로 구성되며 특정 작업을 수행하기위한 것입니다. 이러한 유형의 임베디드 시스템은 세탁기, 비디오 레코더, 냉장고 등과 같은 일상 생활에서 사용되고 있습니다. 임베디드 시스템은 8051 마이크로 컨트롤러에 의해 처음 도입되었습니다.

임베디드 시스템

임베디드 시스템

8051 마이크로 컨트롤러 소개

8051 마이크로 컨트롤러는 기본 마이크로 컨트롤러로 1970 년부터‘인텔사’에서 처음 소개했습니다. 8086 프로세서 아키텍처로 개발되었습니다. 8051은 Philips, Atmel, dalls 등과 같은 다양한 제조업체에서 개발 한 마이크로 컨트롤러 제품군입니다. 8051 마이크로 컨트롤러 유아용 장난감에서 대형 자동차 시스템에 이르기까지 다양한 임베디드 제품에 사용되었습니다.


8051 마이크로 컨트롤러

8051 마이크로 컨트롤러

8051 마이크로 컨트롤러는 8 비트 ‘CISC’아키텍처 . 메모리, 직렬 통신, 인터럽트, 입력 / 출력 포트 및 타이머 / 카운터로 구성되며 단일 통합 칩에 내장되어 있으며 인터페이스되는 주변 장치를 제어하도록 프로그래밍되어 있습니다. 프로그램은 마이크로 컨트롤러의 RAM에 저장되지만 프로그램을 작성하기 전에 RAM을 인식해야합니다. 조직 마이크로 컨트롤러의.

임베디드 시스템 프로그래밍 : 기본 선언

모든 함수는 특정 작업을 수행하는 문 모음이며 하나 이상의 함수 모음을 프로그래밍 언어라고합니다. 모든 언어는 몇 가지 기본 요소와 문법 규칙으로 구성됩니다. C 언어 프로그래밍은 문자 세트, 변수, 데이터 유형, 상수, 키워드, 표현식 등이 C 프로그램을 작성하는 데 사용되도록 설계되었습니다. 이 모든 것은 헤더 파일 또는 라이브러리 파일에서 고려되며 다음과 같이 표시됩니다.

#포함

임베디드 C 프로그래밍 개발

임베디드 C 프로그래밍 개발

C 언어의 확장을 임베디드 C 프로그래밍 언어라고합니다. 위와 비교하여 C 언어의 임베디드 프로그래밍에는 데이터 유형 및 키워드와 같은 몇 가지 추가 기능이 있으며 헤더 파일 또는 라이브러리 파일은 다음과 같이 표시됩니다.

#포함

임베디드 C 추가 키워드

  • sbit
  • 비트
  • SFR
  • 휘발성 물질
  • 매크로 정의

'sbit'는 마이크로 컨트롤러의 단일 PIN을 선언하는 데 사용됩니다. 예를 들어, LED는 P0.1 핀에 연결되어 있으므로 포트 핀에 직접 값을 보내는 것은 권장하지 않습니다. 먼저 다른 변수로 핀을 선언 한 다음 프로그램 어디에서나 사용할 수 있습니다.

구문 : sbit a = P0 ^ 1 // 변수를 사용하여 각 핀을 선언합니다.
a = 0x01 // 포트 핀으로 값 보내기 //

'비트'는 변수의 상태를 확인하는 데 사용됩니다.

구문 : bit c // 비트 변수 선언 //
c = a // 값이 c 변수에 할당 됨 //
if (c == 1) // 조건 참 또는 거짓 확인 //

{
… ..
……
}

'SFR'키워드는 다른 이름으로 SFR 레지스터에 액세스하는 데 사용됩니다. SFR 레지스터는 특수 기능 레지스터 , 주소를 표시하여 주변기기와 관련된 모든 레지스터를 포함합니다. SFR 레지스터는 SFR 키워드로 선언됩니다. SFR 키워드는 대문자 여야합니다.

구문 : SFR port = 0x00 // 0x00은 포트 변수에 의해 선언 된 port0 주소입니다.
Port = 0x01 // 그런 다음 값을 port0 //로 보냅니다.
지연()
포트 = 0x00
지연()

'휘발성'키워드는 임베디드 시스템 개발에서 가장 중요합니다. volatile 키워드 값으로 선언 된 변수는 예기치 않게 변경 될 수 없습니다. 메모리 매핑 된 주변 레지스터, ISR에 의해 수정 된 전역 변수에서 사용할 수 있습니다. 데이터 송수신에 volatile 키워드를 사용하지 않으면 코드 오류 또는 최적화 오류가 발생합니다.

구문 : volatile int k

매크로는 명령문 블록을 전 처리기 지시문으로 선언하는 데 사용되는 이름입니다. 이름이 사용될 때마다 매크로의 내용으로 대체됩니다. 매크로는 #define을 나타냅니다. 전체 포트 핀은 매크로에 의해 정의됩니다.

구문 : #define dat Po // 전체 포트가 변수로 선언 됨 //
dat = 0x01 // 포트로 데이터 전송 0 //

기본 임베디드 C 프로그램

마이크로 컨트롤러 프로그래밍은 각각 다릅니다. 운영 체제 유형 . Linux, Windows, RTOS 등과 같은 많은 운영 체제가 존재하지만. 그러나 RTOS는 임베디드 시스템 개발에 몇 가지 장점이 있습니다. 이 기사에서는 8051 마이크로 컨트롤러를 사용하여 임베디드 C 프로그래밍을 개발하기위한 기본 임베디드 C 프로그래밍에 대해 설명합니다.

임베디드 C 프로그래밍 단계

임베디드 C 프로그래밍 단계

  • 8051 마이크로 컨트롤러와 함께 사용하는 LED 깜박임
  • 8051 마이크로 컨트롤러를 사용하여 7 세그먼트 디스플레이에 숫자 표시
  • 8051 마이크로 컨트롤러를 사용한 타이머 / 카운터 계산 및 프로그램
  • 8051 마이크로 컨트롤러를 사용한 직렬 통신 계산 및 프로그램
  • 8051 마이크로 컨트롤러를 사용하는 인터럽트 프로그램
  • 8051 마이크로 컨트롤러를 사용한 키패드 프로그래밍
  • 8051 마이크로 컨트롤러를 사용한 LCD 프로그래밍

8051 마이크로 컨트롤러를 사용한 LED 깜박임

LED는 주로 표시 목적으로 많은 응용 분야에서 사용되는 반도체 장치입니다. 다양한 단계에서 결과의 유효성을 확인하기 위해 테스트 중에 지표로 광범위한 응용 프로그램을 찾고 있습니다. 그들은 매우 저렴하고 다양한 모양, 색상 및 크기로 쉽게 구할 수 있습니다. LED는 설계에 사용됩니다. 메시지 디스플레이 보드 그리고 트래픽 제어 신호등 등. 여기에서 LED는 8051 마이크로 컨트롤러의 PORT0과 인터페이스됩니다.

8051 마이크로 컨트롤러를 사용한 LED 깜박임

8051 마이크로 컨트롤러를 사용한 LED 깜박임

1. 01010101
10101010

#include // 헤더 파일 //
void main () // 프로그램 실행 상태 지점 //
{
unsigned int i // 데이터 유형 //
while (1) // 연속 루프 용 //
{
P0 = 0x55 // 6 진수 값을 포트로 전송 0 //
for (i = 0i<30000i++) //normal delay//
P0 = 0x3AA // 6 진수 값을 포트로 전송 0 //
for (i = 0i<30000i++) //normal delay//
}
}

2. 00000001

00000010

00000100

.

.

10,000,000

#포함

void main ()

{

unsignedint i

부호없는 char j, b

동안 (1)

{

P0 = 0x01

b = P0

for (j-0j<3000j++)

for (j = 0j<8j++)

{

b = b<<1

P0 = b

for (j-0j<3000j++)

}

}

}

3. 00001111

11110000

#포함

void main ()

{

unsignedint i

동안 (1)

{

P0 = 0x0F

for (j-0j<3000j++)

P0 = 0xF0

for (j-0j<3000j++)

}

}

4. 00000001

00000011

00000111

.

.

11111111

#포함

void main ()

{

unsignedint i

부호없는 char j, b

동안 (1)

{

P0 = 0x01

b = P0

for (j-0j<3000j++)

for (j = 0j<8j++)

0x01

P0 = b

for (j-0j<3000j++)

}

}

8051 마이크로 컨트롤러를 사용하여 7 세그먼트 디스플레이에 숫자 표시

그만큼 7 세그먼트 디스플레이 숫자 정보를 표시하기 위해 많은 시스템에서 사용되는 기본 전자 디스플레이입니다. LED의 적절한 조합이 켜지면 0에서 9까지의 숫자를 표시하기 위해 순차적으로 연결된 8 개의 LED로 구성됩니다. 한 번에 한 자리 만 표시 할 수 있습니다.

8051 마이크로 컨트롤러를 사용하여 7 세그먼트 디스플레이에 숫자 표시

8051 마이크로 컨트롤러를 사용하여 7 세그먼트 디스플레이에 숫자 표시

1. 4 개의 7 세그먼트 디스플레이에 숫자 형태 '0 ~ F'를 표시하는 WAP?

#포함
sbit a = P3 ^ 0
sbit b = P3 ^ 1
sbit c = P3 ^ 2
sbit d = P3 ^ 3
void main ()
{
unsignedchar n [10] = {0 × 40,0xF9,0 × 24,0 × 30,0 × 19,0 × 12,0 × 02,0xF8,0xE00,0 × 10}
서명하지 않은 당신, j
a = b = c = d = 1
동안 (1)
{
for (i = 0i<10i++)
{
P2 = n [i]
for (j = 0j<60000j++)
}
}
}

2. 7 세그먼트 디스플레이에 '00에서 10 '까지의 숫자를 표시하는 WAP?

#포함
sbit a = P3 ^ 0
sbit b = P3 ^ 1
무효 display1 ()
void display2 ()
무효 지연 ()
void main ()
{
unsignedchar n [10] = {0 × 40,0xF9,0 × 24,0 × 30,0 × 19,0 × 12,0 × 02,0xF8,0xE00,0 × 10}
서명하지 않은 당신, j
ds1 = ds2 = 0
동안 (1)
{
for (i = 0, i<20i++)
display1 ()
display2 ()
}
}
무효 display1 ()
{
a = 1
b = 0
P2 = s [ds1]
지연()
a = 1
b = 0
P2 = s [ds1]
지연()
}
void display2 ()
{
ds1 ++
if (ds1> = 10)
{
ds1 = 0
ds2 ++
if (ds2> = 10)
{
ds1 = ds2 = 0
}
}
}
무효 지연 ()
{
unsignedint k
for (k = 0k<30000k++)
}

8051 마이크로 컨트롤러를 사용한 타이머 / 카운터 계산 및 프로그램

지연은 애플리케이션 소프트웨어 개발에서 중요한 요소 중 하나입니다. 그러나 정상적인 지연은 타이머 지연을 구현하기위한이 문제를 극복하는 귀중한 결과를 제공하지 않습니다. 그만큼 타이머 및 카운터 카운트 펄스로 귀중한 시간 지연을 제공하기 위해 많은 애플리케이션에서 사용되는 마이크로 컨트롤러의 하드웨어 구성 요소입니다. 두 작업 모두 소프트웨어 기술로 구현됩니다.

타이머 지연

T1M2 (timer1 및 mode2)를 사용하여 500us 시간 지연을 생성하는 WAP?

#포함

void main ()
{
서명되지 않은 char i
TMOD = 0x20 // 타이머 모드 설정 //
for (i = 0i<2i++) //double the time daly//
{
TL1 = 0x19 // 시간 지연 설정 //
TH1 = 0x00
TR1 = 1 // 타이머 oN //
While (TF1 == 0) // 플래그 비트 확인 //
TF1 = 0
}
TR1 = 0 // 타이머 꺼짐 //
}

정상 루프 지연

무효 지연 ()

{
unsignedint k
for (k = 0k<30000k++)
}

8051 마이크로 컨트롤러를 사용한 직렬 통신 계산 및 프로그램

직렬 통신은 일반적으로 신호를 송수신하는 데 사용됩니다. 8051 마이크로 컨트롤러는 UART 직렬 통신 Rx 및 Tx 핀에 의해 송수신되는 신호. UART는 데이터 바이트를 가져 와서 순차적 인 방식으로 개별 비트를 보냅니다. 레지스터는 데이터를 수집하고 메모리에 저장하는 방법입니다. UART는 반이중 프로토콜입니다. 반이중은 데이터를 전송하고 수신하는 것을 의미하지만 동시에는 아닙니다.

8051 마이크로 컨트롤러를 사용한 직렬 통신 계산 및 프로그램

8051 마이크로 컨트롤러를 사용한 직렬 통신 계산 및 프로그램

1. WAP 문자‘S’를 직렬 창으로 전송하려면 9600을 보오율로 사용합니까?

28800은 8051 마이크로 컨트롤러의 최대 전송 속도입니다.

28800/9600 = 3

전송 속도 '3'은 타이머에 저장됩니다.

#포함

void main ()

{
SCON = 0x50 // 직렬 통신 시작 //
TNOD = 0x20 // 타이머 모드 선택 //
TH1 = 3 // 전송 속도로드 //
TR1 = 1 // 타이머 ON //
SBUF =’S’// 레지스터에 문자 저장 //
while (TI == 0) // 인터럽트 레지스터 확인 //
TI = 0
TR1 = 0 // 타이머 끄기 //
while (1) // 연속 루프 //
}

2. 하이퍼 터미널에서 데이터를 수신하고 해당 데이터를 9600 보드를 사용하여 마이크로 컨트롤러의 PORT 0으로 보내기위한 WAP?

28800은 8051 마이크로 컨트롤러의 최대 전송 속도입니다.

28800/9600 = 3

전송 속도 '3'은 타이머에 저장됩니다.

#포함

void main ()
{
SCON = 0x50 // 직렬 통신 시작 //
TMOD = 0x20 // 타이머 모드 선택 //
TH1 = 3 // 전송 속도로드 //
TR1 = 1 // 타이머 ON //
PORT0 = SBUF // SBUF에서 포트로 데이터 전송 0 //
while (RI == 0) // 인터럽트 레지스터 확인 //
RI = 0
TR1 = 0 // 타이머 끄기 //
while (1) // 문자 수신시 프로그램 중지 //
}

8051 마이크로 컨트롤러를 사용하는 인터럽트 프로그램

인터럽트는 현재 프로그램을 강제로 중지하고 다른 프로그램을 즉시 실행하도록하는 신호입니다. 8051 마이크로 컨트롤러는 내부 및 외부인 6 개의 인터럽트를 제공합니다. 인터럽트 소스 . 인터럽트가 발생하면 마이크로 컨트롤러는 현재 작업을 일시 중지하고 ISR을 실행하여 인터럽트를 처리 한 다음 마이크로 컨트롤러가 최근 작업으로 돌아갑니다.

WAP는 타이머 0 인터럽트 발생시 왼쪽 시프트 동작을 수행하고 주 기능에서 P0에 대한 인터럽트 동작을 수행합니까?

#포함

서명되지 않은 char b

void timer0 () 인터럽트 2 // 선택된 timer0 인터럽트 //
{
b = 0x10
P1 = b<<2
}
void main ()
{
서명되지 않은 char a, i
IE = 0x82 // 타이머 0 인터럽트 활성화 //
TMOD = 0x01
TLo = 0xFC // 인터럽트 타이머 //
TH1 = 0xFB
TR0 = 1
a = 0x00
동안 (1)
{
for (i = 0i<255i++)
{
++
Po = a
}
}
}

8051 마이크로 컨트롤러를 사용한 키패드 프로그래밍

매트릭스 키패드는 사용자가 필요한 작업을 수행 할 수 있도록 많은 내장형 애플리케이션에서 사용되는 아날로그 스위칭 장치입니다. ㅏ 매트릭스 키패드 행과 열의 매트릭스 형식의 스위치 배열로 구성됩니다. 행과 열은 마이크로 컨트롤러에 연결되어 스위치 행이 한 핀에 연결되고 각 열의 스위치가 다른 핀에 연결되어 작업을 수행합니다.

8051 마이크로 컨트롤러를 사용한 키패드 프로그래밍

8051 마이크로 컨트롤러를 사용한 키패드 프로그래밍

1. WAP는 스위치를 눌러 LED를 토글합니다.

#포함
sbit a = P3 ^ 0
sbit b = P3 ^ 1
sbit c = P3 ^ 2
sbit d = P3 ^ 3
무효 지연 ()
void main ()
{
동안 (1)
{
a = 0
b = 1
c = 1
d = 1
지연()
a = 1
b = 0
c = 1
d = 1
무효 지연 ()
{
서명되지 않은 char i
TMOD = 0x20 // 타이머 모드 설정 //
for (i = 0i<2i++) //double the time daly//
{
TL1 = 0x19 // 시간 지연 설정 //
TH1 = 0x00
TR1 = 1 // 타이머 oN //
While (TF1 == 0) // 플래그 비트 확인 //
TF1 = 0
}
TR1 = 0 // 타이머 꺼짐 //
}

2. 키패드의 '1'키를 눌러 LED를 켜려면 WAP?

#포함

sbit r1 = P2 ^ 0
sbit c1 = P3 ^ 0
sbit LED = P0 ^ 1

void main ()
{

r1 = 0
if (c1 == 0)
{

LED = 0xff
}
}

3. 키패드의 각 키를 눌러 7 세그먼트에 숫자 0,1,2,3,4,5를 표시하려면 WAP?

#포함

sbit r1 = P2 ^ 0

sbit c1 = P3 ^ 0

sbit r2 = P2 ^ 0

sbit c2 = P3 ^ 0

sbit a = P0 ^ 1

void main ()

{

r1 = 0 a = 1

if (c1 == 0)

{

a = 0xFC

}

If (c2 == 0)

{

a = 0x60

}

if (c3 == 0)

{

a = 0xDA

}

If (c4 == 0)

{

a = 0xF2

}

}

8051 마이크로 컨트롤러를 사용한 LCD 프로그래밍

그만큼 LCD 디스플레이 정보를 텍스트 또는 이미지 형식으로 표시하기 위해 많은 응용 프로그램에서 자주 사용되는 전자 장치입니다. LCD는 화면에 문자를 쉽게 표시 할 수있는 디스플레이입니다. LCD 디스플레이는 마이크로 컨트롤러에 연결하는 데 사용되는 8 개의 데이터 라인과 3 개의 제어 라인으로 구성됩니다.

8051 마이크로 컨트롤러를 사용한 LCD 프로그래밍

8051 마이크로 컨트롤러를 사용한 LCD 프로그래밍

LED 디스플레이에 'EDGEFX KITS'를 표시하는 WAP?

#포함
# 캠 P0 정의

voidlcd_initi ()
voidlcd_dat (부호없는 문자)
voidlcd_cmd (unsigned char)
무효 지연 ()
void display (unsigned char * s, unsigned char r)

sbitrs = P2 ^ 0
sbitrw = P2 ^ 1
sbit = P2 ^ 2
void main ()
{

lcd_initi ()
lcd_cmd (0x80)
지연 (100)
lcd_cmd (0xc0)
display ( 'edgefx 키트', 11)
동안 (1)
}

void display (unsigned char * s, unsigned char r)
{
unsignedint w
for (w = 0w{
lcd_data (s [w])
}
}
voidlcd_initi ()
{
lcd_cmd (0 × 01)
지연 (100)
lcd_cmd (0 × 38)
지연 (100)
lcd_cmd (0 × 06)
지연 (100)
lcd_cmd (0x0c)
지연 (100)
}
voidlcd_dat (부호없는 문자 dat)
{
빗 = 저것
rs = 1
rw = 0
in = 1
지연 (100)
에서 = 0
}
}
voidlcd_cmd (unsigned char cmd)
{
온 = cmd
rs = 0
rw = 0

in = 1
지연 (100)
에서 = 0
}
무효 지연 (부호없는 정수 n)
{

unsignedint a
for (a = 0a}

이 기사가 몇 가지 예제 프로그램과 함께 8051 마이크로 컨트롤러를 사용하는 임베디드 시스템 프로그래밍에 대한 기본 정보를 제공하기를 바랍니다. 임베디드 C 프로그래밍 튜토리얼에 대한 자세한 내용은 아래 댓글 섹션에 댓글과 쿼리를 게시하십시오.