单片机基础知识及单片机C语言.ppt

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

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!