Atmega128 + CH376串口方式问题记录

来源:互联网 发布:域名top区别 编辑:程序博客网 时间:2024/06/15 05:00

最近在mega128上调试CH376, 用串口方式不要问什么,节省资源

经过将近一周时间,终于调试成功,这里记录一下过程中出现的一个很头疼的问题。  

过程大概是这样, 首先初始化376,接着通过中断(376自带的 INT0 中断管脚)等待U盘插入(我这里主要是管理U盘的数据),然后检查磁盘状态------检测磁盘就绪 

接着就是就是数据交换过程~~检测磁盘剩余容量

再往下进行打开文件(TXT格式的, 这个步骤是检查 要准备写入的文件是否存在,如果存在就删除,否则就创建文件, 不懂得可以看生产厂家提供的历程(C51的),这里重点说的不是它)时,问题出现了,检测返回的 返回码是0x3A ,再往下 无论进行哪一步都返回 0x00,这时我就乱了,因为前几步什么初始化、检查容量都过了,应该说往下就没问题了,可问题就是出现了,接下来好几天,无论是查资料,上网,百度,几乎很少用 mega128 串口方式的,有也是 并口方式(有可能我查的还不彻底,不过按我的方式,能查的全查了)  ,后来又该用并口的,可是我的手里的板子已经做好了,再改就很费劲了,不过经过简单的修改,改成并口的,更乱了,由于没调通、时间紧就放弃了(等过一段有时间再继续弄并口的)。

      最终给ch376厂家打电话,技术支持说 在写命令(代码一会在下面写)过程中 清一下128的串口缓存!

     接着又挠头了, 怎么清缓存??C51里 有TI = 0; RI = 0; 这两个标志位 可是128的 串口发送时 没有这么麻烦啊,直接就是

 

    while((UCSR1A&(1<<UDRE1)) == 0)     // Wait if a byte is being transmitted    {        ;    }    UDR1 = data; 

     

我想用过128的或者其他类似型号的单片机都是这样写的吧?  

   接着又是上网查,百度 ,各种关于mega系列的串口 发送写法,都是一样

  最后还是看看128芯片手册吧,试了好几个标志位都不是,最终看到 RXENn这个标志位这个是USART接收使能控制位,也就是说它置一后才会启动 USARTn发送(简单的说明)。 接着往下最重要的一句话:  当禁止时接收器将刷新接收缓冲器,并是FEn、DORn及PEn标志位无效。

  往下就抱着试试的心态试了下,没想到居然通了! 欣喜如狂啊!接着剩下的全通了。

  到此为止,由于其他任务,就没有继续再深往下研究,而且这个方法是不是最有效或者最简洁的,暂时不研究了,等有时间再研究,仅在此做一下笔记。

  本人技术不高,有说的不合理的 或 不对的地方 请大神们多包涵或支出并更正错误,谢谢!!   

   Uart0_send(SER_SYNC_CODE1);// 启动操作的第1个串口同步码 Uart0_send(SER_SYNC_CODE2);// 启动操作的第2个串口同步码 UCSR0B &= ~(1<<RXEN0);    //  此句很重要  目的是清空接收缓存器UCSR0B |= (1<<RXEN0);     // 不知道这种方法是不是最直接的,不过暂时就这么用Uart0_send(mCmd);          // 串口输出命令 




0 0