⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c.bak

📁 PIC单片机模拟串口 11.0592时钟 支持2400波特及以下稳定收发 一位起始
💻 BAK
字号:
#include <stdio.h>
#include <pic.h>
#include "usart.h"
#include "user_base_def.h"

#include "m_usart.h"
#include "gobal_ram.h"



void delay(uint n)
{
	uint  i;
	uchar j;
	for(i=0; i<n; i++)
	{
		for(j=0; j<255; j++);
	}
}


////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
void main(void)
{

	char i=0;

	//
	init_comms();

	//
	Init_m_usart(0, 0);	
	
	//
	PEIE=1;
	GIE=1;

	while(1)
	{
		m_putch(i++);
		delay(1000);
	}
}
//-----------------------------------------------------------------

static void interrupt INT_PROC(void)
{
	//时钟1中断
	if(TMR1IF)
	{
		//重入
		TMR1IF=0;
		TMR1H=m_BT_reLoad_H;
		TMR1L=m_BT_reLoad_L;

		//发送时序
		if(m_TX_enble)
		{
			if(0==p_m_TXBUF) 
			{
				TX_Line=0;
				p_m_TXBUF++;
			}
			else if(p_m_TXBUF<9)
			{
				if((1<<(p_m_TXBUF-1))&m_TXBUF)
				{
					TX_Line=1;
				}
				else
				{
					TX_Line=0;
				}
				p_m_TXBUF++;				
			}
			else
			{
				//是否要发第九位
				if(m_8_OR_9)
				{
					if(9==p_m_TXBUF)
					{
						TX_Line=m_TX_BIT9;
					}
					else
					{
						//停止
						TX_Line=1;
						m_TX_enble=0;

					}
				}
				else
				{
					//停止
					TX_Line=1;
					m_TX_enble=0;

				}
			}
		}

		//接收时序
		if(m_RX_enble)
		{
			if(0==p_m_RXBUF)
			{
				//起始位的时间已过开始接收数据
				if(RX_Line)	
				{
					m_RXBUF|=0x01;		
				}
				else
				{
					m_RXBUF&=0xfe;	
				}
				//
				p_m_TXBUF++;
			}
			else if(p_m_RXBUF<8)
			{
				if(RX_Line)	
				{
					m_RXBUF|=(1<<p_m_TXBUF);		
				}
				else
				{
					m_RXBUF&=!(1<<p_m_TXBUF);	
				}
				//
				p_m_TXBUF++;
			}
			else
			{
				//是否要收第九位
				if(m_8_OR_9)
				{
					m_RX_BIT9=RX_Line;
				}


					//接收结束
					m_RX_enble=0;
					p_m_RXBUF=0;
					//开检测中断
					RBIE=1;
					m_RCIF=1;		//模拟接收到新数据标志

				
			}
		}
	}
	//=============================================================

	//模拟端口接收中断起始
	if(RBIF)
	{
		if(0==p_m_RXBUF)
		{
			if(!RX_Line)
			{
				//起始位到了
				m_RX_enble=1;

				//重入模拟波特率
				TMR1IF=0;
				TMR1H=m_BT_reLoad_H;
				TMR1L=m_BT_reLoad_L;

				//关检测中断
				RBIE=0;
			}
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -