单片机优秀课程设计河北科技大学Word下载.docx

上传人:b****6 文档编号:16012658 上传时间:2022-11-17 格式:DOCX 页数:13 大小:95.03KB
下载 相关 举报
单片机优秀课程设计河北科技大学Word下载.docx_第1页
第1页 / 共13页
单片机优秀课程设计河北科技大学Word下载.docx_第2页
第2页 / 共13页
单片机优秀课程设计河北科技大学Word下载.docx_第3页
第3页 / 共13页
单片机优秀课程设计河北科技大学Word下载.docx_第4页
第4页 / 共13页
单片机优秀课程设计河北科技大学Word下载.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

单片机优秀课程设计河北科技大学Word下载.docx

《单片机优秀课程设计河北科技大学Word下载.docx》由会员分享,可在线阅读,更多相关《单片机优秀课程设计河北科技大学Word下载.docx(13页珍藏版)》请在冰豆网上搜索。

单片机优秀课程设计河北科技大学Word下载.docx

能够经过按键对秒表进行“开始”、“暂停”、“继续”、“停止”、“统计”等操作。

2.扩展要求

(1)经过按键可翻查所统计各分项值。

(2)其它功效

三、设计原理及方案:

现在方案中采取了三个中止,外部中止INT0,INT1和定时中止T0。

CPU在响应中止时,先处理高级中止,在处理低级中止,若有多个同级中止时,则按自然优先次序处理。

比如当CPU正在处理一个中止申请时,有出现了另一个优先级比它高中止请求,这是,CPU就暂停终止对目前优先级较低中止源服务,转去响应优先级比它高中止请求,并为其服务。

待服务结束,再继续实施原来较低级中止服务程序。

而当CPU为等级高终端服务程序服务时,假如等级低中止发出中止请求,此时CPU是不会响应,所以为了避免开始和暂停两个按键中一个出现没有响应情况,在进行程序编辑时要注意对中止使用,避免出现中止嵌套。

,合理分配中止对本设计实现是至关关键。

另外因为数字式电子秒表最小精度位1ms,属于高精度电子秒表。

定时器T0定时周期也为1ms,为了使电子秒表暂停键按下后CPU能立即去响应中止程序,必需将暂停外部中止等级高于定时计数器中止等级。

避免出现CPU实施完定时溢出中止程序后再响应外部中止程序,影响计时精度。

8051自然优先级次序排列以下:

中止源最高

外部中止0

定时/计数器0溢出中止

外部中止1

定时/计数器1溢出中止

串行口中止最低

数字式秒表中两个按键采取了中止实现功效。

开始采取外部中止INT0,暂停采取外部中止INT1。

另外程序中还用到了定时/计数器0溢出中止进行计时。

依据设计要求,暂停外部中止INT1中止等级最高,计时定时/计数器0溢出中止次之,开始外部中止INT0等级最低。

(1)外部中止0服务程序:

外部中止0服务程序结合外部P3.2停止键实现数字电子秒表停止功效,具体步骤图图2.2。

当按下P3.2停止键按下向CPU发出外部中止请求,CPU转向外部中止0服务程序实施,停止定时器。

另外将目前显示时间进行一次存放,存进中间寄存区。

最终中止返回。

图2.2外部中止0服务程序步骤图

(2)外部中止1服务程序

外部中止1服务程序结合外部P3.3停止键实现数字电子秒表开启功效,具体步骤图图2.2。

当按下P3.3开启键按下向CPU发出外部中止请求,CPU转向外部中止1服务程序实施,开启定时器。

另外进行二次存放,将之前进行一次存放数码管显示数据存入最终缓存区,避免下次计时暂停时一次存放将数据掩盖,从而起到保护数据作用。

二次存放后就中止返回。

图2.3外部中止1服务程序步骤图

(3)定时中止服务程序

当定时/计数器T0器溢出后,向CPU发出中止请求信号。

CPU跳转到定时中止程序实施,具体步骤图2.4。

定时中止程序是一个进位程序,关键负责对1ms加一。

1ms位没有满十就跳出中止程序,返回显示程序。

当1ms位满十后就对1ms位清零,向10ms位加一,同时检测10ms位是否满十,没有满十就跳出中止程序,返回显示程序。

假如满十就向100ms位加一,依次类推,最终达成99.99秒后归零,从零开始再次计时。

定时/计数器T0工作在方法0下,TH0和TL0组成一个13位二进制数计数器。

单片机开机或复位时,它值为00H,当T0开启后,从第一个输入脉冲开始计时,每来一个脉冲计数加一,即从0开始计数到1,再计数一个脉冲时TH0和TL0组成13位计数器将会从13个1变成13个0,并产生溢出,溢出位将被送到TF0标志位,经过溢出标志产生溢出中止请求。

显然,T0定时器在方法0下引发一次中止所许可计数最多脉冲个数为213个。

但假如定时计数器假如每次全部固定从0开始计数,到计满后,再向CPU发出溢出中止请求信号那是毫无意义。

为了使定时计数器在要求计数脉冲个数字以后(此时应小于213个脉冲),向CPU发出溢出中止请求,可采取预先向TH0和TL0中放入一个初值X方法,使计数器以X值为起始值开始计数,即X+1,X+2,……直至计数器计满,从1全变为0。

设需要计数脉冲个数为Y,则有:

X+Y=213

在定时方法下:

定时时间间隔位t=(213—X)*振荡周期*12

现在本设计要求1ms实现一次中止,选择定时器T0工作在方法0。

所以需要依据以上条件计算出T0初值。

设T0初值为X,则

(213—X)*12/12*106=1*10-3

转换位十六进制数X=7192=0B

即TH0=0E0H(取X高8位)

TL0=18H(取X低5位)

因为定时1ms只是一个理想化时间,其中并没有考虑到中止后单片机实施语句所花时间。

即使实施语句所花时间很短只有即微秒,但积少成多,数字秒表一秒中要溢出中止1000次,积累起来误差就能达成毫秒级,这对于精度抵达毫秒级数字电子秒表来说是很大误差。

所以要在后期编程时还要将单片机读程序时间考虑进去,

在对定时器赋初值时将单片机需要实施语句所花时间加上,这么就能使数字电子秒表误差达成最小。

四、实现方法(包含试验电路测试、软件调试等)

51MACROASSEMBLERMAIN01/05/10:

17:

09PAGE1

MACROASSEMBLERA51V8.02

OBJECTMODULEPLACEDINmain.OBJ

ASSEMBLERINVOKEDBY:

D:

\StudySoftware\Keil\C51\BIN\A51.EXEmain.ASMSET(SMALL)DEBUGEP

LOCOBJLINESOURCE

00001ORG0000H

0000002LJMPMAIN

000B3ORG000BH

000B054LJMPIT0P

5

01006ORG0100H

01007581607MAIN:

MOVSP,#60H

0103758CEC8MOVTH0,#0ECH

0106758A789MOVTL0,#78H

010975880010MOV88H,#00H

010C75890111MOVTMOD,#01H

010FD2A912SETBET0

0111D2AF13SETBEA;

中止初始化

01131214LCALLFUNCINIT;

初始化事牍?

01167C0015MOVR4,#00H;

存放统计

个?

011875303116MOV30H,#31H;

存放统计示?

17

011B12812018LOOP:

LCALLKBS;

主程序:

不停扫描键

盘和动态更新事牍?

011EB4100519CJNEA,#10H,NEXT

01211280E020LCALLDISP

012480F521SJMPLOOP

22

012612812023NEXT:

LCALLKBS

0129B4100224CJNEA,#10H,LOOP1

012C80ED25SJMPLOOP

26

012E12812027LOOP1:

0131B40A0428KBA:

CJNEA,#0AH,KBB;

按键A处理是开始暂停

0134B28C29CPLTR0

0136801D30SJMPWAIT

0138B40B0F31KBB:

CJNEA,#0BH,KBC;

按键B处理是统计示?

013BA93032MOVR1,30H

013DA78C33MOV@R1,TH0

013F053034INC30H

0141A93035MOVR1,30H

0143A78A36MOV@R1,TL0

0145053037INC30H

01470C38INCR4

0148800B39SJMPWAIT

014AB40CCE40KBC:

CJNEA,#0CH,LOOP;

按键C处理是重新开始

014DC28C41CLRTR0

014F1242LCALLFUNCINIT

015275303143MOV30H,#31H

01551280E044WAIT:

LCALLDISP

015812812045LCALLKBS

015BB410F746CJNEA,#10H,WAIT

015E80BB47SJMPLOOP

016080FE48SJMP$

49

016275700050FUNCINIT:

MOV70H,#00H

016575710051MOV71H,#00H

016875720052MOV72H,#00H

016B75730053MOV73H,#00H

016E75740054MOV74H,#00H

017175750055MOV75H,#00H

01742256RET

A51MACROASSEMBLERMAIN01/05/10:

09PAGE2

57

58

0175C0E059IT0P:

PUSHAcc;

中止程序

0177787060MOVR0,#70H;

目标:

?

卸?

0H~75H是否为9,若为9,则进位、清零

01797E0661MOVR6,#06H;

R0为70H~75H,

R6为循环次?

017BDE0262LOOPI:

DJNZR6,NEXTI

017D800863SJMPENDI

017FB6090564NEXTI:

CJNE@R0,#09H,ENDI

0182760065MOV@R0,#00H

01840866INCR0

018580F467SJMPLOOPI

0187758CEC68ENDI:

MOVTH0,#0ECH;

使用是方法1,板子上是6MHz晶?

瘢刈霸夭?

0ms

018A758A8169MOVTL0,#81H

018D0670INC@R0

018ED0E071POPAcc

01903272RETI

73

74

80E075ORG80E0H;

动态扫描子程序

80E0797576DISP:

MOVR1,#75H

80E27A2077MOVR2,#20H

80E4EA78MOVA,R2

80E590E40079DISP1:

MOVDPTR,#0E400H

80E8F080MOVX@DPTR,A

80E9E781MOVA,@R1

80EA241182ADDA,#11H

80EC8383MOVCA,@A+PC

80ED90E00084DISP2:

MOVDPTR,#0E000H

80F0F085MOVX@DPTR,A

80F17B0086MOVR3,#00H

80F3DBFE87DJNZR3,$

80F5E488CLRA

80F6F089MOVX@DPTR,A

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 计算机硬件及网络

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1