|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
很简单的使用定时器0定时两秒,控制PWM波,发现没有进入定时器0中断,一直没有发现问题出在哪一步,哪位大哥帮忙看看!
" S* `3 T" D- ?1 H5 X \void main()
) _5 t( V5 `6 G0 h% e8 g4 Y9 _{
I$ E: O# z: `6 |2 p9 g IO_Config(); //将所有的IO口配置为准双向口
5 c v9 T, N0 S7 F5 G, U+ R Uart_Init(); //初始化串口% A+ T% U: M4 w+ @7 b
timer0_Init();* N) L6 y7 _5 o \ ~
ADC_Init(); //初始化ADC/ b% O0 t: Y9 @: Y$ }1 @9 P+ Y7 a
PWM_Init();$ @8 w' Q1 H' U% G6 G$ E* n
EA = 1; //打开总中断5 u6 b$ k: F3 }$ `4 ~
Start_PWM(CYCLE1M); \7 Y( n1 U5 E* K
while(1)$ r! ^! v4 E$ W3 t' N& S
{ % P3 b0 P+ b% j! z
}- v5 v8 g# g. O" L5 _8 V. k
}
( L8 {4 i" v5 J+ s/ f4 i1 G. y( c' Y* l+ z( M
/ q% h) i5 Q, E: r( L% b4 n e# a# e
5 d/ D5 l% n: I" }* g" s) y. O
bit Delay_Status = 0;
7 d, x# {' i( v. zvolatile u8 cnt = 0;. n& A1 F0 U# r# P7 s! `6 R' _
' v7 \' e! U; k( ~! |& U$ @# p3 y2 X2 X% ~) e
void Timer0_Init(void) //20毫秒@24.000MHz
7 V- ~1 C( P- U. ?8 a{
], ]1 }( U& {/ X$ e$ j0 l AUXR &= 0x7F; //定时器时钟12T模式
% x; k9 |. A/ [4 ~' S: G TMOD &= 0xF0; //设置定时器模式
' A/ S* p9 t0 m) g6 v' ~! m TL0 = 0xC0; //设置定时初始值
9 k# ?) q/ m8 o! N6 I+ F TH0 = 0x63; //设置定时初始值
, _7 R" g) O) z. [# ]; ] TR0 = 1; //打开定时器) a! i, w5 _+ W( k* }8 G
ET0 = 1;
* e9 H6 P% x4 ~}. A+ Y* I4 o% P. J$ Q1 j
1 u9 \4 r' c8 X4 j2 K! G) E
6 E& Y5 t. i) Zvoid PWM_Init(void)$ x( B* ]3 v& [# ]3 Q5 |
{ - p4 O$ f, m8 H4 \
P_SW2 |= 0x80; //使能访问XSFR,否则无法访问以下特殊寄存器
; {$ J+ _4 s' w; z" H I
9 _& S* a) V$ c3 T9 A; J PWMCFG |= PWM1A_SET_0; //设置端口的初始电平
. Y- [' F( P* [1 Q+ U$ M( X PWMCFG |= PWM1B_SET_0;
4 P- K! o& W3 A. F0 M7 X) l O PWMCFG |= PWM2A_SET_0;! \4 M* O+ u) Y
PWMCFG |= PWM2B_SET_0;
) Y$ y8 r4 A4 \6 ^ 4 u2 ^. ~2 I5 [% b
PWMCKS = 0x00; //选择PWM时钟为Fosc/(0+1)2 \* S& O' R# V# h: @% [ a
//PWMC = CYCLE; //设置PWM周期% d, H: }% [! _) \# B) k, E0 I
7 T& L3 _" I3 [# r PWM4T1 = 1; 8 \& s, [' Q: p8 l9 z* ]- v
PWM4T2 = 0x00;
2 j6 A0 w0 s8 U" j* r PWM4CR = 0x00; //PWM4输出到P2.2,使能PWM4T2翻转中断5 D7 l* S/ Z/ }, ?2 r
1 L6 t& a/ S! D- M( C9 ]
6 \- d4 p: y/ ?+ T PWMCR |= 0x84; //使能PWM发生器,使能PWM计数器归零中断
5 ~8 Z, `- b% m0 N. U P_SW2 &= ~0x80;! z& h9 e) s) u+ d k. \! V: v; `
}1 M. m* S" f! N" z
7 @1 j4 h) V J% R: d" O
$ `( a' ~ _* O1 q% i9 V
//起始频率工作,振幅比! M8 t. T" b( o3 _! r) C- T2 z
void Start_PWM(u16 CYCLE)
3 |1 D" Y% o/ e6 \7 a/ j{" B3 k$ s5 S' R9 ]$ j+ _/ C8 d
P_SW2 |= 0x80;$ P3 [" v/ ]- K7 [4 b2 g
if(Delay_Status == 1); l/ Y$ O! [0 d6 Z3 @: A
{4 I# G3 e% l4 ~2 t0 M( \) g
PWMCR &= ~0x84;
% F, R$ O5 B" h# v( L! i; a PWM2A = 0;7 q+ J# j, s3 f3 V* w D4 C6 g9 I) D
}3 R0 E& ~% i% @" F
else/ U* R% K: g/ J. m3 z
{
: \- x& R4 l$ B+ M. D+ }* { PWMC = CYCLE; //设置pwm周期$ v& E- O6 M' ?3 h7 m" d
; [6 U/ H8 b; L6 o
" g; G' n, h& i0 K# G
PWM4T1 = 1;
" X; N% h' o9 d8 Y7 P' r, h3 F PWM4T2 = CYCLE*DUTY/100+1;
& M7 r; p1 r7 _& g' P$ K1 }
+ _, E: X% y' o! i- u7 a5 {; W PWMCR |= 0x84; //使能PWM信号输出( D n9 M1 r7 K4 E# }: o0 O2 w
}
5 i7 {/ Q. V% D5 s P_SW2 &= ~0x80;
; ~: \1 S# f3 H; _1 t* J1 f0 A( m}
Q) x9 X# s$ x+ v- r" V( A
! T! m2 S. I+ d! mvoid Timer0_Isr(void) interrupt 1
* X/ x, P4 j* ~$ @3 D) j G6 [{ 3 X" B2 k# }3 V3 g4 [) R' u
cnt++;- u p E2 U, s6 m
if(cnt >= 100) //100*20ms=2s$ i2 F6 ?3 a8 x/ I6 t) H" E
{- \- W- x/ ?) J/ j. c
cnt = 0;
: D; ^; g Q0 C7 R) W* [5 E5 g Delay_Status = !Delay_Status;" D* x5 B. w8 W; U
}
4 Q8 ]" _- \! m2 _+ h}
/ v2 V( J, ^) T" \
5 `8 s, a8 a2 U) Q4 L |
|