第十一章单片机应用的设计方案与发展
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第十二章单片机应用系统的设计与开发
11·1
在单片机应用系统总体设计中,应考虑哪几方面的问题?简述硬件设计和软件设计的主要过程。
答:在单片机应用系统总体设计中,主要应考虑硬件设计和软件设计两方面的问题。
硬件设计的任务是根据总体设计要求,在所选择机型的基础上,确定系统扩展所要用的存器、I/O电路、A/D电路以及有关外围电路等,然后设计出系统的电路原理图。
下面介绍硬件设计的各个环节。
(1>程序存储器
当单片机内部程序存储器容量不够时,需外扩存储器。
可作为程序存储器的芯片有多种非易失性存储器力口EPROM和E2PROM等,一般应选用速度高、容量较大的芯片,这样使译码电路简单,且使软件扩展留有一定余地。
(2>数据存储器
对于数据存储器的容量要求,各个系统之间差别比较大。
有的测量仪器和仪表只需少量的RAM即可,此时应尽量选用片内RAM容量能符合要求的单片机。
对于要求较大容量RAM的系统,RAM芯片的选择原则是尽可能减少RAM芯片的数量。
例如,一片6264
(8KB>比4.片6116(2KB>价格低得多。
(3>输入/输出接口
较大的应用系统一般都要扩展I/O接口,在选择I/O电路时应从体积、价格、功能、负载等几方面考虑。
应根据系统总的输入/输出要求来选择接口电路。
A/D和D/A电路芯片的选择原则是应根据系统对它们的速度、精度和价格的要求而
确定。
(4>地址译码电路
80C51系统有充分的存储器空间,包括64KB程序存储器和64KB数据存储器,在应用
系统中一般不需要这么大容量。
为能简化硬件逻辑,同时还要便所用到的存储器空间地址连
续,通常采用译码器法和线选法相结合的办法。
(5>外围电路
在测量和控制系统中,经常需要对一些现场物理量进行测量或者将其采集下来进行信号
处理之后再反过来去控制被测对象或相关设备。
在这种情况下,应用系统的硬件设计就应包
括与此有关的外围电路,如信号调节放大电路、驱动电路等。
在单片机应用系统研制中,软件设计一般是工作量最大、最重要的任务。
下面介绍软件设计的一般方法与步骤。
(1>系统定义
系统定义是指在软件设计前,首先要进一步明确软件所要完成的任务,然后结合硬件结构,进一步弄清软件承担的任务细节。
①定义和说明各输入/输出口的功能,是模拟信号还是数字信号、电平范围、与系统接口方式、占有口地址、读取和输人方式等。
②在程序存储器区域中,合理分配存储空间,包括系统主程序、常数表格、功能子程序块的划分、人口地址表等。
③在数据存储器区域中,考虑是否有断电保护措施、定义数据暂存区标志单元等。
④面板开关、按键等控制输人量的定义与软件编制密切相关,系统运行过程的显示、运算结果的显示、正常运行和出错显示等也是由软件编制,所以事先也必须给以定义,作为编程的依据。
(2>软件结构设计
合理的软件结构是设计出一个性能优良的单片机应用系统软件的基础,必须予以充分
重视。
由系统的定义,可以把整个工作分解为几个相对独立的操作。
根据这些操作的相互联系及时间关系,设计出一个合理的软件结构。
在程序设计方法上,模块程序设计是单片机应用中最常用的程序设计技术。
这种方法的优点是:单个程序模块的设计和调试比较方便且容易完成,一个模块可以为多个程序所共享。
缺点是:各个模块的连接有时有一定难度。
(3>程序设计
在软件结构设计确定之后就可以进行程序设计。
一般程序设计过程如下:
根据问题的定义,描述出各个输人变量和各个输出变量之间的数学关系,即建立数学模型。
然后根据系统功能及操作过程,先列出程序的简单功能流程框图(粗框图>,再对粗框图进行扩充和具体化,即对存储器、寄存器、标志位等工作单元作具体的分配和说明。
把功能流程图中每一个粗框转变为具体的存储单元、寄存器和I/O口的操作,从而绘制出详细的程序流程图(细框图>。
在完成流程图设计以后,便可编写程序。
单片机应用程序可以采用汇编语言,也可以采用某些高级语言。
编写完后均须汇编成80C5l的机器码,经调试正常运行后,再固化到非易失性存储器中去,完成系统的设计。
11·2 如何技高应用系统的抗干扰性?可采取哪些措施?
答:单片机应用系统在实际工作中,可能会受到各种外部和内部的干扰,使系统工作产生错误或故障。
为减少这种错误和故障,就要采取各种提高可靠性的措施。
常用措施如下:
①提高元器件的可靠性:
●在系统硬件设计和加工时应注意选用质量好的电子元器件和接插件,并进行严格的测
试、筛选和老化。
●设计时技术参数(如负载>应留有余量。
②提高印刷电路板和组装的质量,设计电路板时布线及接地方法要符合要求。
③对供电电源采取抗干扰措施:
●用带屏蔽层的电源变压器。
●加电源低通滤波器。
●电源变压器的容量应留有余地。
④输人/输出通道的抗干扰措施 :
●采用光电隔离电路。
光电隔离器作为数字量、开关量的输人/输出,这种隔离电路效果很好。
●采用正确的接地技术。
●采用双绞线。
双绞线抗共模干扰的能力较强,可以作为接口连接线。
11·3 请自行设计一个节日彩灯循环闪烁的应用系统。
答:该题可以有多种循环方式,延时时间及左右移不同会有不同的循环效果。
以下只是其
中的一种形式,其余可自行编程实验。
本例电路见题图11-1,由P1 口的8位控制8路电灯电路,在每一路中都通过一个可控硅SCR控制N 路并联电灯的开关。
单片机工作频率12MHz,该程序延时选为200 ms,用定时器T0作为定时器,初值为 50mS。
编程如下 :
题图 11-1
EX11_3:MOV Pl,#0FEH 。
初始化为第0位的一组灯亮
EX11_3A:ACALLDELAY 。
调延时子程序
MOV A,Pl
RL A 。
顺序左移一位
MOVPl,A
AJMPEXll_3A
DELAY
MOV TMOD,#0lH
MOV Rl,#04H
DELAY_1:
MOV TH0,#3CH
MOV TL0,#0B0H
SETBTR0
JNBTF0, $
CLRTF0
DJNZR1,DELAY_1
RET
11·4请自行设计一个交通灯控制系统,此系统还要求显示秒倒计教时间,每当还差10s该换指示打时(例如红灯挨绿打>,该指示灯变为闪烁点亮。
答:设计电路如题图11-2所示,单片机工作频率12MHz,在本题中只考虑马路一边的交通
灯控制系统。
分别用Pl.0和Pl.1控制红灯和绿灯,用两个数码管显示秒的变化。
定时器T0用于显示定时,定时器Tl用于灯闪定时。
DM_ADDR EQU 0DFFFH 。
数码管断码地址
WM_ADDR EQU 0BFFFH 。
数码管位码地址
POSITION EQU 30H 。
位寄存器
COUNTER EQU 31H 。
定位时间寄存器
LAMP1 EQU P1.0 。
红灯
LAMP2 EQU P1.1 。
绿灯。
----------------------------------------
ORG 0000H
LJMP EX4
ORG 000BH
LJMP TIMER0
ORG0030H
EX4: MOVSP,#50H。
设堆栈指针
MOVPOSITION, #0FEH。
初始化位码寄存器
MOVTMOD,#11H。
设置定时器工作方式
MOVTH0,#0F6H。
定时器0初值
MOVTL0,#03CH
SETBTR0。
启动定时器。
SETBET0。
允许定时器0中断
SETBEA。
开中断
SETBLAMP1 。
关红灯
CLRLAMP2。
开绿灯
EX4_START:
MOVCOUNTER,# 60 H 。
置用BCD码表示的定时初值
EX4A:
LCALLDL Y_1S 。
延时1s
MOV A,COUNTER。
时间减1(十进制>
ADDA,#99H
DAA
MOVCOUNTER,A
CJNEA,#l0H,EX4A。
剩余时间大于10s,继续LCALLGLARE。
剩余时间为10s,调闪烁子程序CPLLAMPl。
红灯取反
CPLLAMP2。
绿灯取反
LJMPEX4_START
GLARE:
MOV Rl,#04H
GLARE_LP:
CPLLAMP1
CPLLAMP2
LCALLDL Y_250MS
DJNZR1,GLARE_LP
MOV A, COUNTER 。
时间减1(十进制> ADDA,#99H
DA A
MOVCOUNTER, A 。
时间未到,继续闪烁JNZGLARE 。
时间到,返回
RET。
--------------------------------------------------
DL Y_1S:
MOV R7,#14
DL Y_1S_A:
MOVTHl,#03CH 。
置50ms定时初值MOVTL1,#0B0H
SETBTR1
JNBTF1, $
CLRTF1
DJNZR7,DL Y_1S_A
CLRTR1
RET
DL Y.250MS
MOV R7,#05H
DL Y_250_A:
MOVTH1,#03CH
MOVTLl.#0B0H
SETBTR1
JNBTF1, $
CLRTF1
DJNZR7,DL Y_250_A
CLRTR1
RET
TIMERO:
PUSHPSW。
保护现场
PUSHACC
CLRTF0。
清溢出标志
MOVTH0,#0F6H。
重置初值
MOVTL0,#03CH
MOV A, POSITION。
确定当前显示位置
CJNEA,#0FEH,TIMER0_A
MOV A, COUNTER。
根据位置将显示内容送A,第1位显示时间ANLA,#0FH
LJMPTIMER0, B
TIMERO_A:
CJNEA,#0FDH,T_END
MOV A,COUNTER。
第2位显示时间十位
ANLA,#0F0H
SWAPA
TIMERO_B:
PUSHACC暂存显示内容
MOV A,#0FFH。
关显示
MOVDPTR,#WM_ADDR
MOVX@DPTR,A
POPACC。
查段码
ADDA,#04H
MOVCA,@A+PC
LJMPTIMER0_C
DB3FH,06H,05BH,04FH,066H,06DH,07DH
DB07H,7FH,6FH
TIMERO_C:
MOVDPTR,#DM_ADDR。
将段码送出@DPTR,A MOVX @DPTR,A
MOV A,POSITION 。
将位码送出
MOV DPTR.#WM_ADDR
MOVX @DPTR,A
MOV APOSITION 。
改变位码寄存器
RLA
MOVPOSITION,A
CJNE A,#0FBH,T_END 。
一遍扫描末完,转MOV POSITION,#0FEH 。
重置位码寄存器
T_END:
POPACC 。
恢复现场
POPPSW
RETI 。
中断返回
11·5
请自行设计一个温度采集系统,要求按1路/秒的速度顺序捡测8路温度点,测温范
围为+20~+100C,测量精度为±%。
要求用5位数码管显示温度,最高位显示通道号,次高位显示"一",低三位显示温度值。
答按题意设计电路如题图11-
3所示。
图中数码管采用共阴极,因为测量精度为±%,所以采用8位的ADC0809即可满足要求,在显示温度时最低位单位为0.l0C。
单片机工作频率
为l2MHz,采用定时器0定时为50ms。
其地址分配及编程如下。
==================================
DM_ADDREQU 0DFFFH。
数码管段码地址
WM_ADDREQU 0BFFFH。
数码管位码地址
ADC_ADDREQU 07FF0H 。
AD0809转换通道0地址。
----------------------------------------------------------
POSITION EQN30 H 。
显示位码寄存器
CHANNELEQU31H 。
通道寄存器
DISPLAYlEQU38H 。
显示数据寄存器(高位>
DISPLAY2EQU39H
DISPLAYSEQU3AH
DISPLAY4EQU3BH
DISPLAYSEQU3CH 。
显示数据寄存器(低位>
CONEQU3DH 。
秒汁数器
题图 11-3
;-------------------------------------------------------
ORG0000H。
转l0ms定时中断程序
LJMPMAIN
ORG000BH
LJMPTIMER0
ORG0030H
MAIN:
MOVSP,#50H。
修改堆栈指针
MOVPOSITION, #0FEH。
设置位码寄存器
MOVTMOD,#01H。
设置定时器0工作方式
MOVTH0,#0D8H。
定时器0置初值(l0ms>
MOVTL0,#0F0H
SETBTR0。
启动定时器0
SETBET0。
允许定时器0中断
SETBEA。
开中断
CLR10H。
秒标志位清0
MOVCON, #100。
秒计数器置初值
START:
MOVCHANNEL,#00H。
通道设置(0通道>
EX5A: MOVDPTR,#ADC_ADDR
MOV A,DPL
ADDA,CHANNEL。
计算通道地址
MOVDPL,A
MOVX@DPTR,A。
启动A/D转换
NOP
JBINT1, $等待转换结束
MOVXA,@DPTR。
读取结果
LCALLBCD。
调结果转换子程序
MOVDISPLAYl .CHANNEL。
送当前显示通道号
MOVDISPLAY2, #0AH。
段码表中"一"的位置偏移量
DISP1:
LCALLDISP。
调结果显示子程序
JB10H,DISP1。
1s不到,等待
CLR10H
MOVCON, # 100。
秒计数器重置初值
INCCHANNEL。
下一通道
MOV A.CHANNEL
CJNEA,#08H,EX5A。
不是最后一通道,转EX5A
LJMPTART。
循环。
----------------------------------------------------------。
将00~FFH的十六进制数转换成000~999的十进制数,显示单位为0.l0C。
转换近似公式为:A,l003D/256D,结果存人R2(H>R3(L>中,其中A:00~FFH,l003=3EB H。
将BCD结果送人寄存器DISPIJAY3~DISPI.AY5中
BCD:
MOVR2,A
MOVB,#0EBH。
R2* 1003D(3EBH>
MOVR4,A
MOVR3,B
MOV A,R2
MOVB,#03H
MULAB
ADDA,R3
MOVR3,A
MOV A,B
ADDCA,#00H
MOVR2,A
CJNER4,#80H,BCDl。
与80H比较决定4舍5人BCD1: JCBCD2
MOV A,R3
ADDA,#0lH
MOVR3,A
MOV A,R2
ADDC A,#00H
MOV R2,A
BCD2。
XCHA,R3。
转换成非组合BCD码XCHA,B
XCHA,R2
MOVR0,#DISPLAY3
MOVR6,#00H
MOVR5,#64H
LCALLSUM。
调除法子程序
MOVR6,#00H
MOVR5,#0AH
LCALLSUM
XCHA,B
MOV@R0,A
RET。
--------------------------------------------------- SUM:MOV R7,#00H
SUM0:CLRC
XCH A,B
SUBBA,R5
XCH A,B
SUBBA,R6
INCR7
JNCSUM0
DECR7
XCHA,B
XCHA,B
ADDCA,R6
XCHA,R7
MOV @R0,A
XCHA,R7
INCR0
RET。
------------------------------------------------------------
DISP:
MOV DPTR,@WM_ADDR 。
位控口地址
MOV A,#0FFH
MOVX @DPTR,A 。
关显示
MOV R0,DISPLAY1 。
指向显示缓冲区首址MOV POSITION, #0FEH。
指向显示器最高位
MOV R4,#250。
置显示延时值
DISP2:
MOV R3,#5
DISP3:
MOV DPTR, # WM_ADDR。
数码管位码地址
MOV A, POSITION
MOVX @ DPTR, A。
输出位控码
MOV A,@R0。
取出显示数据
MOV DPTR,#TAB。
字形码地址
MOVC A,@A+DPTR。
查表,字形码送A
MOV DPTR, # DM_ADDR。
数码管段(字形>码地址MOVX @ DPTR, A。
输出字形码
INC R0。
指向下一缓冲单元
MOV A, POSITION
RR A。
位选字右移
MOV POSITION, A
DJNZ R3, DISP3
DJNZ R4, DISP2
RET
TAB: DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH,40H
TIMER0:
PUSH PSW。
保护现场
PUSH ACC
PUSH DPH
PUSH DPL
CLR TF0。
清溢出标志
MOV TH0,#0DSH。
重置初值
MOV TL0,#0F0H
DEC CON
MOV A,#100
CJNE A,CON,TIEND
SETB 10H。
置1,到标志
TIEND:
POP DPL。
恢复现场
POP DPH
POP ACC
POP PSW
RETI。
中断返回
11 / 11。