建议采用海尔HR6P59HL来实现,内部4M。
HR6P59HL内置硬件定时器,可以实现38K波型,高低电平比1:4。间隔一毫秒发送
源码如下
;作者QQ:8044997
;芯片 HR6P59HL 14PINS 4M 内部晶振
#INCLUDE "HR6P59HL.INC"
RAM_BIT0 EQU 0X16
#DEFINE TM_1MS_FLAG RAM_BIT0,0
ORG 0X00
LCALL 0X3FF
MOVA CALR
JUMP MAIN
ORG 0X08
PUSH
BCC PSW,RP0
JBC INTC0,T8IE
JBS INTC0,T8IF
JUMP INT_EXIT
BCC INTC0,T8IF
MOVI .194 ;255-(194)+1=62 机器周期*16微秒(16*4M/4)=1000微秒
ADD T8,1
JUMP TIMER_S_WORK
MOVI 0X01
XOR PA,1
INT_EXIT
POP
RETIE
TIMER_S_WORK
MOVI 0X01
XOR RAM_BIT0,1
JBC TM_1MS_FLAG
JUMP T8P_PWM_ON
JBS TM_1MS_FLAG
JUMP T8P_PWM_OFF
T8P_PWM_ON
MOVI B'11111110'
TRIS PA
JUMP INT_EXIT
T8P_PWM_OFF
MOVI B'11111111'
TRIS PA
JUMP INT_EXIT
MAIN
LCALL RAM_INI
MAIN_INIT
MOVI B'11111110'
TRIS PA
MOVI B'11110111'
TRIS PB
CLR PA
CLR PB
; MOVI B'11111110'
; MOVA PAWPUC
MOVI B'01000011' ;T8预分频1:2
OPTION
BCC INTC0,T8IF
BSS INTC0,T8IE
LCALL T8P_PWM
MAIN_LOOP
CWDT
JUMP MAIN_LOOP
T8P_PWM
BSS PSW,RP0
CLR T8P
MOVI .25
MOVA T8PP
MOVI 0X00
MOVA T8PC
MOVI .5
MOVA TEL
MOVI 0X0C
MOVA TEC
BCC INTC0,T8PIF
BSS INTC0,T8PIE
BSS INTC0,GIE
BSS T8PC,T8PON
BCC PSW,RP0
RETIA 0
;RAM初始化,全部置0
RAM_INI
BCC PSW,RP0
MOVI 0X10
MOVA IAA
CLR_BANK0
CLR IAD ;清除存储组0的RAM数据
INC IAA
JBS IAA,5
JUMP CLR_BANK0
MOVI 0X30
MOVA IAA
CLR_BANK1
CLR IAD ;清除存储组1的RAM数据
INC IAA
JBS IAA,6
JUMP CLR_BANK1
RETIA 0
END
|