UART协议 
这里只是简单的让没有UART接口的单片机使用UART去打印log,所以没有深入的研究具体的协议,常用的就是9600波特率,8位数据位,没有校验位,停止位是1位,即1s传输9600bit,也就是每一位占据1000000us/9600 ≈ 104us  
   
  
测试延时 
首先需要根据不同的单片机去确定不同的延时时间,如果是定时器就另外说  
除非是写汇编,不然不要去计算,写C语言,使用指令去计算时间,不同的编译器把C指令转换成汇编指令后得到的结果可能不一样,所以这里不算,直接测试  
void main(void)
{
	while(1)
	{
		TXD = 0;
		Delay(100);
        TXD = 1;
		Delay(100);
        TXD = 0;
        Delay(200);
        TXD = 1;
        Delay(10000);
	}
}
void Delay(uint16 delay)
{
	while(delay--);			
}
  
假设上电IO置位高电平,那么IO低延时100个单位,IO高延时100个单位,然后IO低延时200单位,一段高的长延时,我们需要做的是比较高100单位和低200单位的差距  
高100单位延时:     
低200单位延时:     
那么得到的是100单位之间差值为149.6us - 75.6us = 74.0us,可以计算出每一个单位之间的差值74.0us / 100 = 0.74us  
为什么不直接计算器100单位的时间,75.6us / 100 = 0.756us呢?因为这个时间包含了函数的调用时间,不准确  
那么104us需要多少单位呢?104us / 0.74us ≈ 141单位  
  
写一个字节的代码 
void WriteByte(uint8 dat)
{
	uint8 i=8;
	TXD = 0; 				
	Delay2cp(141);
	while(i--)
	{
		TXD = dat& 0x01;	
		Delay(141);
		dat = dat>> 1;
	}
	
	TXD = 1; 				
	Delay(141);
}
  
那么IO模拟UART就完成了 
                
                
                
        
    
 
 |