《汇编语言的单片机程序设计.ppt》由会员分享,可在线阅读,更多相关《汇编语言的单片机程序设计.ppt(39页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、汇编语言的单片机程汇编语言的单片机程序设计序设计单片机接口技术及应用单片机接口技术及应用 汇编语言的单片机程序设计汇编语言的单片机程序设计 应用用电子系子系3 汇编语言的单片机程序设计汇编语言的单片机程序设计课程程目目录n一、程序设计概述一、程序设计概述n二、汇编语言的伪指令二、汇编语言的伪指令n三、汇编语言的典型程序结构三、汇编语言的典型程序结构n四、汇编语言的子程序设计四、汇编语言的子程序设计n五、汇编语言实用子程序举例五、汇编语言实用子程序举例n六、几个端口实验的任务书六、几个端口实验的任务书2022/11/1应用用电子系子系4单片机程序设计五、五、五、五、汇编语汇编语言言言言实实用子程
2、序用子程序用子程序用子程序举举例例例例1.1.延时子程序设计延时子程序设计例:编写例:编写10ms延时子程序。(假设晶振频率为延时子程序。(假设晶振频率为12MHZ)D10ms:MOV R5,#10 ;1usD1ms:MOV R4,#249 ;1us DL:NOP NOP DJNZ R4,DL ;4x249=996us DJNZ R5,D1ms ;2us,总循环共(1+996+2)10=9990us RET;2us2022/11/1应用用电子系子系5单片机程序设计五、五、五、五、汇编语汇编语言言言言实实用子程序用子程序用子程序用子程序举举例例例例延时子程序设计要点:延时子程序设计要点:u初始化
3、:循环次数赋值初始化:循环次数赋值u循环体次数计算:晶振频率循环体次数计算:晶振频率机器周期机器周期循循环体时间环体时间循环次数循环次数u精确计算:考虑赋值次数与时间,还要考虑精确计算:考虑赋值次数与时间,还要考虑进入与返回时间进入与返回时间u进入时,应注意子程序使用到的寄存器的保进入时,应注意子程序使用到的寄存器的保护;返回时,无参数带出。护;返回时,无参数带出。u多时间延时子程序如何设计?多时间延时子程序如何设计?外循环次数参数带入,内循环时间固定。外循环次数参数带入,内循环时间固定。2022/11/1应用用电子系子系6单片机程序设计五、五、五、五、汇编语汇编语言言言言实实用子程序用子程序
4、用子程序用子程序举举例例例例子程序:DLnms:NOPD1ms:MOV R4,#249 DL:NOP NOP DJNZ R4,DL DJNZ R5,D1ms RET;主程序:MOV R5,#n CALL DLnms 多多时间延延时子程序子程序调用用2022/11/1应用用电子系子系7单片机程序设计五、五、五、五、汇编语汇编语言言言言实实用子程序用子程序用子程序用子程序举举例例例例2.2.输入设备子程序设计输入设备子程序设计拨码开关电路设计拨码开关电路设计拨码开关状态的读取?拨码开关状态的读取?设置输入端口读输入端口保存输入值KEYRD:MOV P3,#0FFH MOV A,P3 MOV R5,
5、A RET2022/11/1应用用电子系子系8单片机程序设计五、五、五、五、汇编语汇编语言言言言实实用子程序用子程序用子程序用子程序举举例例例例轻触开关电路设计轻触开关电路设计轻触开关状态的读取?轻触开关状态的读取?设置输入端口读输入端口去抖动保存输入值2022/11/1应用用电子系子系9单片机程序设计五、五、五、五、汇编语汇编语言言言言实实用子程序用子程序用子程序用子程序举举例例例例ANYKEY:MOV P3,#0FFHNOKEY:MOV A,P3 CPL A JZ NOKEY ;无无键按下按下 MOV TEMP,P3;有有键按下,按下,TEMP为存存储器器单元,保存元,保存结果果 CALL
6、 D10ms MOV A,P3 CJNE A,TEMP,NOKEY;去抖去抖 MOV R5,A;保存按保存按键 SETB 00H;有有键标志志 RET 2022/11/1应用用电子系子系10单片机程序设计五、五、五、五、汇编语汇编语言言言言实实用子程序用子程序用子程序用子程序举举例例例例例:有二个轻触开关,分别控制二个计数器,例:有二个轻触开关,分别控制二个计数器,每按一次,计数器加每按一次,计数器加1,最大分别加到,最大分别加到5与与9,又从,又从0开始。编写其子程序。开始。编写其子程序。寄存器资源分配:寄存器资源分配:R3、R4:保存计数值:保存计数值 R5:保存开关值:保存开关值设计关键
7、点:设计关键点:是否有按键?是否有按键?有按键,是什么键?有按键,是什么键?是否同一次按下的键?是否同一次按下的键?2022/11/1应用用电子系子系11单片机程序设计五、五、五、五、汇编语汇编语言言言言实实用子程序用子程序用子程序用子程序举举例例例例按键判断、去抖按键判断、去抖ANYKEY:MOV P3,#03HNOKEY:MOV A,P3 ORL A,#0FCH CPL A JZ NOKEY MOV TEMP,A CALL D10MS MOV A,P3 ORL A,#0FCH CPL A CJNE A,TEMP,NOKEY MOV R5,A RETKEYAGIN:MOV P3,#03HKE
8、YTA:MOV A,P3 ORL A,#0FCH CPL A CJNE A,TEMP,KEYCH SJMP KEYTAKEYCH:NOP RET按键释放判断按键释放判断2022/11/1应用用电子系子系12单片机程序设计五、五、五、五、汇编语汇编语言言言言实实用子程序用子程序用子程序用子程序举举例例例例计数控制计数控制COUNTER:MOV A,R5 CJNE A,#01,KEY2CON CJNE R3,#05,CON1ADD MOV R3,#00H SJMP CONOVERCON1ADD:INC R3 SJMP CONOVERKEY2CON:CJNE R4,#09H,CON2ADD MOV
9、R4,#00H SJMP CONOVERCON2ADD:INC R4CONOVER:NOP RET2022/11/1应用用电子系子系13单片机程序设计五、五、五、五、汇编语汇编语言言言言实实用子程序用子程序用子程序用子程序举举例例例例主程序引用:主程序引用:TEMP EQU 30H ORG 0000H LJMP MAIN ORG 00100HMAIN:MOV R3,#00HMOV R4,#00HLOOP:LCALL DISPLCALL ANYKEYLCALL COUNTERLCALL KEYAGIN SJMP LOOPDISP:MOV A,R3 SWAP A ORL A,R4 MOV P1,A
10、 RET 2022/11/1应用用电子系子系14单片机程序设计五、五、五、五、汇编语汇编语言言言言实实用子程序用子程序用子程序用子程序举举例例例例问题:问题:1.1.分析程序工作过程分析程序工作过程多个子程序调用关系多个子程序调用关系2.2.如何分解任务(判键如何分解任务(判键去抖去抖计数计数键盘再键盘再次判断次判断显示)显示)3.3.显示从显示从P1P1口输出,用发光二极管代替,也可口输出,用发光二极管代替,也可以用带译码的数码实现以用带译码的数码实现4.4.修改程序,将程序修改为二键,先选择需要修改程序,将程序修改为二键,先选择需要调整的计数位(可以闪烁显示),再用相同二调整的计数位(可以
11、闪烁显示),再用相同二键分别实现加减功能改变计数值。键分别实现加减功能改变计数值。2022/11/1应用用电子系子系15单片机程序设计五、五、五、五、汇编语汇编语言言言言实实用子程序用子程序用子程序用子程序举举例例例例3.3.信号处理信号处理(运算运算)子程序设计子程序设计例:例:编写多字写多字节无符号数的减法子程序。无符号数的减法子程序。设2个个多字多字节无符号数的低字无符号数的低字节地址分地址分别存于存于R0和和R1中,低字中,低字节在高地址在高地址单元。相减后的差存元。相减后的差存放在减数原来的位置。放在减数原来的位置。子程序入口:子程序入口:(R0)=被减数低字被减数低字节地址;地址;
12、(R1)=减数的低字减数的低字节地址;地址;(R7)=字字节数数子程序出口:子程序出口:(R1)=差的高字差的高字节地址;地址;2022/11/1应用用电子系子系16单片机程序设计五、五、五、五、汇编语汇编语言言言言实实用子程序用子程序用子程序用子程序举举例例例例程序:程序:ORG 0000H ljmp MAIN ORG 0040HMAIN:MOV R0,#37H MOV R1,#3FH ACALL NSUB SJMP$NSUB:MOV R7,#3 CLR CNSUB1:MOV A,R0 SUBB A,R1 MOV R1,A DEC R0 DEC R1 DJNZ R7,NSUB1 INC R1
13、 RET END2022/11/1应用用电子系子系17单片机程序设计五、五、五、五、汇编语汇编语言言言言实实用子程序用子程序用子程序用子程序举举例例例例例:利用子程序例:利用子程序实现c=a2+b2。设a,b,c分分别存于存于内部内部RAM的的30H,31H,32H三个三个单元中。元中。子程序入口子程序入口:(A)=预平方数;平方数;子程序出口子程序出口:(A)=平方平方值;2022/11/1应用用电子系子系18单片机程序设计五、五、五、五、汇编语汇编语言言言言实实用子程序用子程序用子程序用子程序举举例例例例SQR:MOV DPTR,#TAB MOVC A,A+DPTR RETTAB:DB 0
14、,1,4,9,16,25,36,49,64,81 ENDORG 0000H LJMP MAIN ORG 0040HMAIN:MOV 30H,#4 MOV 31H,#5 MOV A,30H ACALL SQR MOV R1,A MOV A,31H ACALL SQR ADD A,R1 MOV 32H,A SJMP$2022/11/1应用用电子系子系19单片机程序设计五、五、五、五、汇编语汇编语言言言言实实用子程序用子程序用子程序用子程序举举例例例例例:将例:将1位十六位十六进制数制数转换成相成相应的的ASCII码。设十十六六进制数存放在制数存放在R0中,中,转换后的后的ASCII码存放于存放于R
15、2中。中。ORG 0000H ljmp MAINORG 0040H MAIN:MOV R0,#0BH ACALL HASC SJMP$HASC:MOV A,R0 ANL A,#0FH PUSH ACC CLR C SUBB A,#0AH POP ACC JC LOOP ADD A,#07HLOOP:ADD A,#30H MOV R2,A RET END2022/11/1应用用电子系子系20单片机程序设计五、五、五、五、汇编语汇编语言言言言实实用子程序用子程序用子程序用子程序举举例例例例例:双字例:双字节二二进制数制数转换成成BCD码。设(R2R3)为双字双字节二二进制数,(制数,(R4R5R6
16、)为转换完完的的压缩型型BCD码。ORG 0000H ljmp MAIN ORG 0040HMAIN:MOV R2,#0B2H MOV R3,#1BH ACALL DCDTH SJMP$2022/11/1应用用电子系子系21单片机程序设计五、五、五、五、汇编语汇编语言言言言实实用子程序用子程序用子程序用子程序举举例例例例DCDTH:CLR A MOV R4,A MOV R5,A MOV R6,A MOV R7,#16LOOP:CLR C MOV A,R3 RLC A MOV R3,A MOV A,R2 RLC A MOV R2,A MOV A,R6 ADDC A,R6 DA A MOV R6,
17、A MOV A,R5 ADDC A,R5 DA A MOV R5,A MOV A,R4 ADDC A,R4 DA A MOV R4,A DJNZ R7,LOOP RET END2022/11/1应用用电子系子系22单片机程序设计五、五、五、五、汇编语汇编语言言言言实实用子程序用子程序用子程序用子程序举举例例例例4.4.输出设备子程序设计输出设备子程序设计例:数据端与P0口正序连接。编写程序,实现功能:上电后数码管显示“P”,1秒后,显示从“0”开始每隔1秒加1,加至“F”后,数码管显示“P”,重新开始。2022/11/1应用用电子系子系23单片机程序设计五、五、五、五、汇编语汇编语言言言言实实
18、用子程序用子程序用子程序用子程序举举例例例例ORG 0000H JMP START ORG 0100HSTART:MOV SP,#5FH MOV P0,#8CH;显示示P MOV P3,#0FFH CALL D_1S CALL DISP JMP START2022/11/1应用用电子系子系24单片机程序设计五、五、五、五、汇编语汇编语言言言言实实用子程序用子程序用子程序用子程序举举例例例例DISP:MOV R7,#16 MOV R2,#0LOOP:MOV A,R2 MOV DPTR,#CODE_P0 MOVC A,A+DPTR MOV P0,A INC R2 SETB RS0;切切换组 CAL
19、L D_1S CLR RS0 DJNZ R7,LOOP RET D_1S D_1S:(子程序):(子程序)CODE_P0:DB 0C0H,0F9H,0A4H,0B0HCODE_P0:DB 0C0H,0F9H,0A4H,0B0H DB 99H,92H,82H,0F8H DB 99H,92H,82H,0F8H DB 80H,90H,88H,83H,DB 80H,90H,88H,83H,DB 0C6H,0A1H,86H,8EH DB 0C6H,0A1H,86H,8EH 2022/11/1应用用电子系子系25单片机程序设计五、五、五、五、汇编语汇编语言言言言实实用子程序用子程序用子程序用子程序举举例例
20、例例有时为方便走线而采用逆序连接,显示段码要进有时为方便走线而采用逆序连接,显示段码要进行调整:行调整:CODE_P2:DB CODE_P2:DB 03H,9FH,25H,0DH,99H,49H,40H,1FH03H,9FH,25H,0DH,99H,49H,40H,1FH DB DB 01H,09H,11H,0C1H,63H,85H,61H,71H01H,09H,11H,0C1H,63H,85H,61H,71HCODE_P0:DB CODE_P0:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8
21、H DB DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH80H,90H,88H,83H,0C6H,0A1H,86H,8EH试比较:试比较:2022/11/1应用用电子系子系26单片机程序设计六、几个端口六、几个端口实验的任的任务书1.1.本章总结本章总结2.2.编程思路编程思路3.3.端口输入出与编程验证端口输入出与编程验证2022/11/1应用用电子系子系27单片机程序设计六、几个端口六、几个端口实验的任的任务书例:例:P1口与开关及口与开关及LED发光二极管的接口光二极管的接口电路如路如图所示,所示,其中,其中,P1.7P1.4作并行作并行输出口,分出口,分别与与
22、LED3LED0连接。当接。当输出出为1,即高,即高电平平时,LED不不发光;光;输出出为0,即低,即低电平,平,LED发光。光。P1.3P1.0作并行作并行输入口,分入口,分别接开关接开关K3K0,通通过开关的不同位置向开关的不同位置向P1.3P1.0输入入“0”或或“1”开关信号。开关信号。要求要求读入入P1.3P1.0引脚上的引脚上的开关开关K3K0的的预置状置状态,再,再经P1.7P1.4输出出驱动LED3LED0发光二极管,使光二极管,使发光二极管光二极管显示示开关状开关状态。2022/11/1应用用电子系子系28单片机程序设计六、几个端口六、几个端口实验的任的任务书LED34.7K
23、K31KK21KK11KK01K+5VLED24.7KLED14.7KLED0P1.77407P1.3P1.2P1.1P1.08051P1.67407P1.57407P1.474074.7K2022/11/1应用用电子系子系29单片机程序设计六、几个端口六、几个端口实验的任的任务书编写程序如下:ORG0000HMAIN:MOV A,#0FFH MOV P1,A;置P1低4位为输入,高4位输出灭显示 MOV A,P1;输入P1低4位的开关状态 SWAP A;将低4位输入的数据转到高4位 MOV P1,A;将开关状态输出驱动相应的LED显示HERE:SJMP HEREEND2022/11/1应用用
24、电子系子系30单片机程序设计六、几个端口六、几个端口实验的任的任务书用一个准备好状态标志来表示每当开关状态K3K0设置完成后,将准备好状态标志置“1”,否则此标志为“0”,用一个开关S表示,当按钮按下P2.3引脚为“1”,说明开关设置完成。S开关不下压,P2.3=0,未准备好。那么,CPU就查询这个“S”,一直查到S=1为止。输入过程如图:设置设置K3K3K0K0查查S=1S=1否?否?S=1S=1输入输入数据数据送送L3L3L0L0 显示显示2022/11/1应用用电子系子系31单片机程序设计六、几个端口六、几个端口实验的任的任务书LED34.7KK31KK21KK11KK01K+5VLED
25、24.7KLED14.7KLED0P1.77407P1.3P1.2P1.1P1.08051P1.67407P1.57407P1.474074.7K RVCCS P2.32022/11/1应用用电子系子系32单片机程序设计六、几个端口六、几个端口实验的任的任务书输入状态信息输入状态信息输入数据输入数据Ready?N NY Y程序如下:程序如下:TEST:MOV P2,#0FFH MOV A,P2 ANLA,#01H JZTEST MOV P1,#0FH MOV A,P1 SWAP A MOV P1,A 修改程序,用修改程序,用一个主程序一个主程序+2个子程序个子程序实现2022/11/1应用用电
26、子系子系33单片机程序设计六、几个端口六、几个端口实验的任的任务书P1.3P1.2P1.1P1.0P2.0RVCCSP1.7P1.6P1.5P1.47447DCBA8051例:用一片例:用一片74LS4(BCD-七段数七段数码转换器码转换器)可外接一)可外接一只只共阳极七段数码管共阳极七段数码管。要求不用延时的方法要求不用延时的方法看到显示内容。欲显看到显示内容。欲显示的数据事先放在片示的数据事先放在片内内RAM30H起始的数起始的数据区内,共据区内,共10个显示个显示内容。内容。2022/11/1应用用电子系子系34单片机程序设计六、几个端口六、几个端口实验的任的任务书2022/11/1思考
27、与实践1、数据端与数据端与P0口口正序正序连接。接。编写程序,分写程序,分别实现功能:上功能:上电后数后数码管管显示示“P”,按下任何,按下任何键后,后,显示从示从“0”开始每隔开始每隔1秒加秒加1,加至,加至“F”后,后,数数码管管显示示“P”,进入等待按入等待按键状状态。2、数据端与数据端与P0口口逆序逆序连接,有二个接,有二个轻触开关与触开关与P3连接。接。编写程序,分写程序,分别实现功能:功能:上上电后数后数码管管显示示“P”闪烁,按下其中一,按下其中一键后,后,变化字符,字符有化字符,字符有16种种变化;按下另一化;按下另一键,变化化闪烁频率,有率,有10种明种明显的的频率率变化。化。2022/11/1谢谢大家!2022/11/1应用用电子系子系37单片机程序设计三、三、汇编语言的典型程序言的典型程序结构构2022/11/1思考与实践2022/11/1应用用电子系子系39单片机程序设计三、三、汇编语言的典型程序言的典型程序结构构2022/11/1