广东机电师兄心血《计算机控制技术》课程设计报告A4版Word文档格式.docx
- 文档编号:16508465
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:11
- 大小:41.33KB
广东机电师兄心血《计算机控制技术》课程设计报告A4版Word文档格式.docx
《广东机电师兄心血《计算机控制技术》课程设计报告A4版Word文档格式.docx》由会员分享,可在线阅读,更多相关《广东机电师兄心血《计算机控制技术》课程设计报告A4版Word文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
3.ORG0003H;
外部中断0入口
4.LJMPTO_INT0
5.ORG000BH;
定时器0中断入口
6.LJMPTO_T0
7.ORG0013H;
外部中断1入口
8.LJMPTO_INT1
9.ORG0100H
10.START:
CLRTR0;
定时器0启动控制位
11.MAIN:
CLR00H
12.CLR01H
13.CLR02H
14.CLRRS1;
初始化,选择第0组工作寄存器
15.CLRRS0
16.MOVSP,#70H;
堆栈入口
17.MOV30H,#0;
赋值,秒表初始时间
18.MOV31H,#0
19.MOV32H,#0
20.MOV33H,#0
21.MOV34H,#0
22.MOV35H,#0
23.MOVTMOD,#00010001B;
设置为16位定时器
24.MOVTH0,#0D8H;
设初值,定时10MS(针对12MHz晶振)
25.MOVTL0,#0F0H
26.SETBIT0;
设置边沿触发
27.SETBIT1
28.MOVIE,#10000111B;
设置允许外部中断0、1,定时器0中断请求,
开总中断
29.MOVE_CLOCK:
MOVR1,#40H
30.MOVR2,#6
31.MOVR0,#30H
32.LOOP:
MOVA,@R0
33.MOVDPTR,#TAB
34.MOVCA,@A+DPTR;
查段码,获取当前数值的共阴极码
35.CPLA;
硬件有反相器,所以软件取反
36.MOV@R1,A
37.INCR0
38.INCR1
39.DJNZR2,LOOP
40.SAOMIAO:
MOVA,#00000001B;
扫描,使数值显示在数码管上
41.MOVR1,#40H
42.MOVR2,#6
43.LOOP1:
MOVP1,A
44.MOVP0,@R1
45.LCALLDELAY
46.RLA
47.INCR1
48.DJNZR2,LOOP1
49.JNBP3.1,START;
清零功能,键按下时,返回初始化
50.JNBP3.6,DUSHU;
检查是否启动读数模式
51.JB01H,RETURN
52.JNB00H,SAOMIAO
53.CLR00H
54.LJMPMOVE_CLOCK
55.DUSHU:
SETB01H;
读数模式标志位
56.CLRRS1;
读数模式下选择第1组工作寄存器
57.SETBRS0
58.RETURN:
LJMPSAOMIAO
59.TO_T0:
CLRTR0
60.CLRRS1;
读数模式启动后,内部计时依然使用第0组工作寄存器
61.CLRRS0
62.MOVTH0,#0D8H;
63.MOVTL0,#0F0H
64.SETBTR0
65.SETB00H;
10MS时间到标志位
66.INC30H
67.MOVR3,30H
68.CJNER3,#10,TIME_10MS;
进位比较
69.MOV30H,#0
70.INC31H
71.MOVR3,31H
72.CJNER3,#10,TIME_10MS
73.MOV31H,#0
74.INC32H
75.MOVR3,32H
76.CJNER3,#10,TIME_10MS
77.MOV32H,#0
78.INC33H
79.MOVR3,33H
80.CJNER3,#6,TIME_10MS
81.MOV33H,#0
82.INC34H
83.MOVR3,34H
84.CJNER3,#10,TIME_10MS
85.MOV34H,#0
86.INC35H
87.MOVR3,35H
88.CJNER3,#6,TIME_10MS
89.MOV35H,#0
90.TIME_10MS:
JNB01H,Y0;
检查是否进入读数模式
91.SETB02H;
标志位,去除不同模式下按钮的干扰
92.SETBRS0;
若是,中断结束前,返回第1组工作寄存器
93.CLRRS1
94.Y0:
RETI
95.TO_INT0:
CPLTR0;
通过取反,实现启动/暂停
96.RETI
97.TO_INT1:
JB02H,Y1
98.LJMPY2
99.Y1:
JNBTR0,Y2
100.CLRRS0;
返回读取内部计时
101.CLRRS1
102.PUSHA;
保护现场
103.MOVR1,#40H
104.MOVR2,#6
105.MOVR0,#30H
106.LOOP2:
107.MOVDPTR,#TAB
108.MOVCA,@A+DPTR;
查段码
109.CPLA;
110.MOV@R1,A
111.INCR0
112.INCR1
113.DJNZR2,LOOP2
114.POPA;
恢复现场
115.Y2:
116.DELAY:
MOVR7,#100;
延时子程序
117.D2:
MOVR6,#18
118.D1:
NOP
119.NOP
120.NOP
121.DJNZR6,D1
122.DJNZR7,D2
123.RET
124.TAB:
DB3FH,06H,5BH,4FH,66H;
段码表
125.DB6DH,7DH,07H,7FH,6FH
126.RET
127.END
3、秒表工作原理及技术分析
关于秒表:
硬件上,该电路外部P3.1增设一“复位清零”按钮,外部中断
增设一“启动/暂停”按钮,
增设一“读取”按钮,P3.6增设一“读数模式”切换按钮。
软件上,Ⅰ清零功能:
通过将检测P3.1口是否动作的程序嵌入数码管扫描程序中,当检测到P3.1有动作时,跳转到程序START开始阶段,恢复初始值、初始模式;
Ⅱ启动/暂停:
通过外部中断0随时等待请求中断,初始定时器启动控制位TR0为0,当中断请求时,将定时器启动控制位置1,开始计时;
再按一次,即将TR0取反置0,停止计时,可反复操作;
Ⅲ关于秒表计时,采用定时器0溢出中断,通过设置好计时溢出时间实现加10ms以及通过比较指令、标志位实现进位;
Ⅳ读数模式:
通过启用第1组工作寄存器,第0组工作寄存器仍用于内部定时器计时,从而使当前计数不显示在数码管上,再利用外部中断1,当“读取时间”按钮申请中断时,扫描30H-35H当前值,利用第0组工作寄存器中将当前值重新查询段码送至40H-45H,返回后即可显示所读取的秒数。
二、教学实例功能拓展
1、密码锁教学实例说明
在相关硬件基础下,通过检测P0八个口是否有键按下,与对应密码组合进行比较,正确则驱动P3.7相应电路使其灯亮,错误则对P1口赋值,使其报警灯亮起。
2、拟拓展功能描述
为更加贴近生活中电子密码锁的应用,拟拓展以下功能:
①在原有教学实例上,将3个实例功能整合;
即:
⑴按1亮1盏灯,按2亮2盏灯,……按8亮8盏灯
⑵可以再次输入密码
⑶报警灯闪烁
②密码只有三次的输入错误机会,三次一到,冻结按键;
③增设一“解除冻结”按钮,以模拟等待主人开锁。
3、硬件及软件修改方法
关于密码锁:
硬件上,该外部电路P3.0增设一“解除冻结”按钮,增添一7SEG-BCD数码管。
软件上,对应拟拓展功能:
①将输入密码传送至ACC累加器再与报警灯亮灯方案进行比较;
②在密码比较环节入口新增计数环节,每输错密码进入报警灯比较环节自动“减1”,剩余输入次数通过对应BCD码传送到P2口,使其数码管显示,当输入三次连续错误时,通过JBP3.0,$死循环使其等待解锁指令;
③通过P3.0口解除,正常工作下,按下P3.0也可复位。
3.ORG0100H
4.START:
CLRP3.7;
初始化,上锁
5.MOVP2,#00000011B;
设置输入次数
6.MOVP1,#0FFH;
初始化,灭灯
7.MOVR4,#0
8.MOVR5,#0
9.CLR00H
10.CLR01H
11.KEY:
MOVA,P0
12.CJNEA,#0FFH,KEYDOWN
13.JNBP3.0,START
14.JNB00H,KEY;
无键按下,返回重新检测
15.JB01H,Y1
16.Y2:
LCALLDELAY;
延时显示
17.MOVP1,#0FFH
18.LCALLDELAY
19.LCALLDELAY
20.MOVP1,R0
21.INCR4
22.CJNER4,#250,KEY;
扫描新输入
23.MOVR4,#0
24.LJMPKEY
25.Y1:
INCR5
26.CJNER5,#03H,Y3;
三次输入次数到
27.MOVP2,#00H
28.JBP3.0,$;
冻结按键,等待P3.0口解除
29.LJMPSTART
30.Y3:
DECP2.0;
输入错误,次数减1
31.CLR01H
32.LJMPY2
33.KEYDOWN:
延时去抖动
34.MOVA,P0
35.CJNEA,#0FFH,KEY1
36.LJMPKEY;
37.KEY1:
CJNEA,#11111011B,KEY2;
与正确密码比较
38.SETBP3.7;
密码正确,开锁
39.MOVP2,#00000011B
40.MOVP1,#11111111B
41.MOVR5,#0
42.CLR00H
43.LJMPCOMOUT
44.KEY2:
记录输入次数标志位
45.CJNEA,#11111110B,L1;
以下为比较环节,找出所输错误密码
46.MOVR0,#11111110B;
对应的亮灯
47.L1:
CJNEA,#11111101B,L2
48.MOVR0,#11111100B
49.L2:
CJNEA,#11111011B,L3
50.MOVR0,#11111000B
51.L3:
CJNEA,#11110111B,L4
52.MOVR0,#11110000B
53.L4:
CJNEA,#11101111B,L5
54.MOVR0,#11100000B
55.L5:
CJNEA,#11011111B,L6
56.MOVR0,#11000000B
57.L6:
CJNEA,#10111111B,L7
58.MOVR0,#10000000B
59.L7:
CJNEA,#01111111B,NEXT
60.MOVR0,#00000000B
61.NEXT:
MOVP1,R0
62.CLRP3.7
63.SETB00H;
等待新密码密码标志位
64.COMOUT:
LJMPKEY
65.DELAY:
MOVR6,#64H;
66.LOOP1:
MOVR7,#0F8H
67.NOP
68.LOOP2:
DJNZR7,LOOP2
69.DJNZR6,LOOP1
70.RET
71.END
4、调试过程及结果
调试过程中在显示延时上做了颇多调整,初步解决了按键失灵的故障,再经过调整标志位的合适位置,最终能到达自己拟拓展的相关功能。
3、课程学习总结
不知不觉,我学了单片机将近一个学期,感觉收益匪浅。
我现在对单片机的理解,要说一句最大的感受,那就是“单片机是一种集成度很高的微型计算机”。
就这学期所学的AT89C51芯片,它包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线这样一个完善的硬件设备;
而对于单片机的程序控制,机器码、汇编语言,从我理解的角度,程序的本质是寄存器之间的数据传递。
程序是由两部分组成的:
首先是寄存器之间的数据传递,剩下的就是逻辑控制。
而在这一学期,通过经典流水灯,密码锁,数码管等不同控制要求的实例学习,从老师的一次又一次地耐心教导中逐渐领悟了逻辑程序的魅力。
要想开发自己的逻辑思维,就要多看别人的程序,找出别人程序中的“闪光点”,并且在自己以后的编程中加以运用。
而不是照着老师已编好的程序思路被“引”进去,这才是进步之道。
课程建议:
至于课程建议的话,个人倒是真的没有什么可采取性的建议。
叶老师讲得很好,思路清晰明朗。
学习关键还是学生本身,逻辑思维不多练,肯定写不成完整的程序;
课本我觉得也很重要,书里详细的硬件、功能介绍看多了,自己编程时才会有更好的运用。
我们是大专生,电气自动化以贴近企业生产、工控学习为主。
就现在单片机在大量生产开发中的应用,课程若是能以C语言、汇编语言互辅教学那就更好啦~但又涉及大一学习C语言程序基础,所以没有什么采取性。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机控制技术 广东 机电 师兄 心血 计算机控制 技术 课程设计 报告 A4
![提示](https://static.bdocx.com/images/bang_tan.gif)