#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
//延时
void DelayMS(uint x)
{
uchar i
while(x--)
{
for(i=0i<120i++)
}
}
//主程序
void main()
{
uint s
while(1)
{
P0=0xfe
DelayMS(150)
for(s=8s>1s--)
{
P0=_crol_(P0,1) //P0 的值向左循环移动
DelayMS(150)
}
P0=0x00
DelayMS(150)
p0=0xff
DelayMS(150)
扩展资料:
常用单片机汇编指令:
1 .MOV A,Rn 寄存器内容送入累加器
2 .MOV A,direct 直接地址单元中的数据送入累加器
3 .MOV A,@Ri (i=0,1)间接RAM 中的数据送入累加器
4 .MOV A,#data 立即数送入累加器
5 .MOV Rn,A 累加器内容送入寄存器
6 .MOV Rn,direct 直接地址单元中的数据送入寄存器
7 .MOV Rn,#data 立即数送入寄埋昌存器
8 .MOV direct,A 累加器内容送入直接地址单元
9 .MOV direct,Rn 寄存器内容送入直接地址单元
10. MOV direct,direct 直接地址单元中的数据送入另一个直接地址单元
11 .MOV direct,@Ri (i=0,1)间接RAM 中的数据送入直接地址单元
12 MOV direct,#data 立即数送入直接地址单元
13 .MOV @Ri,A (i=0,1)累加器内容送间接RAM 单元
14 .MOV @Ri,direct (i=0,1)直接地址单元数据送入间接RAM 单元
15 .MOV @Ri,#data (i=0,1)立即数送入间接RAM 单元
16 .MOV DPTR,#data16 16 位立即数送入地址寄存器
17 .MOVC A,@A+DPTR 以DPTR为基地址变址好宽寻址单元中的数据送入累加器
18 .MOVC A,@A+PC 以PC 为基地址变址寻址单元中的弯袜扒数据送入累加器
19 .MOVX A,@Ri (i=0,1)外部RAM(8 位地址)送入累加器
20 .MOVX A,@DPTR 外部RAM(16 位地址)送入累加器
21 .MOVX @Ri,A (i=0,1)累计器送外部RAM(8 位地址)
22 .MOVX @DPTR,A 累计器送外部RAM(16 位地址)
23 .PUSH direct 直接地址单元中的数据压入堆栈
24 .POP direct d栈送直接地址单元
25 .XCH A,Rn 寄存器与累加器交换
26 .XCH A,direct 直接地址单元与累加器交换
27 .XCH A,@Ri (i=0,1)间接RAM 与累加器交换
28 .XCHD A,@Ri (i=0,1)间接RAM 的低半字节与累加器交换
参考资料来源:百度百科-单片机汇编指令
开关控制指示灯显示MY8255_AEQU 0A860H;8255A口地址
MY8255_BEQU 0A861H;8255B口地址
MY8255_CEQU 0A862H;8255C口地址
MY8255_MODE EQU 0A863H;8255控制口地址
CODE SEGMENT
ASSUME CS:CODE
START: MOV DX,MY8255_MODE
MOV AL,82H
OUT DX,AL;将控制字82H写入8255控制口,A口方式0输出,B口方式0输入, C口未用到。
A1:MOV DX,MY8255_B
IN AL,DX ;读8255 B口内容
MOV DX,MY8255_A
OUT DX,AL ; 将前面读到的B口内容送到A口,即A口内容=B口内容
CALL BREAK;调用子程序BREAK
JMP A1;跳转到A1
BREAK PROC NEAR ;BREAK子程序
MOV AH,1
INT 16H
JZ RETURN ;读按键字符,ZF=1,则返回;ZF=0,则AL=字符
MOV AX,4C00H
INT 21H ;返回DOS
RETURN:RET
BREAK ENDP
CODE ENDS
END START
流水灯显示
MY8255_AEQU 0b860H;8255A口地址
MY8255_BEQU 0b861H;8255B口地址
MY8255_CEQU 0b862H;8255C口地址
MY8255_MODE EQU 0b863H;8255控制口地址
DATA SEGMENT
LA DB ?;留出1个字节
LB DB ?;留出1个字节
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV DX,MY8255_MODE
MOV AL,80H
OUT DX,AL ;控制字80H送入8255控制口,A口、B口都是方式0输出,C口未用到。
MOV DX,MY8255_A
MOV AL,7FH
OUT DX,AL ;将7FH送入A口
MOV LA,AL ;将7FH送入LA存储单元
MOV DX,MY8255_B
MOV AL,0FEH
OUT DX,AL;将FEH送入B口
MOV LB,AL ;将FEH送入LB存储单元
CALL DALLY
A1:MOV AL,LA
ROR AL,1;LA内容循环右移1次
MOV LA,AL
MOV DX,MY8255_A
OUT DX,AL ;将循环右移后的LA内容送A口,其目的是让A口连接的LED灯依次向右循环点亮
MOV AL,LB
ROL AL,1 ;LB内容循环左移1次
MOV LB,AL
MOV DX,MY8255_B
OUT DX,AL ;将循环左移后的LB内容送B口,其目的是让B口连接的LED灯依次向左循环点亮
CALL DALLY ;延时,让一个LED灯发光稳定之后再点亮另一个
CALL BREAK ;调用BREAK子程序,看是否有键按下
JMP A1 ;跳转到A1
DALLY: MOV CX,3FFH ;延时子程序
D1:MOV AX,0FFFFH
D2:DEC AX
JNZ D2
LOOP D1
RET
BREAK PROC NEAR ;是否有键按下
MOV AH,06H
MOV DL,0FFH
INT 21H
JE RETURN ;若无,则转RETURN
MOV AX,4C00H
INT 21H ;返回DOS
RETURN:RET
BREAK ENDP
CODE ENDS
END START
用MCS51单片机汇编语言编写的点亮一和兄穗只LED灯源程序LED1.ASM,尘含代码如唤卜下:ORG 0000H
AJMPMAIN
ORG 0030H
MAIN:MOV A,#FEH
MOV P1,A
AJMP $
END
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)