|
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
急!帮我看一下!谢谢! |
作者:eixin 栏目:单片机 |
我用的是中断方式,这个程序不能收,也不能发,我查了两天找不出原因,它 根本不能产生中断,我的数据已到了引脚上,是不是初始化问题,我没法查出 原因。谢谢! 程序功能:接收到一个数据产生中断后保存在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 于 2003/6/4 17:36:00 发布:
初始化不对 TL16C550 TL16C552 TL16C554 无论那种通信片子 初始化第一句必须写#80 给lcr 然后 写波特率 不信试一试: > |
3楼: | >>参与讨论 |
作者: eixin 于 2003/6/5 10:25:00 发布:
我的程序是用的FCR=83H,这应该和FCR=80H效果一样吧? 能否帮我看看其它有没问题?主要是数据已到了引脚上,但就是不能产生中断信号?发送数据也是一样,不能产生中断信号。还有就是我发现我的片选信号不能通过DPTR命令来片选,我用设置I/O口试过也不能产生中断,那么有什么其它办法来设置自选信号吗? 谢谢! 「该帖子被 eixin 在 2003-6-5 10:30:09 编辑过」 |
4楼: | >>参与讨论 |
作者: HDDZLGQ 于 2005/8/12 14:25:00 发布:
不知是否已经解决? 首先你如果用P1口的某位做片选,则在读写数据前应将其置0,然后操作,操作完后再置回1 另外,你的定时器设置不对,应设置为TMOD=21H,这样TO工作为16位,T1为波特率发生器 还有你设置的FCR=C7可能应该为FCR=7,这样才能在收到一个字节后就中断, 我也正在接触该片子,欢迎探讨! |
|
|
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入 |
Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号 |