汇编语言发光二极管的点亮
- 格式:wps
- 大小:340.00 KB
- 文档页数:2
一、选择题(每题2分,共20分)1.CPU响应INTR引脚上来的中断请求的条件之一是()。
A.IF=0 B.IF=1C.TF=0 D.TF=12.下列数中最大的数是()。
A.(10000011)2 B.(10010101)BCDC.(92)16D.(101)103.RAM 6116芯片有2K×8位的容量,它的片内地址选择线和数据线分别是()。
A.A0~A15和D0~D15 B.A0~A10和D0~D7C.A0~A11和D0~D7 D.A0~A11和D0~D154.下列指令中正确的是()。
A. MOV BX,ALB. MOV BL,AXC. MOV BL,ALD. IN BL,40H5.8253 是可编程定时、计数器芯片,它内部有()。
A.三个定时器B.四个定时器C.二个计数器D.四个计数器6.采用级联方式使用8259中断控制器,可使它的硬件中断源最多扩大到()个。
A.8 B. 16C. 32D. 647.下述产生片选信号的方法中,被选中芯片不具有唯一确定地址的是()。
A.线选法或部分译码 B. 仅部分译码C. 仅线选法D. 全译码8.一台微机化仪器采用8255A芯片做数据传送接口,并规定使用I/O地址的最低两位作芯片内部寻址,已知芯片A口地址为0F4H,则当CPU执行输出指令访问0F7H端口时,其操作为()。
A.数据从端口C送数据总线B.数据从数据总线送端口CC.控制字送控制寄存器D.数据从数据总线送端口B9.在执行指令MOV AX,0后,CPU状态标志位ZF的取值为()。
A.0 B.1C.不确定D.没有影响10.8086CPU复位后,CPU执行的第一条指令的起始地址应是()。
A.ROM,FFFF0H B.RAM,FFFF0HC.ROM,FFFFH D.RAM,FFFFH二、填空题(每空1分,共20分)1.计算机主机与I/O设备间进行数据传送的方式主要包括以下五种:I/O处理机、、、、。
51单片机最小系统原理及编程电路设计本课以AT89S51单片机最小系统来教你如何实现单片机编程,该程序驱动单片机P1.7端口上的发光二极管不停闪烁,系统程序用keil 汇编语言编写,电路参考下图1所示。
间SETB P1.7 ;P1.7输出高电平"1",熄灭发光二极管ACALL DELAY ;调用延时子程序延时一段时间,让发光二极管熄灭一段时间AJMP MAIN ;跳转到程序开头重复执行;******** 下面是延时子程序 ********DELAY: MOV R7,#255Y1: MOV R6,#255DJNZ R6,$DJNZ R7,Y1RET ;延时子程序返回END ;程序结束启动“Keil uVision2”单片机集成开发环境,如没有请再这里下载 keil下载建立一个新工程,输入上面的源程序,最后编译得到一个lich1.hex目标文件,用编程器把lich1. hex写入单片机AT89S51中,插到实验板上就可以看到第一个程序的运行效果了(P1.7端口的发光二极管不停闪烁)。
这就是我们学习的第一个最简单的程序,是一个完整的单片机开发过程,再复杂庞大的程序都是由简单的语句、程序构成的,希望该教程能给初学者对单片机开发有一个感性的认识。
不懂如何在Keil中编辑源程序的初学者请看 keil教程图4:ISP编程器将产生的目标程序lich1.hex写入AT89S51单片机图5:单片机插入实验板上程序的运行效果单片机的学习是一个循序渐进的过程,制作单片机最小系统,并彻底了解其原理,能把你快速带入单片机世界的大门,这只是一个最简单的制作,有什么问题请联系我。
可以提供相关资料,我们共同学习。
本人邮箱,uk383246980@。
单片机8个led灯循环点亮程序一、前言单片机是一种非常重要的电子元件,它可以通过编程来实现各种功能。
其中,点亮LED灯是最基础的操作之一。
本文将介绍如何使用单片机8个LED灯循环点亮。
二、硬件准备1. 单片机:STC89C52RC或其他8051系列单片机;2. LED灯:8个;3. 电阻:8个(220欧姆);4. 面包板:1个;5. 杜邦线:若干。
三、程序设计首先,我们需要了解一些基本的概念和知识:1. 端口:单片机的I/O口被称为端口,其中P0、P1、P2、P3四个端口分别对应着不同的引脚。
2. 输出:通过控制端口输出高电平或低电平来控制外部设备。
3. 延时函数:为了让程序在执行时停留一段时间,需要使用延时函数。
接下来,我们开始编写程序。
具体步骤如下:1. 定义引脚首先,我们需要定义每个LED所对应的引脚。
这里我们将8个LED分别连接到P0口的0~7引脚上。
sbit led0=P0^0;sbit led1=P0^1;sbit led2=P0^2;sbit led3=P0^3;sbit led4=P0^4;sbit led5=P0^5;sbit led6=P0^6;sbit led7=P0^7;2. 定义延时函数为了让程序在执行时停留一段时间,我们需要定义一个延时函数。
这里我们使用循环来实现延时。
void delay(unsigned int i){while(i--);}3. 循环点亮LED灯接下来,我们就可以开始循环点亮LED灯了。
这里我们使用for循环来实现。
void main(){while(1){for(int i=0;i<8;i++){switch(i){case 0:led0=1;break;case 1:led1=1;break;case 2:led2=1;break;case 3:led3=1;break;case 4:led4=1;break;case 5:led5=1;break;case 6:led6=1;break;case 7:led7=1;break;}delay(50000);switch(i){case 0:led0=0;break;case 1:led1=0;break;case 2:led2=0;break;case 3:led3=0;break;case 4:led4=0;break;case 5:led5=0;break;case 6:led6=0;break;case 7:led7=0;break;}}}}四、总结通过以上步骤,我们就可以实现单片机8个LED灯循环点亮的程序了。
一:实验目的熟悉如何使用stp-isp软件,用汇编语言实现8个LED1-LED8依次闪亮从而产生“流水”现象,了解单片机汇编语言设计使用和调试方法。
二:实验内容通过p2口将8个LED连接在一起,从而产生“流水现象”。
三:实验线路图四: 实验原理从原理图中可以看出,如果要让接在p2.0口的LED 1灯亮起来,那么只要把p2.0的电平变为低电平就可以;相反的,如果要接在p2.0口的LED 1熄灭,就要把p2.0口的电平变为高电平;同理,接在p2.1-p2.7口的其他7个LED的点亮和熄灭的方法同LED 1 。
因此要实现流水灯功能,我们只要将发光二极管LED 1 —LED 8 依次点亮/熄灭,8个LED灯就会一亮一暗的做规律活动,即“流水”现象。
此外我们还应该注意一点,由于人的视觉暂留,神经反应间隔以及单片机执行每条指令的时间很短,我们在控制二极管亮和暗的时候应该延时一段时间,否则由于时间太短,我们视觉神经反应不过来而看不到“流水”效果了。
六:实验程序ORG 00HLJMP STARTORG 30HSTART: MOV A, #7FHLOOP: RL AINC AMOV P2, ALCALL DELAYLJMP LOOPDELAY: MOV R5, #5DELAY01: MOV R6, #200 DELAY02: MOV R7, #250 DELAY03:DJNZ R7, DELAY03DJNZ R6, DELAY02DJNZ R5, DELAY01RETEND(反复调试程序使之正确)七:实验步骤1 .打开电脑,安装 stp-isp软件;2 .连接接usb转串口线和电源线;3 .在改程序中打开所需程序,然后下载程序进单片机,按照提示打开关闭电板上的开关控制,带程序开始运行之后观察是否与所涉及程序结果一致。
若一致(即观察到”流水“现象),则实验成功,分析实验结果写总结。
若不一致(即观察不到”流水“现象),则重新调试程序和接线,找到原因,重新实验,直至看到”流水“现象。
实验一P1口亮灯实验一、实验目的(1)学习P1口的使用方法;(2)学习延时子程序的编写。
二、实验内容P1口做输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。
三、实验预备知识(1)P1口为准双向口,可定义为输入,也可定义为输出。
(2)本实验中延时子程序采用指令循环来实现,机器周期(12/6MHZ)*指令所需机器周期数*循环次数,在系统时间允许的情况下可以采用此方法。
四、程序框图五、实验步骤1、实验连线P1.0~P1.7用插针连至L1~L82、PC环境在与PC联机状态下,打开桌面图标“MCS-51集成开发环境”,下载PH51\he01.asm,编译、连接、装载,用连续方式运行程序。
3、观察运行结果在连续运行方式下,观察发光二极管闪亮移位情况。
4、终止运行按“暂停图标”或实验箱上的“暂停按钮”,使系统无条件退出该程序的运行返回监控状态。
六、思考修改延时常数,使发光二极管闪亮时间改变。
修改程序,使发光二极管闪亮移位方向改变。
七、实验电路八、实验程序ORG 0790H;----------------------------------------------------------SE18: MOV P1,#0FFH ;送P1口LO34: MOV A,#0FEH ;L1发光二极管点亮LO33: MOV P1,ALCALL SE19 ;延时RL A ;左移位SJMP LO33 ;循环;----------------------------------------------------------SE19: MOV R6,#0A0HLO36: MOV R7,#0FFHLO35: DJNZ R7,LO35DJNZ R6,LO36 ;延时RET;----------------------------------------------------------END教你如何用W ORD文档(2012-06-27 192246)转载▼标签:杂谈1. 问:W ORD 里边怎样设置每页不同的页眉?如何使不同的章节显示的页眉不同?答:分节,每节可以设置不同的页眉。
使用STM32F103系列芯片点亮LED流水灯(STM32入门)STM32F103系列芯片是意法半导体(STMicroelectronics)推出的一款32位ARM Cortex-M3内核的微控制器。
本文将介绍如何使用STM32F103系列芯片点亮LED流水灯,从而帮助初学者入门STM32首先,我们需要准备以下材料和工具:1. STM32F103系列开发板(如:STMicroelectronics的STM32F103C8T6开发板)B转串口模块3.杜邦线和杜邦线母头4.面包板(可选)5.电脑接下来,我们将一步一步地进行操作。
第一步,准备环境:2.将USB转串口模块连接到STM32开发板上,用于通过串口与电脑进行通信。
第二步,编写代码:在STM32CubeIDE中创建一个新项目,并选择适合的开发板型号和启动文件。
然后,将以下代码复制到main.c文件中:```#include "stm32f1xx.h"void delay(int n)for(int i=0; i<n; i++);int main(void)GPIOC->CRH &= 0xFF0FFFFF; // Clear PC13 configurationwhile(1)// Turn on the LED// Delay// Turn off the LED// Delay}```第三步,编译和烧录:在STM32CubeIDE中,使用编译工具将代码编译成可执行文件。
然后,通过USB转串口模块将编译后的可执行文件烧录到STM32开发板中。
第四步,连接LED:在STM32开发板上找到PC13引脚,将LED的长针连接到PC13引脚上,将LED的短针连接到开发板的地线上。
可以使用面包板或杜邦线连接器来连接LED和开发板。
第五步,运行程序:将STM32开发板连接到电脑上,通过串口与开发板进行通信,然后运行编译后的程序。
最简单的stm编程STM(STMicroelectronics)是一家知名的半导体公司,生产各种微控制器和处理器。
STM编程通常指的是使用C或C++语言编写程序来控制STM的微控制器。
以下是一个最简单的STM 编程示例,用于点亮一个LED灯:```c#include "stm32f10x.h"void delay(uint32_t count) {for (uint32_t i = 0; i < count; i++);}int main(void) {GPIO_InitTypeDef GPIO_InitStructure;// 使能GPIOC时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);// 配置GPIOC的第13引脚为推挽输出模式GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOC, &GPIO_InitStructure);while (1) {// 点亮LEDGPIO_SetBits(GPIOC, GPIO_Pin_13);delay(0xFFFFF);// 熄灭LEDGPIO_ResetBits(GPIOC, GPIO_Pin_13);delay(0xFFFFF);}}```这个示例程序首先包含了STM32F10x系列的头文件,然后定义了一个延时函数`delay`。
在`main`函数中,我们初始化了GPIOC的第13引脚作为输出引脚,并在一个无限循环中不断地点亮和熄灭LED灯。
2009061324 韦兴魁实验九FIQ 中断【实验目的】1. 熟悉FIQ 的中断向量和中断源;2. 掌握中断控制单元P_INT_Ctrl,P_INT_Clear 的设置方法;3. 掌握FIQ 中断的编程方法。
【实验设备】1.装有Windows 系统和µ’nSP™IDE 集成开发环境的PC 机一台,µ’nSP™十六位单片机实验箱一个。
2. 本实验用到的实验箱硬件模块为:SPCE061A 核心及周边电路模块(包含32 个I/O 口),发光二极管电路模块。
【实验要求】1. 编程要求:编写一个汇编语言程序。
2. 实现功能:打开并设置TimerA 和TimerB 定时器,并打开它们的FIQ 中断,当有TimerA/B 的FIQ中断请求时,响应相应的中断服务程序,在中断服务中翻转I/O 端口输出电平,以控制接在I/O 端口的发光二极管的亮灭。
3. 实验现象:TimerA 定时长度为2s,当进入TimerA 的FIQ 中断后,翻转IOA 口低四位的输出电平以控制接在IOA 低四位端口的发光二极管;TimerB 定时长度为1s,当进入TimerB 的FIQ中断后,翻转IOB 口低四位的输出电平以控制接在IOB 低四位端口的发光二极管。
程序运行时,可以观察到接在IOA 低四位端口的发光二极管亮灭的周期为4s,而接在IOB 低四位端口的为2s。
【实验原理】1.FIQ 中断SPCE061A 单片机的中断系统有三种类型的中断:软件中断、异常中断和事件中断。
其中事件中断有14 个中断源,可采用两种方式:快速中断请求(FIQ 中断)和中断请求(IRQ 中断)。
在后面的几个实验主要针对事件中断进行练习。
FIQ 中断对应Fosc/1024、TMA、TMB 三个中断源,通过写P_INT_Ctrl 来允许中断,并通过INT FIQ 或者FIQ ON 开总中断,INT FIQ 与FIQ ON 不同的是:INT FIQ 的功能是允许FIQ 中断,关闭IRQ 中断;FIQ ON 的功能是允许FIQ 中断。
DSP器件及应用实验指导手册西安文理学院机械电子工程系目录实验一 CCS 操作实验 (2)实验二存储器实验 (5)实验三发光二极管循环点亮实验 (10)实验四数码显示实验 (12)实验五硬件中断实验 (14)实验六液晶显示实验 (16)实验七定时器实验 (18)实验八步进电机控制实验 (20)实验九用DSP芯片生成正弦信号发生器 (23)附录:数据流程图及端口地址 (24)实验一 CCS 操作实验一、实验目的1、熟悉CCS2.0软件的使用。
2、了解SZ-DSPF开发教学平台的使用。
二、实验设备计算机、DSP硬件仿真器、SZ-DSPF开发教学平台。
三、实验原理了解怎样连接DSP仿真器、对CCS的仿真配置及怎样在CCS内新建工程并生成*.out文件。
四、实验步骤安装CCS2.0的Simulator方式:双击桌面上的Setup CCS2(…C5000)图标,关闭Import Configuration窗口,在System Configuration中的My System的下面可看到一个类似板卡的图标,如果该图标的名称是“tisim54x”的话,就可直接关闭该窗口,不存盘退出。
如果该图标的名称不是“tisim54x”的话,在该图标上单击右键,选择remove 删除该结构,然后在Available Board Types中双击“tisim54x”的图标(如果有的话),弹出Board Properties的对话框点击“next”、“finish”然后关闭Code Composer Setup窗口,存盘退出即可。
如果在Available Board Types中没有“tisim54x”的图标,则在右边框内单击“Install a Device Driver”,在路径“c:\ti\driver\”(此目录为CCS的安装目录)中打开tisim54x.dvr 文件,在Available Board Types中可看到“tisim54x”的图标,然后按上述操作。
LED跑马灯实验初学者可先动手做下面的实验:发光二极管轮流点亮的实验,也就是通常所说的跑马灯实验,首先让我们来完成必须的硬件部分,我们需要焊接上8个发光二极管和8个限流电阻,可以参考下面的原理图和实物图像进行操作,需要注意的是LED是有极性的,引脚长的为正极,引脚短的为负极,负极和电阻一侧连接,如果接错那么相应的那一路可能在实验中不会点亮了,在焊接前要看仔细哦 D2D7D4D3D1D6D5D8R7R2R3R4R5R6R1R812345678STC89C51RC VCC +5V 下面我们来完成软件编程设计,这里我们没有采用高深的编程技巧,而是用了最笨、最直接的向端口送数的办法来实现,一来程序比较简单,没必要玩深沉,而且初学者看起来直观易懂。
ORG 0000H START:MOV P1,#01111111B;最下面的LED点亮 LCALL DELAY;延时1秒 MOV P1,#10111111B;最下面第二个的LED点亮 LCALL DELAY;延时1秒 MOV P1,#11011111B;最下面第三个的LED点亮 (以下省略) LCALL DELAY MOV P1,#11101111B LCALL DELAY MOV P1,#11110111B LCALL DELAY MOV P1,#11111011B LCALL DELAY MOV P1,#11111101B LCALL DELAY MOV P1,#11111110B LCALL DELAY MOV P1,#11111111B;完成第一次循环点亮,延时约0.25秒 AJMP START;反复循环 ;延时子程序,12M晶振延时约250毫秒 DELAY: MOV R4,#2 L3: MOV R2 ,#250 L1: MOV R3 ,#250 L2: DJNZ R3 ,L2 DJNZ R2 ,L1 DJNZ R4 ,L3 RET END 如何精确计算延时子程序的执行时间? 汇编语言的一大优势就是能够精确控制程序的执行时间,这在编写一些对时序要求严格的外围器件驱动时由为重要! ;延时子程序,12M晶振延时约253毫秒 DELAY: MOV R4,#2------执行1个机器周期,耗时1微秒 L3: MOV R2 ,#250---执行1个机器周期,耗时1微秒 L1: MOV R3 ,#251---执行1个机器周期,耗时1微秒 L2: DJNZ R3 ,L2---执行2个机器周期,反复执行251次(2x251)=502微秒) DJNZ R2 ,L1-----执行2个机器周期,反复执行250次(1+502+2)*250=126250微秒) DJNZ R4 ,L3-----执行2个机器周期,反复执行2次 (1+1+502+126250+2)*2=253512微秒) RET delay 加上第一条总共延时1+253512=253513微秒 。
单片机,第三章答案本页仅作为文档封面,使用时可以删除This document is for reference only-rar21year.March思考题:【3-1】汇编语言与C语言哪种语言的可读性和可移植性强在对速度和时序敏感的场合应该使用什么语言对于复杂的单片机系统一般采用C与汇编混合编程的形式这句话对吗【3-2】二进制机器语言与C和汇编语言两者之间是什么关系用C或汇编编制的程序在ROM中是以编译后的二进制代码的形式存放这句话对吗【3-3】80C51系列单片机指令的格式包含哪几个部分各部分之间的间隔符是什么四个部分中哪个部分是必须存在的,哪几个部分是可有可无的标号的格式和代表的意义是【3-4】80C51系列单片机有哪几种寻址方式【3-5】80C51单片机中立即数是存放在ROM中还是RAM中【3-6】判断下列说法是否正确。
(1)立即数寻址方式是被操作的数据本身就在指令中,而不是它的地址在指令中。
()(2)指令周期是执行一条指令的时间。
()(3)指令中直接给出的操作数称为直接寻址。
()(4)内部寄存器Rn(n=0~7)可作为间接寻址寄存器。
()【3-7】80C51单片机可以进行直接寻址的区域是【3-8】80C51单片机可以进行寄存器寻址的范围是【3-9】80C51单片机可以进行寄存器间接寻址的寄存器是寻址的范围是【3-10】在寄存器间接寻址方式中,其“间接”体现在指令中寄存器的内容不是操作数,而是操作数的()。
【3-11】80C51单片机变址寻址方式中可以作基址的寄存器是可以作变址的寄存器是@A+PC,@A+DPTR所找到的操作数是在ROM中对吗【3-12】80C51单片机相对寻址改变的是PC的当前值,即改变的CPU执行指令的顺序这句话对否【3-13】若访问特殊功能寄存器,只可以采用那种寻址方式【3-14】若访问外部RAM单元,只可以使用哪种寻址方式【3-15】若访问内部RAM单元,可使用哪些寻址方式【3-16】若访问内外程序存储器,可使用哪些寻址方式【3-17】80C51单片机可以进行位寻址的字节单元范围除11个可位寻址的特殊功能寄存器外还包括哪个区域分别找出位地址是00H、08H、22H、7FH、D0H、E0H对应的字节地址【3-18】已知(30H)=40H,(40H)=10H,(10H)=32H,(P1)=0EFH,试写出执行以下程序段后有关单元的内容。
单片机控制发光二极管的原理单片机控制发光二极管是一种常见的电子控制应用。
发光二极管(LED)是一种能将电能转化为可见光的电子元件,具有很高的光效和节能的特点。
单片机可以通过控制不同的信号,让LED以不同的亮度和颜色发光,实现各种应用。
下面将从硬件连接和软件编程两个方面详细介绍单片机控制LED的原理。
首先,我们先了解一下硬件连接原理。
单片机与LED的连接通常采用驱动电路和输入输出引脚实现。
驱动电路除了单片机外还包括功率驱动芯片、电阻、电容等元件。
单片机的输出引脚通过驱动电路提供足够的电流,从而控制LED的亮度。
输入引脚则接收外部信号,触发控制LED的开关。
在软件编程方面,单片机控制LED通常涉及到以下几个方面。
首先是引脚设置。
通过单片机提供的编程语言,我们可以设置LED 所连接的引脚的工作模式,包括输入和输出模式。
在控制LED发光时,需要将相应的引脚设置为输出模式。
其次是控制信号的产生。
单片机通过产生不同的控制信号,来控制LED的亮度和颜色。
可以通过调整信号的高低电平、持续时间和频率等参数来实现不同的控制效果。
常见的控制信号包括PWM信号、数字信号和模拟信号等。
再次是信号处理。
单片机会对输入信号进行处理,以判断何时触发LED的发光。
通过采集外部信号并与预设条件进行比较,可以实现LED的自动控制和亮度调节等功能。
这可以通过单片机内部的比较器、计数器和状态机等功能单元来实现。
最后是输出控制。
单片机控制LED发光的最终目的是输出特定的电平信号,以驱动LED发光。
通过设置输出引脚的电平,可以实现LED 的开关和亮度调节。
此外,还可以通过控制多个LED的状态和亮灭时间等参数,实现更加复杂的应用,如LED显示屏、灯光效果等。
综上所述,单片机控制发光二极管的原理包括硬件连接和软件编程两个方面。
通过合理设置引脚、产生控制信号、进行信号处理和输出控制,可以实现LED的各种发光效果。
这为我们设计和制作各种电子产品和嵌入式系统提供了强大的支持和灵活性。
无论是S3C2410A还是S3C2440A,其IO口B都是11位二进制数,xxx xxxx xxxx,现在控制第5、6、7、8为做输出点亮LED灯(共阳极,输出0点亮),即xx8 765x xxxx,GPBCON equ 0x56000010GPBDAT equ 0x56000014GPBUP equ 0x56000018xport xmainarea Init,code,readonlyentryexportxmainldr r0,=GPBCONldr r1,[r0]bic r1,#0x3fC00 ;r1=xx00 0000 00xx xxxx xxxxorr r1,#0x15400 ;r1=xx01 0101 01xx xxxx xxxxstr r1,[r0] ;r1传给GPBCON设置8765位为输出ldr r0,=GPBUPldr r1,[r0]orr r1,#0x1e0 ;r1=xx1 111x xxxxstr r1,[r0] ;开B口第8、7、6、5位上拉电阻ldr r0,=GPBDATldr r2,[r0] ;把B口最初状态保存在R2 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;LOOP dr r1,[r2]orr r1,#0x1c0str r1,[r0]bl delay ;BL跳转时将PC+4值自动保存在R14即LR中,也就是将程序的下一个语句地址保存在lr中;在转移的程序后执行mov pc,lr相当于返回,这样BL相当于调用子程序,pc=lr相当于子程序返回;;;;;;;;;;;;;;;;;;dr r1,[r2]orr r1,#0x1a0str r1,[r0]bl delay;;;;;;;;;;;;;;;;;;;;;ldr r1,[r2]orr r1,#0x160str r1,[r0]bl delay;;;;;;;;;;;;;;;;;;;;;;;;ldr r1,[r2]orr r1,#0x0e0str r1,[r0]bl delay;;;;;;;;;;;;;;;;;;;;;;;;b LOOPdelaymov r3,#3delay1 sub r3,r3,#1cmp r3,#0x0bne delay1mov pc,lr ;这句相当于子程序返回语句 endGPBCON equ 0x56000010 GPBDAT equ 0x56000014 GPBUP equ 0x56000018 GPAOUT equ 0x0000000 GPACON equ 0x56000000GPADAT equ 0x56000004export xmainarea Init,code,readonlyCODE32entryexportGBLA nn ;设置全局变量nnxmainldr r1,=GPAOUT ;调取设置A口为输出的数据ldr r0,=GPACON ;调取A口输出的方向控制寄存器地址str r1,[r0] ;把方向控制数据赋值给A口方向寄存器0x56000000ldr r0,=GPADAT ;调取A口输出的寄存器地址,传递给[r0]就是输出LOOP2 mov r1,#0 ;r1计数23次,22个输出脚循环一次流水效果mov r2,#1 ;点亮流水灯一个灯亮LOOP1str r2,[r0] ;点亮一个灯BL delay ;延迟MOV r2,r2,LSL#1 ;左移点亮下一个,依次类推add r1,#1 ;计数加1cmp r1,#23 ;计数加1看够不够23,bne LOOP1 ;不够23次,说明没有全部轮流一次,跳到LOOP1继续。
【例8-2】图中外设是简单的发光二极管.此外设的接口是用锁存器来实现的.锁存器在打入脉冲CP上升沿将输入端D的数据锁存在它的输出Q端。
编写点亮二极管的程序。
mov al,81h 状态是10000001
mov dx,0000h 外设地址
out dx, al 输出
mx: mov al,01h
mov dx,0000h
out dx,al
mov cx,2DH
mov dx,c6c0h
mov ah.86h
int 15h
rol al,1
jmp mx
重点【例8-3】类似于例1中,让接在Q0~Q7上的二极管自上而下轮流点亮3s,编写程序实现。
程序如下:
mov al,01h ;使Q0为1,LED0先亮
lop: out 0000h,al ;
mov cx,2DH
mov dx,c6c0h mov ah.86h int 15h rol al,1 jmp lop
下面一段程序可判断按钮的状态。
当K 闭合时,显示3,当K 断开时显示6。
【例8-4】
Start: mov dx,00F1H ; in al,dx
test al,01h jnz kopen mov dx,00F0H mov al,4FH ; (3) out dx,al
jmp start
kopen: mov dx,00F0H
mov al,7DH ;(6)
out dx,al jmp start
1111
1
111~
Q 0
Q 1
Q 2
Q 3Q 4Q 5Q 6Q 7
Cp a b c d e f g DP +5V
D 0D 774LS2738
510⨯Ω1≥1≥&
74LS138A G 2B G 2G
C B
A
1≥K
+ΩK 10D 00
Y 1Y D 0
D 7
~
IOW
A 0A 1A 2A 4A 6A 3A 7A 9A 8A 5A 11A 13A 10A 12A 14A 15IOR。