![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-14 23:21 |
共 47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,268 会员排行 |
| DOS开发编程 & 发展交流 (开发室) » 跪求把这段汇编转换成C语言!!谢谢啦!!! |
| 可打印版本 2,772 / 5 |
| 第1楼 zj57421017 | 发表于 2010-05-08 19:19 |
| 新手上路 发帖 2 积分 5 | |
|
跪求把这段汇编转换成C语言!!谢谢啦!!! 一,happy birthday 生日快乐歌用21个音阶设计的程序
Void happy birthday()要用C51格式写程序! { setb tr0(tr0=1;) ;启动定时器0 start0: setb p3.3; 30h=0x00; next: mov a,30h mov dptr,#table inc dptr movc a,@a+dptr mov r5,a ;将节拍码存入r5 cjne a,#0ffh,next1 jmp ennd next1: clr c mov a,dpl subb a,#1 mov dpl,a mov a,dph subb a,#0 mov dph,a mov a,30h movc a,@a+dptr jnz sing clr tr0 ;休止符?是,则不发音 jmp d1 ;跳到d1 sing: dec a ;取到的音符码减1 mov 22h,a ;存入(22h) rl a ; 乘2 mov dptr,#table1 ;至table1取相对应的高字节 movc a,@a+dptr mov th0,a ;取到的高字节存入TH0 mov 21h,a ;取到的高字节存入(21h) mov a,22h ;乘2 rl a ;加1 inc a ;至table1取相对应的低位 movc a,@a+dptr mov tl0,a ;取到低字节存入tl0 mov 20h,a ;取到低字节存入(20h) setb tr0 ;启动timer0 d1: call delay ;声音延时 基本单位时间 1/4拍187毫秒 inc 30h ;取简码简指针加1 inc 30h ;取简码简指针加1 jmp next ;取下一个码 ennd: clr tr0 ;停止timer0 ret table: db 12,2,0,1,12,2,13,4,12,4,15,4,14,4,0,4 db 12,2,0,1,12,1,13,4,12,4,16,4,15,4,0,4 db 12,2,0,1,12,1,19,4,17,4,15,4,14,4,13,4 db 18,2,0,1,18,1,17,4,15,4,16,4,15,4,0,4 db 12,2,0,1,12,1,13,4,12,4,15,4,14,4,0,4 db 12,2,0,1,12,1,13,4,12,4,16,4,15,4,0,4 db 12,2,0,1,12,1,19,4,17,4,15,4,14,4,13,4 db 18,2,0,1,15,1,17,4,15,4,16,4,15,4,0,4,0ffh,0ffh } |
|
| 第2楼 070 | 发表于 2010-05-10 17:14 |
| 高级用户 发帖 218 积分 663 来自 福建 | |
|
我乱写了一个,应该是有错误的,没测试,只供参考
应该适合turboc 应该要把数组里的值再做一下运算,不然这么低的频率应该听不到。。。 |
|
| 第3楼 523066680 | 发表于 2010-05-11 22:31 |
| 银牌会员 发帖 1,133 积分 2,361 | |
|
蜂鸣器发音吗??
|
|
| 第4楼 netwinxp | 发表于 2010-05-30 16:56 |
| 高级用户 发帖 366 积分 741 | |
|
LZ是MCS51单片机的程序,当然不能用基于X86的Turbo C,2楼的程序当然不行。不知LZ所用的编译器可是Keil C?由于C51系列兼容单片机程序存储器容量通常很小(AT89C51为4KB),而C语言的编译效率并不高,在C51使用C语言开发通常意味着要增加不少硬件成本,个人强力推荐在低端单片机开发直接使用汇编。
另,单片机开发要附上电路图(起码要简图),否则很难理解LZ的用意。 |
|
| 第5楼 cnch | 发表于 2010-09-05 15:06 |
| 中级用户 发帖 70 积分 326 | |
|
LZ的这段程序只需稍加改动,应该可以嵌入到Keil C51里的,就象TC一样,它也支持嵌入汇编;另外,你可以学习一下Keil C51,如:象启动定时器0只需写入TR0=1即可,等等....不一一例举.
|
|
| 第6楼 cobras | 发表于 2010-09-10 17:43 |
| 新手上路 发帖 5 积分 14 | |
|
c51没写过,不过x86还可以.作者的代码差table1和delay.
下面代码已经将table1补全. |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |