作者justdoit96 (╮(﹀_﹀")╭)
站内Electronics
标题Re: [问题] 8051序列阜传送与接收
时间Fri Jun 1 19:26:04 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
Baud rate=137.6 bits/sec
serial port mode=1是传10-bits
这样传完一组资料要10/137.6=72.7ms
你下面设的delay会不会太少?
还是我算错了?= =a
: 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毫秒,
: 使传送能顺利传完而产生传送
: 中断而接下来产生接收中断
你没有设中断优先序,这样在INT0里产生串列中断会跑的到UARTINT吗?
: 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
你这边我看来应该是:
外部中断产生-> INT0-> TRANS-> UARTINT->
1.RI=0-> START-> when TI=1-> UARTINT-> let TI=0
2.RI=1-> RECEIVE
: 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
最後问一下,有没有流程图?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.113.91.126