c51hyw 发表于 2017-4-13 21:21 给你修改了,再试试看。 |
在多机通信中,主机必须要能对各个从机进行识别,在51系列单片机中可以通过SCON寄存器的SM2位来实现。当串口以方式2或方式3发送数据时,每一帧信息都是11位,第9位是数据可编程位,通过给TB8置1或置0来区别地址帧和数据帧,当该位为1时,发送地址帧;该位为0时,发送数据帧。 在多机通信过程中,主机先发送某一从机的地址,等待从机的应答,所有的从机接收到地址帧后与本机地址进行比较,若相同,则将SM2置0准备接收数据;若不同,则丢弃当前数据,SM2位不变。 |
c51hyw 发表于 2017-4-13 21:21 我试过了,可以。你不行,可能是8*8LED器件引脚颠倒。 再解答你的问题:为什么要用LJMP?显示一遍,你根本看不到,只有反复循环,你才能看到。 先Proteus仿真一下,确认有效。汇编程序就是我给你修改的那个。 ![]() ![]() 还是建议你打好基础,真心想学,真诚地给你推荐2本书,张志良编著的: 《80C51单片机实用教程——基于Keil C和Proteus》高等教育出版社ISBN 978-7-04-044532-9, 用于学习51单片机原理,程序(双解c和汇编)语句条条有注解,便于阅读理解,便于自学。 《80C51单片机仿真设计实例教程——基于Keil C和Proteus》清华大学出版社ISBN 978-7-302-41682-1,内有常用的单片机应用100案例,用于仿真实验操作,电路与程序真实可靠可信可行。 与其他书比较一下,有比较才能有鉴别!绝不忽悠你! |
zl2168 发表于 2017-4-10 17:40 试了试,还是不行么?另外请教一下怎么还要再LJMP整个程序啊??在仿真时执行这个程序本来就是无限循环执行的呀 |
先练练汇编,再学C ,会有概念一些![]() |
给你修改了,再试试看。 |
给你修改了,再试试看。 |
本帖最后由 zl2168 于 2017-4-10 06:00 编辑 延时程序加错位置,且未调用和反复循环。给你修改了,再试试看。 LOOP: MOV R1,#00H MOV R2,#08H MOV R7,#0FEH LABEL: MOV DPTR,#TABA MOV A,R1 MOVC A,@A+DPTR MOV P0,A MOV A,R7 MOV P2,A RL A MOV R7,A INC R1 LCALL DL DJNZ R2,LABEL LJMP LOOP TABA: DB 00H,08H,08H,038H,08H,08H,0FFH,00H DL: MOV R4,#0A3H DL1: MOV R3,#0FFH DL2: DJNZ R3,DL2 DJNZ R4,DL1 RET END |
51Lovers 发表于 2017-4-9 17:24 ORG 0000H 加了延时,问题依旧 MOV R1,#00H MOV R2,#08H MOV R7,#0FEH LABEL: MOV DPTR,#TABA MOV A,R1 MOVC A,@A+DPTR MOV P0,A MOV A,R7 MOV P2,A RL A MOV R7,A INC R1 SJMP DL DJNZ R2,LABEL DL:MOV R4,#0A3H DL1:MOV R3,#0FFH DL2: DJNZ R3,DL2 DJNZ R4,DL1 RET TABA: DB 00H,08H,08H,038H,08H,08H,0FFH,00H END |
51Lovers 发表于 2017-4-9 17:24 是每次一组啊,由R2控制循环8次??还有把12——15行改为MOV DPTR,#TABB MOV A,R1 MOVC A,@a+DPTR MOV P2,A 最后加上TABB:DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7FH 也不用延时却可以显示呢??? |
连显示的原理还未弄清?先看书看懂扫描显示的原理后,再看8*8LED的手册,最后再弄程序吧。 |
延时程序加在INC R1前 |
zl2168 发表于 2017-4-6 19:54 请赐教 |
yzwzfyz 发表于 2017-4-6 19:53 不太懂,,keil仿真端口都是正确的啊,,啊 |
见到汇编就膜拜,在我眼里,使汇编的都是大神 |
需要延时? |
需要延时? |
少显示延时。另外,程序还可编得精炼点。 |
不懂汇编呀 |