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

发布时间:2024-08-22  

一、 实验题目

猜数字小游戏:串行口发送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


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>