打印
[国产单片机]

观匠人EMC使用技巧后,写一些自己用过的,以抛砖引玉

[复制链接]
3409|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
谈的元|  楼主 | 2008-6-7 20:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
EMC  使用回忆录

使用EMC汇编软件,挖掘了不少新功能,达到大大简化的目的。

1.汇编软件有计算能力。可以帮我们进行数的转换。

比如:
 
 S1 == 123456
 S1_H==S1/256
 S1_L =S1-S1_H*256
 MOV  A,@S1_H
 MOV  0X20,A
 MOV  A,@S1_L
 MOV  0X21,A;0X20,0X21就代表了123456,修改0X20,0X21代表的数据就只需要修改S1 后的值就可以了 
2.常数写为复合表达式
 有时候需要修改某些参数,比如增加,减少,可以这样写:
 MOV  A,@(20+2*5)/3+1
 MOV  A,@111^222
 retl  0xff-6;这样就避免算来算去。
;;;;;;;;;;;;;;;;;;;;;;;;;;;
3.VAR的妙用:
   
1.生成有一个函数表格

生成一个奇数表格:
   从11开始,共10个
    RETL   11
    RETL   13
    ...
    RETL   21
用以下等效;
  
 MMM  VAR   11
      MRETL   MMM
      MRETL   MMM
      MRETL   MMM
      ...

MRETL  MACRO  X

       RETL   X
       MMM  VAR  MMM+2
       ENDM 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
按照公式:Y=100/X生成表格,X从1到100;
          RETL   100
          RETL   50
          RETL   33
          RETL   25
           ...
          RETL   1
用以下等效:
  
 TTT  VAR   11
      MRETL   TTT
      MRETL   TTT
      MRETL   TTT
      ...
UUU  VAR  1
MRETL  MACRO  X

       RETL   100/UUU
       UUU  VAR  UUU+1
       ENDM 
实际的例子,采集一个电阻,
                     假设:
                        当为10欧的时候,我们转换后需要的数据为0
                        当为70欧的时候,我们转换后需要的数据为100
                        当为280欧的时候,我们转换后需要的数据为230
                        当电阻为80欧,利用区间插值得到。

我们用5伏100欧电阻对其采样。理论的AD=255*R/(100+R),即R=100*AD/(255-AD);

于是可以这样:
        
        RCJ VAR 100 
        R VAR RCJ*AD/(255-AD)
        AD  VAR  0;;初值
        mretl  ad;0
    mretl  ad;1
    mretl  ad;2
        mretl  ad;3
        mretl  ad;4
mretl   macro  x
        if  R<10
WWW  VAR   0;
        ELSEIF R<70
WWW  VAR   (100-0)/(70-10)(R-10)+0
        ELSEIF R<=280

WWW  VAR   (230-100)/(280-70)(R-70)+100
       ELSE  
WWW  VAR  255
      ENDIF

    RETL  WWW
    AD VAR  AD+1
ENDM 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
当你的采样电阻用100变为150时,你只需要改变
   RCJ  VAR  150;;
总之利用VAR可以搞出很多好的东西出来。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;








          

相关帖子

沙发
McuPlayer| | 2008-6-7 21:19 | 只看该作者

好贴就该顶

使用特权

评论回复
板凳
谈的元|  楼主 | 2008-6-7 21:22 | 只看该作者

一个有用的宏定义 NNOP 126(延时126个NOP)

;##########################
NNOP   macro   n  ;;;等效 N个 NOP 的时间
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
         if      n == 1;
            nop
         elseif  n == 2
           jmp $+1
         elseif  n == 3
           jmp $+1
           nop
         elseif  n == 4
          call  dly4
         elseif n == 5
           call  dly4
           nop
         elseif n == 6
           call  dly4
           jmp $+1
         elseif n == 7
           call  dly4
           jmp $+1
           nop
         elseif  n<= 3*255+1;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
nj1   var   n-2-2-1;;call ,mov  a,@xx;
tz1   var   nj1/3
tz2   var   tz1*3
tty   var   nj1-tz2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        mov   a,@tz1
        call  dlyn;;3
        if     tty == 1
        nop
        elseif  tty == 2
        jmp $+1
        endif
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    else  
     message "定时溢出"      
     message "max_ys_us== 3*255+1==766"   
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    endif
    endm
  ;;#################

有时要延一定时间。老是去算,很麻烦。这样就简单了。想起当初,真是低级书写呀

使用特权

评论回复
地板
xwj| | 2008-6-7 21:34 | 只看该作者

呵呵,我宁愿用“低级书写”,而不喜欢你这种太高级的方

可读性太差太差了,
而且到处jmp、call,都不知是否会被预处理,是否会被优化...

而且语句太依赖于编译器哦

使用特权

评论回复
5
谈的元|  楼主 | 2008-6-7 21:54 | 只看该作者

条件汇编,只选其1


当你对时序比较严格时,又比较多时,你就知道引用的安逸了。而且不会多一条代码。(比其“低级书写”)

原有用的人看到

愿看到的人有用

使用特权

评论回复
6
谈的元|  楼主 | 2008-6-7 22:10 | 只看该作者

补充一点,小X说的对,该宏适合EMC,其他不知道

其实也是 VAR 的作用

使用特权

评论回复
7
谈的元|  楼主 | 2008-6-8 19:55 | 只看该作者

呵呵,怎么也混了条红裤子,谢谢!目的之二:玉在哪里?

使用特权

评论回复
8
程序匠人| | 2008-6-8 21:54 | 只看该作者

谈的元,可有兴趣当版主?

使用特权

评论回复
9
谈的元|  楼主 | 2008-6-9 22:10 | 只看该作者

呵呵,谢谢,自己绝对没有能力与时间,只是偶尔空了灌一

呵呵

使用特权

评论回复
10
杨成壮| | 2008-6-21 17:21 | 只看该作者

可读性太差

使用特权

评论回复
11
边锋软件| | 2008-7-16 11:12 | 只看该作者

有用,谢谢

1.EMC有求余操作
比如:
S1 == 123456
S1_H==S1/256
S1_L==S1%256
MOV  A,@S1_H
MOV  0X20,A
MOV  A,@S1_L
MOV  0X21,A;
这样也行,我感觉读起来不会头晕
2。不置可否
3。感觉可读性确实不高,也许习惯就好了,呵呵
不过这个用法我没见过,谢谢

使用特权

评论回复
12
谈的元|  楼主 | 2008-7-16 22:32 | 只看该作者

说明

有时候,一个程序可能需要不同的配置,1就有用。

有时候,要增加,减少某些参数来获得比较好的运行效果,2就比较方便。


测量温度,比如用表格实现 线性插值,3有用。3看起来繁琐,

其实很简单,很容易推导。


这只是VAR的一个应用。
又比如,有时候,比如用EM78P510写汉字,汇编,当你编好后,老板说,要将LCD模块 转动180度放。这样,你的汉字全反了。而利用VAR,写一个宏,就很容易将字改过来。就不需要重新写字库。

使用特权

评论回复
13
edgesoft| | 2008-7-26 09:40 | 只看该作者

路过

使用特权

评论回复
14
McuPlayer| | 2008-8-17 17:17 | 只看该作者

还是把技术贴顶上来吧

使用特权

评论回复
15
谈的元|  楼主 | 2008-8-17 21:22 | 只看该作者

MCU,要技术帖火起来.大家要有这个意识:

一个人如果抱着所谓的技术,而不外传播,

我相信这做法并不能给他带来好运.

相反,我认为传播技术的人会遇到好(X远)运.

使用特权

评论回复
16
McuPlayer| | 2008-8-18 10:55 | 只看该作者

有道理,我知道你的意思

各个IC厂家有他们的商业做法,作为工程师的我们也无法左右

我们能做的就是把技术做扎实,设家的芯片性价比高,就用谁家的。

使用特权

评论回复
17
dianda34| | 2008-8-19 12:18 | 只看该作者

低价格+好的售后才行啊。。。

低价格+好的售后才行啊。。。

专门IC要大行其道了,现在好多MCU不够细分,你没用到那么多功能都在为那些功能买单了。。。

使用特权

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

本版积分规则

98

主题

3872

帖子

6

粉丝