打印

想请教一下,PIC的汇编如何更改为C语言

[复制链接]
3180|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qzhui121|  楼主 | 2011-3-5 10:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
*****************************************************
                      LIST P=16F84A,R=DEC         ;定义器件,默认为十进制
                    ;-----------------------------------------------------
                      __CONFIG
                    B'11111111110001';_CP_OFF&_WDT_OFF&_PWRITE_ON&_XT_OSC
                                                                  ;没有代码保护
                                                                  ;看门狗关闭
                                                                  ;上电廷时器开启
                                                                  ;振荡器模式为XT
                    ;-----------------------------------------------------
                    RTCC EQU 01H                ;定义各寄存器
                    PC EQU 02H
                    STATUS EQU 03H
                    C EQU 0
                    RP0 EQU 5
                    ;----------------------
                    PORTA EQU 05H
                    TRISA EQU 05H
                    ;-----------------------
                    SOUNDDELAY1 EQU 10H    ;声音频率变化计数器,从1.8~3.55KHZ
                    FRE_COUNT EQU 11H      ;同一频率的重复次数保存地址
                    FRE_REPEAT EQU 12H   
                    SOUND_TEMP EQU 13H
                    TEMP EQU 14H           ;暂存寄存器
                    S_LOOP EQU 46          ;93-47=46
                    S_MAX EQU 93           ;最低频率1.8K  93*3=280US*2
                    S_MIN EQU 47           ;最高频率3.55K  47*3=140*2
                    S_REPEAT EQU 4         ;同一频率重复次数
                    ;--------------------
                        ORG 0000H
                    MAIN
                        CLRF PORTA         ;初始化IO口
                        BSF STATUS,RP0     ;设置数据寄存器体1
                        MOVLW 0000000B
                        MOVWF TRISA        ;设置RA端口全部为输出
                        BCF STATUS,RP0     ;恢复数据寄存器体0
                    LOOP
                        CALL SOUND200MS    ;调用报警200MS子程序
                        GOTO LOOP         ;反复循环报警
                    ;-------------------------------
                    SOUND200MS
                        MOVLW S_LOOP
                        MOVWF FRE_COUNT     ;46=93-47 最低频率的计数减去最高频率的计数等于频率变化的次数
                    SOUND_LH_LP
                        MOVLW S_REPEAT      ;同一频率重复次数送FRE_REPEAT
                        MOVWF FRE_REPEAT
                        MOVFW FRE_COUNT
                        ADDLW S_MIN        ;计数值加最小值
                        MOVWF TEMP
                    REPEAT0_LP
                        MOVFW TEMP
                        BSF PORTA,0      
                        CALL SOUNDDELAY0   ;廷时W*3US
                        BCF PORTA,0
                        MOVFW TEMP
                        CALL SOUNDDELAY0
                        DECFSZ FRE_REPEAT,1 ;每四次减频率计数一次
                        GOTO REPEAT0_LP
                        DECFSZ FRE_COUNT,1
                        GOTO SOUND_LH_LP
                    SOUND_HL
                        MOVLW S_LOOP
                        MOVWF FRE_COUNT   ;46=93-47
                    SOUND_HL_LP
                        MOVLW S_REPEAT    ;同一频率重复次数送FRE_REPEAT
                        MOVWF FRE_REPEAT
                        MOVFW FRE_COUNT
                        SUBLW S_MAX       ;最大值减计数值
                        MOVWF TEMP
                    REPEAT1_LP
                        MOVFW TEMP
                        BSF PORTA,0
                        CALL SOUNDDELAY0    ;廷时W*3US
                        BCF PORTA,0
                        MOVFW TEMP
                        CALL SOUNDDELAY0
                        DECFSZ FRE_REPEAT,1;四次减频率计数一次
                        GOTO REPEAT1_LP
                        DECFSZ FRE_COUNT,1
                        GOTO SOUND_HL_LP
                    SOUND_END
                        RETLW 0
                    ;------------------------------
                    SOUNDDELAY0
                        MOVWF SOUNDDELAY1     ;廷时W*3US+1US
                    SOUNDDELAYUS_1
                        DECFSZ SOUNDDELAY1,1
                        GOTO SOUNDDELAYUS_1
                        RETLW 0
                    ;------------------------
                        END
想知道一下声音部分用C语言如何,进行更改的。。。想了好久都不明白啊
沙发
qzhui121|  楼主 | 2011-3-5 10:54 | 只看该作者
用c语言如何把这段程序写出来!!1

使用特权

评论回复
板凳
yewuyi| | 2011-3-5 11:12 | 只看该作者
不是说笑话把!?

唯一的办法,找个熟悉C语言的工程师,把设计读懂后用C语言重写一遍.

使用特权

评论回复
地板
gaoyiyiyi| | 2011-3-5 11:15 | 只看该作者
反汇编不难。。。反C语言就有点吓人了。

使用特权

评论回复
5
qzhui121|  楼主 | 2011-3-5 11:18 | 只看该作者
本帖最后由 qzhui121 于 2011-3-5 11:20 编辑

看来只能一个个读程序了,汇编的好难看得懂啊!!看来不是吃这碗饭的!!

使用特权

评论回复
6
XIEYUANBIN| | 2011-3-5 13:57 | 只看该作者
的确,汇编弄好了是神,C编译出来的效率差远了。尤其你这个发声程序,用C不可能编译出精炼的语句

使用特权

评论回复
7
hgjinwei| | 2011-3-5 15:43 | 只看该作者
重点不在于语言。。。 。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

176

帖子

1

粉丝