单片机C52 开发一个蜂鸣器播放声音的东西

紫川流风 2012-03-01 01:40:55
我用C52,外接62256,12864R(带字库的液晶)开发了一个用无源蜂鸣器播放声音的东西,现在显示这些基本都正常了。
可是播放音乐时,总是放一放然后程序就飞了,外部中断不管用,但是定时器中断还一直在跑。蜂鸣器也一直在发生,
我调了好久不知道什么问题啊,有人遇到过么?

有知道的给个相关的思路啊。


ps:音乐是用字符串保存的,在播放之前,开一个音高和延时时间的数组,长度为2048.然后将字符串解析成播放的参数。
再将音高送到定时器里面进行播放,时间参数用于控制延时,即播放的时间长度。
就是在播放的过程中,每次都是固定位置,直接就没有变化了,只有一个音不停地响。
...全文
387 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
songw9s8x7 2012-03-10
  • 打赏
  • 举报
回复
贴上代码共同研究啊!
紫川流风 2012-03-05
  • 打赏
  • 举报
回复
目前解决了,int类型的数组存入 62256 会有一定概率错误,我是将 int 改成了两个 unsigned char ,好像还是有点问题,不过情况好多了,然后加上了判断,让错误的值都回归到一个相对正确的范围内。
紫川流风 2012-03-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 jldream110 的回复:]

长度为2048这么大的数组 最好别使用sram 最好定义成xdata 还有认真检查一下逻辑
[/Quote]
我是定义成 xdata 了,另外我发现 char* 这种类型的,编译器分配了 3 个字节,不知道是不是这里的问题。(难道 protues 里面仿真的,不是 3 个字节么)

我再检查下逻辑吧
jldream110 2012-03-04
  • 打赏
  • 举报
回复
长度为2048这么大的数组 最好别使用sram 最好定义成xdata 还有认真检查一下逻辑
紫川流风 2012-03-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lbing7 的回复:]

这样的问题,应该是自身的控制逻辑没有处理好

好好理一下思路,如果很复杂,状态机是一个比较好的工具
[/Quote]
现在发现是 62256 存进去的东西和读出来的不一样,错误就发生在那些读出来的不一样的东西上,可是要怎么解决呢?
是因为读写太快?还是应为硬件问题?
紫川流风 2012-03-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zzxzz 的回复:]

检查一下数据指针是不是溢出了
[/Quote]
我用protues模拟是一点为题没有啊,你说的数据指针溢出,是指针指不到那个地方了,还是说指针指的地方溢出了?
lbing7 2012-03-02
  • 打赏
  • 举报
回复
这样的问题,应该是自身的控制逻辑没有处理好

好好理一下思路,如果很复杂,状态机是一个比较好的工具

zzxgo 2012-03-01
  • 打赏
  • 举报
回复
检查一下数据指针是不是溢出了
HoterSpring 2012-03-01
  • 打赏
  • 举报
回复
你的中断时外部的还是定时器/计时器啊? 还有检查下你的中断启动方式,电平的,跳变沿?
紫川流风 2012-03-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 net_friends 的回复:]

是不是跑飞了 重启动了 而你感觉貌似定时器一直在跑
[/Quote]
是跑飞了,但是没有重新启动,因为按键没有反应,即不能响应外部中断。
而且每次都是同一个地方跑飞。现象都一样。
net_friends 2012-03-01
  • 打赏
  • 举报
回复
是不是跑飞了 重启动了 而你感觉貌似定时器一直在跑

27,373

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧