C51程序设计.docx
- 文档编号:27210875
- 上传时间:2023-06-28
- 格式:DOCX
- 页数:17
- 大小:1.62MB
C51程序设计.docx
《C51程序设计.docx》由会员分享,可在线阅读,更多相关《C51程序设计.docx(17页珍藏版)》请在冰豆网上搜索。
C51程序设计
C51程序设计
实验报告
班级:
10电信01班
姓名:
陈海祥
学号:
101202060130
日期:
2012.6.2
指导老师:
赵金龙
主要应用:
电脑钟
目录
第一章AT89C51介绍2
1.1AT89C51简介2
1.2AT89C51主要特性3
1.3各引脚说明4
第二章Proteus电路图设计及应用7
2.1Proteus软件介绍7
2.2Proteus绘制电脑钟实例8
第三章Keil软件的应用10
3.1Keil软件的使用10
3.2生成.HEX文件13
第四章仿真结果14
第五章结论15
附录:
17
6.1原理图17
6.2程序代码17
参考文献:
21
第一章AT89C51介绍
1.1AT89C51简介
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
外形及引脚排列如图所示:
1.2AT89C51主要特性
·与MCS-51兼容
·4K字节可编程闪烁存储器
·寿命:
1000写/擦循环
·数据保留时间:
10年
·全静态工作:
0Hz-24MHz
·三级程序存储器锁定
·128×8位内部RAM
·32可编程I/O线
·两个16位定时器/计数器
·5个中断源
·可编程串行通道
·低功耗的闲置和掉电模式
·片内振荡器和时钟电路
1.3各引脚说明
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下所示:
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
振荡器特向放大器可以配置为片内振荡器。
石晶振荡和陶瓷振荡均可采用。
如采用外部时钟源驱动器件,XTAL2应不接。
有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度性:
XTAL1和XTAL2分别为反向放大器的输入和输出。
该反
第二章Proteus电路图设计及应用
2.1Proteus软件介绍
图.2.1.0Proteus启动界面
ProteusISIS是英国Labcenter公司开发的电路分析与实物仿真软件。
它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:
(1)、实现了单片机仿真和SPICE电路仿真相结合。
具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。
(2)、支持主流单片机系统的仿真。
目前支持的单片机类型有:
68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。
(3)、提供软件调试功能。
在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如KeilC51uVision2等软件。
(4)、具有强大的原理图绘制功能。
总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大
2.2Proteus绘制电脑钟实例
打开Proteus软件,出现工作界面如图所示:
图.2.2.0Proteus工作界面
将所需元器件加入到对象选择器窗口,单击对象选择器按钮P,如图所示:
。
查找并放置元器件至图形编辑窗口,电路图如下图所示:
图.2.2.1软件查找选择界面
选择放置原件→调整布局→连线:
图2.2.2LED电脑钟显示电路图
绘制完电路图后应点击左下方player按钮进行电路检测
第三章Keil软件的应用
3.1Keil软件的使用
KeilC51软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编,PLM语言和C语言的程序设计,界面友好,易学易用。
图3.1.0Keil软件启动界面
进入KeilC51后的编辑界面,如图所示:
图3.1.1Keil软件编辑界面
(1)、新建文件
单击Project菜单,在弹出的下拉菜单中选中NewProject选项,新建一个项目,然后选择要保存的路径。
这时会弹出一个对话框,要求选择单片机的型号,如图所示:
选定Atmel下的89C51,单击确定。
在下图中,单击“File”菜单,再在下拉菜单中单击“New”选项,新建文件后如下图所示:
将程序编辑到新建的文档中并保存后缀名为.C文件
(2)、添加程序文件到工程文件中
回到编辑界面后,单击“Target1”前面的“+”号,然后在“SourceGroup1”上单击右键,弹出如下菜单
图3.1.2添加程序文件到工程文件菜单
然后单击“AddFiletoGroup‘SourceGroup1’”屏幕如下图所示
图3.1.3程序添加
3.2生成.HEX文件
单击“Project”菜单,再在下拉菜单中单击“OptionsforTargetTarget1’”在下图中,单击“Output”中单击“CreateHEXFile”选项,使程序编译后产生HEX代码,供下载器软件使用。
图3.2.1生成.HEX文件设置对话框
图3.2.2编译运行
第四章仿真结果
在Proteus中双击51单片机将.HEX文件烧入单片机中(图4.1.0)。
点击左下方的player按钮运行电子钟仿真
图4.1.0HEX文件烧入
图4.1.1时钟仿真图
第五章结论
在本学期的课程设计中,重新巩固了单片机的理论知识学到了很多内容。
刚开始学习这门课的时候觉得很困难,没有思路。
由刚开始的不熟悉到现在的熟悉并且能熟练运用,收获颇丰。
把以前学到的知识得到巩固提高和进一步的理解和认识。
虽然在过程中遇到了困难,比如程序代码错误,仿真结果出错,但是在经过修改和同学的帮助下都一一进行了完善。
同时,我发现自身还有很多缺点,诸如C语言基础不够牢固,容易马虎等。
总之,课设是一个整体,要想完成课设,必须要有条有理的确定课设的整体结构,这就需要我们有一个整体的概念,从目录到结尾都应该贯穿整体,流畅。
此外结构必须要清晰,对于每个部分,我们要做到有理有据,对课题进行深刻的讨论,不能只是走个形式而已,要从中学到有用的知识,为我们将来就业打下坚实基础。
附录:
6.1原理图
图6.1.0时钟设计流程图
6.2程序代码
#include
unsignedcharcodedispcode[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0x40};
unsignedchardispcnt[]={0,0,16,0,0,16,0,0};
unsignedchardispsel[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;
unsignedchars,m,h;
unsignedchartcnt;
unsignedchari,j,k;
voiddesp1ms(void)
{
for(i=0;i<4;i++)
for(j=0;j<250;j++);
}
main()
{
s=0;
m=0;
h=0;
tcnt=0;
TMOD=0x01;
ET0=1;
EA=1;
TH0=0x3c;
TL0=0xb0;
TR0=1;
while
(1)
{
for(k=0;k<8;k++)
{
P2=dispsel[k];
P0=dispcode[dispcnt[k]];
desp1ms();
}
}
}
voidt0(void)interrupt1using0
{
tcnt++;
TH0=0x3c;
TL0=0xb0;
if(tcnt==20)
{
tcnt=0;
s++;
if(s==60)
{
s=0;
m++;
if(m==60)
{
m=0;
h++;
if(h==24)
{h=0;}
}
}
}
dispcnt[0]=h/10;
dispcnt[1]=h%10;
dispcnt[3]=m/10;
dispcnt[4]=m%10;
dispcnt[6]=s/10;
dispcnt[7]=s%10;
}
参考文献:
《单片机原理与应用及C51程序设计》唐颖编著:
北京大学出版社
《C51程序设计首次操作教程PDF版》
《C51程序设计实验指导书PDF版》
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C51 程序设计
![提示](https://static.bdocx.com/images/bang_tan.gif)