1、START: MOV R1,10H ;一共16个数据 MOV R0,#70H ;原数据首地址 MOV DPTR,#2000H; 片外存储单元首地址 MOV 70H,#00H;送入原始数据,把70H-71H中分别送入00H-0FH MOV 71H,#01H MOV 72H,#02H MOV 73H,#03H MOV 74H,#04H MOV 75H,#05H MOV 76H,#06H MOV 77H,#07H; MOV 78H,#08H MOV 79H,#09H MOV 7AH,#0AH MOV 7BH,#0BH MOV 7CH,#0CH MOV 7DH,#0DH MOV 7EH,#0EH MO
2、V 7FH,#0FHLOOP: MOV A,R0;循环送入2000H-200FH MOVX DPTR,A;执行片外将累加器A中的数据送到数据指针DPTR INC R0;R0中的数据自加一 INC DPTR;DPTR中的数据自加一 DJNZ R1,LOOP;R1=1,程序继续执行,R1不等于0,程序转移到LOOP END;程序结束 MOV R1,#10H;将立即数10H送到间接锁存器R1 MOV R0,#70H;将立即数70H送到间接锁存器R0将立即数2000H送到数据锁存器三、上机运行结果软件实验二 数据排序实验一、实验目的熟悉单片机汇编指令系统,掌握汇编程序设计方法。二、实验内容编写并调试一
3、个排序子程序,其功能为用冒泡法将内容RAM中几个单字节无符号的正整数,按从小到大的次序重新排列。三、实验程序框图ORG 09B0H;伪指令,设置程序入口QUE: MOV R3,#50H;将立即数50H送入当前工作寄存器R3QUE1: MOV A,R3;指针送R0 MOV R0,A;将累加器A中的数据送到R0 MOV R7,#0AH;长度送R7 CLR 00H ;标志位为0 MOV A,R0;保存数据QL2: INC R0;指向下一个地址 MOV R2,A将累加器A中的数据送到当前工作寄存器R2 CLR C;给cy清零 MOV 22H,R0保存数据CJNE A,22H,QL3;相等吗? SETB
4、 C;给cy置一QL3: MOV A,R2;将R2中的数据送到累加器A JC QL1;大于交换位置 SETB 00H给00H单元置一 XCH A,R0字节交换 DEC R0;自减一 INC R0 ;QL1: MOV A,R0将间接寄存器中的数据送到累加器 DJNZ R7,QL2判断是否为零确定继续执行或转移 JB 00H,QUE1;一次循环中有交换继 SJMP LOOP ;无交换退出上机运行结果:六、思考题:修改程序把50H5AH中内容按从大到小排列。答:程序清单如下ORG 0000HLJMP MAINORG 0100HMAIN: ,50 ,51 50,51 51,仿真实验一 I/O端口操作1
5、、掌握I/O端口读写等基本汇编指令;2、掌握单片机最小系统硬件电路设计及仿真软件PROTEUS仿真、调试等基本操作方法。二、实验仪器设备1、PC机,1台2、WAVE软件开发系统3、仿真软件PROTEUS三、实验内容:编写一段汇编程序,使与单片机P0.3口相连的发光二极管循环点亮,亮灭时间必须大于0.5秒(肉眼能清晰分辨二极管的亮灭变化)。要求用PROTEUS软件完成仿真电路设计,并进行功能验证。ORG 0000H;SJMP START转移并执行STARTORG 0030H设置START入口 MOV P0,#0FFH;先初始化,暗灯LOOP1: CPL P0.3;点亮ledACALL DELAY
6、;调用延时子程序,延时0.5秒SJMP LOOP1;循环点亮DELAY: MOV R5,#50L2: MOV R6,#100L1: MOV R7,#100DJNZ R7,$DJNZ R6,L1DJNZ R5,L2RET;返回END;结束四、实验步骤:用PROTEUS完成单片机硬件电路设计2、用WAVE软件完成发光二级管亮灭程序,用延时子程序设计一段时间延时,编译通过后生成16进制文件(.HEX),加载到PROTEUS中仿真验证。单片机晶振设为12MHZ,试计算自己编写的延时子程序的精确延时时间?当晶振为12MHz时机器周期为1uS(微秒) 标准51的DJNZ指命用时为二个机器周期,由于大循环R
7、2中的数是50,小循环每次被重置#100 ,故就应该是 1(MOV R1,#50用)+2*50*100(循环所用)+50(MOV R2,#100用的)+2 (RET用的) 这个50 是第一条 MOV R2,#100 每跳出循环重置R2时就要多用的一个机器周期) 再在运行中没有其它中断来干扰时就该是 每从调用进这个子程序开始到完成RET出来就要用 10,053 uS仿真实验二 定时中断1、熟悉单片机定时器工作原理;2、掌握定时器定时控制的编程方法。二、实验基本原理1、定时/计数器工作原理图2.11 定时/计数器原理图(1)定时时间的求取。例:设单片机晶振频率为12MHZ,定时时间为1ms,求时间
8、常数?定时器计数周期=12/fosc=1us,1ms/1us=1000,因此,计数初值=65535+1-1000=64536=FC18H(2)定时/计数器初始化MOV TMOD,#10HSETB TR1编写一段汇编程序,使单片机P1.0口输出一段时钟周期为2ms的方波。要求采用T1中断方式,工作方式1。用PROTEUS软件完成仿真电路设计,并用软件中自带的示波器观察输出结果。伪指令设置程序入口AJMP START;绝对转移指令,转移并还行STARTORG 001BH;设置START入口地址AJMP T1INT;T1口执行指令ORG 0030H;自行设置地址,可去MOV SP,#30H MOV
9、TMOD,#10H;执行方式2 MOV TH1,#0FCH MOV TL1,#018H SETB TR1 SETB ET1 SETB EAAJMP MAINT1INT:CPL P1.0 MOV TL1,#18H RETI四、实验操作步骤:1、硬件电路设计2、单片机晶振频率为12MHZ,用KEIL软件编写P1.0引脚上输出周期为2ms的方波程序。编译通过后生成16进制文件(.HEX),加载到PROTEUS中仿真验证。3、PROTEUS仿真验证。仿真实验三 十字路口交通灯1、掌握ISP在线调试的方法;2、掌握硬件实验箱的使用方法;3、熟悉汇编程序基本格式与编程方法。二、实验仪器设备:1、PC机2、
10、PROTEUS仿真环境。编写十字路口交通灯控制程序,控制红、黄、绿交通指示灯的亮灭,模拟十字路口交通灯控制。参考程序如下: MOV P0, #01111011B ;P0.7=P0.2=0, 红灯亮. CALL DL3S MOV P0, #11011011B ;P0.5=P0.2=0, 东西红 南北绿. CALL DL15S MOV P0, #10011011B ;P0.6=P0.1=0, 黄灯亮. MOV P0, #01111110B ;P0.7=P0.0=0, 南北红 东西绿. MOV P0, #01111100B ; SJMP LOOPDL15S: MOV R4, #5DL2: DJNZ R4, DL2 RETDL3S: ;延时3s,实测3.03s MOV R5, #23DL3: MOV R6, #0DL4: MOV R7, #0DL5: DJNZ R7, DL5 DJNZ R6, DL4 DJNZ R5, DL3 END用KEIL软件编写交通灯控制程序。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1