STC15W1K24S启用定时器0定时器2控制电机,定时器1波特率发生器,死活调不出
写了一个测试程序,定时器0定时器2启动后计数200次取反IO,不启动定时器1做波特率发生器可以工作,启动定时器1后就乱了。
/***定时器0中断电机手动控制*********************************/
void timer0() interrupt 1
{
vala++;
if(vala>=200)
{
vala=0;
DIR0=~DIR0; //
DIR1=~DIR1; //
}
if(MotoraRun_Flag==1) //电机A为1启动X电机
{
}
if(MotorbRun_Flag==1) //电机A为1启动X电机
{
}
if(MotorcRun_Flag==1) //电机A为1启动X电机
{
}
if(MotordRun_Flag==1) //电机A为1启动X电机
{
}
}
/***定时器2中断运行函数 判断电机运行为一启动输出***/
/***自动控制状态************************/
void t2int() interrupt 12 //中断入口
{
valb++;
if(valb>=200)
{
valb=0;
CP0=~CP0;
CP1=~CP1;
}
}
/*----------------------------------*/
void Timer0_Init(void) //5毫秒@11.0592MHz
{
//AUXR |= 0xC4; //定时器时钟1T模式
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x00; //设置定时初始值
TH0 = 0x28; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1; //使能定时器0中断
}
/*----------------------------------*/
void Timer2_Init(void) //5毫秒@11.0592MHz
{
AUXR |= 0x04; //定时器时钟1T模式
T2L = 0x00; //设置定时初始值
T2H = 0x28; //设置定时初始值
AUXR |= 0x10; //定时器2开始计时T2R
IE2 |= 0x04; //开定时器2中断
}
/****************************************/
voidusart_Init()
{
SCON = 0x50; //8位可变波特率
P_SW1=0x00; //RXD_2/P3.0, TXD_2/P3.1
AUXR |= 0x40; //定时器1为1T模式
AUXR |= 0x01; //定时器1波特率发生器
TL1 = (65536 - (FOSC/4/BAUD)); //设置波特率重装值
TH1 = (65536 - (FOSC/4/BAUD))>>8;
TI=1;
TR1 = 1; //定时器1开始启动
ES = 1; //使能串口中断
}
/*--------UART中断服务程序---串口4接收触摸屏数据---*/
void Uart() interrupt 4 using 1
{
if(RI)
{
Receive_Total++;
a=SBUF; //数组下标位置的数据等于SBUF
i++;
if(i==9) //触摸屏结束码 FRAMELENGTH
{
Receive_Flag=1; //接收数据标志置一
if (a==0XF0&&a==0XF1) //手动
{
i=0; //数组计数器归零
Receive_Flag=0;
OutPut10=1; //
RUN_Flag=0; //自动运行标志
}
}
RI=0; //
}
}
/*------------------主循环程序----------------*/
void main( ) /*主程序开始*/
{ /**加一**/
P0M0 = 0x00;
P0M1 = 0x00;
P1M0 = 0x00;
P1M1 = 0x00;
P2M0 = 0x00;
P2M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
P4M0 = 0x00;
P4M1 = 0x00;
P5M0 = 0x00;
P5M1 = 0x00;
AUXR=0X80; //STC系列的1T 设置
Timer0_Init(); //定时器0初始化
Timer2_Init(); //定时器2初始化
usart_Init(); //初始化串口定时器1做波特率发生器
EA=1;
EX_INT0=1; //拉高P3.2
IT0=1; //设置INT0的中断类型 (1:仅下降沿 0:上升沿和下降沿)
EX0=1; //使能INT0中断
改了 还是不行
/***定时器0中断电机手动控制*********************************/
void timer0() interrupt 1
{
vala++;
if(vala>=200)
{
vala=0;
DIR0=~DIR0; //
DIR1=~DIR1; //
}
if(MotoraRun_Flag==1) //电机A为1启动X电机
{
}
if(MotorbRun_Flag==1) //电机B为1启动X电机
{
}
if(MotorcRun_Flag==1) //电机B为1启动X电机
{
}
if(MotordRun_Flag==1) //电机D为1启动X电机
{
}
}
/***定时器2中断运行函数 判断电机运行为一启动输出***/
/***自动控制状态************************/
void t2int() interrupt 12 //中断入口
{
valb++;
if(valb>=200)
{
valb=0;
CP0=~CP0;
CP1=~CP1;
}
}
/*----------------------------------*/
void Timer0_Init(void) //5毫秒@11.0592MHz
{
//AUXR |= 0xE4; //
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x00; //设置定时初始值
TH0 = 0x28; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1; //使能定时器0中断
}
/*----------------------------------*/
void Timer2_Init(void) //5毫秒@11.0592MHz
{
AUXR |= 0x04; //定时器时钟1T模式
T2L = 0x00; //设置定时初始值
T2H = 0x28; //设置定时初始值
AUXR |= 0x10; //定时器2开始计时T2R
IE2 |= 0x04; //开定时器2中断
}
/****************************************/
voidusart_Init()
{
SCON = 0x50; //8位可变波特率
P_SW1=0x00; //RXD_2/P3.0, TXD_2/P3.1
AUXR |= 0x40; //定时器1为1T模式
AUXR |= 0x00; //定时器1波特率发生器
TL1 = (65536 - (FOSC/4/BAUD)); //设置波特率重装值
TH1 = (65536 - (FOSC/4/BAUD))>>8;
TI=1;
TR1 = 1; //定时器1开始启动
// ET1 = 1; //使能定时器1中断
ES = 1; //使能串口中断
}
/*--------UART中断服务程序---串口4接收触摸屏数据---*/
void Uart() interrupt 4 using 1
{
if(RI)
{
Receive_Total++;
a=SBUF; //数组下标位置的数据等于SBUF
i++;
if(i==9) //触摸屏结束码 FRAMELENGTH
{
Receive_Flag=1; //接收数据标志置一
if (a==0XF0&&a==0XF1) //手动
{
i=0; //数组计数器归零
Receive_Flag=0;
OutPut10=1; //
RUN_Flag=0; //自动运行标志
}
}
RI=0; //
}
}
/*------------------主循环程序----------------*/
void main( ) /*主程序开始*/
{ /**加一**/
P0M0 = 0x00;
P0M1 = 0x00;
P1M0 = 0x00;
P1M1 = 0x00;
P2M0 = 0x00;
P2M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
P4M0 = 0x00;
P4M1 = 0x00;
P5M0 = 0x00;
P5M1 = 0x00;
EA=1;
Timer0_Init(); //定时器0初始化
Timer2_Init(); //定时器2初始化
usart_Init(); //初始化串口定时器1做波特率发生器
EX_INT0=1; //拉高P3.2
IT0=1; //设置INT0的中断类型 (1:仅下降沿 0:上升沿和下降沿)
EX0=1; //使能INT0中断
MotoraRun_Flag=0; //定时器电机A运行标志
MotorbRun_Flag=0; //定时器电机B运行标志
MotorcRun_Flag=0; //定时器电机C运行标志
MotordRun_Flag=0; //定时器电机D运行标志
页:
[1]