打印

8155扩展后怎样能实现sbit功能呢?

[复制链接]
3445|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
andyding|  楼主 | 2007-9-9 12:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大侠:

         8155扩展后,怎样能像单片机一样实现sbit功能呢?例如:可以对PA0位直接操作不影响其他PA脚.近来做一项目:要PA0输出24位的数据,PA1要一串时钟,即类似一串行口.软件上怎样实现?谢谢!!!
望各位赐教!

相关帖子

沙发
tyw| | 2007-9-9 13:18 | 只看该作者

8155没有位操作功能

实验8 8155实验
实验目的:
1、掌握8155内部结构、原理和引脚功能。
2、学会CPU与8155的连接以及对它的编程。
实验器材:
电脑、开发系统、电源
实验内容、要求:
  一、实验用A口做输出口。
  具体要求:
    1  用连接线分别连接A口的八个脚到八个发光管(简单起见,可仅连一个)
    2  编制一个程序,单步运行程序,使连接在A口的发光二极管按亮 –灭 变化。
  二、 实验用B口做输入口,A口做输出口。
   具体要求:
        1、 PB.0连开关(可选输入高电平或底电平),PA.0接发光管。[BLOCKQUOTE]
2、编制一个程序,连续运行程序,拨动开关,发光管显示输入电平的状态。[/BLOCKQUOTE]
实验电路连 线:
          PA.0-L9   LA.1-L10........PA.7-L16     简单起见,可仅连PA.0-L9
     PB.0-L1 PB.1-L2.....PB.7-L8       简单起见,可仅连PB.0-L1
实际连接情 况:
       
有关本实验涉及的书本知识点
   课本 
8155的基本知识复习
1、8155芯片介绍:
Intel 8155芯片内包含有256个字节RAM,2个8位、1个6位的可编程并行I/O口和1个14位定时器/计数器。8155可直接与MCS-51单片机连接不需要增加任何硬件逻辑。由于8155既有RAM又具有I/O口,因而是MCS-51单片机系统中最常用的外围接口芯片之一,8155的引脚及内部结构如下图:

 
 
  1. 引脚说明: 
[BLOCKQUOTE]
8155共有40个引脚,采用双列直插式封装。各引脚功能如下:
AD7~AD0:地址数据总路线。单片机和8155之间的地址、数据、命令、状态信息都是通过它传送的。
/CE:片先信号线,低电平有效
/RD:存储器读信号线,低电平有效。
/WR:存储器写信号线,低电平有效、
ALE:地址及片选信号锁存线,高电平有效,其后沿将地址及片选信号锁存到器件中。[/BLOCKQUOTE]
IO//M:I/O接口与存储器选择依赖线,高电平表示选择I/O接口,低电平选择存储器。
PA7~PA0:A口输入/输出线。
PB7~PB0:B口输入/输出线。
PC5~PC0:C口输入/输出或控制信号线。用作控制信号线时,其功能如下:
PC0:A INTR(A口中断信号线)。
PC1:A BF(A口缓冲器满信号线)。
PC2:/ASTB(A口选通线)。
PC3:B INTR(B口中断信号线)。
PC4:B BF(B口缓冲器满信号线)。
PC5:/BSTB(B口选通线)。
TIMER IN:定时器/计时器输入端。
/TIMER OUT:定时器/计数器输出端。
RESET:复位信号线。
VCC:+5V电源。
VSS:地。
8155内部结构包括两个8位并行输入/输出端口,一个6位并行输入/输出端口,256个字节的静态随机存取存储器RAM,一个地址锁存器,一个14位的定时器/计数器以及控制逻辑电路,各部件和存储器地址的选择由IO//M信号决定。
当IO//M=0(低电平)时,表示AD7~AD0输入的是存储器地址,寻址范围为00H~FF。
当IO//M=1(高电平)时,表示AD7~AD0输入的是I/O接口地址,其编码如下表所示。其中A7~A3可经译码器进行译码,产生片选信号/CE,内部寄存器和口地址由A2~A0给出。

AD7~AD0

寄存器

A7 A6 A5 A4 A3 A2 A1 A0

X X X X X 0 0 0 

命令/状态寄存器(命令状态口)

X X X X X 0 0 1

A口

X X X X X 0 1 0

B口

X X X X X 0 1 1

C口

X X X X X 1 0 0

定时器低8位

X X X X X 1 0 1

定时器高6位和2位计数方式位

 
 
7 6 5 4 3 2 1 0
 
 
PA:0-A口输入 1-A口输出
PB:0-B口输入 1-B口输出
PC2、PC1:
00=ALT1:A口,B口基本输入输出,C口输入
01=ALT2:A口,B口基本输入输出,C口输出
10=ALT3:A口选通输入输出,B口基本输入输出
PC0:AINTR,PC1:ABF,PC2:/ASTB,PC3-PC5输出
11=ALE4:A口,B口选通输入输出[BLOCKQUOTE]
PC0:AINTR,PC1:ABF,PC2:/ASTB,PC3:BINTR,PC4:BBF[BLOCKQUOTE][BLOCKQUOTE]
PC5:/BSTB[/BLOCKQUOTE][/BLOCKQUOTE][/BLOCKQUOTE]
IEA:1-允许A口中断;0-禁止A口中断
IEB:1-允许B口中断;0-禁止B口中断
TM2、TM1:
00:空操作,不影响计数操作
01:停止定时器计数
10:若定时器正在计数,计数长度减速为0停止计数
11:启动,置方式和长度后立即启动,若正在运行表示 置新的方式和定时器长度,计数结束后,按新的方式和长度计数。
B、工作方式:
在8155的逻辑部件中,设置有一个控制命令寄存器和一个状态标志寄存器。8155的工作方式由CPU写入控制命令寄存器中的控制字来确定。控制命令寄存器只能写入不能读出,8位控制命令寄存器的低4位用来设置A口、B口和C口的工作方式。第4、5位用来确定A口、B口以选通过输入输出方式工作时是否允许中断请求。第6、7位用来设置定时器/计数器的操作。工作方式控制字的格式如上图所示:
8155的A口、B口 可工作于基本I/O方式或选通方式,C口 可作为输入输出口线,也可作为A口、B口 选通方式工作时的状态控制信号线,其工作情况与8255方式0,方式1时大致相同,控制信号的含义也基本一样。
另外,在8155中还设置有一个状态标志寄存器,用来存放A口和B口的状态标志,状态标志寄存器的地址与命令寄存器地址相同,CPU只能读出,不能写入。状态标志寄存器的格式如下图所示,所以CPU可以直接查询。

D7

D6

D5

D4

D3

D2

D1

D0

X

TMER

INTEB

BBF

INTRB

INTEA

ABF

INTR

 
INTR:中断请求 INTE:端口中断允许
BF:缓冲器满标志 TIMER:定时中断
C、定时器/计数器
在8155中还设置有一个14位的定时器/计数器,可用来定时或对外部事件计数,CPU可通过程序选择计数长度和计方式。计数长度和计数方式由输入给计数寄存器计数控制字来确定,计数寄存器的格式如下:
TL(04H)
D7 D0
 

T7

T6

T5

T4

T3

T2

T1

T0

 
TH(05H)
D7 D0
 

M2

M1

T13

T12

T11

T10

T9

T8

复习要点:
要实现对8155的A口输出,要实现如下条件:
  1. CE=0 (底电平),IO/M =1 ,写入8155的状态寄存器 01H 
[BLOCKQUOTE]
2 CE=0 IO/M=1 写入8155的A口 0FFH
3 CE=0 IO/M=1 写入8155的A口 00H[/BLOCKQUOTE]
实验电路图:
T2.JPG

T3JPG

T9.JPG       (上图的74LS32或门电路,74HC138是译码器,当E3为高电平,E1,E2为低电平时选中译码)
        
 
实验程序:
实验内容1: 参考以下程序,根据原理图,分析过程。
ORG 00H
SJMP STAR
ORG 30H
STAR:MOV DPTR,#0900H      ;选中8155的命令寄存器
MOV A,#01H                       ;
MOVx @DPTR,A                  ;命令寄存器设为01H=000000001B D0=1A口输出,D1=0B口输入。 
MOV DPTR,#0901H                ;
LOOP: MOV A,#0FFH              ;A口输出0FFH
MOVX,@DPTR,A                        ;
MOV A,#00H                            ;A口输出○○H
MOVX,@DPTR,A                        ;
SJMP LOOP
END
 
实验内容2参考程序:
ORG 00H
SJMP STAR
ORG 30H
STAR: MOV DPTR,#0900H        ;命令寄存器设为01H=000000001B D0=1A口输出,D1=0B口输入。
MOV A,#01H
MOV @DPTR,A 
LOOP: MOV DPTR,#0902H
MOVX A,@DPTR                ;读B口数据到A
MOV DPTR ,#0901H
MOVX @DPTR,A                 ;将A口输出到A口
SJMP LOOP
END
思考题:如果要用B口做输出口,如何编制程序?
实验报告要求:
    1. 画出8155的连接电路(实验指导书P38页第一个图) 
    2. 写出程序及每个语句的作用。 

使用特权

评论回复
板凳
awey| | 2007-9-9 14:11 | 只看该作者

只能整体修改

使用特权

评论回复
地板
andyding|  楼主 | 2007-9-9 15:28 | 只看该作者

是啊!应该上整体呀!

不过我们的产品里的应用就是我说的一个虚拟的串行口.它是8155后接ltc2620,PA0接ltc2620的SDI(24为数据),PA1接ltc2620的SCLK(时钟),PA2接ltc2620的CS(片选).ltc2620为一DAC器件串行输入8路输出. 所以我一直不理解!!!
大家不防讨论一下.程序是上海交大的一博士写的(没原程序),我一直搞不明白这里.

使用特权

评论回复
5
tyw| | 2007-9-9 18:58 | 只看该作者

大家都己说得很清楚了,用"读,修改,写回"来模拟串口

不过这不是一个好的设计,CPU累,编程的人累,俺也看着累,不到万不得已不要走此下策.那个博士不咋地.哈哈

使用特权

评论回复
6
andyding|  楼主 | 2007-9-16 11:24 | 只看该作者

谢谢各位!

谢谢各位大侠!我知道了,也搞定了

使用特权

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

本版积分规则

76

主题

789

帖子

2

粉丝