汇编语言,led点亮

合集下载

汇编语言发光二极管的点亮

汇编语言发光二极管的点亮

【例8-2】图中外设是简单的发光二极管.此外设的接口是用锁存器来实现的.锁存器在打入脉冲CP上升沿将输入端D的数据锁存在它的输出Q端。

编写点亮二极管的程序。

mov al,81h 状态是10000001mov dx,0000h 外设地址out dx, al 输出mx: mov al,01hmov dx,0000hout dx,almov cx,2DHmov dx,c6c0hmov ah.86hint 15hrol al,1jmp mx重点【例8-3】类似于例1中,让接在Q0~Q7上的二极管自上而下轮流点亮3s,编写程序实现。

程序如下:mov al,01h ;使Q0为1,LED0先亮lop: out 0000h,al ;mov cx,2DHmov dx,c6c0h mov ah.86h int 15h rol al,1 jmp lop下面一段程序可判断按钮的状态。

当K 闭合时,显示3,当K 断开时显示6。

【例8-4】Start: mov dx,00F1H ; in al,dxtest al,01h jnz kopen mov dx,00F0H mov al,4FH ; (3) out dx,aljmp startkopen: mov dx,00F0Hmov al,7DH ;(6)out dx,al jmp start11111111~Q 0Q 1Q 2Q 3Q 4Q 5Q 6Q 7Cp a b c d e f g DP +5VD 0D 774LS2738510⨯Ω1≥1≥&74LS138A G 2B G 2GC BA1≥K+ΩK 10D 00Y 1Y D 0D 7~IOWA 0A 1A 2A 4A 6A 3A 7A 9A 8A 5A 11A 13A 10A 12A 14A 15IOR。

汇编语言实现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个灯依次熄灭,循环。

LED电子书写屏(汇编语言)

LED电子书写屏(汇编语言)

一、产品的描述(产品的特点、发展前景、应用领域等等)。

LED点阵书写屏系统结构如图1所示。

在控制器的管理下,LED点阵模块显示屏工作在人眼不易觉察的扫描微亮和人眼可见的显示点亮模式下;当光笔触及LED点阵模块表面时,先由光笔检测触及位置处LED点的扫描微亮以获取其行列坐标,再依据功能需求决定该坐标处的LED是否点亮至人眼可见的显示状态(如图1中光笔接触处的深红色LED点已被点亮),从而在屏上实现“点亮、划亮、反显、整屏擦除、笔画擦除、连写多字、对象拖移”等书写显示功能。

图1 LED点阵书写显示屏系统结构示意图二、产品的组成模块框图产品组成框图如下:三、方案论证:(需要有详细说明、具体电路图的分析,选择方案的原因)3.1、控制器的选择:A、新华龙电子有限公司型号为C8051F005的51兼容单片机,具有高速内核,速度可达25MIPS,2034字节数据RAM,自带12AD以及丰富的模拟外设,但价格稍贵。

B、STC89C52RC内扩了512字节数据RAM,具有双倍速。

◆方案比较结论:本产品对控制器的要求主要是在速度和数据RAM的容量上,显然,C8051F005已满足要求,但其功能繁多,价格稍贵,用在这里显得浪费,而STC89C52RC能满足这两个要求,因此,选择STC89C52RC作为控制器。

3.2、光笔电路:A、光敏三极管和LM358作比较器。

B、光敏二极管和LM358作比较器。

电路图:图3 光笔电路◆方案比较结论:在这里笔的反应速度越快越好,而光敏二极管的反应时间明显比光敏三极管的要短,因此选择光敏二极管和LM358。

3.3、驱动电路:A、两个74LS154和四个74HC595。

B、四个74LS138和四个74LS573。

四个138组成的5-32译码器图:图4 5-32译码器电路◆方案比较结论:两个74LS154和四个74LS138都能组成一个5-32译码器,而74LS154的价格是74LS138r的五倍;74HC595是串入并出的移位寄存器,使用它能节省控制器的IO口,但传送数据不方便,在这里,控制器的IO口已足够用,为了写程序的方便,因此采用74LS573组成IO口的并行扩展。

8个led灯循环点亮程序汇编语言

8个led灯循环点亮程序汇编语言

8个led灯循环点亮程序汇编语言asm.
ORG 0000H.
AJMP MAIN.
ORG 0030H.
MAIN:
MOV A, #0FEH ; 初始点亮第一个LED(1111 1110)LOOP:
MOV P1, A.
LCALL DELAY.
RL A ; 循环左移。

SJMP LOOP.
DELAY:
MOV R7, #250 ; 外层循环次数,可以调整延时时间。

D1:
MOV R6, #250.
D2:
DJNZ R6, D2.
DJNZ R7, D1.
RET.
END.
在这个程序中:
1. 程序从地址`0000H`开始,跳转到`MAIN`程序段。

2. 在`MAIN`程序段中,先将`A`的值设置为`0xFEH`,然后把`A`的值赋给`P1`口来点亮第一个LED。

3. 接着调用`DELAY`子函数进行延时,然后通过`RL A`指令将`A`中的值循环左移一位,这样就可以依次点亮下一个LED。

4. `DELAY`子函数通过两层循环来实现简单的延时功能。

`R7`和`R6`作为循环计数器,通过`DJNZ`指令来控制循环次数,从而达到延时的目的。

单片机C语言LED灯点亮程序完全版精编

单片机C语言LED灯点亮程序完全版精编

单片机C语言L E D灯点亮程序完全版精编Document number:WTT-LKK-GBB-08921-EIGG-229861例子1第二个灯亮#include<reg52.h>void main(){P1=0xfd;}#include<reg52.h>Sbit D1=P1^0;Void main(){D1=0}注意:稍微改程序时需重新hex化例子2第一个灯亮#include<reg52.h> //52单片机头文件sbit led1=P1^0; //单片机管脚位声明void main() //主函数{led1=0; //将单片机P1.0口清零while(1); //程序停止在这里,在后面会讲到为什么这样写。

}例子3第一个灯亮#include<reg52.h> //52单片机头文件void main() //主函数{P1=0xfe; //将单片机P1口的8个口由高到低分别赋值为11111110while(1); //程序停止在这里,在后面会讲到为什么这样写。

}2例子1第三个灯闪烁fir循环#include<reg52.h>sbit D2=P1^2;unsigned int a;void main(){D2=0;for(a=0;a<=10000;a++){};D2=1;for(a=0;a<=10000;a++){};}例子2第三个闪烁while循环#include<reg52.h>sbit D2=P1^2;unsigned int a;void main(){a=5000;D2=0;while(a--);a=5000;D2=1;while(a--);}2.#include<reg52.h> //52单片机头文件sbit led1=P1^0; //单片机管脚位声明void main() //主函数{unsigned int i; //定义一个int型变量while(1){i=50000; //变量赋初值为50000led1=0; //点亮灯while(i--); //延时i=50000;led1=1; //熄灭灯while(i--);}}3例子1 3 5 7灯同时亮#include<reg52.h> //52单片机头文件sbit led1=P1^0; //单片机管脚位声明sbit led3=P1^2; //单片机管脚位声明sbit led5=P1^4; //单片机管脚位声明sbit led7=P1^6; //单片机管脚位声明void main() //主函数{led1=0; //将单片机P1.0口清零led3=0; //将单片机P1.2口清零led5=0; //将单片机P1.4口清零led7=0; //将单片机P1.6口清零while(1); //程序停止在这里,在后面会讲到为什么这样写。

实用文库汇编之单片机C语言LED灯点亮程序完全版

实用文库汇编之单片机C语言LED灯点亮程序完全版
}
注意:稍微改程序时需重新hex化
例子2第一个灯亮
#include<reg52.h> //52单片机头文件
sbit led1=P1^0; //单片机管脚位声明
void main()//主函数
{
led1=0;//将单片机P1.0口清零
while(1); //程序停止在这里,在后面会讲到为什么这样写。
}
led7=0;//将单片机P1.6口清零
while(1); //程序停止在这里,在后面会讲到为什么这样写。
}
例子2 1 3 5 7同时亮
#include<reg52.h> //52单片机头文件
void main()//主函数
{
P1=0xaa;//将单片机P1口的8个口由高到低分别赋值为10101010
while(1); //程序停止在这里,在后面会讲到为什么这样写。
}
例子3流水灯一个一个接着亮不循环
#include<reg52.h> //52单片机头文件
void main()//主函数
{
作者:角狂风
作品编号:1547510232155GZ579202
创作日期:2020年12月20日
unsigned int i; //定义一个int型变量
sbit led3=P1^2; //单片机管脚位声明
sbit led5=P1^4; //单片机管脚位声明
sbit led7=P1^6; //单片机管脚位声明
void main()//主函数
{
led1=0;//将单片机P1.0口清零
led3=0;//将单片机P1.2口清零
led5=0;//将单片机P1.4口清零

51系列单片机实验一LED等全亮全灭汇编代码及注释

51系列单片机实验一LED等全亮全灭汇编代码及注释

实验一汇编代码及注释ORG 0000H伪指令ORG 指定0000H 作为AJMP MAIN的地址,也就是单片机上电后CPU取指的初始地址;AJMP MAIN无条件跳转到主程序MAIN;ORG 0030H伪指令ORG指定030H作为主程序MAIN的第一个地址,也就是MOV P1,#00H的地址;MAIN: 主程序MAIN;MOV P1,#00H将立即数00H赋值给P1口,使P1口对应的8个LED的阴极置0,点亮;ACALL DELAY02调用延迟程序DELAY02,延迟2秒;MOV P1,#0FFH将立即数0FFH赋值给P1口,使P1口对应的8个LED的阴极置1,点熄灭;ACALL DELAY02调用延迟程序DELAY02,延迟2秒;AJMP MAIN无条件跳转到主程序MAIN;DELAY02:延迟子程序DELAY02MOV R5,#2将立即数2赋值给寄存器R5;D1: 延迟子程序D1MOV R6,#200将立即数200赋值给寄存器R6;D2: 延迟子程序D1MOV R7,#250将立即数250赋值给寄存器R6;D3:DJNZ R7,D3条件转移指令,若R7-1≠0,则跳转到D3,否则执行下一条指令;因为R7初始值为250,每执行一次DJNZ R7,D3需要2个机器周期,所以这个循环结束后需要2*250T(T为机器周期);DJNZ R6,D2;条件转移指令,若R6-1≠0,则跳转到D2,否则执行下一条指令;因为R7初始值为200,每执行一次本指令需要2个机器周期。

每延迟1 D3 执行一次本指令,所以这个循环结束后需要200*(2*250+2)T DJNZ R5,D1;条件转移指令,若R5-1≠0,则跳转到D1,否则执行下一条指令;因为R5初始值为2,每执行一次本指令需要2个机器周期。

每延迟1 D2执行一次本指令,所以这个循环结束需要2*((200*(2*250+2)+2)T≈200000T;每个T为1微秒。

简单的STM32汇编程序—闪烁LED

简单的STM32汇编程序—闪烁LED

简单的STM32汇编程序—闪烁LED要移植操作系统,汇编是道不得不跨过去的坎。

所以承接上篇的思路,我准备⽤汇编写⼀个简单的闪烁LED灯的程式。

以此练习汇编,为操作系统做准备。

第⼀步,还是和上篇⼀样,建⽴⼀个空的⽂件夹。

第⼆步,因为是要⽤汇编来写程式,所以不需要启动代码,这⾥选择否。

第三步,建⽴⼀个.s⽂件,并把⽂件添加到⼯程中。

第四步,在LED.s⽂件中添加如下代码。

LED0 EQU 0x422101a0RCC_APB2ENR EQU 0x40021018GPIOA_CRH EQU 0x40010804Stack_Size EQU 0x00000400AREA STACK, NOINIT, READWRITE, ALIGN=3Stack_Mem SPACE Stack_Size__initial_spAREA RESET, DATA, READONLY__Vectors DCD __initial_sp ; Top of StackDCD Reset_Handler ; Reset HandlerAREA |.text|, CODE, READONLYTHUMBREQUIRE8PRESERVE8ENTRYReset_HandlerBL LED_InitMainLoop BL LED_ONBL DelayBL LED_OFFBL DelayB MainLoopLED_InitPUSH {R0,R1, LR}LDR R0,=RCC_APB2ENRORR R0,R0,#0x04LDR R1,=RCC_APB2ENRSTR R0,[R1]LDR R0,=GPIOA_CRHBIC R0,R0,#0x0FLDR R1,=GPIOA_CRHSTR R0,[R1]LDR R0,=GPIOA_CRHORR R0,R0,#0x03LDR R1,=GPIOA_CRHSTR R0,[R1]MOV R0,#1LDR R1,=LED0STR R0,[R1]POP {R0,R1,PC}LED_ONPUSH {R0,R1, LR}MOV R0,#0LDR R1,=LED0STR R0,[R1]POP {R0,R1,PC}LED_OFFPUSH {R0,R1, LR}MOV R0,#1LDR R1,=LED0STR R0,[R1]POP {R0,R1,PC}DelayPUSH {R0,R1, LR}MOVS R0,#0MOVS R1,#0MOVS R2,#0DelayLoop0ADDS R0,R0,#1CMP R0,#330BCC DelayLoop0MOVS R0,#0ADDS R1,R1,#1CMP R1,#330BCC DelayLoop0MOVS R0,#0MOVS R1,#0ADDS R2,R2,#1CMP R2,#15BCC DelayLoop0POP {R0,R1,PC}; NOPEND///////////////////////////////////////////////////////代码的简单讲解1,预定义LED0 EQU 0x422101a0 ;PA8的Bit-Bond地址。

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

《单片机应用设计》课程设计
专业:自动化
姓名:
学号:
同组人员:
指导教师:
日期:
单片机应用设计课程设计
设计题目
1个按键:无按键时,8个LED全亮,按下1次,8个Led依次点亮,持续1S。

连续按两次,8个Led以相反的次序依次点亮。

单片机应用设计课程设计
第一部分系统设计分析
硬件分析
1.LED灯采用共阳极接法,本题中则将P1口对应各位赋低电平即可点亮LED灯。

2.p
3.5接按键。

软件分析
第二部分硬件电路设计及实现
单片机应用设计课程设计
第三部分软件设计
ORG 0000H
LJMP MAIN
;中断入口
ORG 000BH
LJMP DIER
KEY BIT P3^4
LED EQU P1
MAIN: MOV R2,#0 ;R2清零
MOV LED,#0 ;八个二极管全亮
MOV R3,#10
MOV TMOD,#01H;选择定时器0的定时器方式1
;赋初值3CB0H即15536
MOV TL0,#0B0H
MOV TH0,#3CH
SETB EA ;打开总中断
SETB ET0 ;允许定时器0中断
;第一次按键检测
KEY_SCAN:JNB KEY, YN1 ;为零则转移,即为按下
AJMP KEY_SCAN
YN1:LCALL DEL1MS
JNB KEY,Y1 ;判断是否真的按下,真的按下了,则转移
AJMP KEY_SCAN
Y1:LCAL L DEL1MS
JB KEY,SSH ;检测是否松手,松手转移
AJMP Y1
SSH:SETB TR0 ;打开定时器0
CJNE R2,#1,$ ;检测R2是否为一,不为一则等待
CLR TR0 ;关闭定时器
AJMP MAIN ;跳回主程序
;第二次键盘检测,每50ms检测一次,检测10次,即为500ms DIER:JNB KEY, LED_2 ;检测键盘是否按下,按下则转移
DJNZ R3,CZ ;R3减一是否为零,不为零则转移
AJMP LED_1 ;延迟500ms后没有第二次按下,跳到LED_1 LED_1:MOV R4,#8
MOV A,#0FEH
;LED顺序循环程序
LOOP1:MOV LED,A
LCALL DEL1S
题目:
RL A ;数据循环左移
DJNZ R4,LOOP1 ;循环不够八次则转移
LCALL DEL1S
INC R2
RETI;中断返回
;LED逆序循环程序
LED_2:MOV R4,#8
MOV A,#07Fh
LOOP2:MOV LED,A
LCALL DEL1S
RR A
DJNZ R4,LOOP2
LCALL DEL1S
INC R2
RETI ;中断返回
;定时器一赋初值
CZ: MOV TL0,#0B0H
MOV TH0,#3CH
RETI;中断返回
;延时1s程序
DEL1S:MOV R7,#60
DEL3:MOV R6,#200
DEL1:MOV R5,#250
DEL2:DJNZ R5,DEL2
DJNZ R6,DEL1
DJNZ R7,DEL3
RET
;延时1ms程序
DEL1MS:MOV R7,#1
DE3:MOV R6,#10
DE1:MOV R5,#100
DE2:DJNZ R5,DE2
DJNZ R6,DE1
DJNZ R7,DE3
RET
END
单片机应用设计课程设计
课程设计总结
这次通过用汇编语言对51单片机编程,对定时器,以及各类指令可以熟练运用;不再是课本的死读书,读死书,我们也对单片机的内部结构有了更深的了解,我们在一起学习,通过编程我体会到了团队的力量,互相学习,特别是对第二次按键的设计,我们是绞尽脑汁,最后终于有了初步的方案,使用定时器来解决的第二次的按键,我相信这只是初步的控制单片机的小程序,我们会在以后进一步学习其他的模块,提高自身的能力。

相关文档
最新文档