|
我写的土软件,想得到指导
ORG 30H
DATA:DB 0FBH,0F9H,0E7H,0CBH,0FCH,0F6H
( 以上为P1端口的6种状态)
MOVE R0,#30H ;给变址器置初值
MOV 50H,#FFH
MOV P0,#FFH
中断设置
SETB EA ;允许总中断
SETB ET1 ;允许T1中断
SETB EX0 ;允许INT0中断
MOV TMOD,#10H;设定T1为模式1的定时方式
MOV TMOD, #10H; 设定T0为模式1的定时方式
启动部分:ORG 003H ;INT0的入口
MOV P0,#0F3H
RET1
过零点检测:
GLD: CJNE P0,50H,JSQ;得到信号,JSQ处理数据
SJMP GLD ;继续检测
JSQ : CLR TR0 ;停止定时器TO
MOV 61H,TL0 ;低8位送入61H,
得到K=60H61H(换相时间)
MOV 60H,TH0 ;高8位送入60H
MOV TL0,0 ;清零
MOV TH0,0 ;清零
SETB TR0 ;启动TO
MOV 50H,P0 ;令P0=50H,有反电压才会转JSQ
计算模块:X1为断电中断的初值(62H63H),X2为换相中断的初值(64H65H) TS为调速值(10<TS<130)52H
CLR C
MOV A,61H
SUBB A,50H
JNC DDX1 ;C=0无借位,跳转DDX1
DEC 60H
DDX1: CPL A
MOV 63H,A
MOV A,62H
CPL A
MOV 62H,A ;得到 X1
MOV A,50H
CPL A
MOV 65H,A
MOV 64H,#FFH ;得到X2(TS取反) |
|