电子开发 | 基础入门 | 电路原理图 | 婵⿴鍨伴懜浼村炊閹呮澖濞撴熬鎷� | PLC闁糕晞娅i、锟�   闁靛棗锕ら々褔寮稿⿰鍐╃仒婵炲棎鍨哄﹢鎵博濞嗘瑧绀夐悹鍥敱鐎碉拷 Ctrl+D 闁归潧顑呮慨鈺呭绩閹増顥戦柨娑楃劍閸斿懐鎷姀鈥充憾闁汇劌瀚弫顕€骞愭担纰樺亾閿燂拷濞戞挴鍋撻悹褍鍢查鐔哥▕閻樿京顏遍悹褏鏌夌换妯侯潰閵夘垳绀夐柣銏ゆ涧閻℃瑥顕i埀顒勫矗閹寸姴绔炬繛鍡愬灱缁诲骞冮…鎺旂<.

电子开发网

电子开发网电子设计 | 电子开发网Rss 2.0 会员中心 会员注册

闁宠棄鎳愰弫鍝ユ崉椤栨艾褰嗙€殿喖绻戞晶婊堝礃瀹€瀣闁哄牃鍋撻柡鍌涘婢ф濡存繝鍕毄閻庢稒鍔楅弫鍝ユ崉椤栨艾褰嗙€殿喖绻楅鍝ョ不濡も偓濞呮帡濡寸€e墎绀夐柣顫祷閻箖宕楅鈧槐锟犲蓟閵夘煈鍤勯柟闈涱儏閸烇拷 闁活澀绲婚惌楣冨礂椤掆偓缁憋紕鎷嬮敍鍕毈闁革絻鍔婇埀顒佸姉閺佸摜鈧稒鍔掔划鐘崇▔濮橆偅鐪介柛娑櫭换鈧璺烘处婢ф粓宕樼仦鐑╁亾閿燂拷
闁宠棄妫楀畷鍕緞閳轰緡鍔呭ù鍏艰壘瀹曠喖鎮ч崶銊︾皻閻庡湱鍋樼欢锟�100 c閻犲浂鍙€閳伙拷 chm闁哄秶鍘х槐锟犲Υ閸屾繄銈柡鍌涚懃閸炲鈧湱顢婇娑氱磼閸☆厾绀夐悷鏇炴濞插﹥绗熺€n亞鎽嶅鑸电啲缁辨繈宕橀崨顓у晣妤犵偠锟ラ埀顒佸姉閺佸摜鈧稒鍔掔划鐘崇▔濮橆偅鐪介柛娑櫭换鈧璺烘处婢ф粓宕樼仦鐑╁亾閿燂拷
搜索: 您现在的位置: 电子开发网 >> 电子开发 >> 单片机 >> 正文

51单片机指令系统(3)

作者:佚名    文章来源:网上收集    点击数:2576    更新时间:2008-11-4
第二十一课:汇编程序的基本结构
程序编写做到:
占用存储空间少;
运行时间短;
程序的编制、调试及排错所需时间短;
结构清晰,易读、易于移植。
按结构化程序设计思想,任何复杂程序都可由顺序结构、分支结构、循环结构等构成。
如图1所示。


一、顺序程序举例
例1、设在外RAM的60H单元存有1个字节代码,要求将其分解成两个4位字段,高4位存入原单元的低4位,其低4位存入61H单元的低4位,且要求这两个单元的高4位均为0,试编制完整程序。
解: 字节分解:

核心指令   ANL
           ORL 1000H
   MODE:   MODE:MOV R0,#60H
           MOVX A,@R0
           MOV B,A
           ANL A,#0F0H
           SWAP A
           MOVX @R0,A
           ANL B,#0FH
           MOV A,B
           INC R0
           MOVX @R0,A
           END
二、分支结构与分支程序设计
结构:根据不同的条件,进行相应的处理。
通常用条件转移指令形成简单分支结构。
如: 判(A) = Z 或 NZ ,转移
判(CY)= 1 或 0 ,转移
判(bit)=1 或 0 ,转移
CJNE 比较不相等转移
例3、设a存放在累加器A中,b存放在寄存器B中,要求按下式计算Y值,并将结果Y存于累加器A 中,试编写程序。

解:本题关键是判a是正数,还是负数;由ACC7便知。
          ORG 1000H
      BR: JB ACC7,MINUS
          CLR C
          SUBB A,B
          SJMP DONE
   MINUS: ADD A,B
    DONE: SJMP $
          END
例4、设有两个16位无符号数NA,NB分别存放在8031单片机内部RAM的40H、41H及50H、51H单元中,当NA > NB时,将内部RAM的42H单元清0;否则,将该单元置成全1,试编程。
解法I:因为无16位数的比较指令,所以,只能用8位数的比较指令。
(画出流程框图)
          ORG 2000H
     CMP: MOV A,50H
          CJNE A,40H,CMP1
          MOV A,51H
          CJNE A,41H,CMP1
          SJMP NHIGHE
    CMP1: JC HIGHE
  NHIGHE:MOV 42H,#0FFH
          SJMP DONE
   HIGHE: MOV 42H,#00H
    DONE: SJMP $
          END
上述程序中多次用到SJMP语句,该语句为无条件转移语句。无条件语句应尽量少用,这样可使程序结构紧凑而易读,易理解。

解法II:先假设NA > NB,再来判断是否NA ≤ NB
          ORG 3000H
    CMP2: MOV R0,#00H
          MOV A,50H
          CJNE A,40H,CMP3
          MOV A,51H
          CJNE A,41H,CMP3
          SJMP NHIGHE
    CMP3: JC HIGHE
          NHIGHE:MOV R0,#0FFH ;不大于标志
   HIGHE: MOV 42H,R0
          SJMP $
          END
循环结构不但使程序简练,而且大大节省存储空间。
循环程序包含四部分:
初始化部分
循环处理部分(主体)
循环控制部分(修改地址指针、修改变量、检测循环结束条件)
循环结束部分(对结果分析、处理,存放结果)

循环有:单循环、多重循环。
循环次数已知,可用计数器控制循环次数;
循环次数未知,按问题条件控制循环是否结束。
一、单循环程序
1、循环次数是已知的程序
例1、已知片外RAM的10H单元存放8位二进制数,要求将其转移成相应的ASCII码,并以高位在前,低位在后的顺序,依次存放到片外RAM以11H为首地址的连续单元中,试编程。

解:先将中间单元置成30H,然后判欲转换位是否为1,
若是,则将中间单元内容加1;否则,中间单元内容保持不变。
通过左移指令实现由高到低的顺序进行转换。
         ORG 1000H    
  START: MOV R2,#08H    ;循环计数初值(循环次数已知)
         MOV R0,#10H    ;地址指针初值
         MOVX A,@R0     ;取数
         MOV B,A        ;暂存B中
   LOOP: MOV A,#30H     ;将中间单元(A)置成30H
         JNB B.7,NA     ;判断转换的二进制位为0否?
                         ;若是转NA
         INC A           ;1的ASCII码“31H”
     NA: INC R0          ;修改地址指针
         MOVX @R0,A     ;存放转换的结果
         MOV A,B  
         RL A,B         ;作好准备,判断下一位
         MOV B,A        ;暂存
         DJNZ R2,LOOP   ;判断转换结束否?未完继续
         SJMP $  
         END  
2)循环次数未知的程序
例2、设用户用键盘输入长度不超过100字节的字符串放在8031单片机外部RAM以20H为首地址的连续单元,该字符串用回车符CR(‘CR’= 0DH)作为结束标志,要求统计此字符串的长度并存入内部RAM的1FH单元中。
解:从首单元开始取数,每取一数判断其是否为‘CR’,是则结束。
         ORG 1000H
   STADA DATA 20H
   SLANG DATA 1FH
         MOV R0,#STADA-1
  CMCR2: MOV B,#0FFH
         INC R0
  CRLOP: INC B
         MOVX A,@R0
         CJNE A,#0DH,CRLOP
         MOV SLANG,B
         SJMP $
         END
2、多重循环设计
循环体中还包含着一个或多个循环结构,即双重或多重循环。
例3、设8031使用12MHz晶振,试设计延迟100ms的延时程序。
解:延时程序的延迟时间就是该程序的执行时间,通常采用MOV和DJNZ二指令。
T = 12 / fosc = 12 / (12×106)= 1us

内循环延时:
(1 + 2 × CTR)T = 500us(假设)
则CTR = 250
实际延时:[1 + 2 × 250] × 1us = 501us

外循环延时:T +(501 + 2T)× CTS = 100ms = 100 000us
所以 , CTS = 198.8 取 199
实际延时:[1 + (501 + 2)×199] = 1000.98ms

例4、设在8031内部RAM中存一无符号数的数组,其长度为100,起始地址是30H,要求将它们从大到小排序,排序后仍存放在原区域中,试编者按程。

这就是所畏的“冒泡法”。
实际上大多情况,用不到99次循环,排序就结束。为了提高排序速度,程序中可设一交换标志位,如10H位,
每次循环中:若有交换则 SETB 10H
若无交换则 CLR 10H
每次循环结束时,测10H位,判断排序是否结束。
          ORG 1000H
          MOV R0,#30H
  BUBBLE: MOV B,#64H
          CLR 10H
          DEC B
          MOV A,@R0           ;长度计数
    LOOP: MOV 20H,A           ;暂存,为交换作准备
          INC R0
          MOV 21H,@R0
          CJNE A,21H,BUEU    ;若(20H)≠(21H)转移
          JNC BUNEXT           ;(20H)≥(21H)转移
    BUEU: MOV A,@R0           ;若(20H)< (21H)则交换
          MOV @R0,20H
          DEC R0               ;使R0退格指向小地址
          MOV @R0,A
          INC R0               ;恢复R0指向大地址
          SETB 10H             ;置交换标志
          DJNZ B,LOOP
  BUNEXT: JB 10H,BUBBLE       ;判断标志位为1否?若为1,则继续
          END
Tags:单片机,指令系统,指令学习,电子设计  
责任编辑:admin
相关文章列表
51单片机指令系统(2)
请文明参与讨论,禁止漫骂攻击,不要恶意评论、违禁词语。 昵称:
1分 2分 3分 4分 5分

还可以输入 200 个字
[ 查看全部 ] 网友评论
    没有任何评论
閻㈤潧鐡欏鈧崣鎴犵秹閿涙碍鐪归梿鍡欐偅閸氬牆鎮囩猾鑽ゆ暩鐎涙劕鍩楁担婊€绗岄悽浣冪熅閸ュ墽娈戠純鎴犵彲閿涘lc瀹搞儲甯堕幎鈧張锟�,濡紕鏁搁弫鎵暩閻儴鐦�,閸楁洜澧栭張绡岲A缁涘鐡戦敍浣藉疮閽€鍐暩鐠侯垰娴樼純鎴犵彲缁儳宕曢敍灞艰礋瀹搞儳鈻肩敮鍫濆灡闁姳鐜崐绗衡偓鍌涱偨鏉╁骸鍙у▔銊ヤ簳娣団€冲彆娴兼褰块敍姘辨暩鐎涙劕绱戦崣鎴犵秹閿涳拷
最新推荐
璧勬枡鍖呬笅杞�
 [闂傚倷绀侀幉锟犮€冮崱妞曞搫饪伴崟顒佺彿闂佸搫绋侀崢鑲┾偓姘槸铻栭柨鏇氱劍绾爼鏌曢崼顐喊闁哄矉绻濆畷鎺楁晜閽樺浼�]闂傚倷绀侀幉锟犲Φ閻愮數鐭嗗〒姘e亾濠碘€崇仛瀵板嫮浠︾粙澶稿濠电偞鍨电壕顓犳閹殿喚纾奸柛娆惷畵鍡欌偓瑙勬穿缁绘繂顕i幘顔藉亹鐎瑰壊鍠楀В鍫ユ⒒娴e憡鎯堥柣妤€妫濋獮鏍敃閿旇棄浠鹃梺鍛婃处閸撴盯鎮疯ぐ鎺撶叆闁绘洖鍊圭€氾拷100 c闂備浇宕垫慨鏉懨归崟顖氱闁跨噦鎷�
 [闂備礁鎼ˇ閬嶅磿閹版澘鍨傛い鏍ㄥ焹閺嬪酣鏌曡箛瀣伄閻忓繒鏁婚弻銊╂偆閸屾稑顏�]婵犵數鍋為崹鍫曞箰閹间絸鍥┾偓鍦О娴滃湱绱掗埀顒勬倻閻娀姊虹拠鎻掝劉闁告劘宕电槐鎾愁潩閸楃偛袣闂佸憡娲﹂崜娑€€呴悜鑺ュ仯闁诡厽甯掓俊浠嬫煕閳轰礁鈧灝顕i崼鏇熷€婚柛鈩冾殘娴犙冣攽閻愬弶锛嶉柡渚囩厺-TR
 [闂傚倷鐒﹀鍨熆閳ь剛绱掗幓鎺濈吋闁诡垰鐭傞幃娆擃敆閸屻倖绁梺鑽ゅУ娴滀粙宕濆澶婃槬闁稿瞼鍋為崑锝吤归敐鍥ㄥ殌缂佲偓閸愨斂浜滈柟鍨鐎氾拷]LM324闂備礁鎼ˇ顐﹀疾濠婂牆绀夐柡宥庡幖濡﹢鏌ㄩ悤鍌涘4~20mA闂備礁鎼ˇ閬嶅磿閹达箑绠柨鐕傛嫹1~5V闂傚倷鐒﹂惇褰掑垂瑜版帗鍊舵慨妯夸含閻牓鏌ㄩ悤鍌涘
 [闂傚倷鐒﹀鍨熆閳ь剛绱掗幓鎺濈吋闁诡垰鐭傞幃娆擃敆閸屻倖绁梺鑽ゅУ娴滀粙宕濆澶婃槬闁稿瞼鍋為崑锝吤归敐鍥ㄥ殌缂佲偓閸愨斂浜滈柟鍨鐎氾拷]LM386婵犵绱曢崑娑橈耿鏉堚晛鍨濇い鏍仦閸婂灚銇勯幒宥囧妽濠殿垱鎸抽弻鐔煎箲閹伴潧娈銈嗘煥閿曨亪寮诲☉婊呯杸闁瑰灝鍟崜璺侯渻閵堝啫鍔滈柟鐟版搐椤曪綁濡搁埡浣虹暰閻熸粌顑嗙粋宥夋晲婢跺鍘遍梺鎸庣箓閸燁偅淇婃總鍛婂仺妞ゆ牓鍊栫€氾拷
 [闂傚倷鐒﹀鍨熆閳ь剛绱掗幓鎺濈吋闁诡垰鐭傞幃娆擃敆閸屻倖绁梺鑽ゅУ娴滀粙宕濆澶婃槬闁稿瞼鍋為崑锝吤归敐鍥ㄥ殌缂佲偓閸愨斂浜滈柟鍨鐎氾拷]936闂傚倷鑳剁划顖滄暜閹烘鏅濋柕鍫濈墑娴滃綊鏌熺紒銏犳灍闁稿鍔岄湁闁挎繂鎳庨弳鐔兼煟閺傛寧鍤囬柡灞剧☉铻i柣鎾冲閻忎線姊虹拠鈥虫灈闁挎洦浜滈悾鐑藉醇閺囩喐娅㈤梺璺ㄥ櫐閹凤拷
 [闂傚倷绀侀幉锟犮€冮崱妞曞搫饪伴崟顒佺彿闂佸搫绋侀崢鑲┾偓姘槸铻栭柨鏇氱劍绾爼鏌曢崼顐喊闁哄矉绻濆畷鎺楁晜閽樺浼�]闂備胶鍎甸崜婵堟暜閹烘绠犻幖娣妽閺咁剟鏌熼柇锕€鍘撮柡瀣墵閺屾洝绠涢妷褏锛熼梺闈涚墛閹告娊骞冭ぐ鎺撳仏閻庢稒锚椤忥拷+濠电姷鏁搁崑鐐哄箰閹绢喖鐤炬繛鎴炲焹閸嬫捇鎯傞崨濠傤伓+闂傚倷鑳堕、濠勭礄娴兼潙纾块柟缁㈠櫘閺佸棝鏌i弬鍨倯闁稿骸绉归弻娑㈠即閵娿儰绨荤紓浣插亾闁跨噦鎷�
 [闂傚倸鍊风欢锟犲磻閸涱収娼╅柕濞炬櫅閺嬩線鏌曢崼婵愭Ч闁稿鍔戝濠氬醇閻旀亽鈧帡鏌熼挊澶屝ч柟顔款潐閹峰懘鎮烽幍顕呮О婵$偑鍊栭幐鎼佸箟閳ョ繀缂氭い蹇撶墱閺佸秵绻涢崱妯哄Е闁稿鎷�]S7-200PLC闂傚倷鐒﹂惇褰掑礉瀹€鈧埀顒佸嚬娴滅偤骞愰幒妤€顫呴柕鍫濇閸撴娊姊虹紒妯烩拹婵″弶甯¢獮蹇涱敃閳锋艾缍婇幃顏堝川椤旂⒈浼� S7_2
 [闂備礁鎼ˇ閬嶅磿閹版澘鍨傛い鏍ㄥ焹閺嬪酣鏌曡箛瀣伄閻忓繒鏁婚弻銊╂偆閸屾稑顏�]S7-200闂備礁婀遍崢褔鎮洪妸鈺佺濠电姵鑹鹃崙鐘绘煕閹般劍娅囨い鈺冨厴閹鎷呴崨濠呯缂備讲鍋撻柛鏇ㄥ灡閻撴洟鐓崶椋庢偧闁告ɑ绮庣槐鎺楀箟鐎n偄顏�,STEP7
 [闂備礁鎼ˇ閬嶅磿閹版澘鍨傛い鏍ㄥ焹閺嬪酣鏌曡箛瀣伄閻忓繒鏁婚弻銊╂偆閸屾稑顏�]ModbusPoll闂傚倷绀侀幉锛勫垝瀹€鍕垫晢闁绘牕鐛沚usSalve闂傚倷鑳舵灙濡ょ姴绻橀獮蹇涙晸閿燂拷
 [闂備礁鎼ˇ閬嶅磿閹版澘鍨傛い鏍ㄥ焹閺嬪酣鏌曡箛瀣伄閻忓繒鏁婚弻銊╂偆閸屾稑顏�]STEP7濠电姷顣藉Σ鍛村垂椤忓牆绀堟繝闈涚墐閸嬫挸顫濋鐘冲櫚闂佸搫鑻惌浣虹不濞戙垹妫橀悹鎭掑妽閳诲苯鈹戦悙宸殶濠殿喕鍗冲畷鎰板即閻樺搫小闂佽法鍣﹂幏锟� Smart_
 [闂備礁鎼ˇ閬嶅磿閹版澘鍨傛い鏍ㄥ焹閺嬪酣鏌曡箛瀣伄閻忓繒鏁婚弻銊╂偆閸屾稑顏�]Modbus闂備浇宕垫慨鎾敄閸涙潙鐤柟鎯板Г閸庡﹥銇勯弽銊х煀闁搞劍绻堥弻娑㈠箻濡も偓閸婅崵鎲撮敓锟� v1.024 缂傚倸鍊搁崐椋庢閵堝绠柨鐕傛嫹
 [闂備礁鎼ˇ閬嶅磿閹版澘鍨傛い鏍ㄥ焹閺嬪酣鏌曡箛瀣伄閻忓繒鏁婚弻銊╂偆閸屾稑顏�]Modscan32闂傚倷绀侀幉锛勫垝瀹€鍕垫晢闁绘牕鐛泂im32,modb
 [闂傚倷鐒﹀鍨熆閳ь剛绱掗幓鎺濈吋闁诡垰鐭傞幃娆擃敆閸屻倖绁梺鑽ゅУ娴滀粙宕濆澶婃槬闁稿瞼鍋為崑锝吤归敐鍥ㄥ殌缂佲偓閸愨斂浜滈柟鍨鐎氾拷]89c51闂傚倷鑳舵灙缂佺粯鍔欒棟闂侇剙绉甸崑鐔哥箾閹存瑥鐏╂俊顐o耿濮婃椽顢曢敐鍥剁伇闂傚倸妫楃紞濠囧蓟閿濆鏁傞柛鈩冾殕閻濄垻绱撴担浠嬪摵闁绘侗妲漮tues
 [闂傚倷鐒﹀鍨熆閳ь剛绱掗幓鎺濈吋闁诡垰鐭傞幃娆擃敆閸屻倖绁梺鑽ゅУ娴滀粙宕濆澶婃槬闁稿瞼鍋為崑锝吤归敐鍥ㄥ殌缂佲偓閸愨斂浜滈柟鍨鐎氾拷]婵犵數鍋為崹鍫曞箰缁嬫5娲Χ婢跺﹦顦版俊銈忕到閸燁偊宕掗妸鈺傜厱闁绘劖娼欒ⅷotues婵犵數鍋涢顓熸叏閹€鏋栭柡鍥╁剳閼板潡鏌ㄥ☉妯侯伀闁活厽鐟╅幃妤呮晲鎼存繄鏁栫紒鐐緲缁夌數鎹㈠┑濠庢Ъ闂佸憡姊归〃濠囧箖閵夆晜鏅搁柨鐕傛嫹
 [闂傚倷鐒﹀鍨熆閳ь剛绱掗幓鎺濈吋闁诡垰鐭傞幃娆擃敆閸屻倖绁梺鑽ゅУ娴滀粙宕濆澶婃槬闁稿瞼鍋為崑锝吤归敐鍥ㄥ殌缂佲偓閸愨斂浜滈柟鍨鐎氾拷]51闂傚倷绀侀幉锟犮€冮崱妞曞搫饪伴崟顒佺彿闂佸搫绋侀崢鑲┾偓姘樀閺屾稑鈹戦崱妤婁患闂佺鍐垮姛缂佽鲸甯為埀顒婄秬閸╂牜鈧熬鎷� protues婵犵數鍋涢顓熸叏閹€鏋栭柡鍥╁剳閼板潡鏌ㄩ悤鍌涘
鏈€鏂版枃绔�
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 在线帮助 - 文章列表
返回顶部
刷新页面
下到页底
晶体管查询