矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: chencncjy

请教串口通信

[复制链接]
     
发表于 2021-3-28 07:30:21 | 显示全部楼层
uⅤ4仿调形同鸡肋,与proteus联调才是正道
回复 支持 反对

使用道具 举报

     
发表于 2021-3-28 07:44:22 | 显示全部楼层
本帖最后由 mov99 于 2021-3-28 08:17 编辑

仿真的在完美还是仿真,没有用洞洞板搭的电路来的更直接。 当然,如果只是闲玩儿倒是个省钱的好办法
回复 支持 反对

使用道具 举报

     
发表于 2021-3-28 09:12:06 来自手机 | 显示全部楼层
本帖最后由 gxg0000 于 2021-3-28 09:13 编辑

初编程序往往是漏洞百出,解决问题的最好办法就是调试,也可以这么说程序不是编出来的,而是调试出来的。
回复 支持 反对

使用道具 举报

     
发表于 2021-3-28 09:38:12 | 显示全部楼层
共识
回复 支持 反对

使用道具 举报

     
发表于 2021-3-28 11:53:54 | 显示全部楼层

我一直是这样做的,调试程序通过proteus全电路仿真,最后下载到板子,基本上都能正常运行
回复 支持 反对

使用道具 举报

     
发表于 2021-3-28 12:13:03 | 显示全部楼层
仿真调试可以测试一段程序的运行时间,只要在这段程序开始与结束设置两个断点,如用手工一条一条地计算费时费力,而且容易出差错。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2021-3-31 19:38:47 | 显示全部楼层
chencncjy 发表于 2021-3-25 14:43
看的出,您对汇编学的应用自如,谢谢你在百忙之中抽时间回!谢谢

请教您一个问题,这是一断书上的串行通信代码
                /**
                串行口发送/接收10位信息(方式1),第0位是起始位,1-8位是数据位最后是停止位
                甲机把以78H、77H单元的内容为首地址,以76H、75H单元中内容减1为末地址的数据块
                内容通过串行口向乙机发送
                设8051内部RAM中
                (78H)=20H:首地址为2000H
                (77H)=00H:
                (76H)=20H:末地址为2020H
                (75H)=20H
                在接收收程序中有,判断接收的是地址还是数据,那么发送的程序中,如果看发送的是数据还是地址
                **/
                ORG 0000H
                //LJMP        TRANS//这样能进行吗,如何改,这是教材上的,目的是什么
                ORG        001BH
                LJMP        T1INT
                ORG 0023H
                LJMP SINT
                ORG        1000H//我在开发板上试了,用1000H报错
                ANL        TMOD,#0FH
                ORL        TMOD,#10H
                MOV TL1,#0FAH
                MOV TH1,#0FFH
                MOV PCON,#80H
                SETB EA;开总中断
                CLR ES
                SETB ET1
                SETB PT1
                CLR PS
                SETB TR1
                CLR TI
                MOV SCON,#40H
                MOV SBUF,78H
WAIT:        JNB        TI,WAIT
                CLR TI
                MOV SBUF,77H
WAIT2:        JNB TI,WAIT2
                CLR TI
                MOV SBUF,76H
WAIT3:JNB TI,WAIT3
                CLR TI
                MOV SBUF,75H
WAIT4:JNB TI,WAIT4
                CLR TI
                SETB ES
                //.......其它程序
T1INT:        CLR TR1
                MOV TL1,#0FAH
                MOV TH1,#0FFH
                SETB TR1
                RETI
SINT:        PUSH        DPL
                PUSH        DPH
                PUSH        ACC
                MOV DPH,78H
                MOV DPL,77H
                MOVX A,@DPTR
                CLR TI
                MOV SBUF,A
                MOV A,DPH
                CJNE        A,76H,END1
                MOV A,DPL
                CJNE        A,75H,END1
                CLR ES
                CLR ET1
                CLR TR1
ESCOM:        POP ACC
                POP        DPH
                POP DPL
                RETI
END1:        INC 77H
                MOV A,77H
                JNZ        END2
                INC        78H
END2:        SJMP        ESCOM
                END
                       
                -----------------------------------
以下是接收程序
RECIVE:                ORG 0000H
                        LJMP        RECIVE//我认为,程序会停在这个地方,这样写的目的是什么
                        ORG 001BH
                        LJMP TINT
                        ORG        0023H
                        LJMP        RSINT
                        ORG 0100H
                        ANL        TMOD,#0FH//高位置0,低位不变
                        ORL        TMOD,#10H//高位末位+1,低位不变
                        MOV TL1,#0EAH
                        MOV TH1,#0FFH
                        MOV PCON,#80H//SMOD=1
                        SETB EA
                        SETB ES
                        SETB        ET1
                        SETB        PT1//定时器中断级别高于串行中断
                        CLR         PS
                        SETB        TR1//启动定时器1
                        MOV        SCON,#50H//0101,SM1=1,SM2=0,REN=1
                        CLR        B.0//累加器B,的0位置0
                        MOV                70H,#78H
                        .....
TINT:        CLR         TH1
                MOV TL1,#0EAH
                MOV TH1,#0FFH
                SETB TR1
                RETI
RSINT:        PUSH        DPL
                PUSH        DPH
                PUSH        Acc
                JB        B.0,DATA//判断接收的是地址(B.0=0)还是数据(B.0=1)
                MOV R0,70H
                MOV A,SBUF
                MOV        @R0,A
                DEC 70H
                CLR RI
                MOV        A,#74H
                CJNE        A,70H,RETURN
                SETB B.0//b.0=1表示地址已经接收完
RETURNOP        ACC
                POP        DPH
                POP        DPL
                RETI
DATA:        MOV DPH,78H//接收的数据转入此入
                MOV A,SBUF
                MOVX @DPTR,A
                CLR RI
                INC 77H
                JNZ END2
                INC 78H
        END2:MOV A,76H
                CJNE        A,78H,RETURN
                MOV        A,75H
                CJNE        A,77H,RETURN
                CLR ES
                CLR        ET1
                CLR        TI
                SETB        PSW.5//第五位是F0,说是能控制程序的流向,为1和0分别起什么作用
                AJMP RETURN
                end
回复 支持 反对

使用道具 举报

     
发表于 2021-3-31 19:46:46 | 显示全部楼层
学习了,c为主,汇编也要会
回复 支持 反对

使用道具 举报

     
发表于 2021-4-3 13:32:38 | 显示全部楼层
chencncjy 发表于 2021-3-31 19:38
请教您一个问题,这是一断书上的串行通信代码
                /**
                串行口发送/接收10位信息(方式1),第0位是起始 ...

假设第一段代码为甲机,第二段代码是乙机
甲机向乙机发送的就是地址,告诉乙机把对应的地址的内容上传或发送到甲机,而甲机收到的就是乙机上传的对应地址的内容。

001.jpg

截图内容不是抄错了,就是书本身排版有误或未经校对,这种不负责任的书不看也罢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2024-4-27 21:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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