51单片机c语言总结材料.docx

上传人:b****6 文档编号:4586089 上传时间:2022-12-07 格式:DOCX 页数:27 大小:31.93KB
下载 相关 举报
51单片机c语言总结材料.docx_第1页
第1页 / 共27页
51单片机c语言总结材料.docx_第2页
第2页 / 共27页
51单片机c语言总结材料.docx_第3页
第3页 / 共27页
51单片机c语言总结材料.docx_第4页
第4页 / 共27页
51单片机c语言总结材料.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

51单片机c语言总结材料.docx

《51单片机c语言总结材料.docx》由会员分享,可在线阅读,更多相关《51单片机c语言总结材料.docx(27页珍藏版)》请在冰豆网上搜索。

51单片机c语言总结材料.docx

51单片机c语言总结材料

入门有针对性的解决一些简单的实际问题,边理论边实践学一样会一样

基本实验:

LED流水灯,数码管显示,键盘控制,音乐播放,继电器控制I2C通信实验,串口通信实验,红外线遥控信号解码实验等

单片机的定义分类和内部组成

1单片机就是中央处理器CPU,随机存储器RAM。

只读存储器ROM。

定时、计数器和各种输入输出接口I/o接口电路等部件集成在一块电路芯片上的微型计算机。

2,1分类按制造工艺分:

HMOS和CHMOSCHMOS包括80c51等中间加了C功耗要小

适合便携式手提式和野外作业。

2分类按不同容量的存储器配置分:

51子系列和52子系列

51表示单片机最后一位数字为1作为标志。

片内带有4KbROM或EPROM(ErasableProgrammableROM,可擦除可编程ROM,128BRAM,两个16位定时器/计数器和5个中段器52系列是增强型各项指标都高。

AT89S51是AT89C51的升级版支持ISP在线更新程序ISP(InternetServiceProvider

内部集成看门狗计时器等。

3.1串行接口就是接口数据传送

3.2中断控制系统接收中断请求如定时时间到,需要鸣笛报警类似stoptodo停下来去执行ROM中特定的每段程序,执行完后再继续执行先前中断的程序

时钟电路控制节拍工作。

一个典型的单片机应用系统包括输入电路,单片机,输出电路

把他想象成电脑。

单片机的应用:

p5

十六进制A10B11C12D13E14F15

记A10和D13点得13点F15不是F16

十六进制加H

逻辑数据的运算

逻辑与。

两个输入一个输出中间加一个恒定5v电压

有0为0,全1出1

逻辑或有1为1,全0出0;

字长通常与计算机内部的寄存器和运算器数据总线的宽度一致

 

实例1功能感受protues仿真单片机播放《渴望》主题曲

运用protues打开仿真原理图。

对单片机进行处理编辑editcomponent,选取目标文件hex

Clockfrequency时钟频率

Ok

原理图编辑窗口没有滚动条,可通过预览窗口该表原理图的可视范围。

Protues双击右键删除

先单击鼠标右键,可通过鼠标左键可以编辑元器件的属性

鼠标右键来删除画错的连线

中键缩放原理图

新建即保存新建设计文件

Junctiondotmode连接点

Subcircuitmode子电路lab用总线时会用到

Terminalsmode终端接口,有VCC地输出输入等接口

Devicepinsmode器件引脚用于绘制各种引脚。

Graphmode仿真图表,用于各种分析,如noiseanalysis

Taperecordermode录音机

Generatormode信号发生器

Voltageprobemode电压探针仿真图表用

Currentprobemode电流探针仿真图表用

Virtualinstrumentsmode虚拟仪表有示波器可显示工作波形

Resistors电阻

Capacitors电容

Crystal晶振

Radianlelectrolytic圆柱形电解电容

Keywords输入resistors470r或功率先选择元器件后放元器件

Led+yellow

Dragobject拖动对象

Editiproperties编辑属性

Rotateclockwise顺时针旋转90°

Rotateanti-clockwise逆时针旋转90°

X-mirror水平翻转

Y-mirror垂直翻转

删可以右键双击

双击鼠标左键编辑label

放置电源和地必须编辑正确的label如VCC地GND

各元器件引脚通过总线的连接并不表示真正意义上的电气连接,需要添加网络标号。

要运行双击单片机

基本

电源5V

振荡电路:

单片机是一种时序电路,必须施加脉冲信号才能工作。

在它的内部有一个时钟产生电路,只要接上两个电容和一个晶振即可正常工作。

P30

复位电路;启动后让单片机从初始状态开始执行程序。

EA一横:

接正电源端,表示使用内部程序存储器。

注意:

观察仿真效果时,晶振电路,复位电路和EA引脚和电路的连接可以省略。

Keil软件源程序后缀。

C必须手工输入,表示为c语言程序,让keilc51采用对应的c语言的方式来编译源程序。

#include包含51单片机寄存器定义的头文件

将新建的源程序文件加载到项目管理器右击sourcegroup文件addc文件

单片机不能处理c,必须将c转换成二进制或十六进制代码,汇编或编译。

用鼠标右键点击target进入optionsfortarget确认output选项中createhex

重新构造所有目标

程序烧录器及烧录软件的使用

单片机软硬件系统仿真成功后,要真正投入实际应用,必须将程序烧写入单片机芯片,A51程序烧录器和

先将COM接口(用作数据通信)与计算机的COM接口(RS-232)连接好,然后将单片机安插在烧录器的插座中,再用一根USB线将USB接口与计算机的USB接口连接,让计算机通过这根USB线向烧录器提供+5V电源

使用烧录器前,手动设置一些,参数标签页,根据COM口,设置好串口,波特率设置为28800;

点击自动擦除器件命令,点击打开文件命令选择单片机文件十六进制文件hex再点击打开点击自动写器件。

实例4用单片机控制一个灯闪烁

Led灯亮存在电压差和正向偏置

延迟函数

Voidmain(void)//两个void分别表示无须返回值和没有参数传递

{

Unsignedinti;//定义无符号整数,最大65535

For(i=0;i<20000;i++)

;只有一个分号表示什么都不做,等待一个机器周期

}

0x中的0是数字0,而不是字母O

郁闷一编写keil时,

文档第一行必须是#include

虚拟仪表

示波器oscilloscope

Protues示波器面板?

及使用

单片机需要一个时钟信号送给内部个电路,才能使他们有节拍的工作,时钟信号的频率由外部振荡电路的晶振频率决定,51系列单片机的机器周期是由12个振荡周期组成。

指令周期:

单片机执行一条指令的时间。

时钟频率越低,延时的时间就越长,灯闪烁的速度就越慢。

 

实例5将p1口状态送入p0口p2口p3口

利用单片机工作速度快的特点,无限循环可以让单片机不停地把p1口的电平状态送到p0口p2口和p3口。

引脚接地低电平被输入到p口

实例6使用p3口流水点亮8位led

记忆,0xfe111111100xfd111111010xfb111110110xf711110111

0xef111011110xdf110111110xbf101111110x7f01111111

实例7通过对p3口地址的操作流水点亮8位led

单片机都有固定的地址,记忆:

张三在教室的第2排第5列

老师可以说清张三回答问题也可以说请第2排第5列的同学答题。

Sfrx=0xb0;通过关键字sfr将x定义为p2的地址0xb0

定义后,程序中对x的操作就相当于对地址0xb0即p3的操作

类似于指针

P3口的固定地址是BOH

MCS-51单片机存储器的基本结构

它有两种1即程序存储器和2数据存储器

从物理MSC-51有4个存储地址空间,即片内程序存储器和片外程序存储器

程序存储器受EA一横外接电平的控制。

1当EA一横接地时,单片机只能使用外部程序存储器

2当EA一横接+5v是单片机先使用内部程序存储器,容量不够时自动使用外部程序存储器。

特殊功能寄存器

ACC累加器

标识符

名称

地址

ACC

累加器

E0H

B

b寄存器

F0H

PSW

程序状态字

D0H

SP

堆栈指针

81H

DRTR

数据指针

83H82H

P0

80H

P1

90H

P2

A0H

P3

B0H

IP

中断优先级控制

B8H

IE

允许中断控制

A8H

TMOD

定计方式控制

89H

TCON

定计控制

88H

TH0

定计0高位字节

8CH

TL0

定计0低位字节

8AH

TH1

定计1高位字节

8DH

TL1

定计1低位字节

8BH

SCON

串行控制

98H

SBUF

串行数据缓冲器

99H

PCON

电源控制

87H

单片机的复位电路

P54页?

单片机C语言开发基础

#include

C注释

1种采用/*。

*/可以注释多行内容

2种采用//但只能注释一行

ANSI标准定义的关键字

P57记忆思考

P58跳过

数据类型表p59页

指针型数据

位类型数据

空类型数据

延时函数不需要返回值。

X++先用x的值,再让x加1

逻辑与&&逻辑或||逻辑非!

按位与&25&77=9

按位或|25|77=93

按位异或^相异为1,相同出0

按位取反~有0出1,有1出0

左移运算符<<将一个二进制数的各位全部左移若干位,移动的过程中,高位丢弃,低位补0.w=0x3a00111010Bw<<2,w=11101000B

>>低位丢弃,高位补0

赋值运算符

逗号运算符

条件运算符

强制转换运算符?

实例8用不同数据类型的数据控制led的闪烁

使用无符号整型数据和无符号字符数据来设计延时函数。

 

由于整型数据占两个字节,而无符号字符型数据仅占一个字节,因此对无符号整型数据进行操作花费的时间就要长一些,整型数据要实现100次循环,消耗的时间约800个机器周期。

无符号100占300个。

为了提高运行效率,尽可能用无符号字符型数据。

实例9用p0口和p1口分别显示加法和减法运算结果

其实就是利用二进制的单位数值进行亮1不亮0的表示

乘法除法就是利用二进制转化为十进制再进行处理

实例12用自增运算控制p0口8位ked的闪烁花样

只要送到p0口的数值发生变化,p0口8位led点亮的状态就会发生变化。

可以先将变量的初值送到p0口延迟一段时间,再利用自增运算使变量加1,然后将新的变量值送到p0口并延时一段时间,即可使8位led的闪烁花样不断变化,

UnsignedcharI;定义无符号字符型变量,其值不超过255

运用变量的值变化和将变量的值送到p口用来变化。

For(i=0;i<255;i++)

实例13用p0口显示逻辑与的运算

P0=(4>0)&&(9>0xab)=1&&0=0;将运算结果送到p0口

实例14用p0口显示条件运算的结果

P0=(8>4)?

8:

4;P0=8=00001000B

实例15;用p0口显示按位异或运算结果

异或相异出1,相同出0;记忆异性才能很火热的做出子女

P0=0xa2^0x3c异或要做必须上顶^很公平应用

实例16用p0口显示左移的运算结果

实例17万能逻辑电路

F=EY+Z逻辑函数p77图

1专门设计数字电路,实现逻辑功能

2通过单片机编程来实现逻辑功能软件即硬件

//实例17:

"万能逻辑电路"实验

#include//包含单片机寄存器的头文件

sbitF=P1^4;//将F位定义为P1.4

sbitX=P1^5;//将X位定义为P1.5

sbitY=P1^6;//将Y位定义为P1.6

sbitZ=P1^7;//将Z位定义为P1.7

voidmain(void)

{

while

(1)

{

F=((~X)&Y)|Z;//将逻辑运算结果赋给F

;

}

}

实例18用右移实现流水灯

前提设p口为0xff八次右移一位高位丢弃低位补0

延迟用的变量因为要取大数所以必须用int

后面因为要快所以取char型变量

因为单片机运行快。

所以led灯闪后要延迟。

C语言语句

If(S1==0)

P1=0x00;如果按键s按下接地(相应位为低电平),

Swich整型break三者紧密

While语句花括号运用和一般情况下,在循环体中应该有让循环停止的语句。

Dowhile语句注意;

Do和while连用while后面的分号不能丢,它表示整个循环语句的结束

Do循环语句while(循环式)

尽量避免使用goto语句

P87页的程序软件即硬件

实例21用for语句实现鸣笛报警

T=1/f,所以要让蜂鸣器发出频率f的声音,只要让单片机输送周期为t的脉冲方波电平即可,让单片机没半个周期取反一次。

半周期可通过延时来实现。

可以通过循环的方式来实现延时,

P90一重循环消耗的机器数近似N=3*n

二重循环消耗的机器数近似N=3*n*m

例子,如果单片机的晶振频率为11.0592MHz,则机器的周期为1.085μs,要发出1600Hz的声音,就让单片机每半个周期312μs将输出电平取反一次,而延时312μs需要消耗机器周期数N=312/1.085≈286可以取300循环次数300/3=100次

Voiddelay(void)

{

UnsignedcharI;

For(i=0;i<100;i++)

}形成1600Hz的音频

相对应800Hz的音频可以i取200

Sbitsound=P1^5;

Sound=0;即可执行

Unsignedchari;

While

(1)

i=0;?

数组是同类型的一组变量?

Unsignedcharcodetab[]

应用却是tab【】?

字符型数组中的个字符数据在单片机中是以字符的ASCII存放的,

正确的使用指针,可以有效地表示复杂的数据类型,动态分配内存,方便的使用字符串,有效地使用数组。

指针本身就具有地址还存在一个地址,

Unsignedchar*p;

Unsignedchara;

P=&a;

指针数组

Unsignedchara[]={0,1,2,3};

Unsignedchar*a[]={&a[0],&a[1],&a[2],&a[3]};

数组的指针

Unsignedchara[]={0,1,2,3};

Unsignde*p;

P=&a[0];

P[i]+j为P[i][j]

实例26未细看

返回值是通过return语句获得的。

如果函数无返回值,需要用void来声明。

数组作为函数参数

一个数组的名字表示该数组的首地址,所以用数组名作为函数的参数时。

被传递的数组的首地址,被调用函数的参数的形式须是定义为指针型变量。

用数组名作为函数的参数时,应该在主调函数和被调函数中都进行数组定义。

定义的数组类型必须一致。

编译器不检查形参数组的长度p109函数?

函数型指针

一个函数在编译时,就分配了一个入口地址,这个入口地址就是函数的指针,

类型说明符(*指针变量名)(形参列表)

Int(*p)(inta,intb)

(*p)(a,b)

这些需要思考p110页

P1=z/256;取得z的高八位

P2=z/256;取得z的低八位?

While

(1)

;无限循环防止程序跑飞。

实例30用有参函数控制p0口8位流水灯的流水速度

P113实例31不实用?

实例32实例33是不错的c语言程序函数调用。

练习c语言p115p116

实例34不错c语言程序p118

指针数组适合用来指向若干个字符串,尤其是各列字符串长度不一致的情形,这对于字符的液晶显示等很有意义。

实际运用液晶等显示器显示字符时,如果液晶的接口通过P0口和单片机连接,将各字符串送入p0口,实际上就是送入液晶显示器。

实例35

#include

P0=isalpha(’_’)?

0xf0:

0x0f;

内部函数文件instrins.h中有_crol_()函数

实例36;应用内部函数文件instrins.h中有_crol_()函数来点亮P3口8位流水灯

_crol_(15,2)

的返回值为00111100B=0x3c思考他的应用

实例37实例38感觉像是介绍函数以后?

c语言应用程序卡那可可能看看

C语言编译预处理

宏定义c语言允许一个标示符来表示一个字符串,称为宏。

P125宏定义不是c语句,所以不需加分号。

可以用#undef命令来终止宏定义的作用域。

即对#undef后面的无用。

为防止歧义应加括号及时

带参数的函数宏和函数不同,函数是先求出实参表达式的值,然后代入形参,而带参数的宏只是进行简单的字符替换。

实例40文件包含应用举例

使用头文件为#include中有关特殊功能寄存器的定义

已将P3_0定义为P3.0引脚,直接应用P3_0就可以对P3口进行操作了。

实例41条件编译应用举例

常用的条件编译是根据某常量表达式的值的是否为真来控制编译

即#if常量表达式

程序段1

#else

程序段2

#endif?

思考好的应用

第五章单片机的定时器计数器

当加在

定时器计数器T0或T1用作计数器时,对外接晶振产生的振荡信号经12分频后,提供给计数器,作为计数器的脉冲输入,计数器以12分频后的脉冲周期为基本计数单位,对输入的脉冲进行计数,直至产生溢出。

P136页到p140页有点不懂。

工作方式

图p135T0或T1引脚上的外部脉冲信号出现一个由1到0的负跳变时,计数器加1,直至计数器溢出。

CPU是按顺序进行工作的。

实例42用计时器T0查询方式控制P2口的8位LED闪烁

T0工作于方式1,LED灯的闪烁周期为100ms,即亮50ms,熄灭50ms;

12分频即频率被12等分,周期即12除频率

定时器的初值设定需要进行计算,总而言之,就是定时器必须达到顶值即65536.

初值需要T0的高八位寄存器TH0和低八位寄存器TL0分别存储

存储方法及

TH0=/256;

TL0=%256;

溢出标志位是否为1若为1表示时间已到,否则,等待。

//实例42:

用定时器T0查询方式P2口8位控制LED闪烁

#include//包含51单片机寄存器定义的头文件

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

函数功能:

主函数

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

voidmain(void)

{

//EA=1;//开总中断

//ET0=1;//定时器T0中断允许

TMOD=0x01;//使用定时器T0的模式1

TH0=(65536-46083)/256;//定时器T0的高8位赋初值

TL0=(65536-46083)%256;//定时器T0的高8位赋初值

TR0=1;//启动定时器T0

TF0=0;

P2=0xff;

while

(1)//无限循环等待查询

{

while(TF0==0)//查询标志位是否溢出

;

TF0=0;

P2=~P2;按位取反,实现led灯的闪烁

TH0=(65536-46083)/256;//定时器T0的高8位赋初值

TL0=(65536-46083)%256;//定时器T0的高8位赋初值

}

}

TFO记忆flow溢出

TRO记忆trigger引起启动

THO记忆high高八位

TMOD记忆mode方式

实例43,用定时器t1查询方式控制单片机发出1kHz音频

//实例43:

用定时器T1查询方式控制单片机发出1KHz音频

#include//包含51单片机寄存器定义的头文件

sbitsound=P3^7;//将sound位定义为P3.7引脚

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

函数功能:

主函数

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

voidmain(void)

{

//EA=1;//开总中断

//ET0=1;//定时器T0中断允许

TMOD=0x10;//使用定时器T1的模式1

TH1=(65536-921)/256;//定时器T1的高8位赋初值

TL1=(65536-921)%256;//定时器T1的高8位赋初值

TR1=1;//启动定时器T1

TF1=0;

while

(1)//无限循环等待查询

{

while(TF1==0)

;

TF1=0;

sound=~sound;//将P3.7引脚输出电平取反

TH1=(65536-921)/256;//定时器T0的高8位赋初值

TL1=(65536-921)%256;//定时器T0的高8位赋初值

}

}

//实例44:

将计数器T0计数的结果送P1口8位LED显示

#include//包含51单片机寄存器定义的头文件

sbitS=P3^4;//将S位定义为P3.4引脚

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

函数功能:

主函数

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

voidmain(void)

{

//EA=1;//开总中断

//ET0=1;//定时器T0中断允许

TMOD=0x02;//使用定时器T0的模式2

TH0=256-156;//定时器T0的高8位赋初值

TL0=256-156;//定时器T0的高8位赋初值

TR0=1;//启动定时器T0

while

(1)//无限循环等待查询

{

while(TF0==0)//如果未计满就等待

{

if(S==0)//按键S按下接地,电平为0

P1=TL0;//计数器TL0加1后送P1口显示

}

TF0=0;//计数器溢出后,将TF0清0

}

}

 

第六章单片机的中断系统

中断系统

类似写作业

定时器计时器实际上就是中断源。

MCS51单片机提供5个中断源。

外部中断INT0一横编号0由P3.2引脚输入

定时器T0编号1

外部中断INT1一横编号2由P3.3引脚输入

定时器T1编号3

串行口通信中断RI或TI编号4

自然优先级从上到下逐级递减。

P150p151页未看

voidTime(void)interrupt1using0

{

}

//实例46:

用定时器T0的中断实现长时间定时

#include//包含51单片机寄存器定义的头文件

sbitD1=P2^0;//将D1位定义为P2.0引脚

unsignedcharCountor;//设置全局变量,储存定时器T0中断次

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1