《单片机基础知识及单片机语言优秀PPT.ppt》由会员分享,可在线阅读,更多相关《单片机基础知识及单片机语言优秀PPT.ppt(37页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、单片机基片机基础知知识及及单片机片机语言言第1页,本讲稿共37页 2、单片机能做什么、单片机能做什么n凡是与控制或简单计算有关的电子设备都可凡是与控制或简单计算有关的电子设备都可以用单片机来实现,再根据具体实际情况选以用单片机来实现,再根据具体实际情况选择不同性能的单片机,如:择不同性能的单片机,如:atmel,stc,pic,avr,凌阳,凌阳,80C51,arm等等第2页,本讲稿共37页n工业自动化:数据采集、测控技术。工业自动化:数据采集、测控技术。n智能仪器仪表:数字示波器、数字信号源、数字智能仪器仪表:数字示波器、数字信号源、数字万用表、感应电流表等。万用表、感应电流表等。n消费类电
2、子产品:洗衣机、电冰箱、空调机、电消费类电子产品:洗衣机、电冰箱、空调机、电视机、微波炉、手机、视机、微波炉、手机、IC卡、汽车电子设备等。卡、汽车电子设备等。n通讯方面:调制解调器、程控交换技术、手机、通讯方面:调制解调器、程控交换技术、手机、小灵通等。小灵通等。n武器装备:飞机、军舰、坦克、导弹、航天飞机、武器装备:飞机、军舰、坦克、导弹、航天飞机、鱼雷制导、智能武器等。鱼雷制导、智能武器等。n等等等等.第3页,本讲稿共37页 3、怎么开始学习?怎么开始学习?1、实践第一。、实践第一。2、即缺什么补什么(补充必要的理论知识)。、即缺什么补什么(补充必要的理论知识)。3、做实际小制作积累经验
3、,比如调试、编程。、做实际小制作积累经验,比如调试、编程。(可在网络上搜集题目,也可自己有什么想法(可在网络上搜集题目,也可自己有什么想法大胆的去试验)大胆的去试验)第4页,本讲稿共37页4、80C51系列介绍 Intel的:80C31、80C51、87C51,80C32、80C52、87C52等;ATMEL的:89C51、89C52、89C2051等;Philips、华邦、Dallas、STC 等公司的许多产品。80C51是MCS-51系列中的一个典型品种;其它厂商以8051为基核开发出的CMOS工艺单片机产品统称为80C51系列。当前常用的80C51系列单片机主要产品有:第5页,本讲稿共3
4、7页80C51的引脚封装总线型非总线型第6页,本讲稿共37页第7页,本讲稿共37页 总线(BUS)是计算机各部件之间传送信息的公共通道。微机中有内部总线和外部总线两类。内部总线是CPU内部之间的连线。外部总线是指CPU与其它部件之间的连线。外部总线有三种:数据总线DB(Data Bus),地址总线 AB(Address Bus)和控制总线 CB(Control Bus)。第8页,本讲稿共37页CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器;RAM:用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;ROM:用以存放程序、一些原始数据和表格;I/O口:四
5、个8位并行I/O口,既可用作输入,也可用作输出;T/C:两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式;第9页,本讲稿共37页 五个中断源的中断控制系统;一个全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机与微机之间的串行通信;片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。最高振荡频率取决于单片机型号及性能。第10页,本讲稿共37页第二部分第二部分 单片机单片机C语言入门语言入门 1、C51简介简介 C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能。目前,使用C语言进行程序设计已经成为软件开发的一个主流。用C语
6、言开发系统可以大大缩短开发周期,明显增强程序的可读性,便于改进、扩充和移植。而针对8051的C语言日趋成熟,成为了专业化的实用高级语言。第11页,本讲稿共37页 C C语言作为一种非常方便的语言而得到广泛语言作为一种非常方便的语言而得到广泛的支持,很多硬件开发都用的支持,很多硬件开发都用C C语言编程,如:各语言编程,如:各种单片机、种单片机、DSPDSP、ARMARM等等.C C语言程序本身不依赖于机器硬件系统,基语言程序本身不依赖于机器硬件系统,基本上不作修改就可将程序从不同的单片机中移本上不作修改就可将程序从不同的单片机中移植过来。植过来。C C提供了很多数学函数并支持浮点运算,开提供了
7、很多数学函数并支持浮点运算,开发效率高,故可缩短开发时间,增加程序可读发效率高,故可缩短开发时间,增加程序可读性和可维护性。性和可维护性。C-51C-51的特点的特点第12页,本讲稿共37页C-51C-51与与ASM-51ASM-51(汇编)相比,有如下优点:(汇编)相比,有如下优点:1.1.对单片机的指令系统不要求了解,仅要求对对单片机的指令系统不要求了解,仅要求对8051 8051 的存贮器结构有初步了解;的存贮器结构有初步了解;2.2.寄存器分配、不同存贮器的寻址及数据类型寄存器分配、不同存贮器的寻址及数据类型等细节可由编译器管理;等细节可由编译器管理;3.3.程序有规范的结构,可分成不
8、同的函数,这种方程序有规范的结构,可分成不同的函数,这种方式可使程序结构化;式可使程序结构化;4.4.提供的库包含许多标准子程序,具有较强的数据处提供的库包含许多标准子程序,具有较强的数据处理能力;理能力;5.5.由于具有方便的模块化编程技术,使已编好程序可由于具有方便的模块化编程技术,使已编好程序可容易地移植;容易地移植;第13页,本讲稿共37页2、单片机C程序设计的一般格式n几个基本概念(1)函数:C语言程序由一个主函数和若干个其它函数构成,程序中由主函数调用其它函数,其它函数之间也可以相互调用。(2)指针与指针变量:若定义变量x,&x即为x的指针,指针变量是指针的指针,若xp=&x,利用
9、*xp即可访问变量x。(3)#include(包含处理命令):把一个源文件将另外一个源文件的全部内容包含进来,或者说把一个外部文件包含到本文件之中。(4)#define(宏定义):在C程序中,可以指定一标志符去定义一个常量或字符串。第14页,本讲稿共37页n单片机C程序的基本结构(1)主函数名必须为main()。C程序通过函数调用去执行指定的工作。(2)一个函数由说明部分和函数体两部分组成。函数说明部分是对函数名、函数类型、形参名和形参类型等所做的说明。(3)C程序的执行总是从main()函数开始,而对该函数的位置无特殊规定。(4)在源程序文件需要包含其它源程序文件时,应在本程序文件头部用包含
10、命令#include处理。(5)C程序中的一个函数需要调用另一个子函数时,另一个函数应写在前面,否则应声明。(6)C程序书写格式自由,一行可写一个语句或几个语句。每个语句结尾用;结束。第15页,本讲稿共37页3、单片机C程序的数据类型n常量和符号常量例:#define PARL 3.14159 (PARL即为符号常量)(1)整型常量,如11,o11,0 xff等。(2)实型常量,如0.12,1.55e5等。(3)字符常量,如a、A等。(4)字符串常量,如“a”、“CHINA”等。n变量(1)位变量:bit和sbit(2)字符变量:singed char和unsigned char(3)整型变量
11、:singed int和unsigned int(4)长整型变量:unsigned long和signed long第16页,本讲稿共37页(3)实型变量:float和double(4)寄存器变量:sfr和sfr164、单片机C程序的运算符和表达式(1 1)算术运算符)算术运算符1313个:个:+、-、*、/、%、=、+=+=、-=-=、*=、/=/=、%=%=、+、-(2 2)关系运算符)关系运算符6 6个:个:、=、=、|、&(相与)、(相与)、&(变量取地址)(变量取地址)(5 5)指针运算符:)指针运算符:*第17页,本讲稿共37页5、单片机C程序的一般语法结构n顺序结构例:main(
12、)P0=0 xff;P2=0 x30;P1=0 xff;P3=0 xff;scan();test();第18页,本讲稿共37页n分支结构(1)单分支结构形式:if(条件表达式)执行语句;例:第19页,本讲稿共37页(2)双分支结构:形式:if(条件表达式)语句1;else 语句2;例:第20页,本讲稿共37页(3)由双分支结构变化而成的多分支结构形式:if(表达式1)语句1;else if(表达式2)语句2;.else if(表达式n)语句n;else 语句n+1;第21页,本讲稿共37页例:例:第22页,本讲稿共37页(4)switchcase多分支转移结构语句形式:switch(条件表达式
13、)case 常量表达式1:语句1;break;case 常量表达式2:语句2;break;.case 常量表达式n:语句n;break;default:语句n+1;break;第23页,本讲稿共37页例:例:第24页,本讲稿共37页n循环结构(1)while(表达式)循环体语句;例:void delay(unsigned char times)unsigned char I;i=250;while(-times)while(-i);第25页,本讲稿共37页(2)do循环体语句;while(表达式);(3)for(表达式1;表达式2;表达式3)循环体语句;例:第26页,本讲稿共37页6、C51区
14、别于标准C语言的特点n(1)使用文件包含命令#include应注意对应头文件的名称,要与规定名称相符。n(2)单片机中,一个变量可放在片内存储单元,也可放在片外存储单元,放在片内存储单元还要区分是否可位寻址,或放在间接寻址区。例:int data x,y;/表示整型变量指定在 片内数据存储区 char xdata m,n;/表示字符变量指定在片外数据存储区第27页,本讲稿共37页C51存储类型存储类型存储类型寻址空间数据长度 值域范围data片内直接寻址 RAM800H7FHidata片内间接寻址 RAM880HFFHpdata分页寻址片外 RAM800HFFH第28页,本讲稿共37页存储类型
15、寻址空间数据长度值域范围xdata片外数据存储(64K)160000HFFFFHcode片内统一编址ROM(64K)160000HFFFFHbdata片内可位寻址的RAM(16byet)120H2FH第29页,本讲稿共37页n(3)21个SFR只能直接寻址,一般在头文件中用字节定义方式定义。如:sfr TMOD=0 x89;(4)C51编译器编译源程序时,数据类型和存储类型都可预先定义,但数据具体放在哪一个单元不由用户指定。(5)单片机C程序的中断程序与汇编语言程序不同,中断过程通过使用interrupt关键字和中断号(031)来实现。中断号告诉编译器中断程序的入口地址。第30页,本讲稿共37
16、页单片机中断源与单片机中断源与C C中断程序中中断号对照表中断程序中中断号对照表C中的中断号对应单片机中的中断源C中的中断号对应单片机中的中断源0外部中断03定时器1中断1定时器0中断4串行口中断2外部中断15定时器2中断第31页,本讲稿共37页一个定时器一个定时器0 0中断程序编写格式如下:中断程序编写格式如下:Void timer0(void)interrupt 1 TR0=0;TH0=0 xff;TL0=0 x30;TR0=0;tick_count+;用户不必关心现场保护及用户不必关心现场保护及恢复现场的问题,编译器恢复现场的问题,编译器会自动完成。会自动完成。中断程序的入口地址被编中断
17、程序的入口地址被编译器放在中断向量中,无译器放在中断向量中,无需用户指定。需用户指定。第32页,本讲稿共37页n(6)片外扩展的I/O接口,可用#define进行定义。如:#include absacc.h#define ADC0804 XBYTE0 x7ffe第33页,本讲稿共37页例例1 1:清零程序:清零程序 (将将2000H2000H20FFH20FFH的内容清零的内容清零)汇编语言程序汇编语言程序 ORG 0000HORG 0000HSE01:MOV R0,#00H SE01:MOV R0,#00H MOV DPTR,#2000H ;(0000H)MOV DPTR,#2000H ;(
18、0000H)送送DPTRDPTRLOO1:CLR ALOO1:CLR A MOVX DPTR,A ;0 MOVX DPTR,A ;0送送(DPTR)(DPTR)INC DPTR ;DPTR+1 INC DPTR ;DPTR+1 INC R0 ;INC R0 ;字节数加字节数加1 1 CJNE R0,#00H,LOO1;CJNE R0,#00H,LOO1;不到不到FFFF个字节再清个字节再清LOOP:SJMP LOOPLOOP:SJMP LOOP程序示例程序示例第34页,本讲稿共37页清零程序清零程序 (将将2000H2000H20FFH20FFH的内容清零的内容清零)C C5151程序程序#i
19、nclude#include main()main()int i;int i;unsigned char xdata*p=0 x2000;unsigned char xdata*p=0 x2000;/*/*指针指向指针指向2000H2000H单元单元*/for(i=0;i256;i+)for(i=0;i256;i+)*p=0;p+;*p=0;p+;/*/*清零清零2000H-20FFH2000H-20FFH单元单元*/第35页,本讲稿共37页 汇编语言程序汇编语言程序 ORG 0000HORG 0000HL00:MOV R0,#10H ;L00:MOV R0,#10H ;查找查找1616个字节
20、个字节 MOV R1,#00HMOV R1,#00H MOV DPTR,#2000H MOV DPTR,#2000HL11:MOVX A,DPTRL11:MOVX A,DPTR CJNE A,#00H,L16;CJNE A,#00H,L16;取出内容与取出内容与00H00H相等吗相等吗?INC R1 ;INC R1 ;取出个数加取出个数加1 1L16:INC DPTRL16:INC DPTR DJNZ R0,L11 ;DJNZ R0,L11 ;未完继续未完继续 MOV DPTR,#2100HMOV DPTR,#2100H MOV A,R1 MOV A,R1 MOVX DPTR,A ;MOVX
21、DPTR,A ;相同数个数送相同数个数送2100H2100HL1E:SJMP L1EL1E:SJMP L1E例例2 2:查找零的个数(在:查找零的个数(在2000H-200FH2000H-200FH中查出有几个字节是零,中查出有几个字节是零,把个数放在把个数放在2100H2100H单元中)单元中)第36页,本讲稿共37页查找零的个数查找零的个数C C5151程序程序#include#include main()main()unsigned char xdata*p=0 x2000;/*unsigned char xdata*p=0 x2000;/*指针指针p p指向指向2000H2000H单元单元*/int n=0,i;int n=0,i;for(i=0;i16;i+)for(i=0;i16;i+)if(*p=0)n+;/*if(*p=0)n+;/*若该单元内容为零,则若该单元内容为零,则n+1*/n+1*/p+;/*p+;/*指针指向下一单元指针指向下一单元 */p=0 x2100;/*p=0 x2100;/*指针指针p p指向指向2100H2100H单元单元*/*p=n;/*p=n;/*把个数放在把个数放在2100H2100H单元中单元中*/第37页,本讲稿共37页