欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

i/o口模拟的串口怎么应用

更新时间: 2014-01-05 03:14:31 责任编辑: Author_N1

 

i/o口模拟的串口如何应用?
用i/o口模拟的串口怎么用?


void delay_bps()
{
unsigned char i; 
for (i = 0; i < 29; i++); 
_nop_();
_nop_();
} //波特率9600 模拟一个9600波特率

unsigned char getchar2() //模拟接收一个字节数据
{
while (RXD1);
    _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
    delay_bps();
    SBUF1_bit0 = RXD1; //0       
    delay_bps();
    SBUF1_bit1 = RXD1; //1       
    delay_bps();
    SBUF1_bit2 = RXD1; //2       
    delay_bps();
    SBUF1_bit3 = RXD1; //3       
    delay_bps();
    SBUF1_bit4 = RXD1; //4       
    delay_bps();
    SBUF1_bit5 = RXD1; //5       
    delay_bps();
    SBUF1_bit6 = RXD1; //6       
    delay_bps();
    SBUF1_bit7 = RXD1; //7       
 delay_bps();
    return(SBUF1) ;      //返回读取的数据
}

void  putchar2(uchar input)    //模拟发送一个字节数据
{
    SBUF1 = input;
    TXD1 = 0;  //起始位
    delay_bps();    
    TXD1 = SBUF1_bit0;  //0
    delay_bps();    
    TXD1 = SBUF1_bit1;  //1
    delay_bps();    
    TXD1 = SBUF1_bit2;  //2
    delay_bps();    
    TXD1 = SBUF1_bit3;  //3
    delay_bps();    
    TXD1 = SBUF1_bit4;  //4
    delay_bps();    
    TXD1 = SBUF1_bit5;  //5
    delay_bps();    
    TXD1 = SBUF1_bit6;  //6
    delay_bps();    
    TXD1 = SBUF1_bit7;  //7
    delay_bps();    
    TXD1 = 1;       //停止位
    delay_bps();    

按照昨天版主说的方法

void SPI_Init2(void)   //  模拟的串口初始化
{

 TXD1=1;
 RXD1=1;
}

我在main函数里 void main(void)
 {
     SPI_Int2();
      Delay_ms( 1000);
       putchar2( s3 );
        Delay_ms( 1000);
 Delay_ms( 1000);
 Delay_ms( 1000);
 Delay_ms( 1000);
 Delay_ms( 1000);
 Delay_ms( 1000);
 Delay_ms( 1000);
 Delay_ms( 1000);
 Delay_ms( 1000);



Delay_ms()是我定义的延时函数
我想用putchar2输出我的字符串,但是我我在串口精灵上压根看不到。。有人指点一下么。。
--参考方法--
原因很多
1. TXD,RXD接反了
2. 波特率误差太大
3. MAX232没有或者接错线导致没工作
--参考方法--
有条件的话最好接个示波器看你的TXD脚的输出是否有,是否与你想要发送的一致,再看看你发送的每一位的位宽是否是104us(9600波特率),先看是否发送正确再找接收端的原因。
--参考方法--
不管波特率是否正确,如果TXD有输出,在串口精灵上应该有数据,串口精灵必须采用16进制的方式读取数据。如果有数据了,但数据不正确,就是波特率不对,最好用示波器一边看波形,一边调整参数。

--参考方法--
如果你用的接口不是标准的串口的话,你就需要通过I/O口按位发送来模拟了!
--参考方法--
我提一点意见:如果要用IO模拟串口,死延时的确是一种方法,但却是最不实用的一种,建议用中断来按位发,这样不仅误差小,更重要的是不占用单片机资源!
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:14:31
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/19952/
本文WWW.DOC100.NET DOC100.NET版权所有。