任务1 认识51单片机1.80C51单片机控制线有几根?每一根控制线的作用是什么?RST:第9引脚。
——复位信号。
上电和手动复位电路如图1-4所示。
其中C、R1构成上电复位,K、R2、R1、构成手动复位,复位电路是否有效,关键看9脚产生的高电平维持的时间是否大于单片机的2个机器周期以上,这由RC充放电常数决定。
另外,产生高电平的上升沿是否坚挺也比较关键,否则将不利于复位。
2.图1-4 上电和手动复位电路EA/Vpp:第31脚,外部寻址使能/编程电压。
EA为高电平,从内部程序寄存器开始访问;EA为低电平时,则跳过内部程序存储器,从外部程序存储器开始访问。
在编程期间,此端子为编程电压输入端,根据选择不同的单片机芯片选择不同的编程电压(可根据编程软件选择芯片)。
ALE/PROG:第30引脚。
——地址锁存允许信号。
第一功能:访问外部存储器时:ALE用来锁存扩展地址的低8位(P0口)的地址信号。
当不访问外部存储器时:ALE将输出1/6的振荡频率,可用来对外部提供定时和时钟信号。
第二功能:单片机编程时,此脚接编程脉冲。
PSEN:第29引脚。
——外部程序存储器读选通信号。
当访问外部存储器时,此脚将定时输出负脉冲作为读取外部存储器的选题信号。
2.试述P3口的第二功能。
P3口:第10~17引脚。
作为I/O口。
作控制和特殊功能口使用。
P3口各位的第二功能见表1-2。
表1-2 P3口各位的第二功能P3口各位第二功能功能P3.0 RXD 串行数据接收口P3.1 TXD 串行数据发送口P3.2 0INT外中断0输入P3.3 1INT外中断1输入P3.4 T0 计数器0计数输入P3.5 T1 计数器1计数输入P3.6 W R外部RAM写选通信号P3.7 RD外部RAM读选通信号3.80C51内RAM的组成是如何划分的,各有什么功能?内部数据存储器低128单元按其用途划分为三个区域。
1.通用寄存器区四组通用寄存器,每组8个寄存器单元,每组都以R0~R7为寄存器单元编号。
由状态寄存器PSW中的RS1、RS0位的状态组合来决定。
通用寄存器和RS1、RS0的关系见表1-3。
表1-3 通用寄存器和RS1、RS0的关系。
RS1 RS00 0 第一组的R0~R7(00H~07H)0 1 第二组的R0~R7(08H~0FH)1 0 第三组的R0~R7(10H~17H)1 1 第四组的R0~R7(18H~1FH)2.位寻址区位寻址区既可进行位寻址,又可字节寻址。
位操作、位地址的概念:对一个8位二进制的每一位进行单独操作,该操作叫做位操作,每一位有自己独立的地址叫位地址。
以2FH单元为例说明位地址和单元地址关系。
内部RAM2FH单元地址与其位地址关系见表1-4。
表 1-4 内部RAM2FH单元地址与其位地址关系单元地址位地址H→L 7 6 5 4 3 2 1 0 2FH 7F 7E 7D 7C 7B 7A 79 783.用户RAM数据缓冲、堆栈、工作单元。
扣除4*8=32个通用寄存器,位寻址16个单元,余下128-32-16=80,这80个单元是供用户使用的一般RAM区,其单元地30H~7FH,一般常将堆栈数据放在用户RAM区。
1.4.2内部数据存储器高128单元内部的高128单元是供给专用寄存器使用的,因此称之为特殊功能寄存器(SFR),也可以称之为专用寄存器,其单元地址80H~FFH。
8051共有22个特殊功能寄存器:B、ACC、PSW、IP、P0、P1、P2、P3、IE、SUBF、SCON、TH1、TL1、TH0、TL0、TMOD、TCON、PCON、DPH、DPL、SP、(PC)。
4.简述程序状态字寄存器PSW各位的定义名、位编号和功能。
5.程序状态字是一个8位寄存器,用于寄存程序运行的状态信息。
状态寄存器PSW各位的意义见表1-5。
6.表1-5 状态寄存器PSW各位的意义7.CY(PSW.7)---进位标志位。
8.最常用的标志位作用:存放算术运算的进位标志,位操作中,作累加位使用,位传送、9.位与、位或等位操作。
10.CY(PSW.6)---辅助进位标志位。
11.加减运算中当有低4位向高4位进位,或借位时作为辅助进位的标志位。
12.CY(PSW.5)---用户标志位。
13.这是一个供用户定义的标志位,可根据需要由软件方法置位或复位,用以控制程序的执行转向。
14.用户标志位具体运用:温度控制中,将PSW.5起始设为0,当检测到温度超过设定值,将PSW.5置1,当程序检测到PSW.5=1时,转向使电热丝停止工作的程序,由输出端停止15.控制。
16.RS1和RS0(PSW.4 PSW.3)---寄存器组选择位(通过搭配原则选择四组工作寄存器)。
17.OV (PSW.2)---溢出标志位。
18.在带符号数加减运算中, OV=1表示运算结果超出符号数有效范围(-128~+127)产生溢出,结果错误。
OV=0,运算结果无溢出。
19.P (PSW.0)---奇偶标志位。
20.表明累加器A中“1”的个数的奇偶性。
奇数个“1”时,P=1,偶数个“1”时,P=0任务2 单片机开发工具之一——Keil C软件下面是跑马灯的程序,采用Keil μVision 2建立“跑马灯”项目,并在此项目下添加“跑马灯.c”程序,按照下列程序正确输入,要求编译通过时能生成“跑马灯.hex”文件。
(1)观测程序空间的机器代码;(2)在P1端口进行数据观测;(3)采用断点进行程序调试,重点观测P1端口的数据变化情况。
(1)(2)(3)任务3 单片机开发工具之二——Proteus仿真软件跑马灯原理图如图1-76所示,采用Proteus 7 Professional/ISIS 7 Professional 软件正确绘制原理图,其中跑马灯原理图中各元器件参数见表1-7。
表1-7 跑马灯原理图中各元器件参数元器件序号元器件名(值)单片机U1 AT89C52晶振CRYSTAL(12MHZ)振荡电容C1C2 CAP(15P~30P)复位按钮BUTTON上电复位C3 GENELECT22µ16V电解电容电阻R1~R8R9 RES(二极管限流电阻510Ω,复位电阻1kΩ)发光二极管D1~D8 LED-RED在图1-76跑马灯原理图将本篇中任务2中生成的“跑马灯.hex”加载到CPU(U1),点击运行,观察八个二极管的变化情况。
Array图1-76 跑马灯原理图任务4 单片机C语言1.搜集资料,简述C语言与汇编语言的比较。
(1)汇编语言是用语言直接控制硬件,由硬件间接达到某种控制效果。
而C语言是一种比较高级的语言,编写者可以不用去考虑硬件而直接去命令计算机达到这种控制效果。
换而言之,汇编语言对描述过程更注重,C语言之类的高级语言更注重描述结果。
(2)c语言是高级语言,可移植性较高,与设备相关性较低。
汇编语言是低级语言,可以移植性较低,与CPU具有极强的相关性。
2.哪些变量类型是51单片机直接支持的?单片机不支持任何所谓变量类型,支持变量类型取决于所使用的编译器,是编译器把程序编译成机器码以便单片机可以根据它来执行程序。
普通单片机都支持用C语言进行编程,那么它的编译器就会支持C语言里用到的变量类型,如整型、字符型、指针、数组等等。
3.请查找资料,说明C51中的中断函数和一般的函数有什么不同?答:中断函数与一般函数的定义方法一样,指示中断函数不需要主程序调用,直接由中断调用,而一般函数需要主函数调用才能使用。
4.指出下面程序的语法错误:#include<reg51.h>main(){a=C;int a=7,Cdelay(10)void delay();{char i;for(i=O;i<=255;“++”);}答:#include<reg51.h>main(){a=C;//没有定义变量a和C,或者定义的变量应该放到使用该变量之前int a=7,Cdelay(10) //没有;void delay();//子函数定义要在主函数之外定义,不能直接在主函数当中定义{char i;for(i=O;i<=255;“++”);}5.编一个程序,输入华氏温度(F),按下列公式计算并输出对应的摄氏温度(C):C = 5( F-32)/9。
答:#include<stdio.h>main(){double F;scanf("%f",&F);double C;C=5.0*(F-(32/9));printf("%f",C);}#include<stdio.h>main(){int a;int s;for(a=1;a<101;a++){s=a*a;printf("%d\n",s);}}#include<stdio.h>main(){int a=1;int s;while(a<101){s=a*a;a++;printf("%d\n",s);}}6.用三种循环语句分别编写程序显示1至100的平方值。
答:#include<stdio.h>main(){int a=1;int s;while(a<101){s=a*a;a++;printf("%d\n",s);}}#include<stdio.h>main(){int a=1;int s;do{s=a*a;a++;printf("%d\n",s);}while(a<101);}7.阅读函数,写出函数的主要功能:float av(int a[],int n){ int i;float s;for(i=0,s=0;i<n;i++)s=s+a[i];return s/n;}答:此函数功能为:对a[]数组进行累加,然后求平均值。
8.编一个名为root的函数,求方程ax*x+bx +c=0的b*b-4ac,并作为函数的返回值。
其中的a、b、c作为函数的形式参数。
答:#include<stdio.h>#include<math.h>int root(int a,int b,int c){int m;int i;double digital[2];double x1,x2,n; //a*x*x+b*x+c=0;m=(b*b-4*a*c);//求解公式b^2-4ac 当小于0无解开根号为x的值if((b*b-4*a*c)<0){printf("此函数无解");}if((b*b-4*a*c)==0){printf("%f",(-b)/(2.*a));}if((b*b-4*a*c)>0){n=sqrt((double)m);x1=(-b+n)/(2.*a);x2=(-b-n)/(2.*a);double digital[2]={x1,x2};for(i = 0; i < 2;i ++){printf("%f ", digital[i]);}}return 0;}main(){int a,b,c;printf("请输入a*x*x+b*x+c=0中的a,b,c: \n");scanf("%d %d %d",&a,&b,&c);printf("%f",root(a,b,c));}模块2 单片机基础篇任务1 点亮交通灯按照下列顺序要求完成花样流水灯的控制,花样流水灯原理图如图2-27所示。