当前位置 : 安防网>安防技术>图形图像>阅读正文

基于单片机控制的变频调速系统

作者: 时间:2008-06-20

MOV R0,#03H
CALL DISP
LJMP MAI
NEXT3:
CJNE A,#0F7H,NEXT4
KEY6:
MOV A,P1
CJNE A,#0FFH,KEY6
MOV R0,#04H
CALL DISP
LJMP MAI
NEXT4:
CJNE A,#0EFH,NEXT5
KEY7:
MOV A,P1
CJNE A,#0FFH,KEY7
MOV R0,#05H
CALL DISP
LJMP MAI
NEXT5:
CJNE A,#0DFH,NEXT6
KEY8:
MOV A,P1
CJNE A,#0FFH,KEY8
MOV R0,#06H
CALL DISP
LJMP MAI
NEXT6:
CJNE A,#0BFH,NEXT7
KEY9:
MOV A,P1
CJNE A,#0FFH,KEY9
MOV R0,#07H
CALL DISP
LJMP MAI
2、计数功能
这个程序设计的思想是:以按键的动作作为AT89C51的计数脉冲,即每按一下按键,计数器就要加1计数,直到数据计满溢出并产生中断,去执行中断服务程序,在中断服务程序中对某一事件做处理,再重新赋计数初值。
在KEIL C51中编辑程序,然后进行编译,有错误则直接到提示的错误行中进行修改,再编译,直到通过为止,最后成目标HEX文件。在PROTEUS中搭建硬件并加载HEX文件进行仿真调试。初值设定为0FFFAH,所以每按6下按键就会产生一次中断,在中断服务程序里,让P2.0取反,在硬件的连接上P2.0接上了一个发光二极管。假定初始状态的发光二极管是熄灭状态,则第一次中断后,发光二极管会被点亮,第二次中断后,发光二极管会熄灭……测试结果显示完全可以实现。
计数测试的部分程序:
 
ORG 000BH
JMP TIMEP
ORG 001BH
JMP COUNT
ORG 100H
MAIN:
MOV SP,#5FH
MOV P2,#0FFH
MOV TMOD,#65H
MOV TH0,#0FFH
MOV TL0,#0F4H
MOV TH1,#0FAH
MOV TL1,#0FAH
SETB EA
SETB ET0
SETB TR0
SETB ET1
SETB TR1
SJMP $
TIMEP:
CPL P2.0
MOV TH0,#0FFH
MOV TL0,#0FAH
RETI
COUNT:
CPL P2.1
RETI
3、发光柱显示功能
这个程序设计的思想是:每送一个数据,经过处理后,会在发光柱上点亮相应个数的光柱。因为实际上只要控制1.5m,所以就设定每0.1m点亮一条光柱。在二进制中,“1”为亮,“0”为灭,因此程序中要将0~7和8~15分别进行处理,在此选用查表法。先判别是否大于8,若不大于8,则低位查表可得结果,高位赋“0”;若大于8,则高位查表可得,低位赋“0FFH”。
在KEIL C51中编辑程序,然后进行编译,有错误则直接到提示的错误行中进行修改,再编译,直到通过为止,最后成目标HEX文件。在PROTEUS中搭建硬件并加载HEX文件进行仿真调试。从00H~0FFH依次赋值,发光柱会从不亮到全亮。测试结果表明,达到了程序设计要求。
测试所用程序:
 
FILE EQU 30H 
;存放待显数据
FILE1 EQU 31H
;低位
FILE2 EQU 32H
;高位
DDS EQU P2.7
SHCP EQU P3.0
STCP EQU P3.1
ORG 0000H
JMP MAIN
ORG 100H
MAIN:
MOV SP,#60H
MOV FILE,#0DH
CALL DOH
CLR SHCP
CLR STCP
CLR DDS
TT:
MOV R0,#08H
MOV R1,#02H
MOV A,FILE2
LL1:
CLR C
RLC A
CLR DDS
MOV DDS,C
SETB SHCP
NOP
NOP
CLR SHCP
DJNZ R0,LL1
DJNZ R1,LL2
SETB STCP
NOP
NOP
CLR STCP
NOP
NOP
JMP TT
LL2:
MOV A,FILE1
MOV R0,#08H
JMP LL1
DOH:
CLR C
MOV DPTR,#TABS
MOV A,FILE
ANL A,#0FH
MOV FILE1,A
SUBB A,#08H
MOV FILE2,A
JNC NEXT
MOV A,FILE1
MOVC A,@A+DPTR
MOV FILE1,A
MOV FILE2,#0FFH
JMP ENDL
NEXT:
MOV A,FILE2
MOVC A,@A+DPTR
MOV FILE2,A
MOV FILE1,#00H
ENDL:
RET
TABS:DB 0FFH,0FEH,
0FCH,0F8H,0F0H,
0E0H,0C0H,80H,00H
4、数据显示功能
这个程序设计的思想是:先将待显数据全都放到一个20字节的缓冲区里,然后经过74HC595进行移位锁存显示。
在KEIL C51中编辑程序,然后进行编译,有错误则直接到提示的错误行中进行修改,再编译,直到通过为止,最后成目标HEX文件。在PROTEUS中搭建硬件并加载HEX文件进行仿真调试。程序刚启动,送入程序初始化值,当程序运行起来,会使一些数据发生变化时,相应的显示数据也要发生变化。
5、完整程序调试
将所有的功能程序有效地组织到一起,在KEIL C51中编辑,然后进行编译,有错误则直接到提示的错误行中进行修改,再编译,直到通过为止,最后成目标HEX文件。在PROTEUS中搭建硬件并加载HEX文件进行仿真调试。系统首先进入自控程序,观察标志位及计数器里的数据是不是符合设计思想,观察显示部分是否跟随程序正常变化,等完成一个行程后,如果什么也不操作,是不是会再进入自动程序,如果按下手动按键,能否切换到手控程序。进入手控方式,再循环测试各功能按键。
 
5  问题及展望
5.1  已经解决的问题及解决方案
1、发光柱显示:电动机正转时可以达到满意的效果,让光条越亮越多,但是电动机反转时,发光柱是越灭越多,不够理想。
解决:重新设计一个数据表,当正转时查原始数据表,程序流程不变,当反转时就要查新建的数据表,在这期间要用正反转标志位做判断。不发生变化的值,正反转里刚好相反,当深度小于8时,低位赋值为“0FFH”,当深度大于8时,高位赋值为“00H”,如此修改可以达到较好的效果。
2、手动程序:当计数器T0已经计满407个脉冲,进入中断设置并转爬行状态后,观察运行状况没有达到要求,并且深度超出了1.5m,进入了未知领域。
解决:仔细分析原程序,通过人工执行程序的每步流程,并且观察接口寄存器里所发生的变化,发现中断以后,TL0中的值不是程序中想要设定的数据,回到程序语句中检查发现,有一语句写错了,应将“ANL  L0,#0B8H”改为“MOV TL0,#0B8H”。
3、正反转:按要求,应当在上、下运行期间允许改变正反转,并且这次正转了,下次就要进行反转,否则就会越出给定边界。但程序运行时,正反转没有得到有效的控制,发生了错乱。
上一页 1 2 3 4 5 6 78 下一页
上一篇:QCIF、CIF是什么格式
下一篇:没有了
最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册