我是初学感应加热,看了一些资料,按照我的理解,我想用单片机输出两路信号,一路做为死区,一路作为开关信号,连接74LS10与非门,实现对称信号的输出,同时用单片机的外部中断脚检测电流过零信号,当过零时触发中断,进行换流。不知道这个思路可行吗,我已经进行了实验,输出不尽人意,不知道是什么原因,是不是速度不够啊。我用S52,24M,应该来说够快了啊,请前辈指教。
;*************************
POWER BIT P0.4 ; 开关信号
SQ BIT P0.5 ;死区
;**********************************************
ORG 0000H ;程序首址
AJMP START ;跳初始化开始
ORG 0003H ;中断0入口
AJMP GUOLIU ; 跳转到过零服务程序
;
ORG 0013H ; 中断1入口
AJMP GL ;跳转到过流处理程序
ORG 0100H ;初始化地址
START:MOV SP,#27H ;设置堆栈
ST2:MOV P0,#0FFH ;P0置位,所显示器,LED灭
MOV P1,#0FFH ;P2置位
MOV P2,#0FFH ;P2置位
MOV P3,#0FFH ;P3置位
CLR SQ
SETB EX0 ;允许外部中断0 ;
SETB EX1 ;允许外部中断1
MOV IP,#00000001B;中断1中断优先控制位,外部中断为过流中断
SETB IT0 ; 脉冲触发控制位
SETB IT1 ; 脉冲触发控制位
LCALL DELAY2
LCALL DELAY2
LCALL DELAY2
SETB EA ; 开中断总允许位
SETB SQ ;打开功率管
;***********************************************************
LOOP: NOP ;等待
NOP
NOP
NOP
AJMP LOOP
;***********************************************************
; 震荡信号程序,过零中断程序
;********************************************************
GL:CLR SQ; 关闭所有信号,进入死区
CPL POWER ;0.5US 信号取反
NOP ;0.5US 死区时间
NOP ;0.5US
NOP ;0.5US
NOP ;0.5US
NOP ;0.5US ;
SETB SQ ; 打开开关信号,此时换流
;
CPL P1.4 ; 正负开关信号指示灯
FH:RETI ;退出中断
;************************************************************
; 过流处理程序
;**********************************************************
GUOLIU:MOV P0,#00H ;关闭所有输出
CLR P1.3 ;打开过流指示灯
AJMP GUOLIU ;自锁
RETI
;***************************************************************************
;延时程序
;*****************************************************************************
DELAY:MOV R7,#010H
D11: MOV R6,#010H
DJNZ R6,$
DJNZ R7,D11
RET
DELAY2:MOV R7,#0FFH
D111: MOV R6,#0FFH
DJNZ R6,$
DJNZ R7,D111
RET