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

考试的时候千万不要着急,一步一步来,不到最后一刻千万不要放弃,加油,你也一定可以的!

目录

中断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<reg51.h>
#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语言实现)

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

#include <reg51.h>

#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
上一篇:微擎权限缓存与缺失


下一篇:区块链 - 密码学