本帖最后由 紫气东升 于 2016-9-7 13:31 编辑
#include <stm8l052c6.h>
#include <stdio.h>
/*********函数声明********/
void delay(unsigned int time);
void TIM3_Init(void);
void GPIO_Init(void);
void USART1_Init(void);
/*********主函数********/
main()
{
CLK_PCKENR1=0xff;
CLK_CKDIVR=0x00; //对HSI进行1分频(2MHZ/1=2MHZ)
USART1_Init(); //通用串行接口USART1初始化
GPIO_Init(); //GPIO端口初始化
TIM3_Init(); //定时器初始化
PD_DDR=0x03; //设置PD端口为输出模式
PD_CR1=0x03; //设置PD端口为推挽输出
PD_CR2=0x00; //设置PD端口为低速输出
_asm("rim"); //开总中断
while(1)
{
PD_ODR=0x02; //PD1(红)亮
delay(65535); //延时1s
PD_ODR=0x00; //PD1(红)灭
delay(65535); //延时1s
}
}
/******USART初始化*********/
void USART1_Init(void)
{
USART1_CR1=0x00; //设置字长,8位数据位
USART1_CR2=0x0c; //使能发送、接收;
USART1_CR3=0x00; //1位停止位
USART1_BRR2=0x00; //2MHZ下设置波特率为9600
USART1_BRR1=0x0D;
}
/*********GPIO初始化*********/
void GPIO_Init(void)
{
PD_ODR=0x00; //初始使小灯全灭
PD_DDR=0x03; //设置PD端口为输出模式
PD_CR1=0x03; //设置PD端口为推挽输出
PD_CR2=0x00; //设置PD端口为低速输出
}
/*********TIM3初始化*********/
void TIM3_Init(void)
{
TIM3_PSCR=0X03; //预分频值2MHZ/(2^3)=250KHZ
TIM3_ARR=25000; //自动重载值,1/250k X 25000=0.1s
TIM3_CNTR=25000; //计数器初始值给12500
TIM3_IER=0x01; //开定时器中断
TIM3_CR1=0x01; //开始计时
}
/********延时函数**********/
void delay(unsigned int time)
{
while(time--);
}
/******TIM3中断服务程序********/
@far @interrupt void TIM3_IRQHandler(void)
{
if(!(USART1_SR & 0x80)) //数据是否发送 {
USART1_DR=0xB6; //要发送的数据
if((USART1_SR & 0x20) ==0) //发送是否完成
{
USART1_DR=0xB6; //要接收的数据
PD_ODR=0x01; //接收到数据PD0(黄)亮
}
}
_asm("sim"); //结束总中断
}
stm8_interrupt_vector.c中的程序,首先添加一句:
@far @interrupt extern void TIM3_IRQHandler(void);
然后修改
{0x82,NonHandledInterrupt},/*irp15*/
为
{0x82,TIM3_IRQHandler},/*irp15*/
|