【51单片机】考试例程|汇编实现

eefocus · 电子工程世界·2021-06-18 00:00

1.1k

目录

中断3个程序

第一个程序

第二个程序

第三个程序

DA转换

Triangle

Triangle2

矩形波

显示/键盘:

数码管的动态显示(C语言实现):

矩阵键盘(C语言实现)

加法、乘法

第二个例程

例程

例程

中断3个程序


第一个程序

ORG 0000H

RESET: AJMP MAIN

ORG 000BH

AJMP IT0P

MAIN: MOV SP, #60H;

MOV TMOD, #01;

ACALL PT0M0;

HRER: AJMP HERE

PT0M0: MOV  TL0, #0CH

MOV TH0, #0FEH

SETB ET0;

SETB EA;

SETB TR0;

RET

IT0P: MOV  TL0, #0CH

MOV TH0, #0FEH

CPL P1.0;

RETI;


第二个程序

ORG 0000H

RESET: AJMP MAIN

ORG 000BH

AJMP IT0P

ORG 0100H

MAIN: MOV SP, #60H

MOV B, 0AH

ACALL PT0M0

HERE: AJMP HERE

PT0M0: MOV TMOD, #01H

MOV TL0, #

MOV TH0, #

SETB ET0

SETB EA

SETB TR0

RET

IT0P: MOV TL0,#

MOV TH0,#

JNZ B, LOOP

RTURN: RETI


第三个程序

ORG 0000H

RESET: AJMP MAIN

ORG 000BH

AJMP IT0P

ORG 001BH

AJMP IT1P

ORG 1000H

MAIN: MOV SP, #60H

ACALL PT0M2

LOOP: MOV C, F0

JNC LOOP

HERE: AJMP HERE

PT0M0: MOV TMOD, #25H

MOV TL0, #FFH

MOV TH0, #FFH

SETB ET0

MOV TL1, #06H

MOV TH1, #06H

CLR F0

SETB EA

SETB TR0

RET

IT0P: CLR TR0

SETB F0

RETI

IT1P: CPL P1.0

RETI


DA转换

Triangle

ORG 0100H

START: MOV R0, #0FEH

MOV A, #00H

LOOP: MOVX @R0, A

INC A

JNZ LOOP


Triangle2

ORG 0100H

START: MOV R0, #0FEH

MOV A, #00H

UP: MOVX @R0, A

INC A

JNZ UP

DOWN: DEC A

MOVX @R0, A

JNZ DOWN

AJMP UP


矩形波

ORG 0100H

START: MOV R0, #0FEH

MOV A, #data1

MOVX @R0, A

ACALL DELAY1

MOV A, #data2

MOVX @R0, A

ACALL DELAY2


显示/键盘:

数码管的动态显示(C语言实现):

#include

#define uchar unsigned char

#define uint unsigned int


#define DigW P1 //设置P1口为位选口(选择第几位的)

#define DigD P2 //P2为段选,(选择数码管的哪段亮起来的)

uchar show[] = {5, 2, 0, 1, 3, 1, 4};

uchar DigT[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,

0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};  //共阴极数码管0~9,a-f段码表

/**************************延时函数*************************/


void delay() {

uint j;

for (j = 0; j < 150; j++);

}


/**************************主函数*************************/

void main(void) {

Dig_W = 0x00;//关数码管

Dig_D = 0x00;


while (1) {

uchar temp = 0x80;

for (uchar i = 0; i < 7; i++) {

Dig_W = tmep;

Dig_D = DigT[show[i]+1];

delay();

temp = temp >> 1;

}

}

}


矩阵键盘(C语言实现)

在这里插入图片描述

#include


#define uchar unsigned char

#define uint unsigned int


#define Dig_W  P1

#define Dig_D  P2

#define io_KEY    P3


uchar key_T[] = {0xee, 0xde, 0xbe, 0x7e,

0xed, 0xdd, 0xbd, 0x7d,

0xeb, 0xdb, 0xbb, 0x7b,

0xe7, 0xd7, 0xb7, 0x77};     //按键值


uchar dis_T[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f,

0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};  //共阴极数码管0~9,a-f段码表

uchar zhi = 0;

/**************************延时函数*************************/

void d_ms()

{ uint j;

for(j=0;j<150;j++);

}

/**************************显示函数*************************/

void display(uchar num) {

uchar i, temp;

temp = 0x80;

Dig_W = temp;

Dig_D = dis_T[num];

temp = temp >> 1;

}


uint Scanner() {

int 列 = 0, 行 = 0, 按键 = 0, a;

io_KEY = 0xf0;             //P2口后4位置高电平前4位置低电平,当有按键按下时确定列数

while (io_KEY == 0xf0);     //判断P2口是否有信号输入

列 = io_KEY;         //保存列数


delay();

io_KEY = 0x0f;                 //P2口后4位置低电平前4位置高电平,当有按键按下时确定行数

while (io_KEY == 0x0f);        //判断P2口是否有信号输入

行 = io_KEY;         //保存行数

按键 = 列 | 行;

return 按键;

}


/**************************主函数*************************/

void main(void) {

uint KeyV = 0;

Dig_W = 0x00;//关数码管

Dig_D = 0x00;


while (1) {

KeyV = Scanner(); //得到按键值

for (int i = 0; i < 16; i++)//判断按键值

{

if (key_T[i] == KeyV) {

zhi = i;

break;

}

}

display(zhi);

}

}


加法、乘法

MOV R0,#60H

MOV R2,#10H

CLR A

TU: MOV @R0,A

INC R0

INC A

DJNZ R2,TU

MOV R0, #60H

MOV R1, #70H

MOV R2, #10H

TT: MOV A,@R0

MOV @R1,A

INC R0

INC R1

DJNZ R2,TT

RET

END


第二个例程

MOV 70H, #12H

MOV 71H, #90H

MOV 72H, #78H

MOV 60H, #56H

MOV 61H, #34H

MOV 62H, #12H

MOV R0,#70H

MOV R1,#60H

MOV R2,#03H

CLR CY

LOOP:MOV A,@R0

ADDC A,@R1

DA A

MOV @R1,A

INC  R0

INC  R1

DJNZ R3,LOOP

END


例程

MOV 30H,#45H

LOOP: MOV A,30H

SWAP A

ANL A,#0FH

MOV 31H,A

MOV A,30H

ANL A,#0FH

MOV 32H,A

END

MOV 32H,#98H

MOV 31H,#76H

MOV 30H,#54H

MOV R2,#04H

LOOP: CLR CY

MOV A,30H

RLC A

MOV 30H,A

MOV A,31H

RLC A

MOV 31H,A

MOV A,32H

RLC A

MOV 32H,A

DJNZ R2,LOOP

RET

END

例程

ORG 0000H

START: MOV R0,#60H

MOV DPTR,#QW1

MOV R5,#0

MOV R7,#10H

LOOP: MOV A,R5

MOVC A,@A+DPTR

MOV @R0,A

INC R0

INC R5

DJNZ R7,LOOP

LJMP QW2

QW1: DB 60H,61H,62H,63H,64H,65H,66H,67H

DB 68H,69H,6AH,6BH,6CH,6DH,6EH,6FH

QW2:MOV R0,#60H

MOV R1,#70H

MOV R5,#0FH


关键字: 51单片机 汇编实现 编辑:什么鱼 引用地址: //news.eeworld.com.cn/mcu/ic539107.html

广告

eefocus · 电子工程世界·2021-06-18 00:00

1.1k
  • 单片机
  • MOV
  • 用户热评
    打开摩尔芯球APP,查看更多评论

    重大事件及时推送,更流畅的沉浸式阅读体验

    参与评论

    0/200字

    登录后即可发布评论

    发布评论

    请使用浏览器自带的分享按钮,
    将你这篇文章分享出去吧。
    +86
    获取验证码
    登 录

    邮箱登录

    未注册过的用户将直接为你创建摩尔账号