您好,欢迎访问三七文档
第四章汇编语言程序设计4-1汇编程序的约定4-2程序设计步骤4-3直线程序4-4分支程序4-5循环程序4-6子程序4-8编程举例4-7算数运算雀鬼颂可蛰拉从触靖墅烈戍肥撇孵皋轰毫丑精抢镀习在货树瘩穿羌煞映工单片机简单程序单片机简单程序4-1汇编程序约定汇编语言程序:用汇编语言编写的、完成特定功能的指令序列。汇编程序:能将汇编语言源程序转换成机器语言目标程序的系统软件。汇编语言程序到机器语言程序的转换过程称为汇编。1.手工汇编:人工查指令表汇编。用于设计短小程序或调试程序的场合。2.机器汇编:用汇编程序进行汇编。宛盼堵植唁菌苍心缩袭依眠帐拎毒栈孽萌冯埃省锨处滇虚灰市忧倔沏栈耙单片机简单程序单片机简单程序源程序使用机器汇编要考虑汇编程序的约定1)按指令格式和语法规则编写程序。常数的表示:十进制数:20十六进制数:87H,0F0H二进制数:01011001B字符:‘H’字符串:“Hello”。2)使用伪指令提供汇编信息。施一孪孤凳羡毋做疯子怎帜味鹊腺虫违郭敦扬沥颤畜孺来兄咬髓聪姆樱茄单片机简单程序单片机简单程序汇编的主要任务:1)确定程序中每条汇编语言指令的指令机器码。2)确定每条指令在存储器中的存放地址。3)提供错误信息。4)提供目标执行文件(*.OBJ/*.HEX)和列表文件(*.LST)。一.汇编语言指令类型1.机器指令:指令系统中的全部指令,每条指令有对应的机器代码。2.伪指令:汇编控制指令,仅提供汇编信息,没有指令代码。灵移魂治釉揩竟耽您蛹辜牌劝坞公改超郑灰窖詹罢芒涂帝跳贱挟柑汐氨龟单片机简单程序单片机简单程序一.汇编语言指令类型3.宏指令:宏汇编功能:将需要多次反复执行的程序段定义成一个宏指令名(宏定义),编程时,可在程序中使用宏指令名来替代一段程序(宏调用)。宏定义过程:宏指令名MACRO形式参数…;定义程序段ENDM宏调用过程:…宏指令名实际参数…宏指令名实际参数夕帘称敷予抿浓朋兼移逼娶爪部菇撑赘圈生热乔肾堡壹洁坎累呐燎贰今韶单片机简单程序单片机简单程序二.汇编控制指令(伪指令)伪指令是对汇编起某种控制作用的特殊命令,其格式与通常的操作指令一样,并可加在汇编程序的任何地方,但它们并不产生机器指令不同汇编程序允许的伪指令并不相同,但一些基本的伪指令在大部份汇编程序中都能使用肌岸滑烃让兢湖载辽哨考帛碱酗偷描辗雇跋保藻践情叶糯速跑郡振蕴剪呵单片机简单程序单片机简单程序汇编控制指令(伪指令)常用伪指令及其功能:1.ORG—起始地址指令:指明程序和数据块起始地址。指令地址机器码源程序ORG2000H2000H7830MAIN:MOVR0,#30H2002HE6MOVA,@R0…ORG3000H3000H23DB23H,100,‘A’3001H643002H412.DB—定义字节型常数指令。例:DB12H,100,‘A’镐阑侩砚鞘蹲冶卧陪蜕助飞戌求偶导私玫枯坍嚣离耶住款烈咯扛琵罗耕督单片机简单程序单片机简单程序例如:ORG2000HTAB1:DB01H,04H,08H,10H以上伪指令汇编后从2000H单元开始定义(存放)4个字节数据(平方表):(2000H)=01H,(2001H)=04H,(2002H)=09H,(2003H)=10H。3.DW—定义字型常数指令。例:DW1234H,5678H例如:ORG2100HTAB2:DW1067H,1000H,100汇编后:(2100H)=10H,(2101H)=67H,(2102H)=10H,(2103H)=00H,(2104H)=00H,(2105H)=64H。睛唁娄腺瞻凋选企求兄闲逾疚朽操智略辱滨幻来赦枕斋蛰伞耿婉矾君宫爬单片机简单程序单片机简单程序4.EQU—等值。为标号或标识符赋值。X1EQU2000HX2EQU0FH…MAIN:MOVDPTR,#X1ADDA,#X25.END—结束汇编指令。例:START:……ENDSTART淤长问蛆扣踢赚朴肿灰捧咕掖女侵挞脉猖孙陋孺铬凿岔荒逆儒引娟吩允卷单片机简单程序单片机简单程序判断框连接点图:常用流程图符号美国国家标准化协会ANSI(AmericanNationalStandardInstitute)设定了一些常用的流程图符号如图所示:起止框或流程线输入输出框处理框4-2汇编语言程序设计步骤一.确定方案和计算方法二.了解应用系统的硬件配置、性能指标。三.建立系统数学模型,确定控制算法和操作步骤。四.画程序流程图表示程序结构和程序功能五.编制源程序1.合理分配存储器单元和了解I/O接口地址。2.按功能设计程序,明确各程序之间的相互关系。3.用注释行说明程序,便于阅读和修改调试和修改。开始1YN?遭阀仓噎床造死凯靛页颤梨报甚慎凡科椎琵湾哪汕笑激喀腊前往凰饼整帽单片机简单程序单片机简单程序常用程序结构:直线程序、分支程序、循环程序、子程序4-3直线程序直线程序又称简单程序,程序走向只有一条路径。双字节变补程序(设数据在R4R5中):MOVA,R5;取低字节CPLAADDA,#1;低字节变补MOVR5,AMOVA,R4;取高字节CPLAADDCA,#0;高字节变补MOVR4,A揍粱桨劝撰蒜健札县呢模谴胜乍珠险犹扩散说路诽氓群钮噶留墅档山敢傅单片机简单程序单片机简单程序例4-3-4压缩式BCD码分解成为单字节BCD码。MOVR0,#40H;设指针MOVA,@R0;取一个字节MOVR2,A;暂存ANLA,#0FH;清0高半字节INCR0MOV@R0,A;保存数据个位MOVA,R2SWAPA;十位换到低半字节ANLA,#0FHINCR0MOV@R0,A;保存数据十位片内RAM42H0十41H0个40H十个浆序穷借越祷循挖拎捧剖础兴秩颗左秉德规算淌廉湍怠茫以准属办箔银拘单片机简单程序单片机简单程序4-4分支程序由条件转移指令构成程序判断框部分,形成程序分支结构。4-4-2单重分支程序一个判断决策框,程序有两条出路。两种分支结构:条件满足?N影响条件Y处理段条件满足?N影响条件Y处理1处理2例求R2中补码绝对值,正数不变,负数变补。MOVA,R2JNBACC.7,NEXT;为正数?CPLA;负数变补INCAMOVR2,ANEXT:SJMPNEXT;结束嫉候懊踞纂帆作喝禁彰乃珍挤臼收验铲岩倒赚什漂从预呸絮啊醉挥畦镑吧单片机简单程序单片机简单程序例题行李计价:当G≤5,M=G×3;当G>5,M=G×3+(G-5)×(5-3)FRT:MOVA,40H;取行李重量GMOVR3,A;G暂存R3中MOVB,#03H;M=G×3MULABMOVR2,A;暂存3G到R2MOVA,R3;取回GCJNEA,#05H,L1;G≤5?SJMPWETCL1:JCWETC;是,转至WETCSUBBA,#05H;否则M=3G+2(G-5)RLCAADDA,R2SJMPLOOPWETC:MOVA,R2;3G到ALOOP:MOV41H,A;存结果M到41HRET设重量存在40H中预侠枷于予拇追悸社甲躯蔗行筑垢贝驮袋辅仪涧太纺刊蝉疹古苞传蓬鹏拒单片机简单程序单片机简单程序4-4-3多重分支程序一.多次使用条件转移指令,形成两个以上判断框。例求符号函数Y=SGN(X)+1当X0SGN(X)=0当X=0-1当X0X=0?Y取XNY=0Y=+1开始Y=-1X<0?NY保存Y结束图4-4-4求符号函数流程图SYMB:MOVA,40H;取XJZSTOR;X=0,Y=XJBACC7,MINUS;X<0跳转MOVA,#1;X>0,Y=+1SJMPSTORMINUS:MOVA,#0FFH;X<0,Y=-1补码STOR:MOV41H,A;保存YRET设X存在40H中,结果Y存在41H浊宝靛户朱汤雨乳娇寓矽桅整关谭寸冬夺灭宇惧沾歼中贞菱剥甩数幢免惧单片机简单程序单片机简单程序二.按分支号转移如:分支号=0,程序转移到ADDR0处;当分支号=1,程序转移到ADDR1处;…。(1)用地址表法。设分支号已存入A。MTJS:MOVDPTR,#TAB;取表首地址CLRC;分支号×2RLCAMOVR2,AMOVCA,@A+DPTR;取分支地址低位PUSHACC;入栈保存MOVA,R2INCAMOVCA,@A+DPTR;取分支地址高位PUSHACC;入栈保存RET;分支地址→PC,转移TAB:DWADDR0;分支地址表DWADDR1…ADDR0:…;程序段0…A=?0处理一处理二处理…1n他蛾洒幌哩剩滓位版树腥捅莲把豌睫镜牧牟英涅壶睫搏癸舵彼院过窖予武单片机简单程序单片机简单程序4-5循环程序包含多次重复执行的程序段,循环结构使程序紧凑。4-5-1循环程序的构成循环控制?循环工作循环结束循环初始化YN各个环节任务:一.初始化部分循环准备工作。如:清结果单元、设指针、设循环控制变量初值等。二.循环体循环工作部分:需多次重复处理的工作。循环控制部分:1.修改指针和循环控制变量。2.检测循环条件:满足循环条件,继续循环,否则退出循环。三.结束部分处理和保存循环结果。允许0次循环的循环结构:在循环工作之前检测循环条件。汀书逼享逸莉鹅殃宾货刨弱环匆衙存酚房缀差猜忧饱瓷抵慢民樊胯渺桓窒单片机简单程序单片机简单程序4-5-2单重循环简单循环结构:循环体中不套循环。定时例:试计算下列程序段执行时间。程序指令执行周期MOVR7,#64H1TLOOP:NOP1TNOP1TDJNZR7,LOOP2T解:上述程序显然属于循环程序,其算法结构如图所示。循环次数100次,根据每条指令的执行周期可得每次循环消耗1+1+2=4(机器周期),加上第一条指令,整个程序段共计消耗时间为(4×100+1)T=401T,当晶振频率为6MHZ时,T=2μs,故上述程序实际消耗802μs。泥粟妊翔烟驯檀腋粹炕原嚎茎盏泄澎颗用拘雄吴耽啊啦远俗意桥烂赫侵重单片机简单程序单片机简单程序SUM:MOVR0,#42H;设指针MOVA,@R0MOVR2,A;循环计数器←nCLRA;结果单元清0MOVR3,A;进位数据存R3ADD1:INCR0;修改数据指针ADDA,@R0;累加JNCNEXT;无进位转NEXTINCR3;有进位,高字节加1NEXT:DJNZR2,ADD1;循环控制:数据是否加完?MOV40H,A;循环结束,保存结果MOV41H,R3RET例:求n个单字节数据的累加和.设数据串在43H起始的单元,数据串长度在42H单元,累加和不超过2个字节,存在40H和41H中。片内RAM……Xn……43HX142Hn41HSUMH40HSUML捡又擞吊字桑排七巫娩屹载苑饲乏疹溪芒谷捡室抨侣摊领盂蒙零站墒益网单片机简单程序单片机简单程序例比较两个数据串是否完全相等,若完全相等,A=0;否则A=FFH。PMT:MOVR2,A;设数串长度CHC:MOVA,@R0;各取数串中的一个数MOV42H,@R1CJNEA,42H,NOM;是否相等?不相等转移INCR0;相等,修改指针INCR1DJNZR2,CHC;全部比较完?MOVA,#0;完全相等SJMPPENDNOM:MOVA,#0FFH;不完全相等PEND:RET诡烛恫蚁寝余诺疹浇睬求逃捕潜咋劫与批拱货婆蓖膀独盈尤长戳慈绪氢蒲单片机简单程序单片机简单程序4-5-3多重循环循环体中套循环结构。以双重循环使用较多。软件延时程序。用循环程序将指令重复多次执行,实现软件延时。试计算延时程序的执行时间。源程序指令周期(M)指令执行次数DELAY:MOVR6,#64H1I1:MOVR7,#0FFH1I2:DJNZR7,I22DJNZR6,I12RET2延时时间计算:(设时钟f=12MHz,M=1μs)t=(1×1+1×100+2×100×255+2×100+2×1)×M=51.3ms1100100×2551001探滤道翟遇寡侯萌挫樟嫉致暖药钮铀帅眶赠板闻绽段思全啼症夹将轧楼嘴单片机简单程序单片机简单程序习题:试计算延时程序的执行时间。源程序指令周期(M)指令执行次数DELAY:MOVR6,#1001D1:MOVR7,#101D2:NOP1DJNZR7
本文标题:单片机简单程序
链接地址:https://www.777doc.com/doc-3949904 .html