}
ms--;
}
}
void MAX485_Init(void) //485初始化
{
PA_DDR |=0x06;
PA_CR1 |=0x06;
PA_CR2 =0x00;
DE=1;
RE=0;
}
void CLK_Init(void) //时钟初始化
{
CLK_CKDIVR = 0x11; //fMASTER = 4MHZ,fCPU=fMASTER = 2MHZ
}
void TIM_Init(void) //定时器初始化
{
TIM2_CCMR1 = TIM2_CCMR1 | 0x70;
TIM2_CCMR2 = TIM2_CCMR2 | 0x70;
TIM2_CCMR3 = TIM2_CCMR3 | 0x70;//TIM2 3个通道PWM模式2输出
TIM2_CCER1 = TIM2_CCER1 | 0x33;//输出低电平有效
TIM2_CCER2 = TIM2_CCER2 | 0x03;
TIM2_ARRH = 0;
TIM2_ARRL = 0xFF;
TIM2_CCR1H = 0; //
TIM2_CCR1L = 0;
TIM2_CCR2H = 0;
TIM2_CCR2L = 0;
TIM2_CCR3H = 0;
TIM2_CCR3L = 0;
TIM2_PSCR = 0; //
TIM2_CR1 = TIM2_CR1 | 0x01;// 启动计数
}
void UART1_Init(void) //UART1初始化
{
UART1_CR1 = 0x00; //
UART1_CR2 = 0x00; //
UART1_CR3 = 0x00;
UART1_BRR2 = 0x00;
UART1_BRR1 = 0x0D; // 对应的波特率为4000000/208=19200(00D0)
UART1_CR2 |= 0x2C; // 允许发送接收,接收中断使能
}
void UART1_sendchar(unsigned char c) //UART1发送字符
{
while((UART1_SR & 0x80)==0x00);
UART1_DR=c;
}
main()
{
PWM=0x00;
MAX485_Init();
CLK_Init();
UART1_Init();
TIM_Init();
_asm("rim");//开中断,sim为关中断
while (1)
{
UART1_sendchar(0xEF);//
TIM2_CCR1H = 0;
TIM2_CCR1L = PWM;
TIM2_CCR2H = 0;
TIM2_CCR2L = PWM;
TIM2_CCR3H = 0;
TIM2_CCR3L = PWM;
DelayMS(5);
}
}
@far @interrupt void UART1_Recv_IRQHandler (void) //中断接收
{
unsigned char ch;
ch=UART1_DR;
PWM=ch;
return;
}
|