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

📄 main.lis

📁 飞思卡尔HC08单片机上实现PWM控制.
💻 LIS
字号:
                        .module main.c
                        .area text
                ;         Period -> 0,X
                ;           Duty -> 2,X
 0000           _main::
 0000 A7FC              ais #-4
 0002 95                tsx
 0003           ; /*-----------------------------------------------------*
 0003           ; *工 程 名:PWM.prj                                      *
 0003           ; *硬件接线:PTD.4,即定时器1通道0(21脚)接指示灯或蜂鸣器   *
 0003           ; *程序描述:通过对PWM占空比的调节实现现指示灯的渐亮的功能*
 0003           ; *         当占空比为100%时再从0%逐渐增加             *
 0003           ; *目    的:学习HC08系列定时器脉宽调制功能               *
 0003           ; *---------《嵌入式应用技术基础教程》教学实例----------*/
 0003           ; /*[头文件]*/
 0003           ; #include "GP32C.H"               //包含头文件
 0003           ; /*函数声明*/
 0003           ; void PWMInit(unsigned int );     //PWM初始化
 0003           ; void PWMconf(unsigned int);      //PWM设置
 0003           ; extern void Delay_ms(unsigned char );   //延时
 0003           ; /*主程序*/
 0003           ; void main()
 0003           ; {     
 0003           ;       unsigned int  Period;   //PWM周期
 0003           ;       unsigned int  Duty;     //PWM占空比
 0003           ;       //[变量初始化]
 0003           ;       Period =0x0180;  //PWM周期默认为10ms
 0003 A601              lda #1
 0005 F7                sta ,X
 0006 A680              lda #-128
 0008 E701              sta 1,X
 000A           ;       //[PWM初始化]
 000A           ;       PWMInit(Period);
 000A 87                psha
 000B F6                lda ,X
 000C 87                psha
 000D CD005B            jsr _PWMInit
 0010 A702              ais #2
 0012 95                tsx
 0013           ;       Duty = 0;        //PWM占空比为0
 0013 6F03              clr 3,X
 0015 6F02              clr 2,X
 0017 203D              bra L3
 0019           L2:
 0019           ;       //[主循环]
 0019           ;       while(1)
 0019           ;       {
 0019           ;         //[判断脉宽是否达到周期的长度(占空比为100%)]
 0019           ;         if(Duty<Period)            
 0019 E601              lda 1,X
 001B B700              sta *__r1
 001D F6                lda ,X
 001E B700              sta *__r0
 0020 E603              lda 3,X
 0022 B700              sta *__r3
 0024 E602              lda 2,X
 0026 B700              sta *__r2
 0028 5500              ldhx *__r2
 002A 7500              cphx *__r0
 002C 95                tsx
 002D 240E              bhs L5
 002F           ;           Duty=Duty+1;     //PWM占空比加1
 002F E603              lda 3,X
 0031 AB01              add #1
 0033 E703              sta 3,X
 0035 E602              lda 2,X
 0037 A900              adc #0
 0039 E702              sta 2,X
 003B 2004              bra L6
 003D           L5:
 003D           ;         else    //占空比达到100%,设置占空比为0%
 003D           ;           Duty=0; 
 003D 6F03              clr 3,X
 003F 6F02              clr 2,X
 0041           L6:
 0041 1A20              bset #5,0x20
 0043 E602              lda 2,X
 0045 B726              sta 0x26
 0047 E603              lda 3,X
 0049 B727              sta 0x27
 004B 1B20              bclr #5,0x20
 004D A60A              lda #10
 004F 87                psha
 0050 CD0000            jsr _Delay_ms
 0053 A701              ais #1
 0055 95                tsx
 0056           L3:
 0056 20C1              bra L2
 0058           X0:
 0058           L1:
 0058 A704              ais #4
 005A                   .dbline 0 ; func end
 005A 81                rts
 005B           ;           Temp -> 0,X
 005B           ;         Period -> 4,X
 005B           _PWMInit::
 005B A7FE              ais #-2
 005D 95                tsx
 005E           ;       T1SC|=(1<<5);        //停止定时器1计数器计数
 005E           ;       //[设置PWM脉宽]
 005E           ;       T1CH0H = (Duty>>8);  //设置高字节
 005E           ;       T1CH0L = Duty;       //设置低字节
 005E           ;       T1SC&=~(1<<5);       //允许定时器1计数器计数     
 005E           ;         Delay_ms(10);      //延时10ms
 005E           ;       }                
 005E           ;    }
 005E           ; /*PWMconf:PWM初始化设置--------------------------------*
 005E           ; * 功  能:PWM脉冲周期、占空比的设置                     *
 005E           ; * 参  数:rate=脉宽时钟数,cyc=脉冲周期时钟数            *
 005E           ; * 返  回:无                                            *
 005E           ; *-----------------------------------------------------*/
 005E           ; void PWMInit(unsigned int Period)
 005E           ; {    
 005E           ;     unsigned int Temp=Period;
 005E E604              lda 4,X
 0060 F7                sta ,X
 0061 E605              lda 5,X
 0063 E701              sta 1,X
 0065           ;     //不允许溢出中断,不启动计数,分频因子=64,置位TSTOP,TRST
 0065           ;     T1SC = 0x36;        
 0065 A636              lda #54
 0067 B720              sta 0x20
 0069           ;     //[设置PWM周期]
 0069           ;     T1MODH = (Temp>>8);     
 0069 F6                lda ,X
 006A B723              sta 0x23
 006C           ;     T1MODL = Period;      
 006C E605              lda 5,X
 006E B724              sta 0x24
 0070           ;     //[初始化设置PWM脉宽为0]
 0070           ;     T1CH0H = 0x00;
 0070 3F26              clr 0x26
 0072           ;     T1CH0L = 0x00;
 0072 3F27              clr 0x27
 0074           ;     //设为PWM模式,不允许输出比较中断,输出低电平,不带缓冲
 0074           ;     T1SC0  = 0x1E;      
 0074 A61E              lda #30
 0076 B725              sta 0x25
 0078           ;     //允许定时器1计数寄存器计数           
 0078           ;     T1SC  &= 0xDF;      
 0078 B620              lda 0x20
 007A A4DF              and #-33
 007C B720              sta 0x20
 007E           L7:
 007E A702              ais #2
 0080                   .dbline 0 ; func end
 0080 81                rts

⌨️ 快捷键说明

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