C语言作单片机初级教程
- 格式:docx
- 大小:1.18 MB
- 文档页数:11
51单片机C语言学习杂记学习单片机实在不是件易事,一来要购买高价格的编程器,仿真器,二来要学习编程语言,还有众多种类的单片机选择真是件让人头痛的事。
在众多单片机中51 架构的芯片风行很久,学习资料也相对很多,是初学的较好的选择之一。
51 的编程语言常用的有二种,一种是汇编语言,一种是 C 语言。
汇编语言的机器代码生成效率很高但可读性却并不强,复杂一点的程序就更是难读懂,而 C 语言在大多数情况下其机器代码生成效率和汇编语言相当,但可读性和可移植性却远远超过汇编语言,而且 C 语言还可以嵌入汇编来解决高时效性的代码编写问题。
对于开发周期来说,中大型的软件编写用 C 语言的开发周期通常要小于汇编语言很多。
综合以上 C 语言的优点,我在学习时选择了 C 语言。
以后的教程也只是我在学习过程中的一些学习笔记和随笔,在这里加以整理和修改,希望和大家一起分享,一起交流,一起学习,一起进步。
*注:可以肯定的说这个教程只是为初学或入门者准备的,笔者本人也只是菜鸟一只,有望各位大侠高手指点错误提出建议。
明浩2003-3-30mailto:pnzwzw@ wzw@第一课建立您的第一个C项目使用C 语言肯定要使用到C 编译器,以便把写好的C 程序编译为机器码,这样单片机才能执行编写好的程序。
KEIL uVISION2 是众多单片机应用开发软件中优秀的软件之一,它支持众多不同公司的MCS51 架构的芯片,它集编辑,编译,仿真等于一体,同时还支持,PLM,汇编和C 语言的程序设计,它的界面和常用的微软VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。
因此很多开发51 应用的工程师或普通的单片机爱好者,都对它十分喜欢。
以上简单介绍了KEIL51 软件,要使用KEIL51 软件,必需先要安装它。
KEIL51 是一个商业的软件,对于我们这些普通爱好者可以到KEIL 中国代理周立功公司的网站上下载一份能编译2K 的DEMO 版软件,基本可以满足一般的个人学习和小型应用的开发。
48 | 电子制作 2019年07月RC 是指RAM 为512,具有8K 字节系统可编程Flash 存储器。
STC89C52使用经典的MCS-51内核,但是做了很多的改进使得芯片具有传统51单片机不具备的功能。
在单芯片上,拥有灵巧的8位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、有效的解决方案。
2 最小系统板的选用AT89S51单片机最小系统,就是使单片机正常运行的最低配置,它有一系列模块组成(参见图1)。
图1 带USB 下载芯片单片机套件(1)复位系统: 当引脚9出现2个机器周期以上高电平时,单片机复位,程序从头开始运行。
(2)时钟系统:有振荡器电路产生频率等于晶振频率,这时用的是外界晶振。
也可以又外部单独输入,此时XTAL2脚接地,时钟信号由XTAL1输入。
(3)电源系统:VCC,和 GND 引脚,供电电压4--5.5V。
为了节省时间,可以网上购买散件,自己焊接,最后根据实物,测绘出具体的电路图。
我在教学中推荐同学们购买STC89C52板载USB 转串口,方便下载。
价格是二十多元,芯片座方便单片机的更换。
成可以用于下载的十六进制文件“XX.HEX”文件。
Keil C51是美国Keil Software 公司出品的51系列兼容单片机C 语言软件开发系统。
为了节省很多硬件方面的购买成本,电脑里面还得安装仿真软件PROTEUS,Proteus 软件是来自英国Labcenter Electronics 公司的EDA 工具软件,Proteus 软件除了其具有和其它EDA 工具一样的原理布图,PCB 自动或人工布线及电路仿真的功能外,其革命性的功能是,他的电路仿真是互动的,针对微处理器的应用,还可以直接在基于原理图的虚拟原型上编程,并实现软件源码级的实时调试,如有显示及输出,还能看到运行后输入输出的效果,配合系统配置的虚拟仪器如示波器,逻辑分析仪等,您不需要别的,Proteus 为您建立了完备的电子设计开发环境。
STC单片机C语言程序设计STC单片机C语言编程入门STC单片机是一种广泛应用于嵌入式系统和物联网设备中的微控制器。
它具有体积小、功耗低、运算能力强等特点,被广泛应用于各种控制系统中。
本文将介绍STC单片机C语言程序设计的入门知识,以帮助初学者快速上手。
首先,我们需要了解一些基本的概念和术语。
1.单片机:单片机是一种集成电路芯片,其中包含了中央处理器、存储器、输入输出接口等功能模块。
它可以独立完成特定的任务,不需要额外的硬件设备与之配合。
2.C语言:C语言是一种高级编程语言,被广泛应用于嵌入式系统开发中。
它具有简洁、高效的特点,易于理解和学习。
了解了上述基本概念后,接下来我们将介绍一些STC单片机C语言程序设计的入门知识。
2. 程序结构:一个C语言程序通常由多个函数组成,其中一个函数名为main(。
程序从main(函数开始执行,执行完main(函数后程序结束。
3.数据类型:C语言中有多种数据类型,包括整型、浮点型、字符型等。
在使用数据类型时,需要根据需要选择合适的数据类型。
4.变量和常量:在C语言中,可以使用变量和常量来存储数据。
变量是可以改变值的,而常量是固定不变的值。
5. 输入和输出:C语言中使用标准库函数scanf(和printf(来实现输入和输出操作。
通过这两个函数可以从键盘获取输入数据,并将结果输出到屏幕上。
6. 控制语句:在C语言中,可以使用if语句、for循环和while循环等控制语句来控制程序的执行流程。
通过控制语句,可以实现条件判断、循环执行等功能。
7.函数:函数是C语言中的重要概念,它可以将一段代码封装成一个独立的模块,方便重复使用。
在编写程序时,可以自定义函数来实现特定的功能。
8.数组:数组是一种存储相同类型数据的连续内存区域。
在C语言中,可以使用数组来存储一组数据,并对数据进行操作。
9.文件操作:C语言提供了文件操作函数,可以对文件进行读写操作。
通过文件操作,可以实现数据的持久化存储。
编写单片机C语言代码的技巧和经验编写单片机C语言代码的技巧和经验C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
那么编写单片机C语言代码的技巧和经验都有哪些呢。
以下仅供参考!具体如下:1、如果可以的话少用库函数,便于不同的mcu和编译器间的移植2、选择合适的算法和数据结构应该熟悉算法语言,知道各种算法的优缺点,具体资料请参见相应的参考资料,有很多计算机书籍上都有介绍。
将比较慢的顺序查找法用较快的二分查找或乱序查找法代替,插入排序或冒泡排序法用快速排序、合并排序或根排序代替,都可以大大提高程序执行的效率。
选择一种合适的数据结构也很重要,比如你在一堆随机存放的数中使用了大量的插入和删除指令,那使用链表要快得多。
数组与指针语句具有十分密码的关系,一般来说,指针比较灵活简洁,而数组则比较直观,容易理解。
对于大部分的编译器,使用指针比使用数组生成的代码更短,执行效率更高。
但是在Keil中则相反,使用数组比使用的指针生成的代码更短。
3、使用尽量小的数据类型能够使用字符型(char)定义的变量,就不要使用整型(int)变量来定义;能够使用整型变量定义的变量就不要用长整型(long int),能不使用浮点型(float)变量就不要使用浮点型变量。
当然,在定义变量后不要超过变量的作用范围,如果超过变量的范围赋值,C编译器并不报错,但程序运行结果却错了,而且这样的错误很难发现。
在ICCAVR中,可以在Options中设定使用printf参数,尽量使用基本型参数(%c、%d、%x、%X、%u和%s格式说明符),少用长整型参数(%ld、%lu、%lx和%lX格式说明符),至于浮点型的参数(%f)则尽量不要使用,其它C编译器也一样。
在其它条件不变的情况下,使用%f 参数,会使生成的代码的数量增加很多,执行速度降低。
4、使用自加、自减指令通常使用自加、自减指令和复合赋值表达式(如a-=1及a+=1等)都能够生成高质量的程序代码,编译器通常都能够生成inc和dec之类的指令,而使用a=a+1或a=a-1之类的指令,有很多C编译器都会生成二到三个字节的指令。
单片机c语言教程pdf版标题:单片机C语言教程PDF版引言概述:单片机是一种集成电路,具备处理和控制功能,广泛应用于各个领域。
而C语言是单片机编程的重要基础,掌握C语言对于学习和应用单片机至关重要。
本文将介绍一本单片机C语言教程的PDF版本,内容详实且专业,有助于读者学习和掌握单片机编程。
正文内容:1. 引言1.1 单片机的基本概念1.2 C语言在单片机编程中的重要性2. 单片机C语言教程PDF版的特点2.1 详细的基础知识讲解2.2 实例驱动的学习方法2.3 丰富的实践项目案例3. 单片机C语言教程PDF版的内容3.1 C语言基础语法3.1.1 变量和数据类型3.1.2 控制结构和循环3.1.3 函数和指针3.2 单片机的基本概念和架构3.2.1 单片机的组成和工作原理3.2.2 寄存器和IO口的使用3.2.3 中断和定时器的应用3.3 单片机编程实践3.3.1 LED灯控制3.3.2 数码管显示3.3.3 按键输入和中断控制3.4 进阶应用3.4.1 ADC和DAC的使用3.4.2 串口通信3.4.3 蓝牙和WiFi模块的应用4. 单片机C语言教程PDF版的优势4.1 方便的学习和查阅4.2 适合初学者和进阶者4.3 丰富的实践案例5. 总结5.1 单片机C语言教程PDF版提供了系统而全面的单片机编程知识5.2 通过学习该教程,读者能够掌握C语言和单片机编程的基础和应用5.3 该教程的实践案例能够帮助读者深入理解和应用所学知识总结:单片机C语言教程PDF版是一本内容丰富、专业详实的教程,涵盖了单片机和C语言的基础知识、编程实践和进阶应用。
通过学习该教程,读者能够全面掌握单片机编程所需的知识和技能。
该教程的优势在于方便的学习和查阅方式,适合初学者和进阶者,且提供了丰富的实践案例,帮助读者深入理解和应用所学知识。
我们在单片机最小系统上接个LED,看我们能否点亮它!对了,上面也有好几次提到过单片机最小系统了,所谓单片机最小系统就是在单片机上接上最少的外围电路元件让单片机工作。
一般只须连接晶体、VCC、GND、RST即可,一般情况下,A T89C51的31脚须接高电平。
#include<reg51.h> //头文件定义。
或用#include<at89x51.h>其具体的区别在于:后者定义了更多的地址空间。
//在Keil安装文件夹中,找到相应的文件,比较一下便知!sbit P1_0 = P1 ^ 0; //定义管脚void main (void){while(1){P1_0 = 0;//低电平有效,如果把LED反过来接那么就是高电平有效}}就那么简单,我们就把接在单片机P1_0上的LED点亮了,当然LED是低电平,才能点亮。
因为我们把LED的正通过电阻接至VCC。
P1_0 = 0; 类似与C语言中的赋值语句,即把0 赋给单片机的P1_0引脚,让它输出相应的电平。
那么这样就能达到了我们预先的要求了。
while(1)语句只是让单片机工作在死循环状态,即一直输出低电平。
如果我们要试着点亮其他的LED,也类似上述语句。
这里就不再讲了。
点亮了几个LED后,是不是让我们联想到了繁华的街区上流动的彩灯。
我们是不是也可以让几个LED依次按顺序亮呢?答案是肯定的!其实显示的原理很简单,就是让一个LED灭后,另一个立即亮,依次轮流下去。
假设我们有8个LED分别接在P1口的8个引脚上。
硬件连接,在P1_1--P1_7上再接7个LED即可。
例程如下:#include<reg51.h>sbit P1_0 = P1 ^ 0;sbit P1_1 = P1 ^ 1;sbit P1_2 = P1 ^ 2;sbit P1_3 = P1 ^ 3;sbit P1_4 = P1 ^ 4;sbit P1_5 = P1 ^ 5;sbit P1_6 = P1 ^ 6;sbit P1_7 = P1 ^ 7;void Delay(unsigned char a){unsigned char i;while( --a != 0){for(i = 0; i < 125; i++); //一个; 表示空语句,CPU空转。
单片机C语言入门教程来源:21ic作者:关键字:单片机C语言入门教程学习一种编程语言,最重要的是建立一个练习环境,边学边练才能学好。
Keil 软件是目前最流行开发80C51系列单片机的软件,Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(?Vision)将这些部份组合在一起。
学习之前请先安装KEILC51软件,在学会使用汇编语言后,学习C语言编程是一件比较容易的事,我们将通过一系列的实例介绍C语言编程的方法。
图1-1所示电路图使用89c51单片机作为主芯片,这种单片机性属于80C51系列,其内部有8K的FLASH ROM,可以反复擦写,非常适于做实验。
89c51的P1引脚上接8个发光二极管,P3.2~P3.4引脚上接4个按钮开关,我们的任务是让接在P1引脚上的发光二极管按要求发光。
1 简单的C程序介绍例1-1:让接在P1.0引脚上的LED发光。
/************************************************单灯闪烁程序*************************************************/#include "reg51.h"//这一句是将51的常用端口,内部寄存器等的定义文件包含进这段程序sbit P1_0=P1^0;void main(){ P1_1=0;}这个程序的作用是让接在P1.0引脚上的LED点亮。
下面来分析一下这个C语言程序包含了哪些信息。
1)"文件包含"处理。
程序的第一行是一个"文件包含"处理。
所谓"文件包含"是指一个文件将另外一个文件的内容全部包含进来,所以这里的程序虽然只有4行,但C编译器在处理的时候却要处理几十或几百行。
这里程序中包含REG51.h文件的目的是为了要使用P1这个符号,即通知C编译器,程序中所写的P1是指80C51单片机的P1端口而不是其它变量。
单片机编程设计的学习方法和步骤
单片机编程设计是现代电子技术的重要组成部分,不仅在电子行业应用广泛,而且在其他领域也有重要的应用。
那么,学习单片机编程设计有哪些步骤和方法呢?
一、确定学习目标和学习范围
首先,你需要明确自己学习单片机编程的目的和范围。
你可以想想你想在哪个领域应用单片机编程,需要学到哪些具体的技能和知识,然后制定详细的学习计划。
二、学习基础方面的知识
在学习单片机编程之前,你需要掌握一些基础知识,例如:数字电路、模拟电路、微处理器等。
此外,你还需要了解一些基本的编程语言,比如C语言,这样才能更好地理解和掌握单片机编程。
三、了解单片机的结构和原理
学习单片机编程前,你需要先了解单片机的结构和原理,包括它的内部结构和运作方式。
只有通过深入了解单片机结构和原理,才能让你更好的掌握单片机编程。
四、掌握单片机的编程方法
掌握单片机编程方法的最佳方式就是通过实践。
你可以先了解常用的开发工具、编译器和调试器,然后选定一些具体的项目进行实践。
比如通过LED灯反复闪烁的实验来体验单片机的入门编程。
五、不断地拓展知识面
单片机编程非常广泛,你需要不断地拓展自己的知识面和技能,学习更多的编程语言和工具,以应对更高级和复杂的单片机编程任务。
你可以阅读一些专业书籍和论文,参加相关的培训和讲座,向其他专业人士请教,这样才能不断提高自己的能力和水平。
以上就是单片机编程设计学习的基本步骤和方法,只要按照这些步骤坚持学习,相信你一定会掌握单片机编程技能,成为行业中的优秀人才。
51单片机c语言教程在本教程中,我们将学习如何在51单片机上使用C语言进行编程。
无论您是初学者还是有一定经验的开发者,本教程都将对您有所帮助。
首先,我们需要了解一些基本概念。
51单片机是一种基于哈弗微电子公司的MCS-51架构的微控制器。
它采用了Harvard结构,即将程序存储器和数据存储器分开。
它具有各种功能和接口,可以满足不同的应用需求。
在使用C语言进行51单片机编程之前,必须安装相应的开发工具。
这里我们推荐使用Keil C51开发环境。
安装完成后,我们就可以开始编写第一个程序了。
#include <reg51.h>void main(){// 在这里编写您的代码}以上是一个简单的C语言程序模板。
我们使用了reg51.h头文件,该文件包含了与51单片机相关的寄存器定义和常量。
接下来,我们可以开始编写具体的功能代码了。
例如,如果我们想要在LED灯上闪烁一个简单的模式,可以使用以下代码:#include <reg51.h>sbit LED = P1^0;void main(){while(1){LED = 0; // 点亮LEDdelay(1000); // 延时1秒LED = 1; // 熄灭LEDdelay(1000); // 延时1秒}}在这个程序中,我们首先定义了一个LED的控制引脚,然后通过循环实现了闪烁的功能。
在每次循环中,我们先点亮LED,然后通过调用延时函数延时1秒,再将LED熄灭,再次延时1秒。
这样就形成了一个简单的LED闪烁效果。
除了控制IO口外,51单片机还可以实现其他各种功能,如定时器、串口通信等。
这些功能的实现也都可以通过C语言来完成。
希望通过本教程,您可以对51单片机的C语言编程有一个基本的了解。
在以后的学习中,您可以深入研究这些知识,并通过实践来提升自己的能力。
祝您学习愉快!。
新概念51单片机C语言教程----入门、提高、开发、拓展全攻略郭天祥编著电子工业出版社例2.2.1编写程序,点亮第一个发光二极管(part2_1.c P27)#include <reg52.h> //52系列单片机头文件sbit led1=P1^0; //声明单片机P1口的第一位void main() //主函数{led1=0; /*点亮第一个发光二极管*/}例2.2.2编写程序,点亮P1口的若干二极管(part2_2.c P39)#include <reg52.h> //52系列单片机头文件void main() //主函数{P1=0xaa;//while(1);}例2.5.1利用for语句延时特性,编写第一个发光二极管以间隔1S亮灭闪动的程序(part2_3.c P42)#include <reg52.h> //52系列单片机头文件#define uint unsigned int //宏定义sbit led1=P1^0; //声明单片机P1口的第一位uint i,j;void main() //主函数{while(1) //大循环{led1=0; /*点亮第一个发光二极管*/for(i=1000;i>0;i--) //延时for(j=110;j>0;j--);led1=1; /*关闭第一个发光二极管*/for(i=1000;i>0;i--) //延时for(j=110;j>0;j--);}}- 2 - 例2.6.1编写程序使第一个发光二极管以间隔500ms亮灭闪动。
(part2_4.c P48)#include <reg52.h> //52系列单片机头文件#define uint unsigned int //宏定义sbit led1=P1^0; //声明单片机P1口的第一位void delay1s(); //声明子函数void main() //主函数{while(1) //大循环{led1=0; /*点亮第一个发光二极管*/delay1s(); //调用延时子函数led1=1; /*关闭第一个发光二极管*/delay1s(); //调用延时子函数}}void delay1s() //子函数体{uint i,j;for(i=500;i>0;i--)for(j=110;j>0;j--);}例2.7.1编写程序使第一个二极管以亮200ms、灭800ms的方式闪动。
C语言作单片机初级教程51单片机C语言学习杂记学习单片机实在不是件易事,一来要购买高价格的编程器,仿真器,二来要学习编程语言,还有众多种类的单片机选择真是件让人头痛的事。
在众多单片机中51 架构的芯片风行很久,学习资料也相对很多,是初学的较好的选择之一。
51 的编程语言常用的有二种,一种是汇编语言,一种是C 语言。
汇编语言的机器代码生成效率很高但可读性却并不强,复杂一点的程序就更是难读懂,而C 语言在大多数情况下其机器代码生成效率和汇编语言相当,但可读性和可移植性却远远超过汇编语言,而且C 语言还可以嵌入汇编来解决高时效性的代码编写问题。
对于开发周期来说,中大型的软件编写用C 语言的开发周期通常要小于汇编语言很多。
综合以上C 语言的优点,我在学习时选择了C 语言。
以后的教程也只是我在学习过程中的一些学习笔记和随笔,在这里加以整理和修改,希望和大家一起分享,一起交流,一起学习,一起进步。
*注:可以肯定的说这个教程只是为初学或入门者准备的,笔者本人也只是菜鸟一只,有望各位大侠高手指点错误提出建议。
明浩2003-3-30第一课建立您的第一个C项目使用C 语言肯定要使用到C 编译器,以便把写好的C 程序编译为机器码,这样单片机才能执行编写好的程序。
KEIL uVISION2 是众多单片机应用开发软件中优秀的软件之一,它支持众多不同公司的MCS51 架构的芯片,它集编辑,编译,仿真等于一体,同时还支持,PLM,汇编和C 语言的程序设计,它的界面和常用的微软VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。
因此很多开发51 应用的工程师或普通的单片机爱好者,都对它十分喜欢。
以上简单介绍了KEIL51 软件,要使用KEIL51 软件,必需先要安装它。
KEIL51 是一个商业的软件,对于我们这些普通爱好者可以到KEIL 中国代理周立功公司的网站上下载一份能编译2K 的DEMO 版软件,基本可以满足一般的个人学习和小型应用的开发。
(安装的方法和普通软件相当这里就不做介绍了)安装好后,您是不是迫不及待的想建立自己的第一个C 程序项目呢下面就让我们一起来建立一个小程序项目吧。
或许您手中还没有一块实验板,甚至没有一块单片机,不过没有关系我们可以通过KEIL 软件仿真看到程序运行的结果。
首先当然是运行KEIL51 软件。
怎么打开噢,天!那您要从头学电脑了。
呵呵,开个玩笑,这个问题我想读者们也不会提的了:P。
运行几秒后,出现如图1-1 的屏幕。
图1-1 启动时的屏幕接着按下面的步骤建立您的第一个项目:(1)点击Project 菜单,选择弹出的下拉式菜单中的New Project,如图1-2。
接着弹出一个标准Windows 文件对话窗口,如图1-3,这个东东想必大家是见了N 次的了,用法技巧也不是这里要说的,以后的章节中出现类似情况将不再说明。
在“文件名”中输入您的第一个C 程序项目名称,这里我们用“test”,这是笔者惯用的名称,大家不必照搬就是了,只要符合Windows 文件规则的文件名都行。
“保存”后的文件扩展名为uv2,这是KEIL uVision2 项目文件扩展名,以后我们可以直接点击此文件以打开先前做的项目。
图1-2 New Project 菜单图1-3 文件窗口(2)选择所要的单片机,这里我们选择常用的Ateml 公司的AT89C51。
此时屏幕如图1-4 所示。
AT89C51 有什么功能、特点呢不用急,看图中右边有简单的介绍,稍后的章节会作较详细的介绍。
完成上面步骤后,我们就可以进行程序的编写了。
(3)首先我们要在项目中创建新的程序文件或加入旧程序文件。
如果您没有现成的程序,那么就要新建一个程序文件。
在KEIL 中有一些程序的Demo,在这里我们还是以一个C 程序为例介绍如何新建一个C 程序和如何加到您的第一个项目中吧。
点击图1-5 中1 的新建文件的快捷按钮,在2 中出现一个新的文字编辑窗口,这个操作也可以通过菜单File -New 或快捷键Ctrl+N 来实现。
好了,现在可以编写程序了,光标已出现在文本编辑窗口中,等待我们的输入了。
第一程序嘛,写个简单明了的吧。
下面是经典的一段程序,呵,如果您看过别的程序书也许也有类似的程序:#include <>#include <>void main(void){SCON = 0x50; 源引脚Vcc 40 电源端GND 20 接地端*工作电压为5V,另有AT89LV51工作电压则是, 引脚功能一样。
2.外接晶体引脚图2-2 外接晶体引脚XTAL1 19XTAL2 18XTAL1 是片内振荡器的反相放大器输入端,XTAL2 则是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2 悬空。
内部方式时,时钟发生器对振荡脉冲二分频,如晶振为12MHz,时钟频率就为6MHz。
晶振的频率可以在1MHz-24MHz 内选择。
电容取30PF 左右。
- 7 -*型号同样为AT89C51 的芯片,在其后面还有频率编号,有12,16,20,24MHz 可选。
大家在购买和选用时要注意了。
如AT89C51 24PC 就是最高振荡频率为24MHz,40P6 封装的普通商用芯片。
3.复位RST 9在振荡器运行时,有两个机器周期(24 个振荡周期)以上的高电平出现在此引腿时,将使单片机复位,只要这个脚保持高电平,51 芯片便循环复位。
复位后P0-P3 口均置1 引脚表现为高电平,程序计数器和特殊功能寄存器SFR 全部清零。
当复位脚由高电平变为低电平时,芯片为ROM 的00H 处开始运行程序。
常用的复位电路如图2-3 所示。
*复位操作不会对内部RAM有所影响。
图2-3 常用复位电路4.输入输出引脚(1) P0端口[ P0是一个8位漏极开路型双向I/O端口,端口置1(对端口写1)时作高阻抗输入端。
作为输出口时能驱动8个TTL。
对内部Flash 程序存储器编程时,接收指令字节;校验程序时输出指令字节,要求外接上拉电阻。
在访问外部程序和外部数据存储器时,P0 口是分时转换的地址(低8 位)/数据总线,访问期间内部的上拉电阻起作用。
(2) P1 端口[-] P1 是一个带有内部上拉电阻的8 位双向I/0 端口。
输出时可驱动4 个TTL。
端口置1 时,内部上拉电阻将端口拉到高电平,作输入用。
对内部Flash 程序存储器编程时,接收低8 位地址信息。
(3) P2 端口[-] P2 是一个带有内部上拉电阻的8 位双向I/0 端口。
输出时可驱动4 个TTL。
端口置1 时,内部上拉电阻将端口拉到高电平,作输入用。
对内部Flash 程序存储器编程时,接收高8 位地址和控制信息。
在访问外部程序和16 位外部数据存储器时,P2 口送出高8 位地址。
而在访问8位地址的外部数据存储器时其引脚上的内容在此期间不会改变。
(4) P3 端口[-] P2 是一个带有内部上拉电阻的8 位双向I/0 端口。
输出时可驱动4 个TTL。
端口置1 时,内部上拉电阻将端口拉到高电平,作输入用。
对内部Flash 程序存储器编程时,接控制信息。
除此之外P3 端口还用于一些专门功能,具体请看表2-2.。
*P1-3 端口在做输入使用时,因内部有上接电阻,被外部拉低的引脚会输出一定的电流。
P3 引脚兼用功能串行通讯输入(RXD)串行通讯输出(TXD)外部中断0(INT0)外部中断1(INT1)定时器0 输入(T0)定时器1 输入(T1)外部数据存储器写选通WR外部数据存储器写选通RD表2-2 P3 端口引脚兼用功能表呼!一口气说了那么多,停一下吧。
嗯,什么什么叫上拉电阻上拉电阻简单来说就是把电平拉高,通常用-10K 的电阻接到Vcc 电源,下拉电阻则是把电平拉低,电阻接到GND 地线上。
具体说明也不是这里要讨论的,接下来还是接着看其它的引脚功能吧。
5.其它的控制或复用引脚(1) ALE/PROG 30 访问外部存储器时,ALE(地址锁存允许)的输出用于锁存地址的低位字节。
即使不访问外部存储器,ALE端仍以不变的频率输出脉冲信号(此频率是振荡器频率的1/6)。
在访问外部数据存储器时,出现一个ALE脉冲。
对Flash存储器编程时,这个引脚用于输入编程脉冲PROG(2) PSEN 29 该引是外部程序存储器的选通信号输出端。
当AT89C51由外部程序存储器取指令或常数时,每个机器周期输出2个脉冲即两次有效。
但访问外部数据存储器时,将不会有脉冲输出。
(3) EA/Vpp 31 外部访问允许端。
当该引脚访问外部程序存储器时,应输入低电平。
要使AT89C51只访问外部程序存储器(地址为0000H-FFFFH),这时该引脚必须保持低电平。
对Flash存储器编程时,用于施加Vpp编程电压。
Vpp电压有两种,类似芯片最大频率值要根据附加的编号或芯片内的特征字决定。
具体如表2-3所列。
Vpp = 12V Vpp = 5VAT89C51 AT89LV51 AT89C51 AT89LV51 印刷在芯片面上的型号xxxx xxxx xxxx-5 xxxx-5YYWW YYWW YYWW YYWW030H=1EH 030H=1EH 030H=1EH 030H=1EH 片内特征字031H=51H 031H=61H 031H=51H 031H=61H032H=FFH 032H=FFH 032H=05H 032H=05H表2-3 Vpp与芯片型号和片内特征字的关系看到这您对AT89C51引脚的功能应该有了一定的了解了,引脚在编程和校验时的时序我们在这里就不做详细的探讨,通常情况下我们也没有必要去撑握它,除非您想自己开发编程器。
下来的课程我们要开始以一些简单的实例来讲述C程序的语法和编写方法技巧,中间穿插相关的硬件知识如串口,中断的用法等等。
第三课生成HEX文件和最小化系统在开始C语言的主要内容时,我们先来看看如何用KEIL uVISION2来编译生成用于烧写芯片的HEX文件。
HEX文件格式是Intel公司提出的按地址排列的数据信息,数据宽度为字节,所有数据使用16进制数字表示, 常用来保存单片机或其他处理器的目标程序代码。
它保存物理程序存储区中的目标代码映象。
一般的编程器都支持这种格式。
我们先来打开第一课做的第一项目,打开它的所在目录,找到的文件就可以打开先前的项目了。
然后右击图3-1中的1项目文件夹,弹出项目功能菜单,选Options for Target’Target1’,弹出项目选项设置窗口,同样先选中项目文件夹图标,这时在Project菜单中也有一样的菜单可选。
打开项目选项窗口,转到Output选项页图3-2所示,图中1是选择编译输出的路径,2是设置编译输出生成的文件名,3则是决定是否要创建HEX文件,选中它就可以输出HEX文件到指定的路径中。