[51单片机] 这些中断51是否能忙的过来?

[复制链接]
2167|12
 楼主| 彪哥 发表于 2013-9-27 20:49 | 显示全部楼层 |阅读模式
本帖最后由 彪哥 于 2013-9-28 07:57 编辑

各位前辈帮我看看,这么多的中断,是否可行?
系统采用89S52芯片,时钟22.1184MHz,波特率38400Kbps。
1、定时器1用于串口波特率发生器;
2、定时器0工作于可编程计数器,16位自动装载模式,溢出周期由串口接收的数据确定;控制口线输出不同频率脉冲;
3、定时器2用于10分钟~60分钟内定时,定时时间由串口接收的数据确定;
4、外部中断0用于响应一个外部设备,中断程序内做简单判断后,需要将数据送到数据总线。
5 、串口中断
taoest 发表于 2013-9-27 21:09 | 显示全部楼层
第2点有危险,主要看频率范围。其他几个没有压力。
林志财 发表于 2013-9-28 01:06 | 显示全部楼层
果真全部用上,LZ直接实验证明下,
 楼主| 彪哥 发表于 2013-9-28 07:56 | 显示全部楼层
写了个测试程序,直接测试1、2两点,响应不过来,第2点的定时器初值从0x0000~到0xfff都试过,要么串口收到数据后不能回发,要么定时器不工作,咋整?
ayb_ice 发表于 2013-9-28 08:19 | 显示全部楼层
定时器0根本就不支持16位自动重装载方式,将T1与T2交换

其它没有难点,主要是通信速率有点高(当然发送是没有问题的,接收可能有点问题,这要取决于协议了,以及通信是否频繁)

建议T2做波特率,然后用T0即可
ningling_21 发表于 2013-9-28 08:51 | 显示全部楼层
定时器0不能工作于16位自动重装模式...
slotg 发表于 2013-9-28 17:28 | 显示全部楼层
波特率很高, 因此串口中断的优先权要放在最高, 否则会有资料没有收到的情况.
时钟22.1184Mhz, 建议使用1T的51, 减少中断服务程序执行的时间.
 楼主| 彪哥 发表于 2013-9-28 20:26 来自手机 | 显示全部楼层
抱歉,是笔误,T0工作于16位计数方式,中断程序中判断中断次数并重赋初值。写程序测试的时候,发现一旦T0启动,串口中断似乎就不响应了,难道是因为T0不停的进入中断程序,其他中断响应不过来了吗?
 楼主| 彪哥 发表于 2013-9-28 20:29 来自手机 | 显示全部楼层
刚才看S52的手册发现P1.0还可用于可编程定时器输出,类似于8253的功能,能否用这个代替T0的工作呀?
NE5532 发表于 2013-9-29 08:54 | 显示全部楼层
频率发生尽量用自装载定时器来做,不需要占用中断资源。串口波特率比较高,建议看看能不能降低。另外你的串口接收中断是1个字节进一次中断,还是进一次中断查询收一个包?时钟频率不低,但是51的分频太大,建议考虑STC和SILICON之类的低分频51
slotg 发表于 2013-9-29 19:09 | 显示全部楼层
51的串口基本上都没有FIFO, 因此每接收到一个字节就会中断一次, CPU会很忙.
gx_huang 发表于 2013-9-30 12:33 | 显示全部楼层
这么点任务,普通的52芯片绰绰有余。
teddeng 发表于 2013-9-30 15:35 | 显示全部楼层
缺少t0的具体数据,要不系统速度够不够随便就可以算出来的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

44

主题

171

帖子

1

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