久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4737|回復: 4
打印 上一主題 下一主題
收起左側

幫忙將一個C函數寫成匯編語言

[復制鏈接]
跳轉到指定樓層
樓主
ID:168155 發表于 2017-3-10 17:53 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
100黑幣
單片機程序
void receive() //接收數據
{
        uchar count;
        uchar i=0x00;
        uint k=0x00;
        DATA=0;
        i=0x00;
        if(!in)
        {
                while(!in)                 //前導電平,4*48us
                {
                        k++;                 //4+2+3+4=13
                        delay80us();//(40us)+1+2+2+2+2+3+3=15+40us
                        if(k>220)
                        {DATA=0;return;}         //同步碼 低位限時(10000~~21000us)
                }
                if(k<104)
                        {DATA=0;return;}  //同步碼 低位限時
                for(count=0;count<24;count++)  //開始收集
                {
                        if(in)                       
                        {
                                DATA=DATA<<1;
                                i=0;
                                while(in)        //高位計數i*44.75us
                                {
                                        delay80us();
                                        i++;  //4+(2+1+2+3+3)=15
                                        if(i>23)
                                        {DATA=0;return;}//高位限時解碼<(2013us)
                                }
                                if(i<10)
                                {
                                        if((2<i)&&(i<9));//記低電平(220us-805us)
                                        else
                                        {DATA=0;return;}
                                }
                                else
                                {                       
                                        if((12<i)&&(i<23))
                                        {DATA=DATA|0x01;}//記高電平(940-2013)實際1450us
                                        else
                                        {DATA=0;return;}
                                }       
                        }
                        while(!in)
                                {delay80us();}//位計數
                }
        }
}

void sjzh()                                                 //轉換接收到的數據
{
        char i=0;
        if(DATA>0)
        {
                for(i=2;i>=0;i--)
                {
                        D[i]=DATA;
                        DATA>>=8;
                }
        }
        DATA=0;
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:155507 發表于 2017-3-10 17:53 | 只看該作者
  1.              ; FUNCTION receive (BEGIN)

  2. ;---- Variable 'i' assigned to Register 'R5' ----
  3.               CLR     A
  4.               MOV     R5,A

  5. ;---- Variable 'k' assigned to Register 'R2/R3' ----
  6.               MOV     R3,A
  7.               MOV     R2,A

  8.               MOV     P0,A

  9.             JB      in,?C0012

  10.         ?C0009:

  11.             JB      in,?C0010

  12.                 INC     R3
  13.             CJNE    R3,#00H,?C0035
  14.                 INC     R2
  15.          ?C0035:

  16.       R     LCALL   delay80us

  17.                 SETB    C
  18.                 MOV     A,R3
  19.               SUBB    A,#0DCH
  20.                 MOV     A,R2
  21.               SUBB    A,#00H
  22.               JC      ?C0009
  23.               SJMP    ?C0039
  24.          ?C0010:
  25.                 CLR     C
  26.                 MOV     A,R3
  27.               SUBB    A,#068H
  28.               MOV     A,R2
  29.               SUBB    A,#00H
  30.               JNC     ?C0013
  31.     ?C0036:
  32.               SJMP    ?C0039
  33.     ?C0013:
  34. ;---- Variable 'count' assigned to Register 'R4' ----
  35.             CLR     A
  36.             MOV     R4,A
  37.   ?C0014:
  38.             JNB     in,?C0027
  39.             MOV     A,P0
  40.             ADD     A,ACC
  41.             MOV     P0,A
  42.             CLR     A
  43.             MOV     R5,A
  44.   ?C0018:
  45.             JNB     in,?C0019
  46.       R     LCALL   delay80us
  47.             INC     R5
  48.             MOV     A,R5
  49.             SETB    C
  50.             SUBB    A,#017H
  51.             JC      ?C0018
  52.   ?C0037:
  53.             SJMP    ?C0039
  54.     ?C0019:
  55.               MOV     A,R5
  56.               CLR     C
  57.               SUBB    A,#0AH
  58.               JNC     ?C0021
  59.               MOV     A,#02H
  60.               CLR     C
  61.               SUBB    A,R5
  62.               JNC     ?C0022
  63.               MOV     A,R5
  64.               CLR     C
  65.               SUBB    A,#09H
  66.               JC      ?C0027
  67.     ?C0022:
  68.     ?C0038:
  69.               SJMP    ?C0039
  70.     ?C0021:
  71.               MOV     A,#0CH
  72.               CLR     C
  73.               SUBB    A,R5
  74.               JNC     ?C0025
  75.               MOV     A,R5
  76.             CLR     C
  77.             SUBB    A,#017H
  78.             JNC     ?C0025
  79.             ORL     P0,#01H
  80.             SJMP    ?C0027
  81.   ?C0025:
  82.   ?C0039:
  83.             CLR     A
  84.             MOV     P0,A
  85.             RET     
  86.   ?C0027:
  87.             JB      in,?C0016
  88.       R     LCALL   delay80us
  89.             SJMP    ?C0027
  90.   ?C0016:
  91.             INC     R4
  92.             MOV     A,R4
  93.             XRL     A,#018H
  94.             JNZ     ?C0014
  95.   ?C0012:
  96.             RET     
  97.              ; FUNCTION receive (END)

  98.              ; FUNCTION sjzh (BEGIN)
  99. ;---- Variable 'i' assigned to Register 'R7' ----
  100.             MOV     A,P0
  101.             SETB    C
  102.             SUBB    A,#00H
  103.             JC      ?C0029
  104.             MOV     R7,#02H
  105.   ?C0030:
  106.       R     MOV     A,#LOW D
  107.             ADD     A,R7
  108.             MOV     R0,A
  109.             MOV     @R0,P0
  110.             MOV     P0,#00H
  111.             DEC     R7
  112.             CLR     C
  113.             MOV     A,R7
  114.             XRL     A,#080H
  115.             SUBB    A,#080H
  116.             JNC     ?C0030
  117.   ?C0029:
  118.             CLR     A
  119.             MOV     P0,A
  120.             RET     
  121.              ; FUNCTION sjzh (END)
復制代碼
回復

使用道具 舉報

板凳
ID:168155 發表于 2017-3-10 17:55 | 只看該作者
延時函數DELAY80US:   ;誤差 0us     MOV R6,#0BH DL0:     MOV R5,#02H     DJNZ R5,$     DJNZ R6,DL0     RET
回復

使用道具 舉報

地板
ID:168155 發表于 2017-3-13 11:49 | 只看該作者
本帖最后由 wolfe~alone 于 2017-3-13 13:54 編輯

麻煩問一下,P0是什么,作一個存儲單元用嗎MOV P0,#01
MOV A,P0
XRL A,#00H
JNC SUCCESS
發現從P0中讀出的結果永遠是0呢?無法進入SUCCESS

回復

使用道具 舉報

5#
ID:168155 發表于 2017-3-13 20:23 | 只看該作者
wolfe~alone 發表于 2017-3-13 11:49
麻煩問一下,P0是什么,作一個存儲單元用嗎MOV P0,#01
MOV A,P0
XRL A,#00 ...

好似知道了,我用的是STC15F102,發現就P3口可以用,但不知道為什么P0不能用
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕免费视频 | 国产欧美日韩综合精品一区二区 | 久久久久免费 | 91精品中文字幕一区二区三区 | 成人精品毛片国产亚洲av十九禁 | 玖玖视频国产 | 国产成人高清视频 | 精品一级电影 | 精品成人一区 | 欧美一级片在线观看 | 男人影音| 日本精品久久 | 久久精品成人一区 | 亚洲精品一区二区三区 | 久久久免费毛片 | 久草新在线 | 亚洲欧洲成人 | 成人精品一区二区三区中文字幕 | 欧美vide| 在线中文字幕日韩 | 欧美一级在线观看 | 久久久久中文字幕 | 午夜影晥| 日韩精品一区二区三区 | 色婷婷综合在线观看 | 激情免费视频 | 精品www | 久久国| 久久av一区二区三区 | 黄色大片免费观看 | 午夜欧美a级理论片915影院 | 99视频免费在线观看 | 日韩成人免费视频 | 精品一二三 | 精品99在线 | 国产精品一区二区av | 久久久久久免费毛片精品 | 欧美lesbianxxxxhd视频社区 | 日本综合在线观看 | 一级片在线观看视频 | 女同av亚洲女人天堂 |