注意定时器溢出和重载问题
之前写的单片机过零触发调节SCR导通角程序(节选):
- #include <STC15F2K60S2.H>
- #include <STC15F2K60S2.H>
- #include <intrins.h>
- #define IN P32
- #define OUT P33
- bit Power;
- unsigned char Value;
- unsigned int Time;
-
- /*----------------------------延时10us@STC-Y5@24MHz----------------------------*/
- void Delay_10us(void)
- {
- unsigned char i;
- _nop_();
- _nop_();
- i=57;
- while(--i);
- }
-
- /*----------------------------延时x10us----------------------------*/
- void Delay_x10us(unsigned char x)
- {
- while(x--)
- Delay_10us();
- }
-
- void Init(void)
- {
- TMOD=0x01;
- IT0=1;
- EX0=1;
- ET0=1;
- EA=1;
- Power=1;
- Value=0;
- Time=15000;
- }
-
- void main(void)
- {
- Init();
- while(1)
- {
- if(Power)
- {
- Time=15000-150*Value;
- }
- }
- }
-
- void INT0(void) interrupt 0
- {
- TR0=0;
- TH0=(0xffff-Time)/256;
- TL0=(0xffff-Time)%256;
- TR0=1;
- }
-
- void Timer0(void) interrupt 1
- {
- if(Power)
- {
- OUT=0;
- Delay_x10us(2);
- OUT=1;
- }
- else
- OUT=1;
- }
复制代码
|