02汇编语言实验——跑马灯

合集下载

跑马灯实验报告

跑马灯实验报告

跑马灯实验报告引言跑马灯是一种常见的公共场所宣传和广告工具。

它通过不断闪烁的灯光来吸引人们的注意,向他们传达信息和内容。

在这个报告中,我们将通过一系列实验来研究跑马灯的工作原理、效果和可能的应用领域。

实验一:跑马灯的基本构造实验目的通过拆解和分析跑马灯的结构,理解其基本构造和工作原理。

实验步骤1.拆解一台跑马灯,将其分解为基本组成部分,如灯管、控制电路和外壳等。

2.分析每个组成部分的作用和功能。

实验结果根据我们的拆解和分析,我们得出了以下结论:•灯管:灯管是跑马灯的核心部件,它通过发光来吸引人们的注意。

•控制电路:控制电路负责控制灯管的闪烁频率和模式。

•外壳:外壳起到保护和美化跑马灯的作用。

实验二:跑马灯的效果分析实验目的评估不同频率和模式的跑马灯对人眼的刺激程度和注意力吸引效果。

实验步骤1.准备三台不同频率的跑马灯(低频、中频和高频)。

2.让一组实验参与者观察每种频率的灯光,并记录他们的感受和注意力集中程度。

3.对比不同频率下的实验结果,并做出分析和总结。

实验结果我们的实验结果表明:•高频率的跑马灯更容易引起人们的注意,但也会让他们感到疲劳或不适。

•低频率的跑马灯对人眼的刺激相对较轻,但可能不足以引起足够的关注。

•中频率的跑马灯在刺激度和注意力吸引效果之间取得了一个平衡,被认为是比较理想的选择。

实验三:跑马灯的应用展望实验目的探索跑马灯在不同场景和领域的应用潜力,并分析其优势和限制。

实验步骤1.分析跑马灯目前的主要应用领域,如商业广告、警示通知和信息发布等。

2.探寻跑马灯在其他领域中的潜在应用,如教育、娱乐和医疗等。

3.分析跑马灯在不同应用领域中的优势和限制。

实验结果我们的分析结果表明:•跑马灯在商业广告和公共通知中具有广泛应用的潜力,因为它能够吸引人们的注意并传达信息。

•跑马灯在教育领域中可以用于展示学生作品、提醒学生重要事项等,但需注意不要过度刺激学生眼睛。

•跑马灯在医疗领域中可以用于显示患者信息、提醒医生注意事项等,但需确保灯光不会对患者或医生造成不适。

汇编语言实现led灯的跑马灯

汇编语言实现led灯的跑马灯

汇编语⾔实现led灯的跑马灯led实验1.看原理图看设备⼯作的原理(可能需要阅读芯⽚⼿册),看设备与cpu的连接关系GPIO具有输⼊输出功能。

输⼊:cpu想知道io引脚是⾼电平还是低电平那么就是输⼊⽅式输出:cpu想控制io引脚为⾼电平还是低电平那么就是输出⽅式跟电流的⽅向没有任何关系2. cpu的相关章节GPJ2CON control是配置这个引脚是什么功能GPJ2有8个引脚,每个引脚由con寄存器中的4个位进⾏配置GPJ2DAT 如果cpu要输出⾼电平或者低电平,就需要设置该寄存器,只有8位有效When the port is configured as input port, the correspondingbit is the pin state. When the port is configured as outputport, the pin state is the same as the corresponding bit.When the port is configured as functional pin, the undefinedvalue will be read.当配置为输⼊模式的时候,dat寄存器中的某⼀位的值由引脚设置,引脚是⾼电平是,对应的位为1,引脚为低电平时,对应的位为0当配置为输出模式的时候,dat寄存器中的某⼀位控制引脚的电平,对应的位为1时,对应的引脚输出⾼电平,对应的位为0时,对应的引脚输出为低电平其他功能模式时,读到的值是未定义的。

@gec210 light first led.globl _start_start:ldr r0,=0xe0200280mov r1,#1<<4str r1,[r0] @config pin0 output modemov r1,#0str r1,[r0,#4] @output low levelb . @same as while(1);arm-linux-gcc -c led.S -o led.o //编译不链接arm-linux-ld -Ttext 0x30008000 led.o -o led.elf //链接指定代码段起始位置arm-linux-objcopy -O binary led.elf led.bin //⽣成⼆进制执⾏⽂件arm-linux-objdump -D led.elf > led.dis //⽣成反汇编代码uboot的⼏个常⽤命令printenv 打印显⽰环境变量ipaddr=192.168.1.4 //开发板的ipserverip=192.168.1.2 //tftp服务器的ip设置为各⾃的ip,只是设置到内存,掉电就没有setenv ipaddr 192.168.1.xsetenv serverip 192.168.1.xsaveenv //保存到flash中,再次启动后为刚刚设置的值ping //单向的,只能从开发板ping电脑alive表⽰⽹络是通的,not alive表⽰⽹络不通tftp 30008000 led.bin //下载⼆进制⽂件到内存0x30008000地址go 30008000 //跳转到0x30008000运⾏程序@gec210 light first led.globl _start_start:ldr r0,=0xe0200280ldr r1,=(1<<0 | 1<<4 | 1<<8 | 1<<12)str r1,[r0] @config pin0-pin3 output modemov r1,#0str r1,[r0,#4] @output low levelb . @same as while(1);简单的makefileAPP=led$(APP).bin:$(APP).oarm-linux-ld -Ttext 0x30008000 $^ -o $(APP).elf arm-linux-objcopy -O binary $(APP).elf $@ arm-linux-objdump -D $(APP).elf > $(APP).dis cp $@ /home/gec/tftp/%.o:%.sarm-linux-gcc $^ -c -o $@%.o:%.Sarm-linux-gcc $^ -c -o $@%.o:%.carm-linux-gcc $^ -c -o $@clean:@rm -f $(APP).bin $(APP).elf $(APP).dis *.o四个灯同时点亮或者同时熄灭循环闪烁@gec210 light first led.globl _start_start:ldr r0,=0xe0200280ldr r1,=(1<<0 | 1<<4 | 1<<8 | 1<<12)str r1,[r0] @config pin0-pin3 output mode loop:mov r1,#0str r1,[r0,#4] @output low levelbl delaymov r1,#0xfstr r1,[r0,#4]bl delayb loopb . @same as while(1);delay:mov r4,#0xff00000delay1:subs r4,r4,#1bne delay1mov pc,lr#define GPJ2CON (unsigned long *)0xe0200280unsigned long *p = (unsigned long *)0xe0200280;p练习:第1个灯到第4个灯依次点亮,第4个灯到第1个灯依次熄灭,循环。

单片机汇编语言跑马灯

单片机汇编语言跑马灯

实验一跑马灯-亮灯左移右移循环黄天佑 20132301155一、实验目的1、进一步熟悉keil C仿真软件及单片机实验板的使用。

2、了解并熟悉单片机I/O口和LED灯的电路结构,学会构建简单的流水灯电路。

3、掌握应用KEIL软件编辑、编译源汇编程序的操作方法。

4、了解单片机汇编语言程序的设计和调试方法。

二、实验原理1、实验板硬件电路图2、单片机流水灯程序设计(1)流水灯程序设计思路及程序流程。

实现流水灯的方法有很多,这里介绍一种。

(2)产生流水灯效果程序(逐条程序加注释)start:mov R0,#8 ;设置左移8次mov A,#0FEH;存入开始亮灯的位置LOOP: mov P0,A;传送P0并输出ACALL DELAY;调用延时程序RL A;左移1位DJNZ R0,LOOP;判断移送次数mov R1,#8;设置右移8次LOOP1:RR A;右移1位mov P0,A;传送到P0口并输出ACALL DELAY;调用延时程序DJNZ R1,LOOP1;判断右移次数JMP start;重新设定显示DELAY: mov R5,#10;延时0.1s子程序D1: mov R6,#100;D2:mov R7,#100;DJNZ R7,$;DJNZ R6,D2;DJNZ R5,D1;RET;子程序返回END;程序结束三、实验步骤及调试过程1、汇编语言程序的编写与调试(1)新建一个工程(2)保存文件,设一个文件名(3)找到对应单片机的芯片,这里我们选AT89C51即可接着我们新建一个文本写程序(1)(2)保存文件名,注意文件名的后缀应该为.asm(汇编语言程序的格式)接着把我们的文本导入到工程里面去:(1)(2)点击Add,再Close即可2.汇编语言程序编译及下载(1)这里要设置一个输出.hex文件(2)点击生成工程相应的文件同时可以观察下面的结果:0 Error(s),即可。

3.程序下载考入单片机(1)打开STC-ISP软件,选择对应的单片机型号,(2)点击打开程序,选择写好的.hex文件,(3)选择对应的端口COM3,再点击“Download下载”,同时按下单片机开关,即可。

STM32汇编语言 左右跑马灯

STM32汇编语言  左右跑马灯

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;; STM32 LED左右跑马灯实验;;8个LED接在PE口(PE[0..7]);;LED先向右跑,跑完再向左跑,不停左右跑动;;2011-5-3 by 追梦;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;BIT6 EQU 0X00000040GPIOE EQU 0X40011800 ;GPIOE 地址GPIOE_CRL EQU 0X40011800 ;低配置寄存器GPIOE_CRH EQU 0X40011804 ;高配置寄存器GPIOE_ODR EQU 0X4001180C ;输出,偏移地址0Ch GPIOE_BSRR EQU 0X40011810 ;低置位,高清除偏移地址10h GPIOE_BRR EQU 0X40011814 ;清除,偏移地址14h IOPEEN EQU BIT6 ;GPIOE使能位RCC_APB2ENR EQU 0X40021018STACK_TOP EQU 0X20002000AREA RESET,CODE,READONLYDCD STACK_TOP ;MSP主堆栈指针DCD START ;复位,PC初始值ENTRY;指示开始执行STARTLDR R1,=RCC_APB2ENRLDR R0,[R1] ;读LDR R2,=IOPEENORR R0,R2 ;改STR R0,[R1] ;写,使能GPIOE时钟;PE[0..7] 8个引脚均设置成推挽式输出LDR R0,=0x33333333LDR R1,=GPIOE_CRLSTR R0,[R1]LDR R1,=GPIOE_ODRLDR R0,=0X7F ;初始时最高位点亮MOV R2,#0LOOPSTR R0,[R1]PUSH {R0}MOV R0,#300BL.W DELAY_NMS ;延时300msPOP {R0}ADD R2,#1CMP R2,#7BLE STA TE1CMP R2,#14BEQ RESTARTB STA TE2STA TE1 ;状态1,右循环移位BL.W ByteRor1 ;状态位右循环移一位B LOOPRESTARTMOV R2,#0STA TE2 ;状态2,左循环移位BL.W ByteRol1 ;状态位左循环移一位B LOOP;延时R0(ms),误差((R0-1)*4+12)/8us;延时较长时,误差小于0.1%DELAY_NMSPUSH {R1} ;2个周期DELAY_NMSLOOPSUB R0,#1MOV R1,#1000DELAY_ONEUSSUB R1,#1NOPNOPNOPCMP R1,#0BNE DELAY_ONEUSCMP R0,#0BNE DELAY_NMSLOOPPOP {R1}BX LR;子程序,将R0低八位右循环移一位,高位不变ByteRor1PUSH {R1,R2,R3}LDR R3,=0XFFFFFF00LSR R1,R0,#1AND R1,#0X0000007FAND R2,R0,#0X01LSL R2,#7ORR R1,R2AND R0,R3ORR R0,R1POP {R1,R2,R3}BX LR;子程序,将R0低八位左循环移一位,高位不变ByteRol1PUSH {R1,R2,R3}LDR R3,=0XFFFFFF00LSL R1,R0,#1AND R1,#0X000000FEAND R2,R0,#0X80LSR R2,#7ORR R1,R2AND R0,R3ORR R0,R1POP {R1,R2,R3}BX LREND。

汇编课程之跑马灯设计报告

汇编课程之跑马灯设计报告

太原工业学院汇编语言与微机原理课程设计报告学生姓名:刘创学号:*********系部: 计算机工程系专业: 计算机科学与技术题目: 利用8255实现花式跑马灯成绩指导教师李丽2016年6月28日1.设计内容1)设计电路;2)实现6种不同的跑马灯样式;3)跑马灯的运行状态可由开关控制4)要有暂停跑马灯按钮控制即跑马灯的状态切换。

2.总体设计1)设计原理本实验通过循环检测A口数据,判断按得是哪个开关,如开关1按下,则向AL送01h,并送至B口,循环左移AL达到灯的流水下移,调用延时子程序控制灯闪亮时间,通过BH的赋值控制循环次数,达到时间定时效果。

每循环一个周期,CPU都会检测A口的值,从而能即时切换跑马灯花式。

2)设计跑马灯方案a)按下开关1,跑法1,AL初值01H,循环左移,控制一个亮灯自上而下跑动。

b)按下开关2,跑法2,AL初值81H,循环右移,控制一个亮灯自下而上跑动。

c)按下开关3,跑法3,AL初值0AAH,循环左移,控制间隔4个灯同时闪亮。

d)按下开关4,跑法4,AL初值0C0H,循环右移,控制两个亮灯自下而上跑动。

e)按下按键5,跑法5,AL初值05H,循环左移,控制亮暗亮3灯自上而下跑动。

f)按下开关6,跑法6,AL初值0AAH,循环左移,控制间隔4个灯同时闪亮,相比按键3,跑动时间更长,以显示定功能。

g)按下开关7按下,跑马灯暂停工作,再次按下跑马灯继续工作。

3.硬件设计1)Proteus元件清单及功能说明2)电路设计图a)8086微处理机与锁存器、译码器连接b)8255A与跑马灯开关控制连接图c)8255A与跑马灯LED显示灯连接图4. 软件设计1)程序设计思路利用查询式不断循环查询控制跑马灯样式的开关状态,进而编写程序来控制跑马灯的输出样式。

同时,检测是否暂停跑马灯工作状态的按钮,以及时处理暂停与继续工作状态。

2)程序流程图3)程序代码MarqueeHorseRaceLamp.ASM/*文件名*/ CODE SEGMENTASSUME CS:CODESTART: MOV AL,90HMOV DX,206HOUT DX,ALNOKEY:CALL SCANJNZ NOKEYSCAN PROCMOV AL,0FFHMOV DX,202HOUT DX,ALMOV DX,200HIN AL,DXTEST AL,01HJZ P1TEST AL,02HJZ P2TEST AL,04HJZ P3TEST AL,08HJZ P4TEST AL,10HJZ P5TEST AL,20H JZ P6RETP1:CALL PA1PA1 PROCMOV BH,0MOV BL,01HA1:MOV AL,BLMOV DX,202HOUT DX,ALMOV CX,50000CALL DELAY ROL BL,1CALL STOPCALL SCANCMP BL,01HJNZ J1INC BHJ1:JMP A1PA1 ENDPP2:CALL PA2PA2 PROCMOV BH,0MOV BL,80HA2:MOV AL,BLMOV DX,202H OUT DX,AL CALL DELAY ROR BL,1CALL STOP CALL SCANCMP BL,80HJNZ J2INC BHJ2:JMP A2RETPA2 ENDPP3:CALL PA3PA3 PROCMOV BH,0MOV BL,0AAH A3:MOV AL,BLMOV DX,202H OUT DX,AL CALL DELAY MOV CL,1ROL BL,CL CALL STOP CALL SCAN CMP BL,0AAHJNZ J3INC BHJ3:JMP A3RETPA3 ENDPP4:CALL PA4PA4 PROCMOV BH,0MOV BL,0C0HA4:MOV AL,BLMOV DX,202HOUT DX,ALCALL DELAYMOV CL,1ROR BL,CLCALL STOPCALL SCANCMP BL,0C0HJNZ J4INC BHJ4:JMP A4RETPA4 ENDPP5:CALL PA5 PA5 PROCMOV BH,0MOV BL,05HA5:MOV AL,BLMOV DX,202HOUT DX,ALCALL DELAYROL BL,1CALL STOPCALL SCANCMP BL,05HJNZ J5INC BHCALL RETURNJ5:JMP A5RETPA5 ENDPP6:CALL PA6 PA6 PROCMOV BH,05HMOV BL,0AAHA6: MOV AL,BLMOV DX,202HOUT DX,ALMOV CX,50000CALL DELAYROL BL,1CALL STOPCALL SCANCMP BL,0AAHJNZ J6INC BHCALL RETURNJ6:JMP A6RETPA6 ENDPDELAY PROCMOV CX,50000LOOP1: LOOP LOOP1RETDELAY ENDPRETURN PROC CMP BH,04HJZ NOKEYRETSTOP PROC L1:MOV AL,00HMOV DX,202HOUT DX,ALMOV DX,200HIN AL,DXTEST AL,40HJNZ DONEJMP L1DONE:RETSTOP ENDPRETURN ENDPSCAN ENDPCODE ENDSEND START5. 仿真调试与分析a)连接好完整电路后,加载已经写好的跑马灯程序b)调试已经加载的代码,直至代码无编译错误为止c)启动Proteus调试d)拨动相关控制开关,进而控制跑马灯的工作风格e)调试结果基本符合实验前的设计,跑马灯以正确的工作风格进行工作,符合逻辑,整个实验分析正确f)跑马灯实验设计成功,结束实验6. 结论由于之前曾学习过组成原理,对Proteus的电路连接颇为了解,所以本次的电路连接没有太大的问题。

实验二 GPIO跑马灯实验

实验二 GPIO跑马灯实验

实验二 I/O接口实验[实验目的]1.熟悉ARM芯片I/O口配置方法2.通过实验掌握ARM芯片I/O控制LED显示的方法[实验仪器]1.Proteus仿真的LPC2000系列的ARM处理器2.软件:PC机操作系统Win98、Win2000或WinXP,Keil for ARM(MDK)集成开发环境[实验原理]根据LPC2000系列ARM芯片的特点,可以将P0口的功能设置为GPIO,用来驱动LED等设备或者接受矩阵键盘的输入等。

[实验内容]设计一个ARM驱动LED的电路,使用LPC2000的GPIO功能,编写一个LED跑马灯程序,并且在Proteus上仿真运行。

[预备知识]LPC2000系列微控制器的大部分管脚都具有多种功能,即管脚复用,但是同一引脚在同一时刻只能使用其中一个功能,通过配置相关寄存器控制多路开关来连接引脚与片内外设。

通过引脚连接模块PINSELx控制引脚功能[实验步骤]一、参考实验一建立ARM的GPIO电路,图中使用P0口的低八位驱动八个发光二极管,元件参元件元件参数Res1~8 51欧Cap1~4 22P(仿真时候没有影响)晶振1,2 11.0592MHz和32768(仿真时候没有影响)LED 红绿黄蓝颜色的各两个二、使用Keil MDK软件和C语言编写LED的驱动程序:按照实验一创建一个Keil项目,项目名称叫GPIO,不过在提示下图时候选择是,而不是否。

此处使用Keil提供的汇编启动文件来启动arm处理器,不再使用自己编写的汇编语言了。

创建项目后界面如下:在项目配置的界面下,linker页按如下设置,不按照实验一的设置进行。

其余的设置按照实验一设定。

双击打开 Startup.s文件,见下图这个文件有两种编辑方式,一种是使用文本方式,就是上图中的TextEditor。

另一种是菜单界面的配置方式Configuration Wizard,用来配置ARM处理器的运行时候的设置。

点击Configuration Wizard(上图的编辑区的下方)如下图按照图上设置,取消锁相环的设置。

花式跑马灯汇编语言

花式跑马灯汇编语言

花式跑马灯汇编语言一、引言花式跑马灯是一种以灯光为媒介,通过不同的变化方式展示出各种图案和文字的装饰性效果。

在汇编语言中,我们可以使用特定的指令和技巧来实现花式跑马灯效果,从而给人一种炫目的视觉体验。

二、实现思路为了实现花式跑马灯效果,我们需要控制灯光的亮灭和变化,以展示出不同的图案和文字。

在汇编语言中,我们可以通过操作特定的寄存器和端口来控制灯光的状态。

我们需要定义一个存储灯光状态的变量,用来保存当前灯光的亮灭情况。

然后,我们可以使用循环结构来不断改变灯光的状态,从而实现灯光的闪烁效果。

三、具体实现1. 定义变量我们可以使用汇编语言中的数据段来定义一个变量,用来保存灯光的状态。

例如,我们可以定义一个字节变量“light”,用来表示灯光的亮灭状态,其中1表示亮,0表示灭。

2. 控制灯光为了控制灯光的状态,我们可以使用汇编语言中的端口操作指令来向特定的端口发送信号。

例如,我们可以使用OUT指令将灯光状态写入到特定的端口,从而控制灯光的亮灭。

3. 循环控制为了实现花式跑马灯效果,我们需要使用循环结构来不断改变灯光的状态。

例如,我们可以使用汇编语言中的循环指令来控制灯光的闪烁次数和速度,从而实现不同的效果。

四、示例代码下面是一个简单的示例代码,用来实现一个基本的花式跑马灯效果:```assembly.datalight db 1.codemain:mov ah, 0x0E ; 设置光标位置mov al, 'A' ; 设置要显示的字符int 0x10 ; 调用BIOS中断显示字符mov al, lightout 0x80, al ; 控制灯光状态xor al, 1 ; 取反灯光状态mov light, aljmp main ; 循环控制end main```五、总结通过使用汇编语言的指令和技巧,我们可以实现各种花式跑马灯效果。

通过控制灯光的亮灭和变化,我们可以展示出不同的图案和文字,从而给人一种炫目的视觉体验。

实验1软件延时跑马灯

实验1软件延时跑马灯
试验连线:将P1口的8个脚与试验箱上的发光二极管相连。当输出“1”时发光二级管灭,输出“0”时发光二级管亮。
附加部分:
图11图11中表示灭0表示亮每一行为一次显示状态每两个显示状态间隔50ms循环显示
实验一软件延时跑马灯试验目的:1、源自解分支结构,循环结构汇编程序的编写。
2、掌握汇编语言主程序,子程序的编写。
3、熟悉51单片机开发环境。
试验要求:用单片机控制8个LED发光二极管完成如图1—1所示的功能。
图1—1
图1—1中“×”表示灭,“0”表示亮,每一行为一次显示状态,每两个显示状态间隔50ms,循环显示。

跑马灯--动态心形(汇编语言)

跑马灯--动态心形(汇编语言)

DELAY: MOV R3 , #08FH DJNZ R3 , $ DJNZ R2, DELAY MOV P1 , #0 INC R0 CJNE R0 , #8 , KKK MOV R0 , #0 DJNZ R4 , KKK INC DPTR INC R6 CJNE R6 , #08H, III MOV R6,#0 MOV DPTR,#200H SJMP III ORG 200H TAB: DB 0E3H, 0C1H, 081H,03H,03H,081H,0C1H, 0E3H, DB 0E3H, 0C1H ,081H,03H,03H,081H,0C1H, 0E3H END
程序编写:
CJNE R6 , #18H, III MOV R6, #0 MOV DPTR, #200H SJMP III ORG 200H 0FFH, 0FFH, 7DH, 01H, 01H, 7DH, 0FFH, 0FFH 0E3H, 0C1H ,81H, 03H, 03H, 81H, 0C1H, 0E3H 0FFH, 81H, 01H, 3FH, 3FH, 3FH, 01H, 81H 0FFH, 0FFH,7DH, 01H, 01H, 7DH, 0FFH,0FFH
利用IO口实现跑马灯功能: 跑马灯又称为流水灯。简单地说就是一 组灯在控制系统的控制下按照设定的时间和顺序 来发亮或熄灭,组成不同的图形,从而达到一定 的视觉效果。 • 基本跑马灯电路的组成: MCS—51单片机,LED小灯泡,电容电阻, 振荡电路,译码电路,光源电路等。
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 列置高电平 行置低电平
点阵共有64 个二极管每 个发光二极 管是放置在 行线和列线 的交叉点上
当对应的 某一列置 1电平, 某一行置 0电平, 则相应的 二极管就 亮

计算机硬件—汇编语言—走马灯

计算机硬件—汇编语言—走马灯

;走马灯硬件链接;8255片选接300H,A接左侧小灯,B接右侧小灯,C7接8254芯片OUT1,C0-3接开关;8254片选接320H.486CODE SEGMENT USE16ASSUME CS:CODEORG 1000HBEG:JMP STARTPL DB 10H,20H,30H,40H,50H,60H,70H,80HSTART:;写入8255控制字MOV DX,30CHMOV AL,10001001BOUT DX,AL;写入5284控制字与闪烁周期设置MOV DX,32CHMOV AL,00110110BOUT DX,ALCALL ZHOUQI;调用子程序判断开关输入情况;LED从左到右循环点亮MOV CX,0010HMOV BX,8000HDO1:NOT BXMOV AL,BHMOV DX,300HOUT DX,ALMOV AL,BLMOV DX,304HOUT DX,ALCALL DELAYNOT BXSHR BX,1LOOP DO1;LED从右到左循环点亮MOV CX,0010HMOV BX,0001HDO2:NOT BXMOV AL,BHMOV DX,300HOUT DX,ALMOV AL,BLMOV DX,304HOUT DX,ALCALL DELAYNOT BXSHL BX,1LOOP DO2;LED从中间到两边点亮MOV CX,8H第 1 页MOV BX,0180HDO3:NOT BXMOV AL,BHMOV DX,300HOUT DX,ALMOV AL,BLMOV DX,304HOUT DX,ALCALL DELAYNOT BXSHR BL,1SHL BH,1LOOP DO3;LED从两边到中间点亮MOV CX,8HMOV BX,8001HDO4:NOT BXMOV AL,BHMOV DX,300HOUT DX,ALMOV AL,BLMOV DX,304HOUT DX,ALCALL DELAYNOT BXSHR BH,1SHL BL,1LOOP DO4;LED全亮然后全灭结束程序MOV CX,1HMOV BX,0FFFFHDO5:NOT BXMOV AL,BHMOV DX,300HOUT DX,ALMOV BL,ALMOV DX,304HOUT DX,ALLOOP DO5CALL DELAYCALL DELAYJMP START;调用子程序写入计数器初值ZHOUQI PROCMOV DX,308HIN AL,DXAND AL,0FHLEA BX,PLXLATMOV DX,320HMOV AH,ALMOV AL,0HOUT DX,AL第 2 页MOV AL,AHOUT DX,ALRETENDP ZHOUQI;延时程序DELAY:MOV DX,308HIN AL,DXAND AL,80HTEST AL,80HJNZ DELAYDELAY1:IN AL,DXAND AL,80HTEST AL,80HJZ DELAY1RETWT:JMP WTCODE ENDSEND BEG第 3 页。

02汇编语言实验——跑马灯

02汇编语言实验——跑马灯

实验时间: 实验时间: 时间
2011-4-7
实验报告提交时间: 实验报告提交时间: 提交时间
2011-4-7
教务处制
实验目的与要求:
1. 初步使用汇编语言进行编程,了解单片机内程序运行情况。 2. 了解汇编语言的指令结构,跳转,子程序调用等功能。 3. 使用汇编语言实现跑马灯功能。
实验仪器: 微机原理试验箱 实验相关电路图:
;延时 100MS 子程序 延时 ;入口参数 入口参数:DelayTimes_100MS,延时多少个 100MS 入口参数 延时多少个 ;-----------------------------------------------------Delay100MS: MOV R7,DelayTimes_100MS Delay100MS_1: MOV R6,#10 Delay100MS_2: MOV R5,#150 Delay100MS_3: MOV R4,#200 Delay100MS_4: DJNZ R4,Delay100MS_4 DJNZ R5,Delay100MS_3 DJNZ R6,Delay100MS_2 DJNZ R7,Delay100MS_1 RET ;子程序返回 子程序返回 ;-----------------------------------------------------;跑马灯子程序 跑马灯子程序 ;让 4 个 LED 以 全灭 亮灭灭灭 亮亮灭灭 亮亮亮灭 亮亮亮亮 灭亮亮亮 灭灭亮 全灭->亮灭灭灭 亮亮灭灭->亮亮亮灭 亮亮亮亮->灭亮亮亮 亮灭灭灭->亮亮灭灭 亮亮亮灭->亮亮亮亮 灭亮亮亮->灭灭亮 让 灭灭灭亮->全灭 亮->灭灭灭亮 全灭 的顺序运行 灭灭灭亮 ;-----------------------------------------------------LEDRUN: ;---全灭 全灭--全灭 SETB LED0 SETB LED1 SETB LED2 SETB LED3 MOV DelayTimes_100MS,#10 LCALL Delay100MS ;----------CLR LED0 SETB LED1 SETB LED2 SETB LED3 MOV DelayTimes_100MS,#10 LCALL Delay100MS ;----------CLR LED0 CLR LED1 SETB LED2

实验二基于Proteus的跑马灯电路

实验二基于Proteus的跑马灯电路

实验二-基于Proteus的跑马灯电路实验二基于Proteus的跑马灯电路一、实验目的1、掌握Proteus系统的使用,能够建立、保存、打开和修改文件。

2、掌握使用各种元器件绘制电路原理图的方法,实现电路的仿真。

二、实验内容跑马灯电路,即完成P1口上的八个发光二极管循环闪亮。

三、实验步骤1、进入Keil C51软件的操作环境,编辑源程序并对源文件进行编译,在Keil中编辑汇编语言程序如下:ORG 0000H;给定起始地址为0000HAJMP MAIN ;绝对转移至MAINORG 30H ;程序源地址为30HMAIN: MOV R2,#16 ;循环次数送R2MOV A,#0FEH ;立即数0FEH送累加器LOOP: MOV P1,A ;累加器A中的值送P1口LCALL D1 ;对D1进行长调用RL A ;A的值循环左移一位DJNZ R2,LOOP ;R2-1不为零时转LOOPD1: MOV R4,#10 ;立即数10送R4D2: MOV R5,#100 ;立即数100送R5D3: MOV R6,#249 ;立即数249送R6DJNZ R6,$ ;R6-1不为零时暂停DJNZ R5,D3 ;R5-1不为零时转D3DJNZ R4,D2 ;R4-1不为零时转D2RETEND2、进入Proteus系统,画出实验电路图(1)元件拾取。

在桌面上选择【开始】→【程序】→“Proteus 7 Professional”ISIS 7 Professional的蓝色图标打开应用程序,进入编辑界面,如图2-1,鼠标左键单击界面左侧预览窗口下面的“P”按钮,弹出“元件拾取”对话框,如图2-2所示:图2-1 ISIS编辑界面图2-2元件拾取对话框在“元件拾取”对话框的Kewords处可以输入所要用到的原件英文全称或部元件名类数量3WATT10K Resistors 1At89C51 Microprocessor ICs 1BUTTON Switch&Relays 1CAP Capacitors 2CAP-ELEC Capacitors 1CRYSTAL Miscellaneous 1LED-BIBY Optoelectronics 8RESPACK-8 Resistors 1拾取元件后如图2-3所示,电源与接地器件选择左面工具条上的按钮,弹出界面,如图2-4所示:图2-3 拾取元件结果图2-4 电源、接地选择(2)、画出电路,如图2-5所示:图2-5 跑马灯电路原理图3、对Proteus 系统和Keil C51系统进行联机设置。

最新单片机汇编语言跑马灯

最新单片机汇编语言跑马灯

实验一跑马灯-亮灯左移右移循环黄天佑 20132301155一、实验目的1、进一步熟悉keil C仿真软件及单片机实验板的使用。

2、了解并熟悉单片机I/O口和LED灯的电路结构,学会构建简单的流水灯电路。

3、掌握应用KEIL软件编辑、编译源汇编程序的操作方法。

4、了解单片机汇编语言程序的设计和调试方法。

二、实验原理1、实验板硬件电路图2、单片机流水灯程序设计(1)流水灯程序设计思路及程序流程。

实现流水灯的方法有很多,这里介绍一种。

(2)产生流水灯效果程序(逐条程序加注释)start:mov R0,#8 ; 设置左移8次mov A,#0FEH; 存入开始亮灯的位置LOOP: mov P0,A; 传送P0并输出ACALL DELAY; 调用延时程序RL A; 左移1位DJNZ R0,LOOP; 判断移送次数mov R1,#8; 设置右移8次LOOP1:RR A; 右移1位mov P0,A; 传送到P0口并输出ACALL DELAY; 调用延时程序DJNZ R1,LOOP1; 判断右移次数JMP start; 重新设定显示DELAY: mov R5,#10; 延时0.1s子程序D1: mov R6,#100;D2: mov R7,#100;DJNZ R7,$;DJNZ R6,D2;DJNZ R5,D1;RET ; 子程序返回END ; 程序结束三、实验步骤及调试过程1、汇编语言程序的编写与调试(1)新建一个工程(2)保存文件,设一个文件名(3)找到对应单片机的芯片,这里我们选AT89C51即可接着我们新建一个文本写程序(1)(2)保存文件名,注意文件名的后缀应该为.asm(汇编语言程序的格式)接着把我们的文本导入到工程里面去:(1)(2)点击Add,再Close即可2.汇编语言程序编译及下载(1)这里要设置一个输出.hex文件(2)点击生成工程相应的文件同时可以观察下面的结果:0 Error(s),即可。

实验2__C语言程序设计及_LED跑马灯实验

实验2__C语言程序设计及_LED跑马灯实验

EQU (0x1)
EQU (0x2)
EQU (DW16)
EQU (DW16)
EQU (DW16)
EQU (DW32)
EQU (DW16)
EQU (DW32)
EQU (DW32)
EQU
0x3
EQU
0x3
EQU
0x7
EQU
0x3
EQU
0x3
EQU
0x1
EQU
0x0
EQU
0x3
EQU
0x1
EQU
0x1
EQU
DW32
EQU (0x2)
B1_BWSCON=0x1 B4_BWSCON=0x2
;单独定义BANK1~7的数据宽度BWSCON寄存器参数
B1_BWSCON
EQU (DW16)
; =0x01: 选择BANK1的数据宽度为16-bit
B2_BWSCON
EQU (DW16)
; =0x01: 选择BANK2的数据宽度为16-bit
初始值 0x0 0x0700 0x0700 0x0700 0x0700 0x0700 0x0700 0x18008 0x18008 0xac0000 0x0 xxx xxx
待设置的存储器参数表达方式
1、待设置的BWSCON寄存器参数表达
DW16 DW32 ; B1_BWSCON B2_BWSCON B3_BWSCON B4_BWSCON B5_BWSCON B6_BWSCON B7_BWSCON
B5_BWSCON
EQU (DW16)
; = 0000 0000 0000 0000 0000 0000 0000 0001
B6_BWSCON
EQU (DW32)

汇编语言实现通过8255A和4个开关控制实现8个LED灯全亮、全灭、从左至右、从右至左跑马灯式点亮

汇编语言实现通过8255A和4个开关控制实现8个LED灯全亮、全灭、从左至右、从右至左跑马灯式点亮

汇编语⾔实现通过8255A和4个开关控制实现8个LED灯全亮、全灭、从左⾄右、从右⾄左跑马灯式点亮汇编代码及解释如下:1 .MODEL TINY2 .STACK 1003 .DATA4 .CODE5 start:6 ; set segment registers:7 mov bl,0feh ;先将bl通⽤寄存器的值置为1111 1110(实验室的实验箱中电路没有设置反相器,故设为7个1,1个0)8 mov dx,273h ;将273h送⼊地址寄存器dx,根据课本P169中8255A的端⼝操作表,由于273h中3对应0011,故A1A0=11,对应数据总线->控制寄存器,即为写⼊控制字做准备9 mov al,10000010b ;将1000 0010写⼊al通⽤寄存器中10out dx,al ;将1000 0010设为8255A的控制字,根据课本P171中8255A的⽅式选择控制字可知D7...D1D0=1...10,故B⼝输⼊C⼝输出(以上四⾏为8255A的初始化程序)11 go: mov al,0ffh ;初始化al通⽤寄存器,初始化其值为1111 111112 mov dx,272h ;将272h送⼊地址寄存器dx,根据课本P169中8255A的端⼝操作表,由于272h中2对应0010,故A1A0=10,对应C⼝13out dx,al ;将al中的数据写⼊dx对应端⼝(即将al中数据写⼊C⼝)14 mov dx,271h ;将271h送⼊地址寄存器dx,根据课本P169中8255A的端⼝操作表,由于271h中1对应0010,故A1A0=01,对应B⼝15in al,dx ;将al中的数据读⼊dx对应端⼝(即将al中数据读⼊B⼝)16 and al,0fh ;对al寄存器中的8位值进⾏and(与)运算,只取后4位17 cmp al,0eh ;cmp⽐较al中的值和0e,若相等,则zf标志位为1,执⾏jz指令18 jz st119 cmp al,0dh20 jz nd121 cmp al,0bh22 jz rd123 cmp al,07h24 jz th125 jmp go26 st1: mov bl,0feh27 mov dx,272h28 mov al,00h29out dx,al30 jmp go31 nd1: mov bl,0feh32 mov dx,272h33 mov al,0ffh34out dx,al35 jmp go36 rd1: mov dx,272h37 mov al,bl38out dx,al39 rol bl,1 ;rol中的l代表left,rol为循环左移指令,移位后经过ffff次loop再次jmp到go段重新执⾏,下同40 mov cx,0ffffh41 lo1:loop lo142 jmp go43 th1: mov dx,272h44 mov al,bl45out dx,al46 ror bl,147 mov cx,0ffffh48 lo2:loop lo249 jmp go50 end start。

实验--流水灯--程序

实验--流水灯--程序

实验二“流水灯”一、实验目的:1.初步了解汇编语言2.通过实验了解单片机最小系统3.了解单片机的I/O口通信。

4.学习延时子程序的编写和使用.二、实验内容:1. 流水灯(跑马灯)流水表步骤P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7十六进制1011111117FH 2101111110BFH 3110111110DFH 4111011110EFH 5111101110F7H 6111110110FBH 7111111010FDH 8111111100FFH (1)……MOV P1, #7FHACALL DELAYMOV P1, #0BFHACALL DELAYMOV P1, #0DFHACALL DELAY……MOV P1, #0FDHACALL DELAYMOV P1, #0FFHACALL DELAY……不科学(2)指令指令类别功能说明ORG伪指令用于设计程序计数器PC的初始值,一般出现在程序开始处MAIN标号程序中使用一个便于理解的字符串来指向程序存储器中的地址数据装载将立即数00H装载到P0寄存器,即从P0口输出MOVP0,#00HCALL DELAY调用指令调用程序存储器范围内的子程序JMP START跳转指令控制程序的走向和实现循环执行特定程序段RRC逻辑操作指令经过进位位的累加器循环右移RLC逻辑操作指令经过进位位的累加器循环左移DJNZ R5,$循环指令将一段程序重复执行一定次数(R5的值决定了重复的次数)。

寄存器减一,不为零则转移。

RET返回指令在子程序末尾,提示子程序结束,返回主程序END伪指令告诉汇编器程序的结束点,END以后的程序被视为是无效的ORG 00H ;起始地址START: ;程序一开始,初始一些所需要变量,如进位C 的清0等MOV A, #0FFH ;累加器A 的8位全置1(0FFH ),发光二极管全熄灭... CLR C;进位..C .被清..0.,.C=0MOV R1, #8 ;R1=8,循环..8.次(右移....8.次)..,.用.R1..作计数器....RIGHT:;这是发光二极管向右“流动”......的循环体 RRC A;把进位C 在累加器A 中从左向右....轮换一位 MOVP1, A;输出至P1口ACALL DELAY;调延时子程序,延时200msDJNZ R1, RIGHT;R1减1,如果不为0跳回RIGHT 循环执行JMP START;跳回一开始,重复执行该流水灯程序DELAY: ;延时200ms 的子程序MOV R3, #20D1: MOV R4, #20D2:MOV R5, #248 ; 2+248×2=498=498μs DJNZ R5, $ ;R5减1,如果不为0,就执行本行DJNZ R4, D2 ;2+20×(498+2)=10002μs ≈10msDJNZ R3, D1 RET ;子程序结束标志,返回主程序END;程序结束点(3)取表法要显示的数据之间不存在简单的运算关系,不能使用ADD 和SUBB 等指令根据上一状态计算出下一状态的显示值。

单片机实例之跑马灯

单片机实例之跑马灯

图3-7 新建工程窗口
文档仅供参考,如有不当之处,请联系改正。
KEIL 软件开发平台
图3-8 新建工程窗口
文档仅供参考,如有不当之处,请联系改正。
KEIL 软件开发平台
图3-9 单片机选择窗口
文档仅供参考,如有不当之处,请联系改正。
KEIL 软件开发平台
图3-10 目的1属性设置窗口
文档仅供参考,如有不当之处,请联系改正。
DJNZ R7,LOOP
DJNZ R6,SS
整个子程序延时为: {[2μs×249+1+2]×200+2}×5=501010μs
汇编语言程序:
org 0000h LS:
setb p1.0 Lcall delay clr P1.0 Lcall delay sjmp $
文档仅供参考,如有不当之处,请联系改正。
4.完毕写入编程。
5.退出程序:左击界面右上角旳“x”按钮, 退出此程序。
文档仅供参考,如有不当之处,请联系改正。
文档仅供参考,如有不当之处,请联系改正。
任务二 跑马灯
本任务让图3-28中旳LED依次点亮
图3-28 LED硬件图
文档仅供参考,如有不当之处,请联系改正。
程序设计分析
为了让图3-28所示旳LED依次点亮,就是要求从P1口从 P1.0至P1.7依次输出低电平,其他引脚都输出高电平,就 能让被接在端口旳彩灯依次点亮。
KEIL 软件开发平台
图3-20 硬件查询窗口
I/O口全部打开界面
文档仅供参考,如有不当之处,请联系改正。
KEIL 软件开发平台
图3-21 硬件I/0口查询窗口
文档仅供参考,如有不当之处,请联系改正。

单片机跑马灯实验程序(汇编)

单片机跑马灯实验程序(汇编)

单片机跑马灯实验程序led equ p1 ;可以增强程序的可移植性org 00hajmp head ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;org 0030hhead:mov sp ,#70hmov dptr,#led_on_tabclr amov r2,#0begin:call add_oncall dec_offsjmp begin;;;;;;;;;;;;;;;;;;;;;;;;;;; 按点亮led灯;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;led_on:mov a,r2movc a,@a+dptrmov led,alcall delay_200msret;;;;;;;;;;;;;;;;;;;;;;;;;;;实现小灯逐个点亮的移位逻辑;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;add_on:acall led_oninc r2cjne r2,#9,add_onmov r2,#7ret;;;;;;;;;;;;;;;;;;;;;;;;;;;;;实现小灯逐个熄灭的移位逻辑;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;dec_off:acall led_ondec r2cjne r2,#0,dec_offret;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;led_on_tab: DB 255,254,252,248,240,224,192,128,0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;delay_200ms:mov r5,#20signed_200ms_:acall delay_10msdjnz r5,signed_200ms_ret;mytime.s;;;;;;;;;;;;;;;; 非中断精确1MS定时程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;delay_1ms:MOV R7 ,#249signed: ;循环部分4机器周期nopnopdjnz R7 ,signedret ;返回指令2机器周期;2+249*4+2=1000us 可以精确定时1MS,假设外部晶振是12M;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 非中断精确10MS定时程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; delay_10ms:mov r6,#9 ;2个机器周期用2usdelay_10ms_sined: ;9次循环共用9(1ms+4us)=9036usacall delay_1msdjnz r6,delay_10ms_sinedMOV r6 ,#240 ;2个机器中期用2ussigned_10ms : ;循环部分4机器周期共240次nopnopdjnz r6 ,signed_10msret ;返回指令要2us;2us+9036us+240*4us+2us = 10ms 即可精确定时10ms ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 非中断精确定时1s ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;delay_1s:mov r5,#99 ;两个机器周期2usdelay_1s_signed: ;循环指令周期为4us,加上延时10ms;(10ms+4us)*99 = 990.396msacall delay_10msdjnz r5,delay_1s_signedmov r5 ,#9 ;两个机器周期2ussigned_1s: ;循环指令周期为4us,加上延时1ms;(1ms+4us)*9 = 9ms+36usacall delay_1msdjnz r5 ,signed_1smov r5 ,# 140 ;机器周期2ussigned_1s_: ;一次循环4us共有140次。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

;延时 100MS 子程序 延时 ;入口参数 入口参数:DelayTimes_100MS,延时多少个 100MS 入口参数 延时多少个 ;-----------------------------------------------------Delay100MS: MOV R7,DelayTimes_100MS Delay100MS_1: MOV R6,#10 Delay100MS_2: MOV R5,#150 Delay100MS_3: MOV R4,#200 Delay100MS_4: DJNZ R4,Delay100MS_4 DJNZ R5,Delay100MS_3 DJNZ R6,Delay100MS_2 DJNZ R7,Delay100MS_1 RET ;子程序返回 子程序返回 ;-----------------------------------------------------;跑马灯子程序 跑马灯子程序 ;让 4 个 LED 以 全灭 亮灭灭灭 亮亮灭灭 亮亮亮灭 亮亮亮亮 灭亮亮亮 灭灭亮 全灭->亮灭灭灭 亮亮灭灭->亮亮亮灭 亮亮亮亮->灭亮亮亮 亮灭灭灭->亮亮灭灭 亮亮亮灭->亮亮亮亮 灭亮亮亮->灭灭亮 让 灭灭灭亮->全灭 亮->灭灭灭亮 全灭 的顺序运行 灭灭灭亮 ;-----------------------------------------------------LEDRUN: ;---全灭 全灭--全灭 SETB LED0 SETB LED1 SETB LED2 SETB LED3 MOV DelayTimes_100MS,#10 LCALL Delay100MS ;----------CLR LED0 SETB LED1 SETB LED2 SETB LED3 MOV DelayTimes_100MS,#10 LCALL Delay100MS ;----------CLR LED0 CLR LED1 SETB LED2
;设置需要延时多少个 100MS 设置需要延时多少个 ;调用延时 100MS 子程序 调用延时
;设置需要延时多少个 100MS 设置需要延时多少个 ;调用延时 100MS 子程序 调用延时
实验结果:
深圳大学学生实验报告用纸
实验结论: 这是第一次用汇编进行编程。根据实验报告给出的程序来说,相比起用 C 进行编程 还是比较简单点,相对来说较为直观。而在程序中也有详细的讲解。因此还是大概知道 是什么意思。要注意的是格式的问题,因为汇编程序与以往的 C 不同,因此还有很多应 该注意的地方。 另外, 根据老师说的, 在第一个子程序中 MOV R7,DelayTimes_10MS , 即是等于 MOV R7,6FH(将 6FH 地址传给 R7)。因此也能知道在闪烁之前会在延迟。最后的让跑马灯亮 灭的程序中,SETB 即是全灭,然后 CLR 就是清零,让灯回亮,然后按照程序便可知 道怎么让跑马灯运行。 这次实验算是体验实验,通过这次程序了解汇编语言的应用方法。还有大概需要注 意的地方。 指导教师批阅意见:
;设置需要延时多少个 100MS 设置需要延时多少个 ;调用延时 100MS 子程序 调用延时
;设置需要延时多少个 100MS 设置需要延时多少个 ;调用延时 100MS 子程序 调用延时
;设置需要延时多少个 100MS 设置需要延时多少个 ;调用延时 100MS 子程序 调用延时
;设置需要延时多少个 100MS 设置需要延时多少个 ;调用延时 100MS 子程序 调用延时
实验时间: 实验时间: 时间
2011-4-7
实验报告提交时间: 实验报告提交时间: 提交时间
2011-4-7
教务处制
ห้องสมุดไป่ตู้ 实验目的与要求:
1. 初步使用汇编语言进行编程,了解单片机内程序运行情况。 2. 了解汇编语言的指令结构,跳转,子程序调用等功能。 3. 使用汇编语言实现跑马灯功能。
实验仪器: 微机原理试验箱 实验相关电路图:
实验过程及内容: 按照以下的要求写出程序,并在 keil 下进行仿真以及在单片机上运行。 1. I/O 口输出实验。 a. 让 LED1~4,以 A->B->C->D->A 的次序轮流点亮,每次点亮中间延时 0.5~1s。 b. 自 己 设 计 一 种 不 同 于 以 上 两 种 的 跑 马 灯 , 并 写 出 程 序 实 现 。 eg: ( A->AB->ABC->ABCD->BCD->CD->D->全灭等等) 。
成绩评定:
指导教师签字: 年 月 日 备注:
注:1、报告内的项目或内容设置,可根据实际情况加以调整和补充。 2、教师批改学生实验报告时间应在学生提交实验报告时间后 10 日内。
;设置需要延时多少个 100MS 设置需要延时多少个 ;调用延时 100MS 子程序 调用延时
;设置需要延时多少个 100MS 设置需要延时多少个 ;调用延时 100MS 子程序 调用延时
SETB LED3 MOV DelayTimes_100MS,#10 LCALL Delay100MS ;----------CLR LED0 CLR LED1 CLR LED2 SETB LED3 MOV DelayTimes_100MS,#10 LCALL Delay100MS ;----------CLR LED0 CLR LED1 CLR LED2 CLR LED3 MOV DelayTimes_100MS,#10 LCALL Delay100MS ;----------SETB LED0 CLR LED1 CLR LED2 CLR LED3 MOV DelayTimes_100MS,#10 LCALL Delay100MS ;----------SETB LED0 SETB LED1 CLR LED2 CLR LED3 MOV DelayTimes_100MS,#10 LCALL Delay100MS ;----------SETB LED0 SETB LED1
深 圳 大 学 实 验 报 告
课程名称: 课程名称:
微型计算机技术
实验项目名称: 实验项目名称:
汇编语言实验——跑马灯 汇编语言实验——跑马灯 ——
学院: 学院:
医学院
专业: 专业:
生物医学工程
指导教师: 指导教师:
张会生
报告人: 报告人: 邓泽琳
学号: 学号:2009222038
班级: 班级: 生医 02
;设置需要延时多少个 100MS 设置需要延时多少个 ;调用延时 100MS 子程序 调用延时
SETB LED2 CLR LED3 MOV DelayTimes_100MS,#10 LCALL Delay100MS ;----------SETB LED0 SETB LED1 SETB LED2 SETB LED3 MOV DelayTimes_100MS,#10 LCALL Delay100MS RET END ;汇编程序结束 汇编程序结束 ;-----------
实验程序: LED0 BIT p3.4 ;将 p3.4 用伪指令命名为 LED0 将 LED1 BIT p3.5 ;将 p3.5 用伪指令命名为 LED1 将 LED2 BIT p3.6 ;将 p3.6 用伪指令命名为 LED2 将 LED3 BIT p3.7 ;将 p3.7 用伪指令命名为 LED3 将 ;BIT 伪指令 相当于 C 语言中的 sbit 关键字一样 用于对 位"进行命名操作 伪指令,相当于 关键字一样,用于对 用于对"位 进行命名操作 DelayTimes_10MS EQU 6EH ;将寄存器 6EH 用伪指令命名为 DelayTimes_10MS 将寄存器 DelayTimes_100MS EQU 6FH ;将寄存器 6EH 用伪指令命名为 DelayTimes_10MS 将寄存器 ;********************************************************************** ;--主程序开始 主程序开始---主程序开始 ORG 0000H ;定义起始地址 程序将从此处开始运行 定义起始地址,程序将从此处开始运行 定义起始地址 LJMP START ;长跳转 跳转到标号 "START"处 长跳转,跳转到标号 长跳转 处 ORG 0100H ;定义 START 程序的地址 定义 START: MOV SP,#70H ;设置堆栈 堆栈空间从 70H-7FH,共 16 字节 设置堆栈,堆栈空 设置堆栈 堆栈空间从 共 START1: LCALL LEDRUN ;调用跑马灯程序 调用跑马灯程序 LJMP START1 ;跳转回 START1,重新执行以上程序 跳转回 重新执行以上程序 ;相当于 C 语言中的 while(1)的功能 相当于 的功能 ;************************************************************************* ;以下为子程序 以下为子程序 ;************************************************************************* ;-----------------------------------------------------;延时 10MS 子程序 延时 ;入口参数 入口参数:DelayTimes_10MS,延时多少个 10MS 入口参数 延时多少个 ;-----------------------------------------------------Delay10MS: MOV R7,DelayTimes_10MS Delay10MS_1: MOV R6,#150 Delay10MS_2: MOV R5,#200 Delay10MS_3: DJNZ R5,Delay10MS_3 DJNZ R6,Delay10MS_2 DJNZ R7,Delay10MS_1 RET ;子程序返回 子程序返回 ;------------------------------------------------------
相关文档
最新文档