当前位置:文档之家› 单片机课程设计 河北科技大学

单片机课程设计 河北科技大学

河北科技大学《单片机原理及接口技术》课程设计报告学生姓名:肖轶超学号:130707121专业班级:物联网工程131课程名称:单片机原理与接口技术学年学期:2 015 —2 0 16 学年第一学期指导教师:武卫东2 0 1 6 年1月目录一、设计题目: (3)二、设计目的: (3)三、设计原理及方案: (3)四、实现方法(包括实验电路测试、软件调试等) (7)五、实施结果: (12)六、设计体会: (12)一、设计题目:数字秒表计时器二、设计目的:通过单片机控制数码管模拟数字秒表的计时功能。

1.必做要求能够通过按键对秒表进行“开始”、“暂停”、“继续”、“停止”、“记录”等操作。

2.扩展要求(1)通过按键可翻查所记录的各分项值。

(2)其他功能三、设计原理及方案:现在方案中采用了三个中断,外部中断INT0,INT1和定时中断T0。

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

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

待服务结束,再继续执行原来较低级的中断服务程序。

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

,合理分配中断对本设计的实现是至关重要的。

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

定时器T0的定时周期也为1ms,为了使电子秒表暂停键按下后CPU能马上去响应中断程序,必须将暂停的外部中断级别高于定时计数器的中断级别。

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

8051的自然优先级顺序排列如下:中断源最高外部中断0定时/计数器0溢出中断外部中断1定时/计数器1溢出中断串行口中断最低3数字式秒表中的两个按键采用了中断实现功能。

开始采用外部中断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启动后,从第一个输入脉冲开始计时,每来一个脉冲计数加一,即从0000000000000开始计数到1111111111111,再计数一个脉冲时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的初值。

5设T0的初值为X,则(213—X)*12/12*106 =1*10-3转换位十六进制数X=7192=1110000011000B即TH0=0E0H(取X的高8位)TL0=18H(取X的低5位)由于定时1ms只是一个理想化的时间,其中并没有考虑到中断后单片机执行语句所花的时间。

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

所以要在后期编程时还要将单片机读程序的时间考虑进去,在对定时器赋初值时将单片机需要执行的语句所花的时间加上,这样就能使数字电子秒表的误差达到最小。

否否否否四、实现方法(包括实验电路测试、软件调试等)51 MACRO ASSEMBLER MAIN 01/05/2016 10:17:09 PAGE 1MACRO ASSEMBLER A51 V8.02OBJECT MODULE PLACED IN main.OBJASSEMBLER INVOKED BY: D:\StudySoftware\Keil\C51\BIN\A51.EXE main.ASM SET(SMALL) DEBUG EP LOC OBJ LINE SOURCE0000 1 ORG 0000H0000 020100 2 LJMP MAIN000B 3 ORG 000BH000B 020175 4 LJMP IT0P50100 6 ORG 0100H0100 758160 7 MAIN: MOV SP,#60H0103 758CEC 8 MOV TH0,#0ECH0106 758A78 9 MOV TL0,#78H0109 758800 10 MOV 88H,#00H010C 758901 11 MOV TMOD,#01H010F D2A9 12 SETB ET00111 D2AF 13 SETB EA ;中断初始化0113 120162 14 LCALL FUNCINIT ;初始化事牍?0116 7C00 15 MOV R4,#00H ;存放记录的个?0118 753031 16 MOV 30H,#31H ;存放记录示?17011B 128120 18 LOOP: LCALL KBS ;主程序:不断扫描键盘和动态更新事牍?011E B41005 19 CJNE A,#10H,NEXT0121 1280E0 20 LCALL DISP0124 80F5 21 SJMP LOOP220126 128120 23 NEXT: LCALL KBS0129 B41002 24 CJNE A,#10H,LOOP17012C 80ED 25 SJMP LOOP26012E 128120 27 LOOP1: LCALL KBS0131 B40A04 28 KBA: CJNE A,#0AH,KBB ;按键A处理的是开始暂停0134 B28C 29 CPL TR00136 801D 30 SJMP WAIT0138 B40B0F 31 KBB: CJNE A,#0BH,KBC ;按键B处理的是记录示?013B A930 32 MOV R1,30H013D A78C 33 MOV @R1,TH0013F 0530 34 INC 30H0141 A930 35 MOV R1,30H0143 A78A 36 MOV @R1,TL00145 0530 37 INC 30H0147 0C 38 INC R40148 800B 39 SJMP WAIT014A B40CCE 40 KBC: CJNE A,#0CH,LOOP ;按键C处理的是重新开始014D C28C 41 CLR TR0014F 120162 42 LCALL FUNCINIT0152 753031 43 MOV 30H,#31H0155 1280E0 44 WAIT: LCALL DISP0158 128120 45 LCALL KBS015B B410F7 46 CJNE A,#10H,W AIT015E 80BB 47 SJMP LOOP0160 80FE 48 SJMP $490162 757000 50 FUNCINIT:MOV 70H,#00H0165 757100 51 MOV 71H,#00H0168 757200 52 MOV 72H,#00H016B 757300 53 MOV 73H,#00H016E 757400 54 MOV 74H,#00H0171 757500 55 MOV 75H,#00H0174 22 56 RETA51 MACRO ASSEMBLER MAIN 01/05/2016 10:17:09 PAGE 257580175 C0E0 59 IT0P: PUSH Acc ;中断程序0177 7870 60 MOV R0,#70H ;目的:?卸?0H~75H是否为9,若为9,则进位、清零0179 7E06 61 MOV R6,#06H ; R0为70H~75H ,R6 为循环次?017B DE02 62 LOOPI: DJNZ R6,NEXTI017D 8008 63 SJMP ENDI017F B60905 64 NEXTI: CJNE @R0,#09H,ENDI0182 7600 65 MOV @R0,#00H0184 08 66 INC R00185 80F4 67 SJMP LOOPI0187 758CEC 68 ENDI: MOV TH0,#0ECH ;使用的是方式1,板子上是6MHz的晶?瘢刈霸夭?0ms018A 758A81 69 MOV TL0,#81H018D 06 70 INC @R0018E D0E0 71 POP Acc0190 32 72 RETI737480E0 75 ORG 80E0H ;动态扫描子程序80E0 7975 76 DISP: MOV R1,#75H80E2 7A20 77 MOV R2,#20H80E4 EA 78 MOV A,R280E5 90E400 79 DISP1: MOV DPTR,#0E400H80E8 F0 80 MOVX @DPTR,A80E9 E7 81 MOV A,@R180EA 2411 82 ADD A,#11H80EC 83 83 MOVC A,@A+PC80ED 90E000 84 DISP2: MOV DPTR,#0E000H80F0 F0 85 MOVX @DPTR,A80F1 7B00 86 MOV R3,#00H80F3 DBFE 87 DJNZ R3,$80F5 E4 88 CLR A80F6 F0 89 MOVX @DPTR,A80F7 19 90 DEC R180F8 EA 91 MOV A,R280F9 13 92 RRC A80FA FA 93 MOV R2,A80FB 50E8 94 JNC DISP180FD 22 95 RET80FE 3F065B4F 96 DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H;8102 666D7D078106 7F6F7C39 97 DB 7FH,6FH,7CH,39H,5EH,79H,71H;810A 5E7971810D 00764073 98 DB 00H,76H,40H,73H,3EH,3DH,5CH,38H,50H;98111 3E3D5C388115 50991008120 101 ORG 8120H ;矩阵键盘扫描子程??8120 7ADF 102 KBS: MOV R2,#0DFH8122 7B06 103 MOV R3,#06H8124 90E400 104 KB1: MOV DPTR,#0E400H8127 EA 105 MOV A,R28128 F0 106 MOVX @DPTR,A8129 90E800 107 MOV DPTR,#0E800H812C E0 108 MOVX A,@DPTR812D F4 109 CPL A812E 541F 110 ANL A,#1FH8130 7006 111 JNZ KB28132 EA 112 MOV A,R28133 03 113 RR A8134 FA 114 MOV R2,AA51 MACRO ASSEMBLER MAIN 01/05/2016 10:17:09 PAGE 38135 DBED 115 DJNZ R3,KB18137 E4 116 CLR A8138 23 117 KB2: RL A8139 23 118 RL A813A 23 119 RL A813B 4B 120 ORL A,R3813C FA 121 MOV R2,A813D 90814D 122 MOV DPTR,#TAB8140 7B1C 123 MOV R3,#1CH8142 EB 124 KB3: MOV A,R38143 93 125 MOVC A,@A+DPTR8144 B50202 126 CJNE A,02H,KB48147 EB 127 MOV A,R38148 22 128 RET8149 DBF7 129 KB4: DJNZ R3,KB3814B EB 130 MOV A,R3814C 22 131 RET814D 81824222 132 TAB: DB 81H,82H,42H,22H,83H,43H,23H,84H;8151 834323848155 44241413 133 DB 44H,24H,14H,13H,12H,11H,21H,41H;8159 12112141815D 00854525 134 DB 00H,85H,45H,25H,15H,86H,46H,26H;8161 158646268165 160C0B0A 135 DB 16H,0CH,0BH,0AH,09H;8169 09136 ENDA51 MACRO ASSEMBLER MAIN 01/05/2016 10:17:09 PAGE 4SYMBOL TABLE LISTING------ ----- -------N A M E T Y P E V A L U E ATTRIBUTESACC. . . . . . . . D ADDR 00E0H ADISP . . . . . . . C ADDR 80E0H ADISP1. . . . . . . C ADDR 80E5H ADISP2. . . . . . . C ADDR 80EDH AEA . . . . . . . . B ADDR 00A8H.7 AENDI . . . . . . . C ADDR 0187H AET0. . . . . . . . B ADDR 00A8H.1 AFUNCINIT . . . . . C ADDR 0162H AIT0P . . . . . . . C ADDR 0175H AKB1. . . . . . . . C ADDR 8124H AKB2. . . . . . . . C ADDR 8138H AKB3. . . . . . . . C ADDR 8142H AKB4. . . . . . . . C ADDR 8149H AKBA. . . . . . . . C ADDR 0131H AKBB. . . . . . . . C ADDR 0138H AKBC. . . . . . . . C ADDR 014AH AKBS. . . . . . . . C ADDR 8120H ALOOP . . . . . . . C ADDR 011BH ALOOP1. . . . . . . C ADDR 012EH ALOOPI. . . . . . . C ADDR 017BH AMAIN . . . . . . . C ADDR 0100H ANEXT . . . . . . . C ADDR 0126H ANEXTI. . . . . . . C ADDR 017FH ASP . . . . . . . . D ADDR 0081H ATAB. . . . . . . . C ADDR 814DH ATH0. . . . . . . . D ADDR 008CH ATL0. . . . . . . . D ADDR 008AH ATMOD . . . . . . . D ADDR 0089H ATR0. . . . . . . . B ADDR 0088H.4 AWAIT . . . . . . . C ADDR 0155H A11REGISTER BANK(S) USED: 0ASSEMBL Y COMPLETE. 0 WARNING(S), 0 ERROR(S)五、实施结果:按下矩阵键盘的A键,开始计时。

相关主题