使用Keil语言的嵌入式C编程教程(上)
使用Keil語言的嵌入式C編程教程(上)
Embedded C Programming Tutorial with Keil Language
Embedded System
嵌入式系統(tǒng)是指以單片機(jī)為核心的嵌入式C編程軟硬件的結(jié)合,旨在完成特定的任務(wù)。這些類型的嵌入式系統(tǒng)正在我們的日常生活中使用,如洗衣機(jī)、錄像機(jī)、冰箱等。嵌入式系統(tǒng)首先由8051單片機(jī)介紹。
8051單片機(jī)簡介
8051微控制器是一個基本的微控制器,它是由英特爾公司自1970年首次推出。它是由8086處理器體系結(jié)構(gòu)開發(fā)的。8051是一個微控制器家族,由飛利浦、阿特梅爾、戴爾等不同廠商開發(fā)。8051微控制器已經(jīng)應(yīng)用于從兒童玩具到大型汽車系統(tǒng)的許多嵌入式產(chǎn)品中。
8051微控制器是8位“CISC”結(jié)構(gòu)。它由存儲器、串行通信、中斷、輸入/輸出端口和定時(shí)器/計(jì)數(shù)器組成,內(nèi)置于一個集成芯片中,通過編程控制與之接口的外圍設(shè)備。程序存儲在微控制器的RAM中,但在編寫程序之前,必須了解微控制器的RAM結(jié)構(gòu)。
嵌入式系統(tǒng)編程:基礎(chǔ)聲明
每個函數(shù)都是執(zhí)行特定任務(wù)的語句的集合,一個或多個函數(shù)的集合稱為編程語言。每一種語言都包含一些基本要素和語法規(guī)則。C語言程序設(shè)計(jì)是用字符集、變量、數(shù)據(jù)類型、常量、關(guān)鍵字、表達(dá)式等來編寫C語言程序。所有這些都在頭文件或庫文件下考慮,表示為include<studio.h>
C語言的擴(kuò)展稱為嵌入式C語言。與以上相比,C語言的嵌入式編程具有一些額外的特性,如數(shù)據(jù)類型和關(guān)鍵字,頭文件或庫文件表示為
#include
嵌入C附加關(guān)鍵字
·
sbit
·
bit
·
SFR
·
volatile
·
macros define
“sbit”用于聲明微控制器的單個管腳。例如,LED連接到P0.1管腳,不建議直接將值發(fā)送到端口管腳,首先,我們必須用另一個變量聲明管腳,然后才能在程序中的任何地方使用。
語法:sbit a=P0^1;//用變量聲明相應(yīng)的pin//
a=0x01;//將值發(fā)送到端口pin//
“bit”用于檢查變量的狀態(tài)。
語法:bit c;//聲明位變量//
c=a;//c變量賦值//
if(c==1)//檢查條件true或false//
{
……
……
}
“SFR”關(guān)鍵字用于通過另一個名稱訪問SFR寄存器。SFR寄存器定義為一個特殊的功能寄存器,它通過指示地址來包含所有與外圍設(shè)備相關(guān)的寄存器。SFR寄存器由SFR關(guān)鍵字聲明。SFR關(guān)鍵字必須是大寫字母。
語法:SFR port=0x00;//0x00是端口0地址,由端口變量聲明//
Port=0x01;//然后將值發(fā)送到端口0//
delay();
port=0x00;
delay();
“volatile”關(guān)鍵字是嵌入式系統(tǒng)開發(fā)中最重要的關(guān)鍵字。無法意外更改用volatile關(guān)鍵字值聲明的變量。它可以用于內(nèi)存映射的外圍寄存器,由ISRs修改的全局變量。如果不使用volatile關(guān)鍵字來發(fā)送和接收數(shù)據(jù),則會發(fā)生代碼錯誤或優(yōu)化錯誤。
語法:volatile int k;
宏是用于將語句塊聲明為預(yù)處理器指令的名稱。無論何時(shí)使用該名稱,它都將被宏的內(nèi)容替換。宏表示定義。整個端口管腳由宏定義。
語法:#define dat Po;//整個端口由一個變量聲明//
dat=0x01;//發(fā)送到端口0的數(shù)據(jù)//
基本嵌入式C程序
每種操作系統(tǒng)的微控制器編程都不同。盡管已經(jīng)存在很多操作系統(tǒng),如Linux、Windows、RTOS等。然而,實(shí)時(shí)操作系統(tǒng)在嵌入式系統(tǒng)開發(fā)中有許多優(yōu)點(diǎn)。本文討論了用8051單片機(jī)開發(fā)嵌入式C程序的基本方法。
用8051單片機(jī)實(shí)現(xiàn)LED閃爍
用8051單片機(jī)在七段顯示器上顯示數(shù)字
用8051單片機(jī)進(jìn)行定時(shí)器/計(jì)數(shù)器的計(jì)算與編程
基于8051單片機(jī)的串行通信計(jì)算與編程
用8051單片機(jī)中斷程序
用8051單片機(jī)進(jìn)行鍵盤編程
用8051單片機(jī)進(jìn)行液晶顯示編程
用8051單片機(jī)實(shí)現(xiàn)LED閃爍
LED是一種半導(dǎo)體器件,應(yīng)用廣泛,主要用于顯示。在測試過程中發(fā)現(xiàn)了大量的應(yīng)用作為指標(biāo)來檢驗(yàn)不同階段測試結(jié)果的有效性。它們非常便宜,而且很容易買到各種形狀、顏色和尺寸。LED用于設(shè)計(jì)信息顯示板和交通控制信號燈等。這里的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單片機(jī)在七段顯示器上顯示數(shù)字
七段式顯示器是最基本的電子顯示器,在許多系統(tǒng)中用來顯示數(shù)字信息。它由八個發(fā)光二極管組成,當(dāng)發(fā)光二極管的適當(dāng)組合打開時(shí),這些發(fā)光二極管按順序連接,以便顯示0到9之間的數(shù)字。一次只能顯示一個數(shù)字。
- 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++);
}
總結(jié)
以上是生活随笔為你收集整理的使用Keil语言的嵌入式C编程教程(上)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 嵌入式C程序基础与编程结构
- 下一篇: 使用Keil语言的嵌入式C编程教程(下)