📄 mc1.asm
字号:
TC1 EQU 1000 ; 载波周期,载波频率4KHz
TC2 EQU 500 ;500 相中心点
TC3 EQU 4000 ;稳压分辨率
T_DEAD EQU 40 ;死区时间 5us
SIN_120 EQU 2730 ;SIN表120数据间隔
SIN_240 EQU 5460 ;SIN表240数据间隔
SIN_360 EQU 8190 ;SIN表360数据间隔
TM2 EQU 40000 ;EXIINT中断后恢复延时时间,10S
TM1 EQU 11 ;软启动时间
FREQ EQU 1342 ;输出频率系数
REO_REG EQU 00H
PTSSEL EQU 04H
PTSSRV EQU 06H
INT_MASK EQU 08H
INT_PEND EQU 09H
WATCHDOG EQU 0AH
INT_PEND1 EQU 12H
INT_MASK1 EQU 13H
WSR EQU 14H
SP EQU 18H
P5_MODE EQU 1FF1H
P5_DIR EQU 1FF3H
P5_REG EQU 1FF5H
USFR EQU 1FF6H
P5_PIN EQU 1FF7H
P3_REG EQU 1FFCH
P4_REG EQU 1FFDH
P3_PIN EQU 1FFEH
P4_PIN EQU 1FFFH
;WSR=3CH 64BYTES WINDOW 1F00H-1F3FH-->C0H-FFH
;WSR=3DH 64BYTES WINDOW 1F40H-1F7FH-->C0H-FFH
CAPCOMP0_CON EQU 0C0H
CAPCOMP0_TIME EQU 0C2H
CAPCOMP1_CON EQU 0C4H
CAPCOMP1_TIME EQU 0C6H
CAPCOMP2_CON EQU 0C8H
CAPCOMP2_TIME EQU 0CAH
CAPCOMP3_CON EQU 0CCH
CAPCOMP3_TIME EQU 0CEH
COMP0_CON EQU 0D8H
COMP0_TIME EQU 0DAH
COMP1_CON EQU 0DCH
COMP1_TIME EQU 0DEH
COMP2_CON EQU 0E0H
COMP2_TIME EQU 0E2H
COMP3_CON EQU 0E4H
COMP3_TIME EQU 0E6H
T1RELOAD EQU 0F2H
T1CONTROL EQU 0F8H
TIMER1 EQU 0FAH
T2CONTROL EQU 0FCH
TIMER2 EQU 0FEH
;WSR=3EH 64BYTES WINDOW 1F80H-1FBFH-->C0H-FFH
P0_PIN EQU 0E8H
P1_PIN EQU 0E9H
AD_RESULT EQU 0EAH
AD_COMMAND EQU 0ECH
AD_TEST EQU 0EEH
AD_TIME EQU 0EFH
PWM0_DUTY EQU 0F0H
PWM1_DUTY EQU 0F2H
PWM_PERIOD EQU 0F4H
PWM_PER_CNT EQU 0F6H
PI_MASK EQU 0FCH
PI_PEND EQU 0FEH
;WSR=3FH 64BYTES WINDOW 1FC0H-1FFFH-->C0H-FFH
WG_OUT EQU 0C0H
WG_COMP1 EQU 0C2H
WG_COMP2 EQU 0C4H
WG_COMP3 EQU 0C6H
WG_RELOAD EQU 0C8H
WG_COUNT EQU 0CAH
WG_CON EQU 0CCH
WG_PROTECT EQU 0CEH
P2_MODE EQU 0D0H
P2_DIR EQU 0D2H
P2_REG EQU 0D4H
P2_PIN EQU 0D6H
RSEG AT 1AH ;主程序用中间寄存器
AX EQU 1CH
AL EQU 1CH
AH EQU 1DH
BX EQU 1EH
BL EQU 1EH
BH EQU 1FH
CX EQU 20H ;中断程序专用
CL EQU 20H
CH EQU 21H
DX EQU 22H
DL EQU 22H
DH EQU 23H
RSEG AT 24H
AF: DSB 1 ;程序控制寄存器
LED: DSB 1 ;指示灯控制
NUM: DSB 2 ;稳压调节时间系数
NUM1: DSB 1 ;A/D重复采样次数
NUM2: DSB 1 ;软启动每刻度时间
NUM3: DSB 2
STM: DSB 1 ;启动信号冗余计数
RSEG AT 30H ;WFG程序专用寄存器区
R0: DSB 2 ;WFG处理程序中的中间寄存器,用于两字乘法
R1: DSB 2 ;WFG处理程序中的中间寄存器
VF_TP: DSB 2 ;V/F查表结果
VF_T: DSB 2 ;V/F查表后计算结果
SIN_PTR: DSB 4 ;SIN表循环指针
SIN_PTR1: DSB 2 ;SIN表循环指针
PWM: DSB 2 ;运算结果
F_SET: DSB 2 ;频率设定值 43HZ/50HZ
F_T: DSB 2 ;频率值
U_U: DSB 2 ;U相输出电压采样值
V_T: DSB 2 ;稳压系数
CSEG AT 203AH
DCW WFG_INT
DCW EXTINT
CSEG AT 2080H
MAIN_START:
DI ;禁止中断
LD SP,#0200H ;设置堆栈
;***********************************************
;初始化I/O口
LDB AL,#11000000B
STB AL,P5_REG
CLRB AL
STB AL,P5_DIR
LDB AL,#11101111B
STB AX,P5_MODE ;初始化P5口
;*************************************************
;ROM自检
CLRB AL
LD BX,#20
MAT1: ADDB AL,ZIJIAN[BX]
NOP
NOP
NOP
NOP
NOP
DJNZW BX,MAT1
CMPB AL,#0D2H
JNE MAIN_START
;******************************************************
;清寄存器
CLR WSR
CLRB AL
LDB BL,#20H
MMT: STB AL,[BL]
INCB BL
CMPB BL,#0FEH
JNH MMT ;不大于转移
;***********************************************
;设置中断屏蔽寄存器
CLR WSR
LDB INT_MASK,#00H ;允许CMP0中断
LDB INT_MASK1,#60H ;允许WG_COUNTER和EXTINT中断
LDB WSR,#3EH ;把64字节窗口映射至1F80H~1FBFH
LDB PI_MASK,#10H ;允许WG中断
;***********************************************
;WG初始化
MT1: LDB WSR,#3FH ;
LD WG_OUT,#073FH ;低电平输出有效
LDB WG_PROTECT,#04H ;上升沿触发,允许保护,禁止输出
LD WG_RELOAD,#TC1 ;装入载波周期
LDB WSR,#3FH
LD WG_CON,#0428H ;方式0,启动计数器
OR WG_CON,#T_DEAD ;死区时间=5us
LD WG_COMP1,#TC2
LD WG_COMP2,#TC2
LD WG_COMP3,#TC2
EI
MIAN: JBC AF,1,MIAN3 ;无中断转移
LD BX,#150
CLR AX
TT1: DJNZW AX,TT1 ;EXTINT中断恢复延时 字减一非零转移
DJNZW BX,TT1
SJMP MAIN_START ;EXTINT中断恢复延时完成
MIAN3: LDB WSR,#3EH
JBC p0_pin,0,MIAN5 ;判断启动信号
CMPB STM,#50 ;启动信号冗余计数
JLT MIAN4 ;小于转移
ORB AF,#00000001B ;置启动标志位
SJMP MIAN6
MIAN4: INCB STM
SJMP MIAN3
MIAN5: LDB WSR,#3FH
ANDB WG_PROTECT,#11111110B ;禁止输出
ANDB AF,#11111110B ;无启动信号
SJMP MT1
MIAN6: LDB WSR,#3EH
LD F_SET,#5000 ;50HZ
SJMP MIAN
;****************************************************************
;变频
BINF: CMP F_T,F_SET ;F_SET 频率设定值 F_T频率值
JGT BINF_END ;大于转移
DJNZ NUM2,BINF3 ;字节减一非零转移
INC F_T
LDB NUM2,#TM1
BINF3: LD CX,F_T
CLR DX
DIVU CX,#05H
AND CX,#0FFFEH
LD VF_T,VF_TAB[CX]
BINF_END: RET
WFG_INT: PUSHA
JBC AF,0,WG_END ;无启动信号
LDB WSR,#3FH
ORB WG_PROTECT,#00000001B ;允许输出
SCALL BINF ;变频
MUL R0,F_T,#FREQ ; 结果放R0 F_T - 频率值 FRE-输出频率系数
ADD SIN_PTR,R0 ;SIN_PTR SIN表循环指针
ADDC SIN_PTR+2,R1
AND R0,SIN_PTR+2,#SIN_360 ;使输出值不超过8190
SCALL SIN_YS
LD WG_COMP3,R0
ADD R0,SIN_PTR+2,#SIN_240
AND R0,#SIN_360
SCALL SIN_YS
LD WG_COMP2,R0
ADD R0,SIN_PTR+2,#SIN_120
AND R0,#SIN_360
SCALL SIN_YS
LD WG_COMP1,R0
WG_END: POPA
RET
SIN_YS: MUL SIN_PTR1,VF_T,SIN_TAB[R0] ; VF_T*SIN
ADD R0,PWM,#TC2
CMP R0,#960 ;极限检查 3×5us
JLT SIN1
LD R0,#1001
SJMP SIN2
SIN1: CMP R0,#40 ;
JGT SIN2
LD R0,#0
SIN2: RET
;********************************************************
;EXTINT中断
EXTINT: PUSHA
LDB WSR,#3FH ;
ANDB WG_PROTECT,#11111110B ;禁止输出
LD WG_CON,#0028H ;停止计数
LD WG_OUT,#0700H ;输出为0
AND AF,#11111110B
ORB AF,#00000010B
POPA
RET
;程序自检数据表
ZIJIAN:
DCB 0
DCB 1,2,3,4,5,6,7,8,9,10
DCB 11,12,13,14,15,16,17,18,19,20
VF_TAB: ;F_BC, VF_T
dw 0,8,16,24 ;4
dw 32,40,48,56 ;8
dw 64,72,80,88
dw 96,104,112,120
dw 128,136,144,152
dw 160,168,176,184
dw 192,200,208,216
dw 224,232,240,248
dw 256,264,272,280
dw 288,296,304,312
dw 320,328,336,344
dw 352,360,368,376
dw 384,392,400,408
dw 416,424,432,440
dw 448,456,464,472
dw 480,488,496,504
dw 512,520,528,536
dw 544,552,560,568
dw 576,584,592,600
dw 608,616,624,632
dw 640,648,656,664
dw 672,680,688,696
dw 704,712,720,728
dw 736,744,752,760
dw 768,776,784,792
dw 800,808,816,824
dw 832,840,848,856
dw 864,872,880,888
dw 896,904,912,920
dw 928,936,944,952
dw 960,968,976,984
dw 992,1000,1008,1016
dw 1024,1032,1040,1048
dw 1056,1064,1072,1080
dw 1088,1096,1104,1112
dw 1120,1128,1136,1144
dw 1152,1160,1168,1176
dw 1184,1192,1200,1208
dw 1216,1224,1232,1240
dw 1248,1256,1264,1272
dw 1280,1288,1296,1304
dw 1312,1320,1328,1336
dw 1344,1352,1360,1368
dw 1376,1384,1392,1400
dw 1408,1416,1424,1432
dw 1440,1448,1456,1464
dw 1472,1480,1488,1496
dw 1504,1512,1520,1528
dw 1536,1544,1552,1560
dw 1568,1576,1584,1592
dw 1600,1608,1616,1624
dw 1632,1640,1648,1656
dw 1664,1672,1680,1688
dw 1696,1704,1712,1720
dw 1728,1736,1744,1752
dw 1760,1768,1776,1784
dw 1792,1800,1808,1816
dw 1824,1832,1840,1848
dw 1856,1864,1872,1880
dw 1888,1896,1904,1912
dw 1920,1928,1936,1944
dw 1952,1960,1968,1976
dw 1984,1992,2000,2008
dw 2016,2024,2032,2040
dw 2048,2056,2064,2072
dw 2080,2088,2096,2104
dw 2112,2120,2128,2136
dw 2144,2152,2160,2168
dw 2176,2184,2192,2200
dw 2208,2216,2224,2232
dw 2240,2248,2256,2264
dw 2272,2280,2288,2296
dw 2304,2312,2320,2328
dw 2336,2344,2352,2360
dw 2368,2376,2384,2392
dw 2400,2408,2416,2424
dw 2432,2440,2448,2456
dw 2464,2472,2480,2488
dw 2496,2504,2512,2520
dw 2528,2536,2544,2552
dw 2560,2568,2576,2584
dw 2592,2600,2608,2616
dw 2624,2632,2640,2648
dw 2656,2664,2672,2680
dw 2688,2696,2704,2712
dw 2720,2728,2736,2744
dw 2752,2760,2768,2776
dw 2784,2792,2800,2808
dw 2816,2824,2832,2840
dw 2848,2856,2864,2872
dw 2880,2888,2896,2904
dw 2912,2920,2928,2936
dw 2944,2952,2960,2968
dw 2976,2984,2992,3000
dw 3008,3016,3024,3032
dw 3040,3048,3056,3064
dw 3072,3080,3088,3096
dw 3104,3112,3120,3128
dw 3136,3144,3152,3160
dw 3168,3176,3184,3192
dw 3200,3208,3216,3224
dw 3232,3240,3248,3256
dw 3264,3272,3280,3288
dw 3296,3304,3312,3320
dw 3328,3336,3344,3352
dw 3360,3368,3376,3384
dw 3392,3400,3408,3416
dw 3424,3432,3440,3448
dw 3456,3464,3472,3480
dw 3488,3496,3504,3512
dw 3520,3528,3536,3544
dw 3552,3560,3568,3576
dw 3584,3592,3600,3608
dw 3616,3624,3632,3640
dw 3648,3656,3664,3672
dw 3680,3688,3696,3704
dw 3712,3720,3728,3736
dw 3744,3752,3760,3768
dw 3776,3784,3792,3800
dw 3808,3816,3824,3832
dw 3840,3848,3856,3864
dw 3872,3880,3888,3896
dw 3904,3912,3920,3928
dw 3936,3944,3952,3960
dw 3968,3976,3984,3992
dw 4000
;*********************************************************
;正弦数据表:
;0~360° 4096个数据,8192个字节
SIN_TAB:
dw 0,21,43,65 ;1 ;.15
dw 86,108,130,151 ;2
dw 173,195,216,238 ;3
dw 259,281,302,324 ;4
dw 345,367,388,410 ;5
dw 431,452,474,495 ;6
dw 516,537,559,580 ;7
dw 601,622,644,665 ;8
dw 686,707,728,749 ;9
dw 770,791,812,833 ;10
dw 854,875,896,917 ;11
dw 938,959,980,1000 ;12
dw 1021,1042,1063,1083 ;13
dw 1104,1125,1145,1166 ;14
dw 1187,1207,1228,1248 ;15
dw 1269,1289,1310,1330 ;16
dw 1351,1371,1392,1412 ;17
dw 1432,1453,1473,1493 ;18
dw 1514,1534,1554,1574 ;19
dw 1594,1614,1635,1655 ;20
dw 1675,1695,1715,1735 ;21
dw 1755,1775,1795,1815 ;22
dw 1835,1854,1874,1894 ;23
dw 1914,1934,1953,1973 ;24
dw 1993,2012,2032,2052 ;25
dw 2071,2091,2110,2130 ;26
dw 2150,2169,2188,2208 ;27
dw 2227,2247,2266,2285 ;28
dw 2305,2324,2343,2362 ;29
dw 2382,2401,2420,2439 ;30
dw 2458,2477,2496,2515 ;31
dw 2534,2553,2572,2591 ;32
dw 2610,2629,2648,2667 ;33
dw 2686,2704,2723,2742 ;34
dw 2761,2779,2798,2817 ;35
dw 2835,2854,2872,2891 ;36
dw 2909,2928,2946,2965 ;37
dw 2983,3001,3020,3038 ;38
dw 3056,3075,3093,3111 ;39
dw 3129,3147,3165,3184 ;40
dw 3202,3220,3238,3256 ;41
dw 3274,3292,3310,3327 ;42
dw 3345,3363,3381,3399 ;43
dw 3416,3434,3452,3469 ;44
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -