⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pwm.dt

📁 em78p156模拟控制PWM输出256档位4~6路
💻 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 + -