📄 pwm.dt
字号:
; ===========================================
;153IN_Tcc.dt源码(以中断方式实现内部TCC功能)
;crystal=12MHZ
;============================================
;----------------------------------------------------------------------;
; Define MCU RAM or Variable Value
;----------------------------------------------------------------------;
TCC == 0x01 ; TCC计数器
STATUS == 0x03 ; 状态寄存器
;{
C == 0
Z == 2
;}
P5 == 0x05 ; PORT5端口
P6 == 0X06
;{
Bit_CS == 0
Bit_WR == 2
Bit_DATA == 1
;}
IOCE == 0x0E ; WDT控制寄存器
IOCF == 0x0F ; 中断控制寄存器
ISR == 0x0F ; 中断状态寄存器
TEMP_A == 0x20 ; 保存中断前A的值
TEMP_STATUS == 0X21
Ram_DATA == 0X22
Ram_ADRESS == 0X23
FLAG == 0X24
;{
Bit_PWM1 == 0
Bit_PWM2 == 1
Bit_PWM3 == 2
Bit_PWM4 == 3
Bit_PWM5 == 6
Bit_PWM6 == 7
;}
N == 0X25
PWM1 == 0x26 ;第一路PWM周期
PWM2 == 0X27
PWM3 == 0X28
PWM4 == 0X29
PWM5 == 0X2A
PWM6 == 0X2B
PWM11 == 0X2C ;第一路PWM高电平时间
PWM22 == 0X2D
PWM33 == 0X2E
PWM44 == 0X2F
PWM55 == 0X10
PWM66 == 0X11
PWM11_TEMP == 0X12
PWM22_TEMP == 0X13
PWM33_TEMP == 0X14
PWM44_TEMP == 0X15
PWM55_TEMP == 0X16
PWM66_TEMP == 0X17
;----------------------------MAIN PROGRAM------------------------------;
ORG 0x00
JMP TCC_Start
ORG 0x08
;----------------------------------------------------------------------;
TCC_int:
MOV TEMP_A, A ; 保存A的值
SWAP TEMP_A
SWAPA STATUS
MOV TEMP_STATUS,A
MOV A, @106 ; TCC计数次数=150
MOV TCC, A ; 置TCC初始
;------------1------------;
JBC FLAG,Bit_PWM1
JMP PWM_DJZ1
BS P5,Bit_PWM1
DJZ PWM11
JMP PWM_DJZ1
MOV A,PWM11_TEMP ;置PWM11初始
MOV PWM11,A
BC P5,Bit_PWM1
BS FLAG,Bit_PWM1
PWM_DJZ1: DJZ PWM1
JMP PWM_2
BC P5,Bit_PWM1
BC FLAG,Bit_PWM1
;-----------2-------------;
PWM_2: JBC FLAG,Bit_PWM2
JMP PWM_DJZ2
BS P5,Bit_PWM2
DJZ PWM22
JMP PWM_DJZ2
MOV A,PWM22_TEMP ;置PWM11初始
MOV PWM22,A
BC P5,Bit_PWM2
BS FLAG,Bit_PWM2
PWM_DJZ2: DJZ PWM2
JMP PWM_3
BC P5,Bit_PWM2
BC FLAG,Bit_PWM2
;------------3------------;
PWM_3: JBC FLAG,Bit_PWM3
JMP PWM_DJZ3
BS P5,Bit_PWM3
DJZ PWM33
JMP PWM_DJZ3
MOV A,PWM33_TEMP ;置PWM11初始
MOV PWM33,A
BC P5,Bit_PWM3
BS FLAG,Bit_PWM3
PWM_DJZ3: DJZ PWM3
JMP PWM_4
BC P5,Bit_PWM3
BC FLAG,Bit_PWM3
;------------4-------------;
PWM_4: JBC FLAG,Bit_PWM4
JMP PWM_DJZ4
BS P5,Bit_PWM4
DJZ PWM44
JMP PWM_DJZ4
MOV A,PWM44_TEMP ;置PWM11初始
MOV PWM44,A
BC P5,Bit_PWM4
BS FLAG,Bit_PWM4
PWM_DJZ4: DJZ PWM4
JMP PWM_5
BC P5,Bit_PWM4
BC FLAG,Bit_PWM4
;------------5-------------;
PWM_5: JBC FLAG,Bit_PWM5
JMP PWM_DJZ5
BS P6,Bit_PWM5
DJZ PWM55
JMP PWM_DJZ5
MOV A,PWM55_TEMP ;置PWM11初始
MOV PWM55,A
BC P6,Bit_PWM5
BS FLAG,Bit_PWM5
PWM_DJZ5: DJZ PWM5
JMP PWM_6
BC P6,Bit_PWM5
BC FLAG,Bit_PWM5
;------------6--------------;
PWM_6: JBC FLAG,Bit_PWM6
JMP PWM_DJZ6
BS P6,Bit_PWM6
DJZ PWM66
JMP PWM_DJZ6
MOV A,PWM66_TEMP ;置PWM11初始
MOV PWM66,A
BC P6,Bit_PWM6
BS FLAG,Bit_PWM6
PWM_DJZ6: DJZ PWM6
JMP Int_out
BC P6,Bit_PWM6
BC FLAG,Bit_PWM6
Int_out: SWAPA TEMP_STATUS
MOV STATUS,A
SWAPA TEMP_A ; 恢复A的值
RETI ; 中断返回
;----------------------------------------------------------------------;
TCC_Start:
MOV A, @0x00
IOW IOCE ; 关闭看门狗
MOV A, @0x00
IOW P5 ; Port5为输出口
MOV A, @0B00000111
IOW P6
MOV A, @0b00000000 ; 1:1
CONTW
MOV A, @0XFF
MOV FLAG,A ;默认关
CLR P5
CLR P6
CLR Ram_ADRESS ;默认地址0,即没有输入
CLR Ram_DATA
MOV A, @0x01 ; 允许计数器中断
IOW IOCF
ENI ; 开中断
;----------------------------------------------------------------------;
;循环判断是否有数据过来,有接受数据(16Bit),前8Bit地址(选择哪路PWM输出),后8Bit数据(PWM占空比)
LOOP: JBC P6,Bit_CS
JMP OUT_DATA
; 接收地址
MOV A, @8
MOV N, A
AGAIN_READ:
JBC P6,Bit_WR
JMP AGAIN_READ
L2: JBS P6,Bit_WR
JMP L2
JBS P6,Bit_DATA
JMP SET_DATA_0
BS STATUS,C
JMP NEXT_1
SET_DATA_0:
BC STATUS,C
NEXT_1: RLC Ram_ADRESS
DJZ N
JMP AGAIN_READ
;接收数据
MOV A, @8
MOV N, A
AGAIN_READ1:
JBC P6,Bit_WR
JMP AGAIN_READ1
L4: JBS P6,Bit_WR
JMP L4
JBS P6,Bit_DATA
JMP SET_DATA_00
BS STATUS,C
JMP NEXT_2
SET_DATA_00:
BC STATUS,C
NEXT_2: RLC Ram_DATA
DJZ N
JMP AGAIN_READ1
;-------------------------------判断第几路PWM输出---------------------------;
;------------1------------;
PD: MOV A, @1
SUB A, Ram_ADRESS
JBS STATUS, Z ;判断第1路PWM
JMP PD_PWM2
DECA Ram_DATA
JBC STATUS, Z ;判断占空比
JMP L5
DISI
MOV A,Ram_DATA
MOV PWM11,A
MOV PWM11_TEMP,A ;
CLR PWM1
BC FLAG,Bit_PWM1
ENI
JMP OUT_DATA
L5: BS FLAG,Bit_PWM1 ;不是第一路,关第一路
BC P5,Bit_PWM1
JMP OUT_DATA
;------------2------------;
PD_PWM2:
MOV A, @2
SUB A, Ram_ADRESS
JBS STATUS, Z ;判断第2路PWM
JMP PD_PWM3
DECA Ram_DATA
JBC STATUS, Z ;判断占空比
JMP L6
DISI
MOV A,Ram_DATA
MOV PWM22,A
MOV PWM22_TEMP,A
CLR PWM2
BC FLAG,Bit_PWM2
ENI
JMP OUT_DATA
L6: BS FLAG,Bit_PWM2
BC P5,Bit_PWM2
JMP OUT_DATA
;------------3------------;
PD_PWM3:
MOV A, @3
SUB A, Ram_ADRESS
JBS STATUS, Z ;判断第3路PWM
JMP PD_PWM4
DECA Ram_DATA
JBC STATUS, Z ;判断占空比
JMP L7
DISI
MOV A,Ram_DATA
MOV PWM33,A
MOV PWM33_TEMP,A
CLR PWM3
BC FLAG,Bit_PWM3
ENI
JMP OUT_DATA
L7: BS FLAG,Bit_PWM3
BC P5,Bit_PWM3
JMP OUT_DATA
;------------4------------;
PD_PWM4:
MOV A, @4
SUB A, Ram_ADRESS
JBS STATUS, Z ;判断第4路PWM
JMP PD_PWM5
DECA Ram_DATA
JBC STATUS, Z ;判断占空比
JMP L8
DISI
MOV A,Ram_DATA
MOV PWM44,A
MOV PWM44_TEMP,A
CLR PWM4
BC FLAG,Bit_PWM4
ENI
JMP OUT_DATA
L8: BS FLAG,Bit_PWM4
BC P5,Bit_PWM4
JMP OUT_DATA
;------------5------------;
PD_PWM5:
MOV A, @5
SUB A, Ram_ADRESS
JBS STATUS, Z ;判断第5路PWM
JMP PD_PWM6
DECA Ram_DATA
JBC STATUS, Z ;判断占空比
JMP L9
DISI
MOV A,Ram_DATA
MOV PWM55,A
MOV PWM55_TEMP,A
CLR PWM5
BC FLAG,Bit_PWM5
ENI
JMP OUT_DATA
L9: BS FLAG,Bit_PWM5
BC P6,Bit_PWM5
JMP OUT_DATA
;------------6------------;
PD_PWM6:
MOV A, @6
SUB A, Ram_ADRESS
JBS STATUS, Z ;判断第6路PWM
JMP OUT_DATA
DECA Ram_DATA
JBC STATUS, Z ;判断占空比
JMP L10
DISI
MOV A,Ram_DATA
MOV PWM66,A
MOV PWM66_TEMP,A
CLR PWM6
BC FLAG,Bit_PWM6
ENI
JMP OUT_DATA
L10: BS FLAG,Bit_PWM6
BC P6,Bit_PWM6
OUT_DATA:
JMP LOOP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -