使用Keil語言的嵌入式C編程教程(上)
Embedded C Programming Tutorial with Keil Language
Embedded System
嵌入式系統是指以單片機爲核心的嵌入式C編程軟硬件的結合,旨在完成特定的任務。這些類型的嵌入式系統正在我們的日常生活中使用,如洗衣機、錄像機、冰箱等。嵌入式系統首先由8051單片機介紹。
8051單片機簡介
8051微控制器是一個基本的微控制器,它是由英特爾公司自1970年首次推出。它是由8086處理器體系結構開發的。8051是一個微控制器家族,由飛利浦、阿特梅爾、戴爾等不同廠商開發。8051微控制器已經應用於從兒童玩具到大型汽車系統的許多嵌入式產品中。
8051微控制器是8位“CISC”結構。它由存儲器、串行通信、中斷、輸入/輸出端口和定時器/計數器組成,內置於一個集成芯片中,通過編程控制與之接口的外圍設備。程序存儲在微控制器的RAM中,但在編寫程序之前,必須瞭解微控制器的RAM結構。
嵌入式系統編程:基礎聲明
每個函數都是執行特定任務的語句的集合,一個或多個函數的集合稱爲編程語言。每一種語言都包含一些基本要素和語法規則。C語言程序設計是用字符集、變量、數據類型、常量、關鍵字、表達式等來編寫C語言程序。所有這些都在頭文件或庫文件下考慮,表示爲include<studio.h>
C語言的擴展稱爲嵌入式C語言。與以上相比,C語言的嵌入式編程具有一些額外的特性,如數據類型和關鍵字,頭文件或庫文件表示爲
#include
嵌入C附加關鍵字
·
sbit
·
bit
·
SFR
·
volatile
·
macros define
“sbit”用於聲明微控制器的單個管腳。例如,LED連接到P0.1管腳,不建議直接將值發送到端口管腳,首先,我們必須用另一個變量聲明管腳,然後才能在程序中的任何地方使用。
語法:sbit a=P0^1;//用變量聲明相應的pin//
a=0x01;//將值發送到端口pin//
“bit”用於檢查變量的狀態。
語法:bit c;//聲明位變量//
c=a;//c變量賦值//
if(c==1)//檢查條件true或false//
{
……
……
}
“SFR”關鍵字用於通過另一個名稱訪問SFR寄存器。SFR寄存器定義爲一個特殊的功能寄存器,它通過指示地址來包含所有與外圍設備相關的寄存器。SFR寄存器由SFR關鍵字聲明。SFR關鍵字必須是大寫字母。
語法:SFR port=0x00;//0x00是端口0地址,由端口變量聲明//
Port=0x01;//然後將值發送到端口0//
delay();
port=0x00;
delay();
“volatile”關鍵字是嵌入式系統開發中最重要的關鍵字。無法意外更改用volatile關鍵字值聲明的變量。它可以用於內存映射的外圍寄存器,由ISRs修改的全局變量。如果不使用volatile關鍵字來發送和接收數據,則會發生代碼錯誤或優化錯誤。
語法:volatile int k;
宏是用於將語句塊聲明爲預處理器指令的名稱。無論何時使用該名稱,它都將被宏的內容替換。宏表示定義。整個端口管腳由宏定義。
語法:#define dat Po;//整個端口由一個變量聲明//
dat=0x01;//發送到端口0的數據//
基本嵌入式C程序
每種操作系統的微控制器編程都不同。儘管已經存在很多操作系統,如Linux、Windows、RTOS等。然而,實時操作系統在嵌入式系統開發中有許多優點。本文討論了用8051單片機開發嵌入式C程序的基本方法。
用8051單片機實現LED閃爍
用8051單片機在七段顯示器上顯示數字
用8051單片機進行定時器/計數器的計算與編程
基於8051單片機的串行通信計算與編程
用8051單片機中斷程序
用8051單片機進行鍵盤編程
用8051單片機進行液晶顯示編程
用8051單片機實現LED閃爍
LED是一種半導體器件,應用廣泛,主要用於顯示。在測試過程中發現了大量的應用作爲指標來檢驗不同階段測試結果的有效性。它們非常便宜,而且很容易買到各種形狀、顏色和尺寸。LED用於設計信息顯示板和交通控制信號燈等。這裏的LED與8051微控制器的端口0接口。
- 01010101
10101010
#include<reg51.h> //header file//
void main() //the program execution stat point//
{
unsigned int i; //data type//
while(1) //for continuous loop//
{
P0=0x55; //send the hexa value to the port0//
for(i=0;i<30000;i++) //normal delay//
P0=0x3AA; //send the hexa value to the port0//
for(i=0;i<30000;i++) //normal delay//
}
}
- 00000001
00000010
00000100
.
.10000000
#include<reg51.h>
void main()
{
unsignedint i;
unsigned char j,b;
while(1)
{
P0=0x01;
b=P0;
for(j-0;j<3000;j++);
for(j=0;j<8;j++)
{
b=b<<1;
P0=b;
for(j-0;j<3000;j++);
}
}
}
- 00001111
11110000
#include<reg51.h>
void main()
{
unsignedint i;
while(1)
{
P0=0x0F;
for(j-0;j<3000;j++);
P0=0xF0;
for(j-0;j<3000;j++);
}
}
- 00000001
00000011
00000111
.
.11111111
#include<reg51.h>
void main()
{
unsignedint i;
unsigned char j,b;
while(1)
{
P0=0x01;
b=P0;
for(j-0;j<3000;j++);
for(j=0;j<8;j++)
{
b=b<<1;
b=b|0x01;
P0=b;
for(j-0;j<3000;j++);
}
}
}
用8051單片機在七段顯示器上顯示數字
七段式顯示器是最基本的電子顯示器,在許多系統中用來顯示數字信息。它由八個發光二極管組成,當發光二極管的適當組合打開時,這些發光二極管按順序連接,以便顯示0到9之間的數字。一次只能顯示一個數字。
- WAP to display the numbers form ‘0 to F’ on four 7segment
displays ?
#include<reg51.h>
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};
unsigned inti,j;
a=b=c=d=1;
while(1)
{
for(i=0;i<10;i++)
{
P2=n[i];
for(j=0;j<60000;j++);
}
}
}
- WAP to display the numbers from ’00 to 10’ on 7segment
displays ?
#include<reg51.h>
sbit a= P3^0;
sbit b= P3^1;
void display1();
void display2();
void delay();
void main()
{
unsignedchar n[10]={0×40,0xF9,0×24,0×30,0×19,0×12,0×02,0xF8,0xE00,0×10};
unsigned inti,j;
ds1=ds2=0;
while(1)
{
for(i=0,i<20;i++)
display1();
display2();
}
}
void display1()
{
a=1;
b=0;
P2=s[ds1];
delay();
a=1;
b=0;
P2=s[ds1];
delay();
}
void display2()
{
ds1++;
if(ds1>=10)
{
ds1=0;
ds2++;
if(ds2>=10)
{
ds1=ds2=0;
}
}
}
void delay()
{
unsignedint k;
for(k=0;k<30000;k++);
}