标题:
STM8模拟串口接收,通过IO口接收,调用物理串口发送调试程序
[打印本页]
作者:
老K。
时间:
2021-3-15 15:38
标题:
STM8模拟串口接收,通过IO口接收,调用物理串口发送调试程序
单片机源程序如下:
#include"iostm8s103F3.h"
unsigned char rdata;
unsigned char bit=0;
unsigned char flag1=0;
unsigned char flag2=0;
unsigned char number=0;
unsigned char bit_begin=0;
void RXD_data(void)
{
}
void GPIO_Init(void)
{
PD_DDR &=~(1<<3);
PD_CR1 |= (1<<3);
PD_CR2 |= (1<<3);
EXTI_CR1 |=0x00;
}
void CLK_Init(void)
{
CLK_SWR =0xE1;
CLK_CKDIVR=0X00;
}
void Init_UART1(void)
{
UART1_CR1=0x00;
UART1_CR2=0x00;
UART1_CR3=0x00;
UART1_BRR2=0x0b;
UART1_BRR1=0x08;
UART1_CR2 =0x2c;//允许接收,发送,开接收中断
}
void TMI2_Init(void) //定时器2初始化
{
TIM2_PSCR = 0x00; //16分频 1MHZ 1us
TIM2_ARRH = 417 >> 8; //自动装
TIM2_ARRL = 417;
TIM2_CNTRH=0x00; //初值
TIM2_CNTRL=0x00;
TIM2_EGR=0X01; //允许产生更新标志
TIM2_CR1 |= 0x80; //开启定时器
TIM2_IER |= 0x01; //允许中断
}
#pragma vector = 8 // IAR中的中断号,要在STVD中的中断号上加2
__interrupt void RXDInterrupt( void )
{
PD_CR2 &= ~( 1 << 3 ); //禁止外部中断
TIM2_CR1 = 0x81;
flag2=1;
}
#pragma vector = 0x0f
__interrupt void TIM2_UPD_OVF_TRG_BRK_IRQHandler(void)
{
TIM2_SR1&=~(1<<0);//清空标志位
bit_begin++;
if(bit_begin>=5)
{
number++;
if(number==2 && flag2==1)
{
if( (( PD_IDR & 0x08) == 0x08 ) && (bit<8) )
{
rdata>>=1;
rdata |= 0x80;
}
else if( (( PD_IDR & 0x08) == 0x00 ) && (bit<8) )
{
rdata>>=1;
}
bit++;
if( ((PC_IDR & 0x08) == 0x08 ) && (bit==9) )
{
bit=0;
flag2=0;
UART1_DR=rdata;
}
}
if(number==4)
{
number=0;
}
}
if(bit_begin==40)
{
bit_begin=0;
TIM2_CR1 = 0x80;
PD_CR2 |= ( 1 << 3 );
}
}
main()
{
CLK_Init();
TMI2_Init();
Init_UART1();
GPIO_Init();
asm("rim");//开中断,sim为关中断
while (1);
}
复制代码
所有资料51hei提供下载:
STM8模拟串口接收.zip
(239.5 KB, 下载次数: 21)
2021-3-15 15:37 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1