单片机最小系统设计与调试

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机最小系统设计与调试
班级: xxx
姓名: xxx
学号: xxx
指导老师: x老师
单片机最小系统设计与调试
一、实验目的
1. 了解单片机的基本工作原理;
2. 学习并掌握相关软件的使用方法(Protel、keil);
2. 掌握单片机片内程序存储器下载方法;
3. 掌握单片机的程序设计(汇编及C51);
二、实验原理
(一)什么是单片机最小系统
单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统。

对51系列单片机来说,单片机+晶振电路+复位电路,便组成了一个最小系统.但是一般我们在设计中把按键输入、显示输出等加到上述电路中,成为小系统。

(二) AT89C51高性能8位单片机功能
AT89C51有以下标准功能:8K字节Falsh闪速存储器,256字节内部RAM,32个I/O口线,3个16位定时/计数器,一个6向量两级中断结构,一个全双工串行通信口,片内震荡器及时钟电路,同时AT89C51可降至0HZ的静态逻辑操作,并支持两种软件可选的节电工作模式。

空闲方式停止CPU的工作,但允许RAM的操作,定时/计数器,串行通信口及中断系统持续工作。

掉电方式保存RAM中的内容,但震荡器停止工作并禁止其他所有部件工作直到下一个硬件复位。

主要功能特性:
(三) AT89C51高性能8位单片机资料
单片机主要擅长系统控制,而不适合做复杂的数据处理,在设计单片机最小系统时通常选用AT89C5l、AT89C52、AT89S51、AT89S52(S系列芯片支持ISP功能)等型号的8位DIP-40封装的单片机作为MCU,一个典型的单片机最小系统一般由时钟电路、复位电路、键盘电路、显示电路等部分组成,有时也外扩有片外RAM和ROM以及外部扩展接口等电路。

图1为单片机最小系统结构框图。

图1 单片机最小系统结构框图
(四)单片机系统结构介绍
1.系统时钟电路
单片机内部具有一个高增益反相放大器,用于构成振荡器。

通常在引脚XTALl和XTAL2跨接石英晶体和两个补偿电容构成自激振荡器,系统时钟电路结构如图2所示,可以根据情况选择6MHz、8MHz或12MHz等频率的石英晶体,补偿电容通常选择20-30pF左右的瓷片电容。

图2 系统时钟电路
2.复位电路
单片机小系统采用上电自动复位和手动按键复位两种方式实现系统的复位操作。

上电复位要求接通电源后,自动实现复位操作。

手动复位要求在电源接通的条件下,在单片机运行期间,
用按钮开关操作使单片机复位。

复位电路结构如图3所示。

上电自动复位通过电容C3充电来实现。

手动按键复位是通过按键将电阻R2与VCC接通来实现。

图3 复位电路
3.键盘电路
系统利用P1口的P1.0-P1.3设置了4个独立按键S2~S5,如图4所示,当键按下时,P1口相应的引脚置为低电平,且与此键相连的发光二极管点亮。

此外,通过8279键盘显示控制芯片还可以扩展编码键盘和显示,图5为利用8279扩展的一个2×8=16键编码键盘及 8个LED 的电路。

图4 独立按键图5 扩展键盘和显示
4.显示电路
系统设置了8个共阳极LED数码管LED1-LED2,单片机P0口提供段码信号,低电平有效,P0口输出端通过限流电阻R00~R07与数码管的段码数据线相连,用来送出LED数码管的段码数据信号。

单片机P2口提供位选信号,当P2口某位输出低电平时,与此相连的开关三极管导通,对应的数码管点亮,使用三极管用来增强信号的驱动能力,如图6。

此外,为了扩展LCD显示,系统设置了两个LCD 接口,如图7,一个用于40点矩阵LCD显示,一个用于128×64点阵式LCD 显示。

图6 LED显示电路
图7 LCD扩展接口
5.其它
系统还扩展了一片2K位串行CMOS E2PROM24C02,P3.3和P3.4分别作为24C02 串行数据传输的时钟和数据线,由于只有一个24C02,其三个地址输入脚A0 、A1 、A2接地,如图8。

此外,系统还设置了一个蜂鸣器电路,如图9 ,通过P3.7输出音频信号,可使蜂鸣器发声。

由于,本最小系统没有外扩其他存储器和I/O,因此,没有用到地址译码和锁存。

图8 扩展E2PROM 图9 蜂鸣器电路
(五)单片机最小系统主要器件如表1所示:
表1单片机最小系统主要器件
标号型号、规格封装功能说明
U1 89C51 DIP40 CPU主器件
U2 24C02 DIP8 2K E2PROM
LED1,LED2 7SEG-4 4位8段共阳极数码管
Q1~ Q9 9012 TO-92A 三极管
D1~ D12 φ3MM DIODE0.4 发光二极管
Y 12MHz石英晶振单片机时钟晶振
表2主要应用接口
标号功能说明连接目标
J1 输入电源插座主电源
J2 40点矩阵LCD接口40点矩阵液晶显示模块
J2 128×64点阵式LCD接口128×64点阵液晶显示模块
Jp1 P0口引出接口单片机P0口
Jp2 P1口引出接口单片机P1口
Jp3 P2口引出接口单片机P2口
Jp4 P3口引出接口单片机P3口
单片机最小系统电原理图
三、实验要求
(一)认识MCS-51的ROM及片外RAM空间:认识51系列单片机的程序存储器(ROM)的空间范围;汇编指令编码在ROM中存储形式;掌握指令编码和指令编码所在地址的概念;了解51系列单片机的程序存储器(ROM)固定地址的用途。

认识51系列单片机的片外数据存储器(片外RAM)的地址空间范围;了解51系列单片机的片外数据存储器的用途;重点掌握片内片外访问存储器的指令。

(二)认识MCS-51片内RAM空间:认识51系列单片机片内随机存储器(片内RAM)的空间范围;认识51系列单片机片内随机存储器的区域划分;掌握字节地址和位地址的概念;了解R0~R7寄存器与字节地址的关系。

重点掌握MCS-51系列单片机四个口的用法的位操作。

(三)MCS-51汇编语言设计(编码转换):用MCS-51汇编指令进行程序设计。

将四位BCD码化为十六位二进制数。

(或将四位十六进制数转化为BCD码)。

要求:在PC机上调试,程序可正确运行并上交源程序清单及程序说明。

(四)键盘输入电路设计/动态显示电路设计:在实训过程中要求设计按键输入电路、设计显示电路,并画出电路图并编写按键输入子程序。

重点掌握硬件电路的设计及通过编程对电路的控制。

(五)单片机最小系统设计:单片机最小系统的设计是单片机应用系统设计及开发的基础,通过单片机最小系统设计,使学生对所学的单片机原理及应用课程有更深的理解。

要求:提供电路图和程序清单。

重点掌握硬件电路的设计及过程控制。

(六)基于单片机的应用系统设计:设计出实现某控制目的的应用系统是本实训课的最终实训的结果。

实训要求中包括单片机最小系统的设计,按键输入电路设计,显示电路的设计,及应用系统的软件编程。

四、实验数据与结果
实验原程序:
#include<reg51.h>
#define char unsigned char
#define uint unsigned int
char code dis_7[]=/*{0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};*/
{0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0xbf,0xbf};
char code scan_con[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; char dis[]={0x00,0x00,0x0b,0x00,0x00,0x0b,0x00,0x00};
char data ms50=0x00,con=0x00,con1=0x00,con2=0x00;
char data timedata[3]={0x00,0x00,0x00};
sbit key0=P1^0;
sbit key1=P1^1;
sbit key2=P1^2;void delay( int t)
{
uint x,y;
for(x=t;x>0;x--)
for(y=50;y>0;y--);
}
/*delay(int t)
{
int i,j;
for(i=0;i<t;i++)
for(j=0;j<120;j++) ;
}*/
scan()
{
char k;
dis[0]=timedata[0]%10;dis[1]=timedata[0]/10;
dis[3]=timedata[1]%10;dis[4]=timedata[1]/10;
dis[6]=timedata[2]%10;dis[7]=timedata[2]/10;
for(k=0;k<8;k++)
{ P2=0x00;
P2=scan_con[k];
P0=dis_7[dis[k]];
//P2=scan_con[k];
delay(10);
//P2=0x00;
}
}
keyscan()
{
EA=0;
if(key0==0)
{ delay(10);
while(key0==0);
con++;TR0=0;ET0=0;
if(con>=3)
{con=0;TR0=1;ET0=1;}
}
if(con!=0)
{if(key1==0)
{ delay(10);
while(key1==0);
timedata[con]++;
if(con==2)
con1=24;
else con1=60;
if(timedata[con]>=con1)
{ timedata[con]=0;} }}
if(con!=0)
{ if(key2==0)
{ delay(10);
while(key2==0);
timedata[con]--;
if(con==2) con2=23;else con2=59;
if(timedata[con]<=0)
{timedata[con]=con2;} }}
EA=1;
}
main()
{
TH0=0x3c;TL0=0xb0;
TMOD=0x01;ET0=1;TR0=1;EA=1;
while(1)
{
scan();
keyscan();
} }
void time_intt0(void) interrupt 1
{ET0=0;TR0=0;TH0=0x3c;TL0=0xb0;TR0=1; ms50++;
if(ms50==20)
{ ms50=0x00;timedata[0]++;
if(timedata[0]==60)
{ timedata[0]=0;timedata[1]++;
if(timedata[1]==60)
{ timedata[1]=0;timedata[2]++;
if(timedata[2]==24)
{ timedata[2]=0;
}
}
}
}
ET0=1;
}
实验结果:
五、实验心得
单片机主要擅长系统控制,而不适合做复杂的数据处理,所以在设计单片机最小系统时不应该应用过多的嵌套,一个典型的单片机最小系统一般由时钟电路、复位电路、键盘电路、显示电路等部分组成,有时也外扩有片外RAM和ROM以及外部扩展接口等电路。

本次实验,主要是理解单片机的时序与按键,熟练的掌握基于C语言的单片机编程、调试、应用。

学会单片机不难,但是学好单片机很难,联系是必不可少的,在没有硬件条件的情况下,可以适当的选用模拟软件,比如protues,protel等等,这些都是简单实用的模拟电路软件,通过本次实验,学会了不少单片机调试运行方面的知识,不少错误是由于C语言编程上面的错误导致无法运行或运行结果错误。

所以,必须多加练习才能了解单片机,将单片机运用到实际上去。

相关文档
最新文档