单片机优秀课程设计河北科技大学Word下载.docx
《单片机优秀课程设计河北科技大学Word下载.docx》由会员分享,可在线阅读,更多相关《单片机优秀课程设计河北科技大学Word下载.docx(13页珍藏版)》请在冰豆网上搜索。
能够经过按键对秒表进行“开始”、“暂停”、“继续”、“停止”、“统计”等操作。
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