登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

急!帮我看一下!谢谢!

作者:eixin 栏目:单片机
请帮我看一下这个程序SST89C54扩展两个串口:TL16C552
我用的是中断方式,这个程序不能收,也不能发,我查了两天找不出原因,它
根本不能产生中断,我的数据已到了引脚上,是不是初始化问题,我没法查出
原因。谢谢!
程序功能:接收到一个数据产生中断后保存在REC_BUFF中,然后发送这个数据

REC_BUFF  EQU   030H

RBR       DATA     8000H           ;TL16C552FN 接收缓存器
THR       DATA     8000H           ;发送保存寄存器        
DLL       DATA     8000H           ;波特率低位寄存器      
DLM       DATA     8001H           ;波特率高位寄存器      
IER       DATA     8001H           ;中断允许寄存器
IIR       DATA     8002H           ;中断标志寄存器
FCR       DATA     8002H           ;FIFO控制寄存器
LCR       DATA     8003H           ;线性控制寄存器
LSR       DATA     8005H           ;线性状态寄存器

CS1       DATA     2000H           ;对扩展串口1进行片选
CS2       DATA     4000H           ;对扩展串口2进行片选

DE1       BIT     P1.5             ;TL16C552通讯口1(RS485)使能
DE2       BIT     P1.5             ;TL16C552通讯口2(RS485)使能
RST       BIT     P1.7             ;TL16C552复位信号

;----------------------------------------------------------------
          ORG   0000H
          LJMP  MAIN             ;主程序

          ORG   0003H
          LJMP  IT0_INIT         ;外部中断0服务子程序 (扩展串口1)

          ORG   0013H
          LJMP  IT1_INIT         ;外部中断1服务子程序 (扩展串口2)
        
;--------------------------------------------------------------

          ORG   0030H
MAIN:
          ......
          LCALL SYS_INST              ;系统初始化
          ......
            

SYS_INST:
          CLR   TR0
          CLR   TR1
          MOV   A,#83H                ;访问波特率产生器的除数锁存器,对7位置1,数据长8B
          MOV   DPTR,#LCR             ;LCR
          MOVX  @DPTR,A
          MOV   A,#34H
          MOV   DPTR,#DLL             ;DLL
          MOVX  @DPTR,A
          MOV   A,#00H                ;波特率=9600bps  8M/(16*9600) = 52 (34H)
          MOV   DPTR,#DLM             ;DLM
          MOVX  @DPTR,A
          MOV   A,#03H                ;访问接收器缓存器,THR,IER,对7位清0,数据长8B
          MOV   DPTR,#LCR             ;LCR
          MOVX  @DPTR,A
          MOV   A,#0C7H               ;清收、发FIFO所有字节并清计数器
          MOV   DPTR,#FCR             ;FCR
          MOVX  @DPTR,A
          MOV   A,#0C1H               ;禁止清0收、发FIFO、计数器
          MOV   DPTR,#FCR             ;FCR
          MOVX  @DPTR,A


          MOV   IP,#01H               ;外部中断0-高
          MOV   IE,#0B5H              ;ES ET1 ET0   中断允许
          MOV   TMOD,#88H             ;定时器1:自动重装定时,定时器0:16位定时器
          MOV   TCON,#05H             ;定时器控制清0,外部中断为低电平触发
         ; MOV   SCON,#50H             ;8位异步接收/发送器,允许接收<
2楼: >>参与讨论
cx_78
初始化不对      TL16C550 TL16C552 TL16C554 无论那种通信片子  初始化第一句必须写#80 给lcr 然后 写波特率                   不信试一试: >


3楼: >>参与讨论
eixin
我的程序是用的FCR=83H,这应该和FCR=80H效果一样吧?
能否帮我看看其它有没问题?主要是数据已到了引脚上,但就是不能产生中断信号?发送数据也是一样,不能产生中断信号。还有就是我发现我的片选信号不能通过DPTR命令来片选,我用设置I/O口试过也不能产生中断,那么有什么其它办法来设置自选信号吗?
谢谢!


「该帖子被 eixin 在 2003-6-5 10:30:09 编辑过」
4楼: >>参与讨论
HDDZLGQ
不知是否已经解决?
首先你如果用P1口的某位做片选,则在读写数据前应将其置0,然后操作,操作完后再置回1
另外,你的定时器设置不对,应设置为TMOD=21H,这样TO工作为16位,T1为波特率发生器
还有你设置的FCR=C7可能应该为FCR=7,这样才能在收到一个字节后就中断,
我也正在接触该片子,欢迎探讨!
参与讨论
昵称:
讨论内容:
 
 
相关帖子
[下载]最新版!
用c语言怎么读外部XRAM里的数据啊???
需要下载资料的进(西门子、三菱、欧姆龙等)
51的浮点算法请教!!
ATMEL推出增强型的51单片机——AT89LP2052/4052 ,进来...
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号