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

📄 delay.s

📁 飞思卡尔U08开发平台下可以自由运行
💻 S
字号:
	.module Delay.c
	.area text
;              j -> 0,X
;              u -> 1,X
;              i -> 4,X
_Delay_ms::
	ais #-2
	tsx
; /*[头文件]*/
; #include "GP32C.H"               //包含头文件
; /*函数声明*/
; void PWMconf(unsigned int);      //PWM设置
; void PWMInit(unsigned int Period);
; 
; /*Delay_ms:毫秒级延时函数------------------------------*    
; *功  能:延时函数                                       *
; *参  数:i=延时时间(ms)     (i取值范围:1-255)           *
; *返  回:无                                             *
; *-----------------------------------------------------*/                            
; void Delay_ms(unsigned char i)
;   {  unsigned char j;
;      unsigned char u;
;      for(j=0;j<i;j++)
	clr ,X
	bra L5
L2:
	clr 1,X
	bra L9
L6:
L7:
	inc 1,X
L9:
	lda 1,X
	cmp #-6
	bls L6
L3:
	inc ,X
L5:
	lda ,X
	cmp 4,X
	blo L2
L1:
	ais #2
	.dbline 0 ; func end
	rts
;           Duty -> 2,X
;         Period -> 4,X
;             Hz -> 8,X
_PWMconf::
	ais #-6
	tsx
;          for(u=0;u<=250;u++);
;   }
; 
; 
; void PWMconf(unsigned int Hz)
;   {
;      unsigned int Period,Duty;
;      Period=2457600/64/Hz;
	clr *__r1
	clr *__r0
	lda 9,X
	sta *__r3
	lda 8,X
	sta *__r2
	clra
	psha
	lda #-106
	psha
	clra
	psha
	psha
	lda *__r3
	psha
	lda *__r2
	psha
	lda *__r1
	psha
	lda *__r0
	psha
	jsr __divmod32s
	ais #4
	pula
	pula
	pula
	sta *__r2
	pula
	sta *__r1
	lda *__r2
	sta 4,X
	lda *__r1
	sta 5,X
;      PWMInit(Period);                              
	psha
	lda 4,X
	psha
	jsr _PWMInit
	ais #2
	tsx
;      Duty=Period/1.2;
	lda 5,X
	and #1
	sta *__r1
	clra
	sta *__r0
	lda *__r1
	psha
	lda *__r0
	psha
	clra
	psha
	psha
	tst 3,SP
	bpl X0
	com 2,SP
	com 1,SP
X0:
	jsr __long_to_SPfloat
	pula
	sta *__r0
	pula
	sta *__r1
	pula
	sta *__r2
	pula
	sta *__r3
	lda 5,X
	sta *__r5
	lda 4,X
	sta *__r4
	lsr *__r4
	ror *__r5
	lda *__r5
	psha
	lda *__r4
	psha
	clra
	psha
	psha
	tst 3,SP
	bpl X1
	com 2,SP
	com 1,SP
X1:
	jsr __long_to_SPfloat
	clra
	psha
	psha
	psha
	lda #64
	psha
	jsr __SPFloat_mul
	ais #4
	lda *__r3
	psha
	lda *__r2
	psha
	lda *__r1
	psha
	lda *__r0
	psha
	jsr __SPFloat_add
	ais #4
	lda #-102
	psha
	lda #-103
	psha
	psha
	lda #63
	psha
	jsr __SPFloat_div
	ais #4
	pula
	sta *__r0
	pula
	sta *__r1
	pula
	sta *__r2
	pula
	sta *__r3
	psha
	lda *__r2
	psha
	lda *__r1
	psha
	lda *__r0
	psha
	clra
	psha
	psha
	psha
	lda #71
	psha
	jsr __SPFloat_cmp_s
	ais #8
	blt L12
	lda *__r3
	psha
	lda *__r2
	psha
	lda *__r1
	psha
	lda *__r0
	psha
	clra
	psha
	psha
	psha
	lda #71
	psha
	jsr __SPFloat_sub
	ais #4
	jsr __SPFloat_to_long
	ais #2
	pula
	sta *__r4
	pula
	add #0
	sta 1,X
	lda *__r4
	adc #-128
	sta ,X
	bra L13
L12:
	lda *__r3
	psha
	lda *__r2
	psha
	lda *__r1
	psha
	lda *__r0
	psha
	jsr __SPFloat_to_long
	ais #2
	pula
	sta *__r0
	pula
	sta *__r1
	lda *__r0
	sta ,X
	lda *__r1
	sta 1,X
L13:
	lda ,X
	sta 2,X
	lda 1,X
	sta 3,X
;      T1SC|=(1<<5);        //停止定时器1计数器计数
	bset #5,0x20
;      //[设置PWM脉宽]
;      T1CH0H = (Duty>>8);  //设置高字节
	lda 2,X
	sta 0x26
;      T1CH0L = Duty;       //设置低字节
	lda 3,X
	sta 0x27
;      T1SC&=~(1<<5);       //允许定时器1计数器计数
	bclr #5,0x20
;      Delay_ms(2000);      //延时100ms
	lda #-48
	psha
	jsr _Delay_ms
	ais #1
	tsx
L10:
	ais #6
	.dbline 0 ; func end
	rts
;           Temp -> 0,X
;         Period -> 4,X
_PWMInit::
	ais #-2
	tsx
;   }
;   
;   
; /*PWMconf:PWM初始化设置--------------------------------*
; * 功  能:PWM脉冲周期、占空比的设置                     *
; * 参  数:rate=脉宽时钟数,cyc=脉冲周期时钟数            *
; * 返  回:无                                            *
; *-----------------------------------------------------*/
; void PWMInit(unsigned int Period)
; {    
;     unsigned int Temp=Period;
	lda 4,X
	sta ,X
	lda 5,X
	sta 1,X
;     //不允许溢出中断,不启动计数,分频因子=64,置位TSTOP,TRST
;     T1SC = 0x36;        
	lda #54
	sta 0x20
;     //[设置PWM周期]
;     T1MODH = (Temp>>8);     
	lda ,X
	sta 0x23
;     T1MODL = Period;      
	lda 5,X
	sta 0x24
;     //[初始化设置PWM脉宽为0]
;     T1CH0H = 0x00;
	clr 0x26
;     T1CH0L = 0x00;
	clr 0x27
;     //设为PWM模式,不允许输出比较中断,输出低电平,不带缓冲
;     T1SC0  = 0x1E;      
	lda #30
	sta 0x25
;     //允许定时器1计数寄存器计数           
;     T1SC  &= 0xDF;      
	lda 0x20
	and #-33
	sta 0x20
L14:
	ais #2
	.dbline 0 ; func end
	rts

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -