|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
很简单的使用定时器0定时两秒,控制PWM波,发现没有进入定时器0中断,一直没有发现问题出在哪一步,哪位大哥帮忙看看!) H' m; o& d% l9 t; m, M
void main()% n; J% T X6 R% ^+ d+ L& O' l% H y- {
{" j" U: R1 d8 J/ J: l- S5 n; P
IO_Config(); //将所有的IO口配置为准双向口" a7 B `0 p1 M
Uart_Init(); //初始化串口/ J7 b5 u# r( G, _8 H$ {/ e
timer0_Init();9 X% k) k) u; o8 U
ADC_Init(); //初始化ADC
6 a" y# N8 _9 h6 h PWM_Init();
0 h) m/ k4 E0 E EA = 1; //打开总中断. m! h2 Y- u6 M9 A Y
Start_PWM(CYCLE1M);
) M! {3 u5 `; F0 {# x5 V; s while(1)
7 c9 f- Z1 e4 o5 L {
- L' w" [! l5 k- a }1 T6 w/ _4 O. r8 \: \! n& H
}
0 H8 l+ n7 U1 q/ w4 N+ X: U3 [
: [6 p! y7 A$ c1 L
2 f' w( B! x, Y9 q7 E5 ]
5 M8 x B& M6 |6 o Gbit Delay_Status = 0;/ v/ `) \+ s8 r2 q/ M
volatile u8 cnt = 0;. q0 i# M W) R
" w, w0 H/ K1 j8 {* ^9 U+ \
; B j; B; V2 j8 s% t: I
void Timer0_Init(void) //20毫秒@24.000MHz
! C2 Z5 u6 ]# J0 w3 ~{6 h1 v& y0 x+ }2 P2 Z2 a
AUXR &= 0x7F; //定时器时钟12T模式
$ b& C) ^ u% i/ _ TMOD &= 0xF0; //设置定时器模式' _0 D$ ^& s/ U0 B
TL0 = 0xC0; //设置定时初始值
d2 l h8 R8 F) u! E) r$ h TH0 = 0x63; //设置定时初始值# } u) |9 |9 d$ _
TR0 = 1; //打开定时器
7 Q3 j2 Z) {" m ET0 = 1;
/ k" S6 h' ^8 Z0 ?( y}
, o* L- {8 t: A$ N1 p
' ~$ ^3 q" s( r3 J. c. f2 [6 b/ C3 w5 m* ]- q
void PWM_Init(void)3 U5 R4 ~# v8 u) }
{ 5 O3 P* D! M8 q& m, v
P_SW2 |= 0x80; //使能访问XSFR,否则无法访问以下特殊寄存器
% |& s2 a% w" F! C9 M- y/ F 1 ], z( ~) ^- d6 ~9 `/ n
PWMCFG |= PWM1A_SET_0; //设置端口的初始电平
( R% g- O- c# ]9 ^/ }5 t PWMCFG |= PWM1B_SET_0;
0 X! ?% B+ L# R2 p. _ PWMCFG |= PWM2A_SET_0;
) V' J& p8 v) I8 j& u. Y PWMCFG |= PWM2B_SET_0;. F7 f( X0 W o! Z
3 v2 t1 o% C% \/ |7 e: g
PWMCKS = 0x00; //选择PWM时钟为Fosc/(0+1)5 R' c6 ?: c; w8 i/ @/ C
//PWMC = CYCLE; //设置PWM周期: s# j( V# M3 R- e
7 M- g1 a0 T" J. c. U- Q PWM4T1 = 1;
+ Q% Y, c% m) u+ } PWM4T2 = 0x00; 6 J; {$ o5 q" |' r% B) z, h
PWM4CR = 0x00; //PWM4输出到P2.2,使能PWM4T2翻转中断1 Y- o1 B; U6 {0 E9 O* ]3 }9 R
& v0 L' g: L, g/ C" o+ E
( ^$ j. R c8 U9 O9 Z PWMCR |= 0x84; //使能PWM发生器,使能PWM计数器归零中断
1 U+ h% p9 ]8 m8 c9 W! i P_SW2 &= ~0x80;/ i" X& g( |5 b; i Z; S
}8 A; C+ O$ O8 M! R+ @: [; b+ Q# \
: }' }6 I3 ~* {: ] A, s, ]" g% G+ ~1 H
//起始频率工作,振幅比
5 x8 `1 ]! T7 svoid Start_PWM(u16 CYCLE)7 I- L6 |3 V( R
{) g% s# s+ l5 w5 q3 O1 C- T
P_SW2 |= 0x80;# U7 V3 ^7 _6 y5 B* \* K' o+ U0 V0 ~
if(Delay_Status == 1)1 K, p5 s1 Y7 R2 I
{
4 }; _; b7 ^' t# h PWMCR &= ~0x84; $ N$ `, L' c. r3 C2 y2 Z
PWM2A = 0;# z* V$ {; a2 t4 ~6 i. e
}
/ U) m. z! G! a4 a else
/ T$ N, O1 u d2 F$ A# s {
' b9 l0 d3 @: {$ w3 G8 L, H PWMC = CYCLE; //设置pwm周期
" p, {" K! }' M
% [8 U3 `, b" i" D( |0 q( ~! C) z
PWM4T1 = 1;
7 M2 ?3 O7 {9 [# F PWM4T2 = CYCLE*DUTY/100+1;, ^/ }( @* n" j5 S% x
8 w& y3 G3 V' @3 G' v PWMCR |= 0x84; //使能PWM信号输出9 U: b2 @ P2 k) @) k" o" ]
}
4 y/ B: k0 V( _ P_SW2 &= ~0x80;$ S( E7 n8 E* d. I" a2 ^
}
7 `: c: w1 O2 Q' F' m3 U' A& b Y " K; H" H& T. O0 O4 ]+ i
void Timer0_Isr(void) interrupt 1 ; Z( K; X' g7 e0 y6 E( i3 X
{
+ |. F& q# n! J9 B! g- q; D cnt++;
) q2 u2 D" N2 E5 K if(cnt >= 100) //100*20ms=2s, d9 y0 Z0 M' y( V& @; u- }
{& y7 N1 ^2 b$ e1 t
cnt = 0;
, a _; F/ s1 @% g, Z( Q Delay_Status = !Delay_Status;
' m0 O, S' ~- |% F4 ?( s, J }
( K( M9 P$ a A* `2 Y2 _: r}
5 T. M) v# ` {5 S( y8 a
8 S' _4 b$ m7 u8 b |
|