版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第四章 汇编语言程序设计4.1 常用的伪指令 定义汇编起始位置伪指令ORG ORG nn ;nn为16位地址 例如: ORG 2000H ;定义了下面指令的地址是从2000H开始 MOV SP,#80H ;设堆栈 . 赋值伪指令EQU 字节名称 EQU 数据(或地址或汇编符号)例如: LED_AB EQU 2000H ;LED_AB 等于 2000H NUMB EQU 30H KK EQU R0 一般放在程序开头,赋值后不能更改9/29/2022 定义字节常量DB(查表用) 标号: DB 8位二进数表例如: TAB1: DB 12H,34H,77H, TAB2: DB 07H,44H, 定义字
2、常量DW(查表用) 标号: DW 16位二进数表例如:(每个字占个字节,高8位在先,低8位在后) ORG 1000H TAB: DW 1234H,3CH, 9/29/2022 预留存储空间伪指令DS 标号: DS 表达式 从定义地址开始保留DS之后表达式的值所规定的存储单元,以备后用。例如: ORG 1000H DS 08H DB 30H,8AH 汇编以后,从1000H保留8个单元,然后从1008H开始给内存赋值,即 (1008H)=30H (1009H)=8AH9/29/2022位地址符号伪指令BIT 位名称 BIT I/O口(或位地址)例如: CLK BIT P1.4 ;定义P1.4为CL
3、K AD_CS BIT P1.6 ;定义P1.6为AD_CS FLG BIT 00H ;定义00H位地址为FLG定义汇编结束指令END 标号: END 地址或标号 END 指令一定要放到程序的最后,否则不会编译!9/29/20224.2 汇编程序设计过程 明确课题的任务(硬件/功能/精度等); 按功能,分块规划程序结构(模块设计/子程序); 分配存储器资源(定义变量/设堆栈.); 根据功能选择合适的指令组合; 对源程序进行编译,调试和修改; 烧写代码(下载代码.)。 9/29/2022中断向量入口地址表中 断 源 入口地址 外部中断0 0003H 定时计数器T0溢出 000BH 外部中断1 0
4、013H 定时计数器T1溢出 001BH 串行口中断 0023H 定时计数器T2溢出或T2EX输入负跳变 002BH 9/29/20224.3 汇编程序的结构CLK BIT P1.7 ;I/O口定义.NUB EQU 2020H ;常数或地址定义. . ;定义变量或常数ORG 0000H ;复位入口地址(上电)LJMP MAIN ;跳到主程序ORG 0003H ;INT0入口地址(P3.2)LJMP T_INT0 ;跳到INT0中断程序ORG 000BH ;定时器T0入口地址(P3.4)LJMP T_T0 ;跳到T0中断程序 ORG 0013H ;INT1入口地址(P3.3)LJMP T_INT
5、1 ;跳INT1中断程序ORG 001BH ;定时器T1入口地址(P3.5)LJMP T_T1 ;跳T1中断程序ORG 0023H ;串口入口地址(P3.0,P3.1)LJMP T_CK ;跳串口中断程序 . ; 9/29/2022 ORG 0100H T_INT0: . ;INT0中断子程序 RETIT_INT1: ;INT1中断子程序 RETIT_T0: ;T0中断子程序 RETIT_T1: ;T1中断子程序 RETIT_CK: ;串口中断子程序 RETI ;其他子程序. ; MAIN: MOV SP,#90H ;设堆栈(主程序部分) MOV IE, #00H ; ;其他指令 END ;结
6、束9/29/2022顺序程序分支程序 单分支 双分支 多分支循环程序 单重循环 多重循环常用程序结构9/29/2022顺序程序例1:4字节(双字)加法。将内部RAM 30H开始的4个单元中存放的4字节十六进制数和内部RAM 40H单元开始的4个单元中存放的4字节十六进制数相加,结果存放到40H开始的单元中。(如图所示)30H31H33H32H加数 1 存放处4FH23HABHA0H43H42H41H40H 7BH 56H 80H E8H加数 2 存放处43H42H41H40HCAH79H2BH89H相加结果存放处A0AB234FE880567B892B79CA19/29/2022 ORG000
7、0HMOVA,30HADD A,40HMOV40H,A;最低字节加法并送结果MOVA,31HADDCA,41HMOV41H,A;第二字节加法并送结果 MOVA,32HADDC A,42HMOV42H,A;第三字节加法并送结果MOVA,33HADDCA,43HMOV43H,A ;第四字节加法并送结果,进位位在CY中 SJMP $END源程序: 9/29/20229/29/2022分支程序条件成立?程序段下条指令NY程序段1条件成立?程序段2NY程序段2条件N=?程序段N-10N程序段1程序段N1N-1多分支单分支双分支9/29/2022单分支程序例2:如图所示,设计一段程序实现功能:如果寄存器A
8、中1的个数为奇数,所有的二极管发光;如果全0,则只让D1-VD4发光;否则全灭。9/29/2022开始位P=1?A=0?P2FFHP200HP20FH结束YYNN ORG 0000H MOV A,#00011100B JB P,JISHU JZ QUAN MOV P2,#00H SJMP TOendJISHU:MOV P2,#0FFH SJMP TOendQUAN:MOV P2,#0FHTOend: SJMP $ END流程图:源程序:判断奇偶标志位的值判断A的值是否为0A有偶数个1,二极管灭A有奇数个1,二极管全亮A为0,D1-D4亮9/29/2022A中1的个数为奇数9/29/2022A中
9、1的个数为09/29/2022A中1的个数为偶数9/29/2022双分支程序例3:内部RAM的40H单元和50H单元各存放了一个8位无符号数,请比较这两个数的大小,比较结果用发光二极管显示(LED为高有效): 若(40H)(50H),则P2.0管脚连接的D1发光; 若(40H)(50H),则P2.1管脚连接的D2发光。9/29/2022流程图XYXY,D1点亮CY1? XY, YND2点亮开始结束 X EQU 40H Y EQU 50H ORG0000H MOV P2,#0 MOV X,#78H MOV Y,#0F0H MOV A, X CLR C SUBB A,Y JC L1 ;CY=1,转
10、移到L1 SETB P2.0 ;CY=0,(40H)(50H),点亮P2.0 SJMP FIN ;直接跳转到结束等待 L1:SETB P2.1 ;(40H)(50H),点亮P2.1FIN:SJMP $ END 源程序9/29/2022多分支程序例4:在某单片机系统中,按下一按键,键值(代表哪个键被按下)存放在内部RAM的40H单元内。设计一段程序实现功能:如果(40H)=00H,调用子程序SUB1;如果(40H)=01H,调用子程序SUB2;如果(40H)=02H,调用子程序SUB3;如果(40H)=03H,调用子程序SUB4;如果(40H)=04H,调用子程序SUB5。9/29/2022流程
11、图.(40H)=?调SUB1调SUB2调SUB3调SUB4调SUB5=00H=02H=03H=04H=01H9/29/2022源程序 MOV A,40H MOV B,#3 MUL AB MOV DPTR,#TAB JMP A+DPTR TAB:LJMP SUB1 LJMP SUB2 LJMP SUB3 LJMP SUB4 LJMP SUB5(40H)3 传送给A 查表转移转移地址表 对AJMP指令应将分支序号乘以2, 转移范围为2KB;对LJMP指令应将分支序号乘以3, 转移范围为64KB。9/29/2022循环程序循环次数够否?循环初始化置循环次数循环体下一条指令NY9/29/2022定时程
12、序:用循环程序将指令重复多次执行,实现软件延时。 单重循环延时 例5:假设单片机的fosc=12MHz,计算单片机执行下面程序消耗的时间。DELAY: MOV R5,#TIME ;1机器周期 MM: NOP ;1机器周期 NOP ;1机器周期 DJNZ R5,MM ;2机器周期 RET ;2机器周期1T=12/12MHZ=1s执行完以上5条语句,所花时间:Tdelay=(1+(1+1+2)TIME+2)1s 第一条和第五条指令延时时间可忽略不计Tdelay=4TIME1s 最长定时:TIME=255时,Tdelay1ms9/29/2022多重循环延时例6:假设单片机的fosc=12MHz,计算
13、单片机执行下面程序消耗的时间。 DELAY: MOV R3,#TIME1 ;1机器周期 LOOP1: MOV R2,#TIME2 ;1机器周期 LOOP2: NOP ;1机器周期 NOP ;1机器周期 NOP ;1机器周期 NOP ;1机器周期 NOP ;1机器周期 NOP ;1机器周期 DJNZ R2,LOOP2 ;2机器周期 DJNZ R3,LOOP1 ;2机器周期 RET ;2机器周期执行完以上语句(第一条和最后一条语句执行时间忽略不计),所花时间:Tdelay=(1+(6+2)TIME2+2)TIME11sTIME1=TIME2=250时,Tdelay500ms则: MOV R0,#0
14、2 LOOP3:LCALL DELAY DJNZ R0,LOOP3可实现1s延时 9/29/2022练习参照下图设计一个彩灯控制程序,让8个led按照自己的设想发光,显示的样式尽可能的丰富。9/29/2022HD-51-A型 学习/开发板 9/29/2022原理图 9/29/2022 ORG0000HSTART: CLRP1.0 ;第一个LED亮 SETBP1.1 ;第二个LED灭 LCALLDELAY ;延时0.5秒 SETBP1.0 ;第一个LED灭 CLRP1.1 ;第二个LED亮 LCALLDELAY ;延时0.5秒 SJMPSTART ;反复循环 ;延时子程序,12M晶振延时约500
15、毫秒DELAY: MOVR4,#4L3: MOVR2,#250L1: MOVR3,#250L2: DJNZR3,L2 DJNZR2,L1 DJNZR4,L3 RET END START流水灯程序9/29/20229/29/2022LED(Light Emitting Diode)八段数码管数码管外形agdfecbdpabcdefgdp(a)共阴极GNDVccabcdefgdp(b)共阳极9/29/2022编码 a b c d e f g dp D7 D6 D5 D4 D3 D2 D1 D0P2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0 0 0 0 0 0 0 1 1数码管外形
16、agdfecbdp显示字形“0”,编码:03H 1 0 0 1 1 1 1 1数码管外形agdfecbdp显示字形“1”,编码:9FH 0 0 1 0 0 1 0 1数码管外形agdfecbdp显示字形“2”,编码:25H 0 0 0 0 1 1 0 1数码管外形agdfecbdp显示字形“3”,编码:0DH 1 0 0 1 1 0 0 1数码管外形agdfecbdp显示字形“4”,编码:99H 0 1 0 0 1 0 0 1数码管外形agdfecbdp显示字形“5”,编码:49H 0 1 0 0 0 0 0 1数码管外形agdfecbdp显示字形“6”,编码:41H 0 0 0 1 1 1
17、1 1数码管外形agdfecbdp显示字形“7”,编码:1FH 0 0 0 0 0 0 0 1数码管外形agdfecbdp显示字形“8”,编码:01H 0 0 0 0 1 0 0 1数码管外形agdfecbdp显示字形“9”,编码:09H 0 0 0 1 0 0 0 1数码管外形agdfecbdp显示字形“A”,编码:11H 1 1 0 0 0 0 0 1数码管外形agdfecbdp显示字形“b”,编码:0C1H 0 1 1 0 0 0 1 1数码管外形agdfecbdp显示字形“C”,编码:63H 1 0 0 0 0 1 0 1数码管外形agdfecbdp显示字形“d”,编码:85H 0 1
18、 1 0 0 0 0 1数码管外形agdfecbdp显示字形“E”,编码:61H 0 1 1 1 0 0 0 1数码管外形agdfecbdp显示字形“F”,编码:71H 0 0 1 1 0 0 0 0数码管外形agdfecbdp显示字形“P.”,编码:30H9/29/2022按键通常,按键所用开关为机械弹性开关,一般为常开型,不按下时触点断开,按下时闭合。按键按下和松开的瞬间,伴随有一连串的抖动,抖动时间一般为510ms。检测出键闭合后,再执行一个10ms左右的延时程序,以避开抖动时间,等信号稳定后再进行按键查询,如果仍保持闭合,则确认有键按下,否则认为是抖动。9/29/2022例:按键则数码
19、管增一开始K1按下?数码管初始显示为0延时10ms再次判断K1按下?K1抬起?数码管增1显示是否否是是否9/29/2022按键则数码管增一程序K1 BIT P1.4SMG_SEL BIT P1.7SMG DATA 30H ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV P2,#03H ;初始显示0 CLR SMG_SEL ;选通数码管 L1: JB K1,L1 ;K1未按下,等待 ACALL DELAY ;K1按下,延时去抖动 JB K1,L1 ;再判K1是否按下,未按下则认为是抖动 JNB K1,$ ;判按键是否松开,没松开则等待 L2: INC SMG ;数
20、码管增一 MOV A,SMG ANL A,#0FH ACALL DISP ;调用显示子程序 SJMP L19/29/2022按键则数码管增一程序(续);-延时子程序-DELAY: MOV R7,#20 DL1: MOV R6,#00 DJNZ R6,$ DJNZ R7,DL1 RET;-显示子程序-DISP: MOV DPTR,#DISP_CODE ; DISP_CODE为编码表首地址 MOVC A,A+DPTR MOV P2,A RETDISP_CODE: DB 03H,9FH,25H,0DH,99H,49H,41H,1FH DB 01H,09H,11H,0C1H,63H,85H,61H,7
21、1H ;对应数码:0123456789AbCdEF END MAIN9/29/2022外扩RAM、ROM时,使用锁存器9/29/20228D锁存器9/29/2022 一、扩展的基本信息 (1)地址总线(Address Bus,AB) A15.A8,A7A0 (2)数据总线(Data Bus,DB) D7.D0 (3)控制总线(Control Bus,CB) /WR、/RD、/PSEN、/EA、ALE9/29/20229/29/20229/29/2022外部数据和常数访问方法1. 外部数据访问 MOVX A, DPTR MOVX DPTR, A MOVX A, Ri MOVX Ri, A2. 常
22、数访问 MOVC A, A+DPTR MOVC A, A+PC9/29/2022 复习 单片机I/O端口逻辑结构 8051有4个8位并行I/O端口,记做P0、P1、P2和P3。这四个口都是准双向的I/O口,共占有32条管脚,每一条I/O线都能独立的用作输入或输出。 1、P0口(I/O、总线)9/29/20222、P1口(I/O口) 9/29/20223、P2口(I/O口、总线) 9/29/20224、P3口(I/O口、复用功能)9/29/20225、I/O口的“读修改写”操作 从P0P3口的逻辑电路分析可知,读一个端口的数据有两类:一类是读引脚电平的,另一类是读锁存器的。“读修改写”指令是为了避免误读引脚电平 (需要保存的读的都是寄存器)。 例如,ANL P1, A ;逻辑与指令. CPL P2.0 ;取反 INC P3 ;P3的内容增1.9/29/20221MCS-51系列单片机内部包含哪些主要逻辑功能部件? 各有什么特点? 2MCS-51单片机的时钟周期、机器周期、指令周期是
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 48325-2026氢气管道焊接接头氢相容性试验方法
- 2026小学英语教资面试结构化经典例题试卷含答案
- 计算机软件测试员岗前设备维护考核试卷含答案
- 镗工操作知识能力考核试卷含答案
- 氯氢处理工安全行为能力考核试卷含答案
- 公共场所卫生管理员创新应用强化考核试卷含答案
- 铝箔腐蚀氧化工安全宣贯强化考核试卷含答案
- 木管乐器制作工安全知识宣贯知识考核试卷含答案
- 2026银行评职称面试题及答案
- 2026银行专业面试题目及答案
- 自考09462 国际贸易实务(英语)(短句背诵版适配答题)
- 2026矿区微电网白皮书 多源协控 构建绿色矿区韧性微网-阳光电源
- 新苏教版三年级数学上册第七单元《1.数量关系的分析(1)》课件
- 2026年秋大象版(新教材)小学科学五年级上册教学计划及进度表
- 空压机日常巡检记录
- 地铁通风空调竣工验收监理评估报告
- 2026智联招聘笔试题库及答案
- EDA技术及应用项目教程 教学大纲
- 2025年度中国展览数据统计报告
- 全新版大学英语视听说教程1答案
- 透析设备维护与管理
评论
0/150
提交评论