打印

请教TL16C554问题

[复制链接]
12380|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
happystar|  楼主 | 2007-4-12 19:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
happystar|  楼主 | 2007-4-12 22:04 | 只看该作者

自己顶一下

使用特权

评论回复
板凳
zhaoyu2005| | 2007-4-13 08:45 | 只看该作者

哥们,有datatsheet就行,多看几遍就行了

有完整的datasheet还有什么搞不定?把datasheet看懂硬件连接就很容易做出来了,接下来就好搞了,你还是不想看datasheet或英文不好

使用特权

评论回复
地板
qixiboy| | 2007-4-13 11:42 | 只看该作者

554

使用特权

评论回复
5
qixiboy| | 2007-4-13 11:43 | 只看该作者

51

使用特权

评论回复
6
happystar|  楼主 | 2007-4-13 18:00 | 只看该作者

严重感谢qixiboy!

这个图对我的帮助很大,谢谢你。本人不才,还有点不明白的。
请教一下:A0,A1,A2连哪呢?还有INTA,INTB,INTC和INTD的作用我看了datasheet也不明白,希望指教啊。
老兄方便把这个图的整体传给我么?liyanbingabc@eyou.com,谢谢

使用特权

评论回复
7
dreambird| | 2007-4-14 00:26 | 只看该作者

re

比如受到数据或是数据发送出去时会产生中断,你可以不用interrupt方式而用查询方式,所以inta/b/c/d也可以不用,把中断控制位禁止掉。

使用特权

评论回复
8
happystar|  楼主 | 2007-4-14 13:46 | 只看该作者

谢谢 dreambird

我再看看,有不懂的地方还望多指教啊。谢谢

使用特权

评论回复
9
xujunchen| | 2007-4-14 15:05 | 只看该作者

说一下吧!

通讯使用中断是必要的,在多任务和通讯速率高的情况下,查询方式易丢数据!
四个中断脚可以用或非门后进入单片机中断.

使用特权

评论回复
10
qixiboy| | 2007-4-14 20:46 | 只看该作者

573

A0,A1,A2是经过573连到51的AD0,AD1,AD2的。至于INTA,INTB,INTC和INTD的作用就象dreambird所说的那样,比如接收到有效数据或者发送FIFO空的时候他就会产生中断,就象xujunchen说的那样四个中断脚可以用或非门后进入单片机中断.
希望大家互相学习。

使用特权

评论回复
11
happystar|  楼主 | 2007-4-15 20:42 | 只看该作者

又看了一遍datasheet,还有不明白的地方

TL16C554初始化程序中怎么来确定寄存器的地址啊?
比如LCR = 0x03;LCR = 0x83;IER = 0x05;
这些LCR,什么的寄存器在MCU里该怎么宏定义呢?定义的地址根据什么来确定呢?
谢谢大家热心帮助/

使用特权

评论回复
12
qixiboy| | 2007-4-15 21:20 | 只看该作者

地址

地址根据A0,A1,A2和CS来确定

使用特权

评论回复
13
happystar|  楼主 | 2007-4-15 21:43 | 只看该作者

to qixiboy

谢谢 qixiboy,能说的详细点么?怎么来确定呀?可以给我个具体例子么?
真不好意思,这方面的资料实在是找不到啊。

使用特权

评论回复
14
qixiboy| | 2007-4-15 22:16 | 只看该作者

re

比如你的CSA连到A15,那么LCR的地址不就是0xxx xxxx xxxx x011(比如0x7ff3)吗。
那么你就可以定义
#define LCR_A XBYTE[0x7ff3]
之后你再写A串口的LCR寄存器时,就可以这样LCR_A = 0x0b;           // set 8 bit data,1 bit stop,odd parity

这里只是打个比方。

使用特权

评论回复
15
happystar|  楼主 | 2007-4-16 19:07 | 只看该作者

非常严重感谢qixiboy!

谢谢你和楼上各位帮忙,现在我还想:TL16C554寄存器地址是不是都需要8位以上的呢?我见资料上都是基本定义地址都是16位的。
按照qixiboy给出我的这个图:51的P0口是地址数据分时复用的,其中A0,A1,A2接AD0,AD1,AD2。
问题1:
如果CSA,CSB,CSC,CSD接AD4,AD5,AD6,AD7可以么?(我不想再占用别的口了)所以当A通道的LCR_A如下定义
#define LCR_A XBYTE[0x73]//0XXX x011
这样可以么?
问题2:“地址根据A0,A1,A2和CS来确定”
根据我的理解只要确定CS的连接,就可以确定通道地址了(高位)。然后根据datasheet,来确定寄存器的地址,比如LCR地址是3。那么低地址就直接写3了。是不是这个‘3’(011)依次分别就是A2,A1,A0呢?

看了datasheet中的A2,A1,A0还是感觉在具体方面不懂!真是太没才了。
希望大家指教,多谢!

使用特权

评论回复
16
qixiboy| | 2007-4-16 21:04 | 只看该作者

个人认为

1:可以,我觉得只要地址不重复怎么都可以。
2:是。

使用特权

评论回复
17
happystar|  楼主 | 2007-4-16 22:12 | 只看该作者

有点糊涂,再请教一下

突然想到一个问题:比如说如下定义这个寄存器
#define LCR_A XBYTE[0x73]
那么,这也是绝对地址宏定义吧。

在ABSACC.h里看到如下定义:
#ifndef __ABSACC_H__
#define __ABSACC_H__
#define XBYTE ((unsigned char volatile xdata *) 0)

这样我可以认为是对外部程序空间进行访问的。我的MCU是64K ROM,我如果定义#define LCR_A XBYTE[0x73],那么可以看成我是访问的是我以前ROM空间的。而不是外扩的TL16C554寄存器的地址。
所以我头脑里认为就不能这样定义,必须定义TL16C554寄存器的地址大于自己最大ROM空间。

请教一下:我这样理解对么?多谢指教啊

使用特权

评论回复
18
xwj| | 2007-4-16 22:51 | 只看该作者

你先分清楚外部RAM和外部ROM的区别再说

使用特权

评论回复
19
zhaoyu2005| | 2007-4-17 11:09 | 只看该作者

都懒得说

你这么懒,算了别搞了,有很多东西是很容易查到的,比如与51单片机相连的器件的地址、P0口数据/地址复用、这个芯片的初始化等,有一点疑问就知道问而不想着自己解决,有等的功夫早解决好几遍了

使用特权

评论回复
20
happystar|  楼主 | 2007-4-17 17:24 | 只看该作者

to zhaoyu2005

 zhaoyu2005 发表于 2007-4-13 08:45 侃单片机 ←返回版面    

3楼: 哥们,有datatsheet就行,多看几遍就行了 

有完整的datasheet还有什么搞不定?把datasheet看懂硬件连接就很容易做出来了,接下来就好搞了,你还是不想看datasheet或英文不好

 zhaoyu2005 发表于 2007-4-17 11:09 侃单片机 ←返回版面    

19楼: 都懒得说 

你这么懒,算了别搞了,有很多东西是很容易查到的,比如与51单片机相连的器件的地址、P0口数据/地址复用、这个芯片的初始化等,有一点疑问就知道问而不想着自己解决,有等的功夫早解决好几遍了 
 



看了楼上的话,心里有点不好受!(在这个论坛呆了2年多第一次有这种感觉)。我感觉你纯属来这边灌水来了,不仅没回答一些实质性的问题,还气人!什么叫“你这么懒,算了别搞了”。也许我多想了,对不起了zhaoyu2005,多有得罪的地方万望你谅解我(我只是想说说心理话)。

在大家的热心帮助下,我现在已经把这些都弄明白了。谢谢楼上大家帮助!
 
 

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

58

主题

409

帖子

1

粉丝