找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6813|回复: 12
收起左侧

51单片机双机串行通信汇编语言程序+Proteus仿真

  [复制链接]
ID:556466 发表于 2019-6-7 15:23 | 显示全部楼层 |阅读模式
甲机按键控制乙机数码管,乙机按键控制甲机LED灯
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
QQ图片20190607152256.png 0.png

单片机源程序如下:
  1.            ORG 00H
  2.                    SJMP INIT
  3.                    ORG 0023H
  4.                    LJMP LOOP
  5.                    ORG 0030H
  6. INIT:     MOV SP,#5FH
  7.            MOV SCON,#50H              ;串行口工作方式1,允许接收
  8.            MOV TMOD,#20H              ;定时器1工作方式2
  9.                MOV PCON,#0H               ;波特率不加倍
  10.                MOV TH1,#0FDH              ;波特率9.6kbit/s
  11.                MOV TL1,#0FDH
  12.                SETB TR1                   ;启动定时器1
  13.                    SETB EA
  14.                    SETB ES
  15.                    CLR TI
  16.                    CLR RI
  17. KEYS:     MOV P0,#0FFH
  18.            MOV R1,#0EFH               ;初始化各寄存器
  19.            MOV R2,#4
  20.            MOV R3,#0FFH
  21.                    MOV 20H,#11101111B
  22.                    MOV 21H,#11111110B
  23. KEYREAD:  MOV A,R1
  24.            MOV P0,A                    ;送扫描码至P0口
  25.                    MOV A,P0                    ;读P0口按键状态
  26.                    MOV R3,A                    ;将此状态保存在寄存器R3中
  27.                    ORL A,#0F0H                 ;屏蔽P0口高四位
  28.                    CJNE A,#0FFH,KEYDOWN        ;若P0口低四位不全为1,有按键落下
  29.                    MOV A,R1
  30.            RL A                        ;若低四位全为1,扫描下一行
  31.                    MOV R1,A
  32.                    DJNZ R2,KEYREAD
  33.                    LJMP KEYS
  34. KEYDOWN:  MOV A,P0
  35.            ORL A,#0F0H
  36.            CJNE A,#0FFH,KEYTURN1        ;若按键确实落下,将按键转换为按键码
  37.            LJMP KEYS
  38. KEYTURN1: MOV R2,#4                   ;设循环次数
  39.            MOV B,#0                    ;按键码初始值设为0
  40. LOOP1:    MOV A,P0
  41.            ORL A,#0F0H
  42.            CJNE A,21H,S1               ;判断落下按键是否位于该列
  43.            SJMP KEYTURN2               ;是,跳转判断行
  44. S1:       INC B                       ;否,按键码加1,(21H)左移,判断是否位于下一列
  45.            MOV A,21H
  46.            RL A
  47.                    MOV 21H,A
  48.                    DJNZ R2,LOOP1
  49.                    SJMP KEYREAD
  50. KEYTURN2: MOV R2,#4
  51. LOOP2:    MOV A,P0
  52.            ORL A,#0FH
  53.            CJNE A,20H,S2                ;判断落下按键是否位于该行
  54.            SJMP S3                     
  55. S2:       INC B                       ;否,按键码加4,(20H)左移,判断是否位于下一行
  56.            INC B
  57.            INC B
  58.                    INC B
  59.                    MOV A,20H
  60.                    RL A
  61.                    MOV 20H,A
  62.                    DJNZ R2,LOOP2
  63.                    SJMP KEYREAD
  64. S3:       MOV A,B                     ;将按键码送给A
  65. SEND:     MOV SBUF,A                  ;发送数据
  66.            JNB TI,$
  67.                    CLR TI
  68.                    LJMP INIT
  69. LOOP:           MOV A,SBUF                  ;接收乙机数据
  70.            JNB RI,$
  71.                    CLR RI                      ;清接收中断标志
  72.                    MOV P1,#0FFH
  73.            LCALL LED8                  ;将乙机按键数据送P1口,点亮LED灯
  74.            RETI
  75. LED8:     JNB ACC.0,LIGHT1
  76.                    JNB ACC.1,LIGHT2
  77.                    JNB ACC.2,LIGHT3
  78. RETURN:   RET
  79. LIGHT1:   MOV A,#0FEH
  80.            MOV R2,#8
  81.     L1:           MOV P1,A
  82.                RL A
  83.                    ACALL DELAY
  84.                    DJNZ R2,L1
  85.            SJMP RETURN
  86. LIGHT2:   MOV A,#07FH
  87.            MOV R2,#8
  88.     L2:    MOV P1,A
  89.                RR A
  90.                    ACALL DELAY
  91.                    DJNZ R2,L2
  92.            SJMP RETURN
  93. LIGHT3:   MOV A,#0E7H
  94.            MOV P1,A
  95.                    ACALL DELAY
  96.                    SETB C
  97.         L31:   MOV R0,A
  98.                    ORL A,#0FH
  99.                    RLC A
  100.                    MOV R1,A
  101.                    MOV A,R0
  102.                    ORL A,#0F0H
  103.                    RRC A
  104.                MOV R2,A
  105.                ANL A,#0FH
  106.                    MOV R0,A
  107.                    MOV A,R1
  108.                    ANL A,#0F0H
  109.                    ADD A,R0
  110.                    MOV P1,A
  111.                    ACALL DELAY
  112.                JB P1.7,L31
  113.     L32:   SETB C
  114.            MOV R0,A
  115.                    ORL A,#0FH
  116.                    RRC A
  117.                    MOV R1,A
  118.                    MOV A,R0
  119.                    ORL A,#0F0H
  120.                    RLC A
  121.                    MOV R2,A
  122.                ANL A,#0FH
  123.                    MOV R0,A
  124. ……………………

  125. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
程序代码.rar (2.64 KB, 下载次数: 150)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:560533 发表于 2019-6-12 08:30 | 显示全部楼层
好好研究一哈
回复

使用道具 举报

ID:332130 发表于 2019-8-15 08:51 | 显示全部楼层
没有仿真图啊,只有代码
回复

使用道具 举报

ID:594353 发表于 2019-8-15 16:52 | 显示全部楼层
不应该是甲乙各有程序吗
回复

使用道具 举报

ID:92827 发表于 2019-10-21 19:16 | 显示全部楼层
单片机房烟花雨 发表于 2019-8-15 16:52
不应该是甲乙各有程序吗

两片单片机应该是2套程序,看来程序还得自己编啊

回复

使用道具 举报

ID:583800 发表于 2019-12-1 16:29 | 显示全部楼层
littlejia 发表于 2019-10-21 19:16
两片单片机应该是2套程序,看来程序还得自己编啊

分别写在两个单片机里就可以了
回复

使用道具 举报

ID:518023 发表于 2019-12-4 21:18 | 显示全部楼层
liking 发表于 2019-12-1 16:29
分别写在两个单片机里就可以了

你们运行成功了吗?
回复

使用道具 举报

ID:613684 发表于 2019-12-9 21:59 | 显示全部楼层
有人成功了吗,可不可行
回复

使用道具 举报

ID:716827 发表于 2020-3-27 13:04 | 显示全部楼层
有C的程序吗
回复

使用道具 举报

ID:739434 发表于 2020-5-4 12:00 | 显示全部楼层
请问有仿真图吗?运行没有成功
回复

使用道具 举报

ID:764591 发表于 2020-5-29 21:15 | 显示全部楼层
cc5218 发表于 2020-5-4 12:00
请问有仿真图吗?运行没有成功

你有程序么发给我一份
回复

使用道具 举报

ID:763089 发表于 2020-6-3 19:05 | 显示全部楼层
我打不开那个asm
回复

使用道具 举报

ID:290578 发表于 2021-6-20 21:04 | 显示全部楼层
接收过程比较简单,没多少参考,多谢啦。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表