找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1683|回复: 0
收起左侧

STM8模拟串口接收,通过IO口接收,调用物理串口发送调试程序

[复制链接]
ID:588163 发表于 2021-3-15 15:38 | 显示全部楼层 |阅读模式
单片机源程序如下:
  1. #include"iostm8s103F3.h"


  2. unsigned char rdata;
  3. unsigned char bit=0;
  4. unsigned char flag1=0;
  5. unsigned char flag2=0;
  6. unsigned char number=0;
  7. unsigned char bit_begin=0;


  8. void RXD_data(void)
  9. {


  10. }

  11. void GPIO_Init(void)
  12. {
  13.      
  14.       PD_DDR &=~(1<<3);
  15.       PD_CR1 |= (1<<3);
  16.       PD_CR2 |= (1<<3);
  17.       
  18.       EXTI_CR1 |=0x00;     
  19. }
  20.      
  21. void CLK_Init(void)
  22. {     
  23.    
  24.       CLK_SWR =0xE1;               
  25.       CLK_CKDIVR=0X00;
  26. }

  27. void Init_UART1(void)
  28. {
  29.       UART1_CR1=0x00;
  30.       UART1_CR2=0x00;
  31.       UART1_CR3=0x00;
  32.       UART1_BRR2=0x0b;
  33.       UART1_BRR1=0x08;
  34.       UART1_CR2 =0x2c;//允许接收,发送,开接收中断
  35.      
  36. }


  37. void TMI2_Init(void)          //定时器2初始化
  38. {
  39.       TIM2_PSCR    = 0x00;               //16分频 1MHZ 1us  
  40.       TIM2_ARRH    = 417 >> 8;           //自动装
  41.       TIM2_ARRL    = 417;      

  42.       TIM2_CNTRH=0x00; //初值
  43.       TIM2_CNTRL=0x00;
  44.       TIM2_EGR=0X01; //允许产生更新标志
  45.       TIM2_CR1 |= 0x80; //开启定时器
  46.       TIM2_IER |= 0x01; //允许中断
  47. }
  48.               
  49.                   
  50. #pragma vector = 8                  // IAR中的中断号,要在STVD中的中断号上加2
  51. __interrupt void RXDInterrupt( void )
  52. {
  53.          
  54.       
  55.          PD_CR2 &= ~( 1 << 3 );      //禁止外部中断
  56.          
  57.          TIM2_CR1 = 0x81;
  58.          flag2=1;              
  59.          
  60. }
  61.                
  62. #pragma vector  = 0x0f
  63. __interrupt void TIM2_UPD_OVF_TRG_BRK_IRQHandler(void)
  64. {
  65.   
  66.        TIM2_SR1&=~(1<<0);//清空标志位
  67.           bit_begin++;
  68.        if(bit_begin>=5)
  69.        {
  70.             number++;
  71.              if(number==2 &&  flag2==1)
  72.              {
  73.                   if( (( PD_IDR & 0x08) == 0x08 )  && (bit<8) )
  74.                   {
  75.                         rdata>>=1;
  76.                         rdata |= 0x80;
  77.                    }
  78.                    else if( (( PD_IDR & 0x08) == 0x00 )  && (bit<8) )
  79.                   {
  80.                         rdata>>=1;
  81.                    }
  82.                    bit++;
  83.                    if( ((PC_IDR & 0x08) == 0x08 ) && (bit==9)  )
  84.                    {
  85.                      
  86.                         bit=0;
  87.                         flag2=0;
  88.                         UART1_DR=rdata;
  89.                        
  90.                         
  91.                     }
  92.              }
  93.             
  94.             if(number==4)
  95.             {
  96.             number=0;
  97.              }
  98.             
  99.             
  100.        }
  101.    
  102.        if(bit_begin==40)
  103.        {   
  104.             bit_begin=0;
  105.             TIM2_CR1 = 0x80;
  106.             PD_CR2 |= ( 1 << 3 );  
  107.             
  108.             
  109.        }
  110.      
  111. }
  112.                   



  113. main()
  114. {
  115.       
  116.         CLK_Init();
  117.         
  118.         TMI2_Init();
  119.         Init_UART1();
  120.         GPIO_Init();
  121.         asm("rim");//开中断,sim为关中断
  122.         while (1);
  123.         
  124. }
复制代码

所有资料51hei提供下载:
STM8模拟串口接收.zip (239.5 KB, 下载次数: 21)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表