单片机
返回首页

51单片机串口应用实例(汇编)

2024-08-22 来源:cnblogs

一、 实验题目

猜数字小游戏:串行口发送0x01、0x02、0x03 HEX数据中的一个到51单片机,对应的按键key1-key3,发送数据之后,另一边人员猜测对应的HEX码,并按下对应的按键,若按下正确的按键,则LED灯闪烁,按下不正确的按键,则蜂鸣器响一下报错,程序可以一直执行到猜中停止,此时按下key4清空复位运行数据,等待下一个串口发送的数据进行下一次猜数字。

二、 设计方案及电路

设计方案:
串口通过定时器1产生9600波特率,接收中断里面处理接收数据,主循环里面对接收数据进行判断,根据不同的HEX码转换到不同的按键判断任务,通过扫描的方式读取KEY1-3,判断读取的值,如果与HEX码对应的按键不同,则跳转到蜂鸣器报警函数,执行后在返回按键扫描,若相同则跳转到流水灯函数,一直处于循环之中,通过按键4的外部中断清零状态,返回接收判断循环,等待下一次串口的数据来到。
电路图:

在这里插入图片描述

三、 实验步骤

  1. 编写串口初始化程序,配置中断接收内容

  2. 编写判断循环主体函数

  3. 根据主体判断循环的结果,编写各个按键判断循环

  4. 在按键判断循环里面编写按键扫描函数,判断按键按下的结果,正确跳转到流水灯循环函数,错误则跳转到蜂鸣器报错函数,执行蜂鸣器报警后返回按键扫描继续判断。

  5. 编写流水灯循环及蜂鸣器报警函数

  6. 编写按键key4的外部中断函数,使按键按下后跳转到初始判断循环函数,调试复位流水灯IO口


四、 实验程序

ORG 0000H

LJMP MAIN

ORG 0003H ;INTO中断入口

LJMP INTT0

ORG 0023H    ;串口中断入口

LJMP RX_TI

MAIN: ;初始化函数MAIN函数

MOV SCON, #0X50 ;串口初始化

ANL PCON, #00H

MOV TMOD, #0X20

MOV TL1, #0XFD ;波特率9600

MOV TH1, #0XFD

SETB TR1 ;开启中断

SETB ES

SETB EA

SETB RI

SETB EX0 ;打开外部中断0

SETB IT0 ;跳变沿触发方式

LOOP: ;判断循环函数,判断串口接收的数据,跳转对应函数

MOV R4, #00H

MOV A, R3

MOV R7, A

CJNE R7, #01H, JUDGE1 ;0x01对应按键1判断

LJMP LOOP1

JUDGE1:

CJNE R7, #02H, JUDGE2 ;0x02对应按键2判断

LJMP LOOP2

JUDGE2:

CJNE R7, #03H, LOOP ;0x03对应按键3判断

LJMP LOOP3

LJMP LOOP

LOOP1: ;按键1判断循环函数

MOV P3, #0FFH

MOV A, P3

CPL A

ANL A, #18H

JNZ KEY_WRONG ;扫描到不是不是按键1则跳转到蜂鸣器报错函数

MOV A, P3

ANL A, #20H

JNZ LOOP1

LJMP KEY_RIGHT ;扫描到按键1则跳转到流水灯函数

LJMP LOOP



LOOP2: ;按键2判断循环函数(与1同)

MOV P3, #0FFH

MOV A, P3

CPL A

ANL A, #28H

JNZ KEY_WRONG

MOV A, P3

ANL A, #10H

JNZ LOOP2

LJMP KEY_RIGHT

LJMP LOOP

LOOP3: ;按键3判断循环函数(与1同)

MOV P3, #0FFH

MOV A, P3

CPL A

ANL A, #30H

JNZ KEY_WRONG

MOV A, P3

ANL A, #08H

JNZ LOOP3

LJMP KEY_RIGHT

LJMP LOOP

INTT0: ;按键4外部中断函数,复位LED的IO口,跳转返回判断循环

PUSH ACC

SETB P2^0

ACALL DELAY

SETB P2^1

MOV R4, #01H

MOV R7, #00H

POP ACC

RETI

RX_TI: ;按键2判断循环函数(与1同)

PUSH ACC

CLR RI

MOV R7, SBUF

ACALL DELAY

MOV A, R7

MOV R3, A

POP ACC

RETI

KEY_RIGHT: ;流水的循环函数

CJNE R4, #00H, LOOP

SETB P2^0

CLR P2^1

ACALL DELAY

SETB P2^1

CLR P2^0

ACALL DELAY

LJMP KEY_RIGHT

KEY_WRONG: ;蜂鸣器报警函数

CLR P0^0

ACALL DELAY

SETB P0^0

LJMP LOOP


DELAY: ;延时函数

MOV    R5,     #255

LOOP5:

    MOV     R6,  #255

    DJNZ    R6,  $

DJNZ   R5,     LOOP5

RET


END


进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • PIC单片机控制的遥控防盗报警器电路

  • 短波AM发射器电路设计图

  • 用NE555制作定时器

  • 如何构建一个触摸传感器电路

  • 如何调制IC555振荡器

  • 基于TDA2003的简单低功耗汽车立体声放大器电路

    相关电子头条文章