STM8 MAX485串口自收发程序

来自丢石头百科
Admin讨论 | 贡献2021年6月18日 (五) 18:01的版本 (文本替换 - 替换“http://{{”为“https://{{”)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
<tbody></tbody>
软件设计

/********************************************************************* 微 雪 电 子 WaveShare <a class="Blue_2_12px_" href="https://wiki.diustou.com/" style="color: rgb(7, 66, 184);">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
                                                                                                                                            		// 对应的十六进制数为00D0BBR1=0D,BBR2=00
                                                                                                                                            
                                                                                                                                            
                                                                                                                                            		UART1_BRR2=0x00;
                                                                                                                                            		UART1_BRR1=0x0d;
                                                                                                                                            		
                                                                                                                                            		UART1_CR2=0x2c;//允许接收,发送,开接收中断
                                                                                                                                            		
                                                                                                                                            }
                                                                                                                                            
                                                                                                                                            void UART1_sendchar(u8 data)
                                                                                                                                            {
                                                                                                                                            		while((UART1_SR &amp; 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
                                                                                                                                            		// 对应的十六进制数为00D0BBR1=0D,BBR2=00
                                                                                                                                            
                                                                                                                                            
                                                                                                                                            		UART3_BRR2=0x00;
                                                                                                                                            		UART3_BRR1=0x0d;
                                                                                                                                            		
                                                                                                                                            		UART3_CR2=0x2c;//允许接收,发送,开接收中断
                                                                                                                                            		
                                                                                                                                            }
                                                                                                                                            
                                                                                                                                            void UART3_sendchar(u8 data)
                                                                                                                                            {
                                                                                                                                            		while((UART3_SR &amp; 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);
                                                                                                                                            	}
                                                                                                                                            }