[请教]翻船于单片机串口!

[复制链接]
3211|15
 楼主| Ice_River 发表于 2008-4-28 17:23 | 显示全部楼层 |阅读模式
MCU  AT89C2051  串口通讯! 晶体3.579545  初始化程序如下:
 
void    Uart_init(void)
{
    IE=0;
    TMOD = 0x21;        
                       
    TH1 = 0xF0;            //定时器1  波特率1200   
    TL1 = 0xF0;
    
    SCON =  0x50;        // 设定串行口工作方式 模式1 允许接收
    PCON |= 0x80;
    IE  |= 0x90;    
    TR1 = 1;            // 启动定时器1
    EA=1;
}
void  Uart_ISR()interrupt 4 using 2
{
   //中断处理
}
Keil 仿真串口中断没有问题,向上位机发数据也能收到,就是烧写下去后中断不能响应! 如有遇到类似情况的兄弟 还请指教!
emailli 发表于 2008-4-28 19:49 | 显示全部楼层

using

void  Uart_ISR()interrupt 4 using 2


你把函数修改一下

void  Uart_ISR(void)interrupt 4 

我估计是错误使用寄存器组导致。

你用keil编译器自动给你分配就可以了

没有必要自己分配
mr.king 发表于 2008-4-28 20:17 | 显示全部楼层

估计你2051根本没工作,烧个点灯的程序看

 楼主| Ice_River 发表于 2008-4-28 22:51 | 显示全部楼层

re:

二楼的方法试验过了!2051的串口中断有什么不同吗?
三楼  IO口有6个灯 正常的闪动,定时器中断也正常。
奇怪的是 原来的汇编发下去的信息就能回数据,C语言写的就不行。
后来做试验,干脆近中断就点灯,没点亮!郁闷!
mr.king 发表于 2008-4-29 06:21 | 显示全部楼层

好象我算出波特1864

gx_huang 发表于 2008-4-29 08:32 | 显示全部楼层

用电脑超级终端调试

先发数据到计算机,看有没有收到,可以判断波特率等参数是否正确。
如果有示波器,可以看看发0X55时的波形。
xwj 发表于 2008-4-29 08:53 | 显示全部楼层

换个IC试试

波特率=1165.2164713541666666666666666667,正确
定时器1运行,中断入口正确

不应该不中断的
computer00 发表于 2008-4-29 10:00 | 显示全部楼层

估计是编译器选项里面将FLASH地址搞错了……

lbx_00 发表于 2008-4-29 14:09 | 显示全部楼层

串口发送0aah或55h

确认一下波特率
 楼主| Ice_River 发表于 2008-4-29 23:15 | 显示全部楼层

十分感谢各位的回复!

估计是编译器选项里面将FLASH地址搞错了……
请教00 是那里设置呢?

回  mr.king  波特率算了一下!没有错,虽然有误差!用单片机向计算机发能收到!

下次去的时候按照大家的方法试验!
十分感谢各位!
computer00 发表于 2008-4-29 23:20 | 显示全部楼层

在工程选项的target标签下面,将USE ON CHIP ROM勾上~~~

baobei 发表于 2008-4-30 15:40 | 显示全部楼层

楼主的问题我也遇到了,正在郁闷呢!

楼主的问题我也遇到了,正在郁闷呢!
单片机正常工作,串口查询发送数据正确,中断发送数据也正确,查询接收数据也正确,中断接收数据有问题!根本进不了中断!!!后来发现外部中断INT0和INT1也不能进入!郁闷啊!
先按照00的办法试试!
baobei 发表于 2008-4-30 15:49 | 显示全部楼层

试过了,不解决问题!

walnutcy 发表于 2008-4-30 20:43 | 显示全部楼层

把你的hex文件反汇编,看看中断等入口地址对不对,

walnutcy 发表于 2008-4-30 20:44 | 显示全部楼层

据你描述,你的汇编应该不错,软件也不大,找出问题应该不难,

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

本版积分规则

149

主题

1882

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部