STM8应用笔记 STM8单片机笑傲江湖 STM8 MAX485串口自收发程序

STM8 MAX485串口自收发程序

以下资料由微雪电子整理并发布,未经许可不得转载,否则追究相应责任!

软件设计

/*********************************************************************
微 雪 电 子 WaveShare http://www.waveShare.net
目 的: 建立MAX485操作库
目标系统: 基于STM8单片机
应用软件: Cosmic CxSTM8
说 明: 若用于商业用途,请保留此段文字或注明代码来源
深 圳 市 微 雪 电 子 有 限 公 司 保 留 所 有 的 版 权
*********************************************************************/

#include "STM8S207R8.h"

void Init_UART1(void)
{
		UART1_CR1=0x00;
		UART1_CR2=0x00;
		UART1_CR3=0x00;
		
		// 设置波特率,必须注意以下几点:
		//    (1) 必须先写BRR2
		//    (2) BRR1存放的是分频系数的第11位到第4位,
		//    (3) BRR2存放的是分频系数的第15位到第12位,和第3位
		//        到第0位
		// 例如对于波特率位9600时,分频系数=2000000/9600=208
		// 对应的十六进制数为00D0,BBR1=0D,BBR2=00


		UART1_BRR2=0x00;
		UART1_BRR1=0x0d;
		
		UART1_CR2=0x2c;//允许接收,发送,开接收中断
		
}

void UART1_sendchar(u8 data)
{
		while((UART1_SR & 0x80)==0x00);
		UART1_DR=data;
}

@far @interrupt void UART1_Recv_IRQHandler (void)
{
	u8 data;
	data=UART1_DR;
	showLine(6,2,lcd_buffer,"0x%x2",(u16)data);
	return;
}

void Init_UART3(void)
{
		UART3_CR1=0x00;
		UART3_CR2=0x00;
		UART3_CR3=0x00;
		
		// 设置波特率,必须注意以下几点:
		//    (1) 必须先写BRR2
		//    (2) BRR1存放的是分频系数的第11位到第4位,
		//    (3) BRR2存放的是分频系数的第15位到第12位,和第3位
		//        到第0位
		// 例如对于波特率位9600时,分频系数=2000000/9600=208
		// 对应的十六进制数为00D0,BBR1=0D,BBR2=00


		UART3_BRR2=0x00;
		UART3_BRR1=0x0d;
		
		UART3_CR2=0x2c;//允许接收,发送,开接收中断
		
}

void UART3_sendchar(u8 data)
{
		while((UART3_SR & 0x80)==0x00);
		UART3_DR=data;
}

@far @interrupt void UART3_Recv_IRQHandler (void)
{
	u8 data;
	data=UART3_DR;
	showLine(6,2,lcd_buffer,"0x%x2",(u16)data);
	return;
}

main()
{
	u8 tmp=0;
	Init_UART3();
	Init_UART1();
	_asm("rim");
	while(1)
	{
		UART3_sendchar(tmp);
		delay_ms(10);
		tmp++;
		delay_ms(1000);
	}
}

STM8 MAX485串口自收发程序

——