📄 main.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 + -