寄存器操作STM8L串口中断

2019-07-19 21:05发布

本帖最后由 紫气东升 于 2016-8-25 08:16 编辑

#include <stm8l052c6.h>
#include <stdio.h>

/*********函数声明********/
void delay(unsigned int time);
void IO_Init(void);
void USART1_Init(void);
void CLK_Init(void);

/*********主函数********/
main()
  {
    USART1_Init();       //通用串行接口USART1初始化
    IO_Init();           //IO端口初始化
      CLK_Init();          //时钟初始化
      _asm("rim");         //开总中断
        while(1)
      {
         PD_ODR=0x02;            //PD1(红)亮
         delay(65535);        //延时1s
       PD_ODR=0x00;         //PD1(红)灭
       delay(65535);        //延时1s
      }
        
  }

    /*********CLK初始化*********/
    void CLK_Init(void)
        {
      CLK_CKDIVR=0x03;    //对HSI进8分频16MHZ/8=2MHZ
            
        }

    /******USART1初始化*********/
   void USART1_Init(void)
      {
     USART1_CR1=0x00;    //设置字长,8位数据位
     USART1_CR2=0x0c;    //使能发送、接收;
     USART1_CR3=0x00;    //1位停止位
     USART1_BRR2=0x00;   //2MHZ时钟下9600波特率
     USART1_BRR1=0x0d;
         //USART1_SR=0x40;     //TC位置1
      }

    /*********GPIO初始化*********/
     void IO_Init(void)
    {
     PD_ODR=0x00;         //初始使小灯全灭
     PD_DDR=0x03;         //设置PD端口为输出模式
     PD_CR1=0x03;         //设置PD端口为推挽输出
     PD_CR2=0x00;         //设置PD端口为低速输出
      }

/******中断服务程序********/
@far @interrupt void USART_Rx_IRQHandler(void)
  {
   if((USART1_SR & 0x20)==0)         
    {                        
         USART1_DR=0xB6;            
         PD_ODR=0x01;
      }   
        if((USART1_SR & 0x60)==0)         
    {                        
         USART1_DR=0xB6;            
      }   
  }        

/********延时函数**********/
void delay(unsigned int time)
{
   while(time--);
}
这是我用寄存器写的程序,想搞个串口中断的,没想到怎么试都不成功,有哪位高手会的请教教我,不胜感激!

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。