第4章AT89S51汇编语言程序设计.ppt

上传人:王** 文档编号:595559 上传时间:2023-12-08 格式:PPT 页数:44 大小:518.50KB
下载 相关 举报
第4章AT89S51汇编语言程序设计.ppt_第1页
第1页 / 共44页
第4章AT89S51汇编语言程序设计.ppt_第2页
第2页 / 共44页
第4章AT89S51汇编语言程序设计.ppt_第3页
第3页 / 共44页
第4章AT89S51汇编语言程序设计.ppt_第4页
第4页 / 共44页
第4章AT89S51汇编语言程序设计.ppt_第5页
第5页 / 共44页
第4章AT89S51汇编语言程序设计.ppt_第6页
第6页 / 共44页
第4章AT89S51汇编语言程序设计.ppt_第7页
第7页 / 共44页
第4章AT89S51汇编语言程序设计.ppt_第8页
第8页 / 共44页
第4章AT89S51汇编语言程序设计.ppt_第9页
第9页 / 共44页
第4章AT89S51汇编语言程序设计.ppt_第10页
第10页 / 共44页
亲,该文档总共44页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第4章AT89S51汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《第4章AT89S51汇编语言程序设计.ppt(44页珍藏版)》请在优知文库上搜索。

1、第第4 4章章 AT89S51AT89S51汇编语言程序设计汇编语言程序设计2 4.1.2 4.1.2 汇编语言语句和格式汇编语言语句和格式 两种基本语句:两种基本语句:指令语句指令语句和和伪指令语句伪指令语句。(1 1)指令语句)指令语句 汇编语言汇编语言四分段四分段格式格式:START:MOV A,#00H ;0A MOV R1,#10 ;10R1 MOV R2,#00000011B ;03HR2LOOP:ADD A,R2 ;(A)+(R2)A DJNZ R1,LOOP ;R1减减1不为零,则跳不为零,则跳 LOOP处处 NOPHERE:SJMP HERE标号字段标号字段(LABLE)操作

2、码字段操作码字段(OPCODE)操作数字段操作数字段(OPRAND)注释字段注释字段(COMMENT)(2 2)伪指令语句)伪指令语句又又称为称为汇编程序控制命令汇编程序控制命令。没有相应的机器代码产生。没有相应的机器代码产生。伪指令具有控制汇编程序的输入伪指令具有控制汇编程序的输入/输出、定义数据和符号、条输出、定义数据和符号、条件汇编、分配存储空间等功能。件汇编、分配存储空间等功能。1ORG(ORiGin)汇编起始地址命令)汇编起始地址命令例如:例如:ORG2000HSTART:MOVA,#00H 在一源程序中,可多次用在一源程序中,可多次用ORG指令,规定不同程序段的起始地址指令,规定不

3、同程序段的起始地址。地址地址必须由小到大排列,且不能交叉必须由小到大排列,且不能交叉、重叠。重叠。2.2.END(END of Assembly)END(END of Assembly)汇编终止命令汇编终止命令源程序源程序结束标志结束标志,终止源程序的汇编工作。终止源程序的汇编工作。3 3EQUEQU(EQUateEQUate)标号赋值命令)标号赋值命令用于用于给标号赋值给标号赋值。赋值后,标号值在整个程序有效。赋值后,标号值在整个程序有效。例如:例如:TESTTESTEQU 2000HEQU 2000HTEST=2000HTEST=2000H,汇编时,凡是遇到,汇编时,凡是遇到TESTTES

4、T时,均以时,均以2000H2000H来代替。来代替。4DB(Define Byte)定义数据字节命令)定义数据字节命令在程序存储器单元中定义字节数据。例如:在程序存储器单元中定义字节数据。例如:ORG2000HDB30H,40H,24,C,B汇编后汇编后(2000H)=30H(2001H)=40H(2002H)=18H(十进制数十进制数24)(2003H)=43H(字符字符“C”的的ASCII码码)(2004H)=42H(字符字符“B”的的ASCII码码)十进制数十进制数自然转换成十六进制数,字母按自然转换成十六进制数,字母按ASCII码存储。码存储。6 5DW(Define Word)定义

5、数据字命令)定义数据字命令 在程序存储器单元中定义在程序存储器单元中定义16位的数据字。例如:位的数据字。例如:ORG 2000HDW 1246H,7BH,10汇编后(2000H)=12H;第1个字(2001H)=46H(2002H)=00H;第2个字(2003H)=7BH(2004H)=00H;第3个字(2005H)=0AHDBDB、DWDW和和DSDS命令命令只能对程序存储器有效,只能对程序存储器有效,不能对数据存储器不能对数据存储器使用。使用。6DS(Define Storage)定义存储区命令)定义存储区命令 NOP从指定地址开始,保留指定数目的字节单元作为存储区。从指定地址开始,保留

6、指定数目的字节单元作为存储区。例如:例如:TABEL:DS10 表示从表示从TABEL代表的地址开始,保留代表的地址开始,保留10个连续的地址单元。个连续的地址单元。例如例如:ORG2000HDS10 H表示从表示从2000H地址开始,保留地址开始,保留16个连续地址单元。个连续地址单元。7 7BIT BIT 位定义命令位定义命令用于给字符名称赋以位地址,位地址可以是绝对位地址,也可是用于给字符名称赋以位地址,位地址可以是绝对位地址,也可是符号地址。例如:符号地址。例如:QAQABIT P1.6BIT P1.6功能是把功能是把P1.6P1.6的位地址赋给变量的位地址赋给变量QAQA。4.2 4

7、.2 汇编语言源程序的汇编汇编语言源程序的汇编汇编可分为汇编可分为手工汇编手工汇编和和机器汇编机器汇编两类。两类。4.3 AT89S514.3 AT89S51汇编语言程序设计举例汇编语言程序设计举例4.3.1 4.3.1 子程序设计子程序设计优点:优点:程序结构简单,缩短程序设计时间,减少存储空间。程序结构简单,缩短程序设计时间,减少存储空间。1 1子程序的设计原则和应注意的问题子程序的设计原则和应注意的问题(1 1)子程序入口地址,前必须有标号。)子程序入口地址,前必须有标号。(2 2)主程序是通过调用指令来实现。有)主程序是通过调用指令来实现。有两条子程序调用指令。两条子程序调用指令。AC

8、ALL ACALL addr11addr11。addr11addr11指出了调用的目的地址,指出了调用的目的地址,PCPC中中1616位地位地址中的高址中的高5 5位不变,即只能在同一个位不变,即只能在同一个2KB2KB区内。区内。LCALL addr16LCALL addr16长调用指令长调用指令。(3 3)子程序结构中必须用到堆栈,用来进行断点和现场的保护。)子程序结构中必须用到堆栈,用来进行断点和现场的保护。(4 4)子程序返回主程序时,最后一条指令必须是)子程序返回主程序时,最后一条指令必须是RETRET指令。指令。(5 5)子程序可以嵌套,即主程序可以调用子程序,子程序又可)子程序可

9、以嵌套,即主程序可以调用子程序,子程序又可以调用另外的子程序。以调用另外的子程序。2子程序的基本结构子程序的基本结构MAIN:;MAIN为主程序入口标号LCALL SUB ;调用子程序SUB 子程序SUB:PUSH PSW ;现场保护 PUSH AccPOP Acc ;现场恢复,注意要先进后出POP PSW RET ;最后一条指令必须为RET子程序处理程序段子程序子程序4.3.2 4.3.2 查表程序设计查表程序设计(1 1)MOVC MOVC A A,A+DPTRA+DPTR(2 2)MOVC MOVC A A,A+PCA+PC【例例4-3】设计一子程序,功能是根据累加器A中的数x(09之间

10、)查x的平方表y,根据x的值查出相应的平方y。本例中的x和y均为单字节数。地地 址址 子程序子程序Y3Y2Y1Y0 ADD A,#01HY3Y2Y1Y0+2 MOVC A,A+PCY3Y2Y1Y0+3 RETY3Y2Y1Y0+4DB 00H,01H,04H,09H,10H DB 19H,24H,31H,40H,51H ;数09的平方表如果DPTR已被使用,则在查表前必须保护DPTR,且结束后恢复DPTR,例4-3可改成如下形式:PUSH DPH ;保存DPH PUSH DPL ;保存DPL MOV DPTR,#TAB1MOVC A,A+DPTRPOP DPL ;恢复DPLPOP DPH ;恢复

11、DPHRETTAB1:DB 00H,01H,04H,09H,10H;平方表 DB 19H,24H,31H,40H,51H【例例4-4】有一巡回检测报警装置,需对16路(x)输入进行检测,每路有一个最大允许值(y),为双字节数。需根据测量的路数(x),查表找出对应该路的最大允许值(y),看输入值是否大于最大允许值,如果大于就报警。取路数为x(0 x15),y为最大允许值,放在表格中。设进入查表程序前,假设路数x已放于R2中,查表后该路的最大允许值y放于R3R4中。查表程序如下:TB3:MOV A,R2ADD A,R2 ;(R2)*2(A)MOV R3,A ;保存指针 ADD A,#6 ;加偏移量

12、MOVC A,A+PC ;查第一字节XCH A,R3 ADD A,#3 MOVC A,A+PC ;查第二字节 MOVR4,ARETTAB3:DW 1520,3721,42645,7580 ;最大值表 DW 3483,32657,883,9943DW 10000,40511,6758,8931DW 4468,5871,13284,27808【例例4-54-5】以以AT89S51AT89S51为核心的温度控制器,温度传感器输出为核心的温度控制器,温度传感器输出的电压与温度为非线性关系,传感器输出的电压已由的电压与温度为非线性关系,传感器输出的电压已由A/DA/D转换为转换为1010位二进制数。测得

13、的不同温度下的电压值数据构成一个表,表位二进制数。测得的不同温度下的电压值数据构成一个表,表中温度值为中温度值为y y(双字节无符号数),(双字节无符号数),x x(双字节无符号数)为电压(双字节无符号数)为电压值数据。设测得电压值值数据。设测得电压值x x放入放入R2R3R2R3中,根据中,根据电压值电压值x x,查找对应的,查找对应的温度值温度值y y,仍放入,仍放入R2R3R2R3中。程序如下:中。程序如下:LTB2:MOVDPTR,#TAB2MOVA,R3CLRC RLCA MOVR3,A XCHA,R2 RLCA XCHR2,A MOV R3,A ADDA,DPL ;(R2R3)+(

14、DPTR)(DPTR)MOVDPL,A MOVA,DPH ADDC A,R2 MOVDPH,A CLRA MOVC A,A+DPTR ;查第一字节MOVR2,A ;第一字节存入R2中CLRAINCDPTRMOVC A,A+DPTR ;查第二字节MOVR3,A ;第二字节存入R3中RETTAB2:DW,;温度值表4.3.3 关键字查找程序设计关键字查找程序设计数据检索有两种方法,即顺序检索和对分检索。1顺序检索顺序检索要检索的表是无序无序的,检索时只能从第只能从第1项开始逐项查找项开始逐项查找,判断所取数据是否与关键字相等。【例例4-6】从50个字节的无序表中查找一个关键字“xxH”。ORG 1

15、000HMOV 30H,#xxH;关键字xxH送30H单元MOV R1,#50 ;查找次数送R1MOV A,#14;修正值送AMOV DPTR,#TAB4;表首地址送DPTRLOOP:PUSH AccMOVC A,A+PC;查表结果送A CJNE A,40H,LOOP1 ;(40H)不等于关键字则转LOOP1 MOV R2,DPH ;查到关键字,把地址送R2,R3MOV R3,DPLDONE:RETLOOP1:POP Acc;修正值弹出INC A;A+1AINC DPTR;修改数据指针DPTRDJNZ R1,LOOP;R10,未查完,继续查找MOVR2,#00H;R1=0,R2和R3清0MOV

16、R3,#00H;表中50个数已查完AJMPDONE;从子程序返回 TAB4:DB,;50个无序数据表2对分检索对分检索对分检索的前提是检索的数据表已经排好序已经排好序,以便于按照对分原则取数。对分检索的方法对分检索的方法:取数据表中间位置的数与关键字进行比较,如相等,则查找结束。如果取数大于关键字取数大于关键字,则下次对分检索的范围是从数据区起点到本次取数处。如果取数小于关键字取数小于关键字,则下次对分检索的范围是从本次取数数据区起点到数据区终点。依此类推,逐渐缩小检索范围,减少次数,大大提高查找速度。214.3.4 数据极值查找程序设计数据极值查找程序设计【例例4-7】片内RAM中存放一批数据,查找出最大值并存放于首地址中。设R0中存放首地址,R2中存放字节数。程序如下:MOV R2,n;n为要比较的数据字节数MOV A,R0;存首地址指针MOV R1,ADEC R2MOV A,R1LOOP:MOV R3,ADEC R1CLR CSUBB A,R1;两个数比较JNC LOOP1;C=0,A中数大,跳LOOP1MOV A,R1;C=1,则大数送ASJMP LOOP2LOOP1:MOV

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

copyright@ 2008-2023 yzwku网站版权所有

经营许可证编号:宁ICP备2022001189号-2

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!