用串行口通信控制流水灯

来源:百度知道 编辑:UC知道 时间:2024/09/23 23:44:53
ORG 00H
START:
MOV SCON,#00H
MOV DPTR,#TABLE
LOOP:
CLR A
MOVC A,@A+DPTR
CJNE A,#88H,SEND
JMP START
SEND:
MOV SBUF,A
CHECK:
JBC TI,NEXT
JMP CHECK
NEXT:
CALL DELAY
INC DPTR
JMP LOOP
DELAY:MOV R3,#20 ;延时200ms
D1:MOV R4,#20H
D2:MOV R5, #248
DJNZ R5,$
DJNZ R4,D2
DJNZ R3,D1
RET
TABLE:
DB 0FEH,0FDH,0FBH,0F7H
DB 0EFH,0DFH,0BFH,07FH
DB 07FH,0BFH,0DFH,0EFH
DB 0F7H,0FBH,0FDH,0FEH
DB 88H
END
这个是at89s51单片机代码。通过串行口将数据传输到74164并由此控制流水灯。
p0口电平变化:
11111110
11111101
11111011
11110111
11101111
11011111
10111111
01111111 ;
01111111 ;这里感觉好像有点问题,干嘛延时了400ms?其他都是200ms
10111111
11011111
11101111
11110111
11111011
11111101
11111110
高手帮忙看一下电平变化是否正确。(这个程序是书上来的)

楼主的程序没有任何错误 之所以延时了400MS 那是因为 07FH 这个数被传了两次 假如楼主想要只延时200ms
在DB 0FEH,0FDH,0FBH,0F7H
DB 0EFH,0DFH,0BFH,07FH
DB 07FH,0BFH,0DFH,0EFH
DB 0F7H,0FBH,0FDH,0FEH
第二行最后一个,或者第三行第一个,删除任意一个即可,程序仍可正常执行,实验便知。

正确