5、SONIX单片机TC0、TC1的pwm输出

来源:互联网 发布:甘肃干部网络考试答案 编辑:程序博客网 时间:2024/05/16 12:16

TC0TC1的功能和使用方法是一样的,所以这里只介绍TC0

与定时器TC0pwm功能相关的寄存器共有3;TC0M,TC0C,TC0R

一、TC0M模式寄存器

 

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

TC0M

TC0ENB

TC0rate2

TC0rate1

TC0rate0

TC0CKS

ALOAD0

TC0OUT

PWM0OUT

/

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

复位

0

0

0

0

0

0

0

0

Bit0PWM0OUTpwm输出控制位

0=禁止pwm0输出

1=使能pwm0输出,占空比由TC0OUTALOAD0决定

Bit1TC0OUT;仅当PWM0OUT =0时有效

0=禁止,p54作为普通IO口使用

1=使能,p54输出TC0OUT信号

Bit2ALOAD0,自动装载控制。仅当PWM0OUT = 0时有效。

0 = 禁止 TC0自动装载;
1 = 使能 TC0 自动装载。

Bit3TC0CKSTC0时钟信号控制位。
0 = 内部时钟(FcpuFosc);
1 = 外部时钟,由 P0.0/INT0输入。

Bit6~bit4T0rate2~T0rate0T0分频选择位

T0时钟由CPU时钟分频而来,分频比如下;

T0rate2~T0rate0

分频比

000

fCPU/256

001

fCPU/125

010

fCPU/64

011

fCPU/32

100

fCPU/16

101

fCPU/8

110

fCPU/4

111

fCPU/2

Bit7TC0ENBT0使能位,

0=不使能

1=使能

 

二、TC0C计数寄存器

TC0C 是一个 8位定时计数器,只要TC0ENB置“1”就开启定时器。TC0C是个加1计数器,时钟源频率由TC0RATE0~TC0RATE2决定。当TC0C计到“0FFH”后,若再加1就会回到“00H”,产生溢出信号,TC0中断请求标志被置为“1”,如果TC0中断又同时被使能(TC0IEN =1),那么系统将执行TC0的中断服务程序。

 

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

TC0C

TC0C7

TC0C6

TC0C5

TC0C4

TC0C3

TC0C2

TC0C1

TC0C0

/

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

复位

0

0

0

0

0

0

0

0

 

三、TC0R自动装载寄存器
TC0R 8 位自动装载寄存器,还用于频率输出和 PWM功能。在TC0OUT功能下,用户必须使能TC0R并且要进行设置。其主要功能如下:存放自动装载值,当TC0C溢出时将其写入TC0C中(ALOAD0 = 1);存放PWM0OUT的占空比

 

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

TC0R

TC0R7

TC0R6

TC0R5

TC0R4

TC0R3

TC0R2

TC0R1

TC0R0

/

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

复位

0

0

0

0

0

0

0

0

 

TC0M中的PWM0OUT=1时;

ALOAD0

TC0OUT

PWM占空比范围

TC0C有效值

TC0R有效值

最大PWM频率(pCPU=4M

备注

0

0

0/256~255/256

00H-FFH

00H-FFH

7.8125k

计数256次溢出

0

1

0/64~63/64

00H-3FH

00H-3FH

31.25k

计数256次溢出

1

0

0/32~31/32

00H-1FH

00H-1FH

62.5k

计数256次溢出

1

1

0/16~15/16

00H-0FH

00H-0FH

125k

计数256次溢出

 

PWM的占空比由TC0C和TC0R共同确定,TC0R确定高电平占空比。占空比=TC0R/TC0C;PWM 输出占空比随 TC0R 的变化而变化:一般情况TC0C是从0开始,但是如果要产生特殊频率的话可以在中断中重置TC0C的初值,如果TC0C不是从0开始,TC0R也要做相应的改变才能保持原来的占空比,但是这样因为频繁进中断,会影响其他程序的运行。 在运行中改变TC0R的值能随时改变占空比。

 

 

 

例;

/*注意,要关闭pwm时,PWM0OUT和TC0OUT同时关闭才能停止pwm输出,缺一不可*/

#include<sn8p2612.h>

 

void main(void)

{

TC0M=0x73;//01110011 不使能TC0,内部时钟源fcpu/2

//使能pwm输出,32.15k

TC0C=0x20;//TC0C配置为和TC0R一样,不知道是不是必须的

//反正配置为一样的时候可以正常运行

TC0R=0x20;//TC0R确定占空比pwm=50%

FTC0ENB=1;//打开TC0,pwm开始输出

while(1);

}

 

 

 

阅读全文
0 0
原创粉丝点击