之则为低电平,接收头的电平信号经由电压比较器反相后送入CPU当传送带将被测物体传送到检测点时,物体将探头发送的红外线调制信号反射给探头,探头接收器产生的信号送到单片机P3.2口,启动计数器开始计数,每次红外线的阻断都将转化成电信号被单片机芯片获取,在原来的数值上加1,并将计数后所得的数据送给LED显示
3.2中断方式计数
中断计数方式的实现是靠获取中断源,在MCS-51单片机中有五个可屏蔽的中断源,片内中断源三个,片外中断源两个,它们在程序存储器中各有固定的中断入口地址,由此进入中断服务程序,其中外部中断源INT0(外部中断0)请求由引脚P3.2输入,一旦输入信号有效(低电平或负跳变),即CPU申请中断,如果CPU响应中断,会自动转到0003H,执行相应的中断服务子程序,INT1(外部中断1)请求由引脚P3.3输入,一旦输入信号有效,即向CPU申请中断,如果CPU响应中断,会自动跳转到0013H处,执行相应的中断服务子程序,在中断系统中涉及一些特殊寄存器的使用,这些寄存器能够控制中断。
我们把打断单片机正常工作的外部信号接到单片机的INT0引脚,经过软件对有关寄存器的设置,单片机就可知道外界信号的变化,从而中断主程序的。当系统接侧到信号由高到低的负跳变时引发中断,中断过程中不产生计数,对于外部中断源的撤除,当外部中断采用边延触发方式时,CPU响应中断后,由硬件自动清除其中的中断标志位IE0或IE1,无需采取其他措施。当外部中断源采用电平触发方式时,CPU响应中断后不会自动清除中断请求标志位IE0或IE1,同时也不能用软件清除,当CPU执行完中断程序后返回主程序,发现外部中断源位于低电平时,仍会响应低电平。即外部中断源位于低电平时,则中断标志IE0或IE1就会为“1”。在实际应用过程中根据实际情况采取软硬件配合使用的方法。
第四章 软件程序设计
4.1 时间控制设置
在工业生产中为了提高工作效率,需要系统有很高的自动化并且要有很高的统计精确性,所以再设计系统时一些时间控制也显得十分重要。 4.2 10ms定时
计数器记录进料数量并设定时中断为l0ms,如果在进口中有其它异物通过时,它在设定的时间内不能长期保持有效.因此,中断不响应,计数器不记录异物通过,这样可防止外界的干
10
扰。此系统引用晶振为12MHz的频率,设置定时1ms, 源程序如下:
DLY10mS: MOV R6, #20 D1: MOV R7, #20 DJNZ R7, $
DJNZ R6, D1 RET
4.3 中断闪烁2S:SHAN2S: SETB P2.7 ; ACALL DLY10ms CLR P2.7 ACALL DLY10mS
DJNZ R4,SHAN2S
4.4 总程序调试
FIRST EQU 21H ;定义个位 SECOND EQU 22H ;定义十位 THIRD EQU 23H ;定义百位
ORG 0000H ;程序从0地址开始 LJMP START ;跳到STRAT处执行 ORG 0003H ;INT0中断向量 LJMP INT_0 ;跳至INT_0处执行 MOV R4,#100 START:
SETB EA ;开中断
SETB IT0 ;中断0允许P3.2口 SETB EX0 ;负跳变触发 CLEAR: ;初始化显示0000 MOV FIRST,#0 MOV SECOND,#0
11
闪烁2s
MOV THIRD,#0
SHOW: ;显示子程序 MOV DPTR,#TAB;DPTR指向编码表位置 MOV A,FIRST ;将FIRST的内容复制到ACC MOVC A,@A+DPTR ;根据ACC的值取出编码表中的编码 MOV P0,A ;由P0口输出ACC的内容 CLR P2.3 ;置位P2.3
LCALL DELAY ;调用延时子程序 SETB P2.3 ;清零P2.3 /*显示个位*/
MOV DPTR,#TAB ;DPTR指向编码表位置 MOV A,SECOND ;将SECOND的内容复制到ACC MOVC A,@A+DPTR ;根据ACC的值取出编码表中的编码 MOV P0,A ;由P0口输出ACC的内容 CLR P2.2 ;置位P2.2
LCALL DELAY ;调用延时子程序 SETB P2.2 ;清零P2.2 /*显示十位*/
MOV DPTR,#TAB ;DPTR指向编码表位置 MOV A,THIRD ;将THIRD的内容复制到ACC MOVC A,@A+DPTR ;根据ACC的值取出编码表中的编码 MOV P0,A ;由P0口输出ACC的内容 CLR P2.1 ;置位P2.1
LCALL DELAY ;调用延时子程序 SETB P2.1 ;清零P2.1 /*显示百位*/;
MOV DPTR,#TAB ;DPTR指向编码表位置 MOV P0,A ;由P0口输出ACC的内容 LJMP SHOW ;调用显示子程序
12
INT_0: ;中断子程序 CLR EA
INC FIRST ;FIRST的内容加1
MOV A,FIRST ;将FIRST的内容复制到ACC
CJNE A,#10,EXIT ;如果A不等于10,则跳至L1处执行 MOV FIRST,#00H ;将0复制到FIRST INC SECOND ;将SECOND的内容加1
MOV A,SECOND ;将SECOND的内容复制到ACC CJNE A,#10,EXIT ;如果A不等于10,则跳至L2处执行 MOV SECOND,#00H;将0复制到SECOND INC THIRD ;将THIRD的内容加1 SHAN2S: CLR P2.6 LCALL DELAY SETB P2.6 LCALL DELAY DJNZ R4,SHAN2S
EXIT: ;跳出中断子程序 SETB EA
RETI ;返回主程序 DELAY: MOV R6, #20 D1: MOV R7, #20 DJNZ R7, $
DJNZ R6, D1 RET
TAB: ;编码表
DB 03FH;0
DB 006H;1 DB 05BH;2
13
DB 04FH;3 DB 066H;4 DB 06DH;5 DB 07DH;6 DB 007H;7 DB 07FH;8 DB 06FH;9
END ;程序结束
结 论
本文介绍了一种基于AT89C2052单片机的光电计数系统的设计,并已成功的用于实际系统中,需要指出的是,本文利用软件编程、这样做占用硬件资源少,成本较低,如果用于强磁强电的现场环境,考虑加以屏蔽。在项目设计的开始到结束本人一直认真对待,在制作的过程中遇到了很多困难,通过查阅相关资料逐一解决问题的同时自己也增长了知识,到最后对光电计数系统的工作原理的掌握,最终设计出了自己理解的光电计数系统
致 谢
通过了这次课程设计,在张斌老师的帮助下不仅大大提高了我的系统设计和软件编程的能力,自身的各方面的素质也得到了提高。同时也培养了我的团队协作精神。这次课程设计不仅充实了我的计算机专业知识,扩大了知识面,增强分析问题和解决问题的能力,也提高自学的能力与软件开发能力,为今后的工作打下了坚实的基础。感谢指导老师张斌老师的帮助,让我从对此系统的不了解到成功设计出了光电计数系统。
参考文献
1、《电子电路基础》谢沅清 人民邮电出版社 1999 第一版 2、《数字电子技术基础》阎石 高等教育出版社 2001 3、《电子电路基础》童诗白 高等教育出版社 1995第二版 4、《电子技术课程设计指导》 高等教育出版和 彭介华 2002 5、《单片机原理与应用及C51程序设计》 清华大学出版社 谢维成 杨加国 2006年8月第一版
14