4291|3

12

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

串口TX0中断的初始化程序错在哪儿? [复制链接]

编程目标:使用AVR128单片机,让TX0以9600的波特率,连续不断地发送数据0X33。

目前存在的问题是:初始化程序中必须加一句UDR0 =0x00,TX0发送中断程序OSUart0TX才被“激活”,才会连续不断地发送0X33。如果去掉这句,一个0X33也发不出。

 

这是为什么呢?

类似现象还有:如果我在中断程序中OSUart0TX加入IF语句,只有条件符合时,UDR0才被赋值,那么,由于不是连续发送数据,结果一个数据也发不出去。给人的感觉是,必须靠前一个发送数据来“激活”,如果有间断,就“死掉”了,就发不了数据了。

 

这是怎么回事呢?

 

紧急求助!!!

 

 

我编的程序如下:

一、初始化程序是:

{
/***********************************初始化串口*********************************/
 //启用针脚第二功能----CCL设计更改单
 DDRE &= ~BIT(0);     //RX0
 DDRE |= BIT(1);     //TX0
 PORTE |= BIT(0);
 PORTE |= BIT(1);
 
    //串口配置----CCL注
    UCSR0B = 0x00;      //初始化之前要关闭中断----  UCSR0A = 0x00;
  UCSR0C = 0x06;      //八位字符,无校验   异步 一位停止位
                             
  UBRR0L = 104;      //波特率:16000000Hz/16分频/104=9615bit/s---- 

 UBRR0H = 0x00;      //set baud rate hi
  
  UCSR0B = 0xD8;      //使能发送、发送中断、接收、接收中断---- 


 UDR0 =0x00;//随便赋值,以激活发送中断----CCL注

}

 

二、TX0发送程序是:

#pragma interrupt_handler OSUart0TX:21
void OSUart0TX(void)

    UDR0 =0x33; //仅供实验 
}

最新回复

程序设置有些问题,我记得以前好像碰到这样的问题,是寄存器设置有问题,  详情 回复 发表于 2012-5-23 15:07
点赞 关注
 

回复
举报

6366

帖子

4912

TA的资源

版主

沙发
 
程序设置有些问题,我记得以前好像碰到这样的问题,是寄存器设置有问题,
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
我又试了试,发现删除程序其他部分,只保留定时器0、TX0的中断及初始化,故障依旧。
可见,不是其他程序导致本问题。

哪位大哥有TX0中断源程序,发我一份?求助!
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

4
 

我找到问题了:

把UCSR0B = 0xD8; 改成UCSR0B = 0xF8;

就可以了。

 

谢谢关心。

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表