单片机课程设计指导书.docx
《单片机课程设计指导书.docx》由会员分享,可在线阅读,更多相关《单片机课程设计指导书.docx(65页珍藏版)》请在冰豆网上搜索。
![单片机课程设计指导书.docx](https://file1.bdocx.com/fileroot1/2023-4/16/6ec028f7-4f9a-4688-ba73-1af09b4826b2/6ec028f7-4f9a-4688-ba73-1af09b4826b21.gif)
单片机课程设计指导书
微机原理及应用课程设计
指导书
AT89C2051单片机时钟控制器制作
1、概述………………………………………………………………………………………2
2、AT89C2051单片机简介…………………………………………………………………2
3、电子时钟功能描述………………………………………………………………………4
4、电子时钟电路板元件布局图……………………………………………………………5
5、电子时钟电路原理图……………………………………………………………………6
6、所用元件列表……………………………………………………………………………7
7、软件开发环境KeilC51介绍…………………………………………………………8
8、软件主要部分框图……………………………………………………………………17
9、器件编程简介…………………………………………………………………………20
10、附录:
参考程序……………………………………………………………………23
一、概述
微机接口技术是机电专业的一门重要专业课程,通过该课程的学习,学生已经初步掌握了单片机、微型计算机的基本工作原理以及接口技术,初步掌握了常用接口硬件的特点及使用方法,能够读懂简单的接口硬件原理图及相关的控制程序,能够根据要求设计一些较为简单的接口控制线路。
但是微机接口技术是一门实践性很强的课程,既有软件又有硬件,软件与硬件必须同时兼顾,仅有理论学习还是远远不够的。
微机接口技术课程设计正是针对这一状况而设立,通过微机接口课程设计的训练,使学生了解单片机系统的开发过程以及接口的设计原则和方法,巩固课程阶段的理论知识,进一步加强学生在接口技术方面的实践技能和动手能力的培养。
该课程设计中,选用的是AT89C2051高性能小型单片机,AT89C2051内含有FlashROM存储器,所以可反复使用。
用AT89C2051开发电子制作,安全性高,制作简单,调试方便,功能多样,容易调动起学生的兴趣,开发学生动手动脑的积极性。
学生从设计目标的描述入手,完成硬件原理图设计、电路板设计、电子元器件的装配焊接、软件设计调试以及器件编程等全部过程。
通过该阶段的学习,学生对单片机系统的开发进行全面的了解,为将来走向工作岗位打下坚实的基础。
二、AT89C2051单片机简介
AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集相兼容,但仅引出了15个I/O口线,对应于P1和P3口(缺P3.6),是一种20引脚的MCU。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C2051是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
1.主要特性
·与MCS-51兼容
·2K字节可编程闪烁存储器,寿命:
1000写/擦循环,数据保留时间:
10年
·全静态工作:
0Hz-24Hz
·128*8位内部RAM
·15条可编程I/O线
·两个16位定时器/计数器
·5个中断源
·可编程串行通道
·低功耗的闲置和掉电模式
·片内比较器
·片内振荡器和时钟电路
2.管脚说明:
VCC:
供电电压。
GND:
接地。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
P1.0和P1.1作为内部比较器的输入端,没有内部上拉电阻。
P3口:
P3口管脚是7个带内部上拉电阻的双向I/O口(P3.6作为片内比较器的输出,没有引出),当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口部分引脚还作为AT89C2051的一些特殊功能口,如下所示:
管脚第二功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2INT0(外部中断0)
P3.3INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
AT89C2051的各口线输出缓冲器都具有20mA的拉电流能力。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
三、ATM89C2051单片机时钟描述
ATM89C2051单片机的时钟采用内部定时器定时,具有四位LED显示,三个操作按钮,一个蜂鸣器或扬声器(电路图见第四节),学生可以根据需要编程。
1.参考设计中硬件的定义
计时方式:
采用AT89C2051内部的定时器T0,使用中断方式。
产生百分秒、秒、分、小时机时,同时具有定闹功能。
显示方式:
4位LED采用共阳动态显示,可以根据需要显示[时-分]、[分-秒]、[秒-百分秒],分别对应显示模式dispMod=0、1、2。
可12-24小时显示切换。
按键定义:
3个键,分别命名为左键、中间、右键
左键:
实现工作状态接换
工作状态依次为:
显示状态→时设定-分设定→秒设定→闹钟设定→显示状态
由变量Workmode记忆状态
中键:
在显示状态下定义为:
显示模式字DispMode加1
在设定状态下定义为:
被设定变量加1
在闹钟设定时定义为:
定闹小时值加1,循环变化
右键:
在显示状态下定义为:
显示模式12-24小时切换
在设定状态下定义为:
被设定变量减1
在闹钟设定时定义为:
定闹分钟值加1,循环变化
2.参考程序控制变量定义
显示模式控制字Dispmode
显示模式Dispmode
取值
表述
辅助变量取值
0
时间显示/设定
闹钟显示/设定
左边两位显示小时,右边显示分钟
ALARMST=0
左边两位显示定闹小时值,右边显示定闹分钟值
ALARMST=1
1
左边两位显示分钟,右边显示秒
2
左边两位显示秒,右边显示百分秒
工作方式控制字Workmode
工作方式Workmode
取值
表述
对应的显示模式
Dispmode
辅助变量取值
RUNSET
ALARMST
0
时间显示,分隔小数点闪动
0、1、2
0
0
1
小时设定:
左2位LED闪动
0
1
0
2
分钟设定:
右2位LED闪动
0
1
0
3
秒设定:
左2位LED闪动
右2位LED灭
2
1
0
4
显示/设定定闹时分,左2位LED为小时,右2位LED为分钟
0
1
1
3.变量见附录的程序
四、ATM89C2051单片机时钟电路板元件布局图
五、ATM89C2051单片机时钟电路原理图
六、所用元件清单
序号
名称
代号
型号
数量
备注
1
单片机
IC2
AT89C2051
1
2
电阻
R1-R8
R9-R12
R13
R14
220Ω
2k
10k
5Ω
8
4
1
1
(可变)
3
电容
C1
C2
C3-C4
C5
C6
220u/25v
10u/16v
33p
47u
33u
1
1
2
1
电解
电解
瓷片
电解(可变)
独石(可选)
4
三极管
T1-T4
9012
4
PNP
5
按钮
Key1/2/3
3
6
显示器
DP
0.56”
1
4位动显共阳
7
喇叭/蜂鸣器
SP
1
(可变)
8
晶振
XT
12MHz
1
9
整流管
D1
1A/25V
1
(可变)
10
三端稳压器
VD
7805
1
11
插座
PI
φ3.5
1
12
集成电路插座
DIP20
1
13
单排插孔
SIP40
12线*2
用于LED
14
电路板
定制
1
15
支座
标准件
4套
注:
1、发声装置可以采用喇叭或蜂鸣器。
2、R14和C5在电路板上占同一位置,如果采用喇叭,该位置装C5,采用蜂鸣器则装R14。
3、整流管D1在有的电路板上为整流桥,有的为整流管,根据具体情况选用。
4、有的电路板上C6没有安排。
七、软件开发环境KeilC51使用介绍
KeilC51V6.xx(包括V6.02V6.10V6.12V6.14V6.20V6.20C等)是目前世界上最好的51单片机的汇编和C语言的开发工具。
支持汇编,C语言以及混合编程。
同时具备功能强大的软件仿真和硬件仿真(用mon51协议)。
下面简单介绍它的应用。
运行KeiluVision2,出现如下界面。
1)击菜单project,选择newproject,新建一个工程:
2)然后选择你要保存的路径,输入工程文件的名字,比如保存到keil目录里,工程文件的名字为test。
如下图所示,然后点击保存。
3)这时会弹出一个对话框,要求你选择单片机的型号,你可以根据你使用的单片机来选择,keilc51几乎支持所有的51核的单片机,这里以Atmel的AT89c52来说明。
如图所示,选择89c52之后,右边一栏是对这个单片机的基本的说明,然后点击确定。
4)这时要新建一个源程序文件,建立一个汇编或C文件,如果你已经有源程序文件,可以忽略这一步。
点击菜单File->New:
5)输入一个简单的程序,如下图所示:
6)选择菜单File_>SAVE:
7)选择你要保存的路径,在文件名里输入文件名,注意一定要输入扩展名,如果是c程序文件,扩展名为.c,如果是汇编文件,扩展名为ASM,如果是ini文件,扩展名为.ini,其他文件类型,比如注解说明文件,可以保存为.txt的扩展名。
那么我们这里是要存储一个c源程序文件,所以输入.c扩展名,保存为test.c的名字,(也可以保存为其他名字),点击保存。
8)点击Target1前面的+号,展开里面的内容sourceGroup1:
---->
9)用右键点击SoureceGroup1(注意用鼠标的右键,而不是左键),将弹出一个菜单,选择AddFilestoGuoup'SourceGroup1'.
10)选择刚才的文件test.c,
文件类型选择CSourcefile(*.c).因为我们的是C程序文件,所以选择该类型,如果是汇编文件,就选择AsmSourcefile.如果是目标文件,选择Objectfile,如果是库文件,选择Libraryfile.最后点击Add.点击Add之后,窗口不会消失,(如果要添加多个文件,可以不断添加),添加完毕此时再点击Close关闭该窗口.
11)这时在sourcegroup1里就有test.c文件,如图:
12)接下来要进行一些设置,用鼠标右键(注意用右键)点击左边的Target1,会出现一个菜单.
选择OptionsforTarget'Target1',会出现一个选择卡:
Xtal(Mhz):
是设置你的单片机的工作的频率,默认是24.0MHZ,如果你的单片机的晶振用的是11.0592Mhz,那么在框里输入11.0592(单位是Mhz,所以带小数点).
UseOn-chipROM(0x0-0x1fff):
这个选项是使用片上的FlashRom,我们知道At89c52有8k的flashRom.取决于你的应用系统,你的单片机的EA接高电平的话,请选中这个选项,如果你的单片机的EA接低电平,表示使用外部Rom,那么不要选中该选项.我们在这里选中它
Off-chipCodememory:
表示你在片外接的Rom的开始地址和大小,如果你没有外接程序存储器,那么不要填任何数据.我们在这里假设使用一个片外的Rom,地址从0x8000开始(不要填成8000,如果是8000,是10进制的数,一般填16进制的数),Size为外接Rom的大小.假设接了一块0x1000字节的rom.最多可以外接3块Rom,如果你还用了别的地址,那么就添上.
13)下面要对Output栏进行设置:
这一栏有很多的选项:
SelectFolderforObjects:
点击这个按钮可以选择编译之后的目标文件存储在哪个目录里,如果不设置的话,就是在你的工程文件的目录里.
NameofExecutable:
是设置生成的目标文件的名字,缺省是跟你的工程的名字是一样的.
目标文件可以生成库或者obj,hex的格式.
CreateExecutable:
是生成OMF以及HEX文件:
一般是选中DebugInformation,选中BrowseInformation.这两个选项一般要选中,这样才有详细的调试所需要的信息,比如你要做c语言程序的调试,如果不选的话,调试时你将无法看到高级语言写的程序.
CreateHexFile:
这个选项一般是要选中的.很多网友在bbs上问到,他编译之后没有生成Hex文件,这是因为这个选项没有被选中的原因.要生成Hex文件,一定要选中该选项,如上图所示.还有人问到如何生成OMF的文件,事实上Keil在每次编译之后都生成了OMF文件,那个跟你的工程文件名一样的,但是没有带扩展名的文件就是OMF格式的文件.例如我们这个工程的名字是test.uv2,将会生成一个OMF文件test(不带扩展名).默认是不选中的,所以要自己做设置.
CreateLibrary:
选中时将生成lib库文件.根据你的需要是否要生成库文件,一般的应用是不生成库文件的.
AfterMake:
有几个设置:
Beepwhencomplete:
编译完成之后发出咚的声音.
StartDebugging:
马上启动调试(软件仿真或硬件仿真).根据你的需要做设置,一般是不选中.
RunUserProgram#1,RunUserProgram#2:
这个选项可以设置编译完之后运行别的应用程序,比如有些用户自己编写的烧写芯片的程序(编译完便执行将hex文件写入芯片),或调用外部的仿真程序.根据自己的需要设置.
14)完成上述设置以后,就可以进行编译调试了。
打开主菜单的project选项,选择Buildtarget条目即可。
程序编译完成后,可以进行联机调试或软件仿真,因篇幅关系从略,有兴趣的同学可以参考徐爱钧的《单片机高级语言C51Windows环境编程与应用》或KeilC51编译、调试软件使用指南。
八、软件主要部分框图
1.主程序框图
2.LED动态显示子程序框图
说明:
本子程序实现由DIPSIDX(0,1,2,3)作为位号,显示模式Dispmode和时钟/定闹指示变量Alarmst确定送显数据的LED显示,掩码变量LED_MASK_L和LED_MASK_R分别控制左边2位和右边2位LED的闪动。
LED_CNT取与DIPSIDX相应的数值(0f7h,0fbh,0fdh,0feh)
3.T0中断定时子程序框图
九、器件编程简介
在程序编译好之后,生成IntelHex格式的目标文件,将目标文件烧写到单片机系统的程序存储器中,单片机就可以工作了。
单片机的烧写有很多的工具可以选用。
这里仅以ATMEL单片机80C51编程为例介绍geniusSP+编程器的使用方法。
将编程器电缆连接到计算机的串行口,接通电源,运行编程器操作程序,然后按如下步骤操作:
1)选择器件
●点击工具条的“选择”(第5个)按钮。
弹出选择器件对话框。
●在“器件类型”区选择“MPU”无线电按钮。
●在“生产厂冢”区选择“ATMEL”。
●在“器件型号”区选择“AT89C51”。
图8.1选择AETMELMPUAT89C51
●点击“确定”按钮,关闭选择对话框,在编程环境窗口中可以看见刚才选择的结果。
2)插放器件:
AT89C51的插放方式是按正常方式插放。
故在选择器件对话框关闭时,不会弹出插放方式显示对话框。
如果想了解插放方式,可以点击工具条的“插放”(第8个)按钮,打开插放方式对话框。
将AT89C51器件按要求插入万用插座并锁紧。
3)加载文件:
点击工具条“装载”(第1个)按钮,弹出打开文件对话框。
找到欲打开的文件。
这里作为举例选择当前目录下Subpr.hex文件名。
双击该文件或选择该文件后点击“打开”按钮。
此时打开文件对话框关闭,弹出文件类型对话框。
选择HEX类型,点击确定,关闭文件类型对话框。
可见数据窗口自动打开,并以该文件内容的填充。
在编程环境窗口显示相应的文件全路径名。
在数据窗口的状态栏数据来源区显示文件全路径名。
图8.2打开文件对话框
图8.3文件类型选择对话框
4)器件读写操作:
对于器件的各种操作都是在打开对话框的情况下进行的。
点击工具条的“读写”(第6个)按钮。
弹出MPU的读写对话框(根据所选器件不同,将会弹出不同的对话框)。
●查空:
点击对话框的“查空”按钮,显示查空正在进行。
查空结束后将显示查空结果。
●擦除:
对于像AT89C51这样的器件,如果器件不空时需要先行擦除,才能进行编程,而有些EEPROM之类的器件如能28C64等,不需进行擦除操作。
点击“擦除”按钮,完成擦除操作。
如有必要,可在擦除后再进行查空。
●编程:
点击“编程”按钮。
显示“编程”正在进行,请等待,编程结束后将显示“编程操作已完成”。
●比较:
编程操作完成后,一般都应进行数据比较。
“点击”比较按钮,开始比较操作。
●加密:
如果比较无误,需要的话,可进行加密操作。
在“加密方式”区选择好加密方式。
这里选择方式3然后点击“加密”按钮。
完成加密操作。
为了稳妥,可再进行一次比较或读入操作,如果读出的数据与文件数据完全不符合说明书加密成功。
图8.4AT89C51所用到的读写对话框
如果是经常性重复以上操作过程,可以使用顺序操作。
在顺序操作区内选择擦除、查空、编程、比较、加密。
然后插入器件。
点击“开始”按钮,即可顺利完成上述操作。
顺序操作区
加密操作区
图8.4顺序操作区及加密操作区
十、附录参考源程序清单:
1.汇编语言源程序
;------------------变量定义------------------------
Alarm_MEQU35H;闹钟分设定单元
Alarm_HEQU34H;闹钟时设定单元
HsecEQU33H;百分秒存储单元
SecEQU32H;秒存储单元
MinEQU31H;分存储单元
HourEQU30H;时存储单元
TH0ValEQU?
?
;T0定时器定时时间常数,工作方式0,计算定时时间
TL0ValEQU?
?
ALAR_TIMEQU40H;BCD数字40
RKEYEQUP3.5;中键按在P3.5上
MKEYEQUP3.4;左键按在P3.4上
LKEYEQUP3.7;右键按在P3.7上
DispidxEQU21H;当前LED序号,取值0,1,2,3,代表从左到右的4位LED
Dispidx_0EQU8H;(bit)Dispidx的最低位,用以判别LED0,2/LED1,3
Dispidx_1EQU9H;(bit)Dispidx的bit1,用以判别LED0,1/LED2,3
Dispidx_2EQU0AH;(bit)Dispidx的bit2,用以判别INC指令后,Dispidx=4?
LED_CNTEQU22H;Dispidx的辅助变量,LED位控单元取值F7H,FBH,FDH,FEH
DispModeEQU23H;显示方式,内容取值0,1,2,对应[时分]、[分秒]、[秒-百分]
WorkModeEQU24H;工作模式存储单元,0、1、2、3、4
RunSetEQU00H;(bit)"设置工作"状态指示.
AlarmStEQU01H;(bit)"设置闹铃时分"状态指示。
T12_24EQU02H;(bit)12/24时制控制,0:
12小时显示,1:
24小时显示
AlarFlgEQU03h;(bit)闹铃定时时间到标志,AlarFlg=1,蜂鸣器叫
LedflashEQU04h;(bit)由T0中断产生的闪动信号位,高0.6秒,低0.4秒
LKEY_FLGEQU05h;(bit)左键被有效按下的标志
MKEY_FLGEQU06h;(bit)中键被有效按下的标志
RKEY_FLGEQU07h;(bit)右键被有效按下的标志
LED_MASK_LEQU25H;左2位LED段码掩码字节,取值00H/FFH/7FH,用于引起闪动
LED_MASK_REQU26H;右2位LED段码掩码字节,取值00H/FFH/7FH,用于引起闪动
LEDML_7EQU2fH;(bit)此位为LED_MASK_L的bit7
;--------------源程序清单---------------
ORG0000H
AJMPMAIN
ORG000BH;T0中断入口
AJMPINT_T0;T0中断处理程序
ORG30H;主程序起始地址
MAIN:
MOVSP,#40H;初始化堆栈底地址
MOVHsec,#0;时间单元初值设置
MOVSec,#0
MOVMin,#00H
MOVHour,#12H
MOVDispidx,#0;显示序号为0,指向最左面LED
MOVLED_CNT,#11110111B;点亮Dispidx指向的最左边的LED
MOVDispMode,#0;显示模式设为0
MOVWorkMode,#0;工作模式设为0(正常跑表)
CLRRunSet;清设置标志
CLRAlarmSt;清定闹标志
SETBT12_24;设置24小时显示标志
CLRAlarFlg;清定闹时间到标志
CLRLKEY_FLG;清左键有效按下标志
CLRMKEY_FLG;清中键有效按下标志
CLRRKEY_FLG;清右键有效按下标志
MOVAlarm_H,#24H;定闹初值小时值;因始终最大位23:
59
MOVAlarm_M,#00H;故初值24:
00将不引起定闹
MOVLED_MASK_L,#0H;左两位LED掩码为0,允许送显
MOVLED_MASK_R,#0H;右两位LED掩码为0,允许送显
MOVTMOD,#01H;T0工作方式1
MOVTH0,#TH0Val;T