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

📄 main.s

📁 飞思卡尔HC08单片机上实现PWM控制.
💻 S
字号:
	.module main.c
	.area text
;         Period -> 0,X
;           Duty -> 2,X
_main::
	ais #-4
	tsx
; /*-----------------------------------------------------*
; *工 程 名:PWM.prj                                      *
; *硬件接线:PTD.4,即定时器1通道0(21脚)接指示灯或蜂鸣器   *
; *程序描述:通过对PWM占空比的调节实现现指示灯的渐亮的功能*
; *         当占空比为100%时再从0%逐渐增加             *
; *目    的:学习HC08系列定时器脉宽调制功能               *
; *---------《嵌入式应用技术基础教程》教学实例----------*/
; /*[头文件]*/
; #include "GP32C.H"               //包含头文件
; /*函数声明*/
; void PWMInit(unsigned int );     //PWM初始化
; void PWMconf(unsigned int);      //PWM设置
; extern void Delay_ms(unsigned char );   //延时
; /*主程序*/
; void main()
; {     
;       unsigned int  Period;   //PWM周期
;       unsigned int  Duty;     //PWM占空比
;       //[变量初始化]
;       Period =0x0180;  //PWM周期默认为10ms
	lda #1
	sta ,X
	lda #-128
	sta 1,X
;       //[PWM初始化]
;       PWMInit(Period);
	psha
	lda ,X
	psha
	jsr _PWMInit
	ais #2
	tsx
;       Duty = 0;        //PWM占空比为0
	clr 3,X
	clr 2,X
	bra L3
L2:
;       //[主循环]
;       while(1)
;       {
;         //[判断脉宽是否达到周期的长度(占空比为100%)]
;         if(Duty<Period)            
	lda 1,X
	sta *__r1
	lda ,X
	sta *__r0
	lda 3,X
	sta *__r3
	lda 2,X
	sta *__r2
	ldhx *__r2
	cphx *__r0
	tsx
	bhs L5
;           Duty=Duty+1;     //PWM占空比加1
	lda 3,X
	add #1
	sta 3,X
	lda 2,X
	adc #0
	sta 2,X
	bra L6
L5:
;         else    //占空比达到100%,设置占空比为0%
;           Duty=0; 
	clr 3,X
	clr 2,X
L6:
	bset #5,0x20
	lda 2,X
	sta 0x26
	lda 3,X
	sta 0x27
	bclr #5,0x20
	lda #10
	psha
	jsr _Delay_ms
	ais #1
	tsx
L3:
	bra L2
X0:
L1:
	ais #4
	.dbline 0 ; func end
	rts
;           Temp -> 0,X
;         Period -> 4,X
_PWMInit::
	ais #-2
	tsx
;       T1SC|=(1<<5);        //停止定时器1计数器计数
;       //[设置PWM脉宽]
;       T1CH0H = (Duty>>8);  //设置高字节
;       T1CH0L = Duty;       //设置低字节
;       T1SC&=~(1<<5);       //允许定时器1计数器计数     
;         Delay_ms(10);      //延时10ms
;       }                
;    }
; /*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
L7:
	ais #2
	.dbline 0 ; func end
	rts

⌨️ 快捷键说明

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