作者DamonF1 (..........)
看板Electronics
标题Re: [问题] 8051序列阜传送与接收
时间Fri Jun 1 08:55:08 2007
※ 引述《handy012 (handy)》之铭言:
: 功能:
: start(int0):传送10+2使七段显示器显示12
: stop(int1):传送02使七段显示器显示02
: 可是按下start却显示10也就是十位数(R4)会盖掉个位数(R3)不是相加
: 想了很久还有找不到错误
: 各位前辈可以给个方向吗?感谢!
: ORG 00H
: JMP START
: ORG 03H
: JMP INT0
: ORG 13H
: JMP INT1
: ORG 23H
: JMP UARTINT
: START:
: MOV TMOD,#00100000B MODE2 TIMER1
: MOV TH1,#1DH 采用模式1,鲍率设定为137.6Hz
: MOV TL1,#1DH 所以TH1求出为30
: SETB TR1
: SETB IT0
: ANL PCON,#01111111B SMOD=0 采用单倍鲍率
: MOV SCON,#01010000B 采用模式1 致能REN
: MOV IE,#10010101B 致能串列 中断 外部中断0,1
: MOV R2,#00000010B 一开始显示自己组别(02)
: MOV R3,#00000010B 组别个位数(02)
: MOV R4,#00010000B 组别十位数(10)
: MOV P0,R2
: CLR F0 设定旗标,用以判断是否接收
: 第2笔资料
: LOOP:
: JMP LOOP 等待中断
: INT0:
: MOV A,R3 开始传送自己组别资料
: MOV SBUF,A 传送个位数
: MOV R5,#1
: CALL DELAY 采用DELAY延时5.73毫秒,
: 使传送能顺利传完而产生传送
: 中断而接下来产生接收中断
这行接下来是否要就要判断接收完毕?
接收完成後 mov a,subf 再存至R1
: TRANS:
: MOV A,R4
: MOV SBUF,A 传送十位数
: SETB F0 设定旗标为1,使其可接收第2笔
: MOV R5,#1
: CALL DELAY 同前面DELAY之叙述
: UARTINT:
: JB RI,RECEIVE 判断是为接收或传送中断
: CLR TI 若是传送中断则清除TI使得可传第2笔
: RETI
: RECEIVE:
: CLR RI 清除RI使得可接收第2笔
: JB F0,RECE 若F0=1 则接收第2笔
: MOV A,SBUF 接收第一笔个位数
: MOV R1,A 接其放置R1暂存
: RETI
: RECE:
: MOV A,SBUF 接收第2笔十位数
: ORL A,R1 将个位数与十位数串在一起
: MOV P0,A 显示在7节显示器上
: RETI
: DELAY:
: MOV R7,#20 延时副程式 延时5.73毫秒
: D1:
: MOV R6,#144
: DJNZ R6,$
: DJNZ R7,D1
: DJNZ R5,DELAY
: RET
: INT1:
: MOV A,R2 STOP 使其显示原本组别资料
: MOV P0,A
: RETI
: END
你的R4十位数会盖掉R3我想是因为在传R3後没有存下来就马上传R4了
最後只有存到R4,所以才有这样的现象
试试看R3传完後就要判断是否传送完毕然後存至R1低四位元
接着再传R4,接收完毕後存至R1高四位元
R1的高低四位元存完才可以RETI
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 163.23.155.69