|
當(dāng)打開比較器的時(shí)候,再開定時(shí)器0,就會(huì)開不了。就算是開其它定時(shí)器的時(shí)候也會(huì)造成一些問(wèn)題。
源代碼
#include "stc8.h"
#include <stdio.h>
unsigned char flag10ms,flag100ms;
unsigned int flag1s,flag10s;
bit flag1ms,readcard;
void init(void)
{
SCON = 0x50; //8位數(shù)據(jù),可變波特率
AUXR |= 0x01; //串口1選擇定時(shí)器2為波特率發(fā)生器
AUXR |= 0x04; //定時(shí)器2時(shí)鐘為Fosc,即1T
T2L = 0xE0; //設(shè)定定時(shí)初值
T2H = 0xFE; //設(shè)定定時(shí)初值
AUXR |= 0x10; //啟動(dòng)定時(shí)器2
// TR1 = 1;
TI = 1;
printf("Start\n");
}
void PWMInt(void)
{
P_SW2 = 0x80;
PWM1CR = 0x00; //PWM0/P2.0
PWMCKS = 0x00; // PWM時(shí)鐘為系統(tǒng)時(shí)鐘
PWMC = 0x0058; //設(shè)置PWM周期為1000H個(gè)PWM時(shí)鐘
PWM1T1 = 0x0000; //在計(jì)數(shù)值為100H地方輸出低電平
PWM1T2 = 0x002C; //在計(jì)數(shù)值為500H地方輸出高電平
PWM1CR = 0x80; //使能PWM1輸出
P_SW2 = 0x00;
PWMCR |= 0x80; //啟動(dòng)PWM模塊
}
void CMPInt(void)
{
CMPCR2 = 0x00;
CMPCR2 &= ~0x80; //比較器正向輸出
CMPCR2 &= ~0x40; //使能0.1us濾波
CMPCR2 |= 0x3E; //比較器結(jié)果經(jīng)過(guò)63個(gè)去抖時(shí)鐘后輸出
CMPCR1 = 0x00;
CMPCR1 |= 0x30; //使能比較器邊沿中斷
CMPCR1 &= ~0x08; //P3.6為CMP+輸入腳
CMPCR1 |= 0x04; //P3.7為CMP-輸入腳
CMPCR1 &= ~0x02; //禁止比較器輸出
CMPCR1 |= 0x80; //開啟比較器模塊
// EA = 1;
}
void Timer0Init(void) //1毫秒@11.0592MHz
{
AUXR |= 0x80; //定時(shí)器時(shí)鐘1T模式
TMOD &= 0xF0; //設(shè)置定時(shí)器模式
TL0 = 0xCD; //設(shè)置定時(shí)初值
TH0 = 0xD4; //設(shè)置定時(shí)初值
TF0 = 0; //清除TF0標(biāo)志
TR0 = 1; //定時(shí)器0開始計(jì)時(shí)
ET0 = 1; //使能定時(shí)器中斷
EA = 1;
}
void TM0_Isr() interrupt 1
{
flag1ms=1;
}
/*
void TM1_Isr() interrupt 3
{
flag1ms=1; //測(cè)試端口
}
void Timer1Init(void) //1毫秒@11.0592MHz
{
AUXR |= 0x40; //定時(shí)器時(shí)鐘1T模式
TMOD &= 0x0F; //設(shè)置定時(shí)器模式
TL1 = 0xCD; //設(shè)置定時(shí)初值
TH1 = 0xD4; //設(shè)置定時(shí)初值
TF1 = 0; //清除TF1標(biāo)志
TR1 = 1; //定時(shí)器1開始計(jì)時(shí)
ET1 = 1; //使能定時(shí)器中斷
EA = 1;
}/*
void TM3_Isr() interrupt 19
{
flag1ms=1; //測(cè)試端口
AUXINTIF &= ~T3IF; //清中斷標(biāo)志
}
void Timer3Init(void) //1毫秒@11.0592MHz
{
T4T3M |= 0x02; //定時(shí)器時(shí)鐘1T模式
T3L = 0xCD; //設(shè)置定時(shí)初值
T3H = 0xD4; //設(shè)置定時(shí)初值
T4T3M |= 0x08; //定時(shí)器3開始計(jì)時(shí)
IE2 = ET3; //使能定時(shí)器中斷
EA = 1;
}
*/
main()
{
//初始化
flag1ms=readcard=0;
flag10ms=flag100ms=flag1s=flag10s=0;
PWMInt();
CMPInt();
init();
Timer0Init();
while (1)
{
if(flag1ms)
{
flag1ms=0;
if(++flag10ms>=10)
{
flag10ms=0;
printf("10MS\n");
}
if(++flag100ms>=100)
{
flag100ms=0;
printf("100MS\n");
}
if(++flag1s>=1000)
{
flag1s=0;
printf("1000MS\n");
}
if(++flag10s>=10000)
{
flag10s=0;
printf("10000MS\n");
}
}
}
}
不知道是我的編譯器問(wèn)題,還是其它問(wèn)題,有沒有師兄復(fù)現(xiàn)下,看看是我的程序問(wèn)題還是單片機(jī)的bug謝謝了。
|
|