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

[复制链接]
 楼主| andyding 发表于 2007-9-9 12:10 | 显示全部楼层 |阅读模式
各位大侠:<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8155扩展后,怎样能像单片机一样实现sbit功能呢?例如:可以对PA0位直接操作不影响其他PA脚.近来做一项目:要PA0输出24位的数据,PA1要一串时钟,即类似一串行口.软件上怎样实现?谢谢!!!<br />望各位赐教!
tyw 发表于 2007-9-9 13:18 | 显示全部楼层

8155没有位操作功能

实验8&nbsp;8155实验<br /><font color=#0000FF>实验目的:</font><br />1、掌握8155内部结构、原理和引脚功能。<br />2、学会CPU与8155的连接以及对它的编程。<br /><font color=#0000FF>实验器材:</font><br />电脑、开发系统、电源<br />实验内容、要求:<br />&nbsp;&nbsp;一、实验用A口做输出口。<br />&nbsp;&nbsp;具体要求:<br />&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;用连接线分别连接A口的八个脚到八个发光管(简单起见,可仅连一个)<br />&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;编制一个程序,单步运行程序,使连接在A口的发光二极管按亮&nbsp;–灭&nbsp;变化。<br />&nbsp;&nbsp;二、&nbsp;实验用B口做输入口,A口做输出口。<br />&nbsp;&nbsp;&nbsp;具体要求:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1、&nbsp;PB.0连开关(可选输入高电平或底电平),PA.0接发光管。[BLOCKQUOTE]<br />2、编制一个程序,连续运行程序,拨动开关,发光管显示输入电平的状态。[/BLOCKQUOTE]<br />实验电路连&nbsp;线:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PA.0-L9&nbsp;&nbsp;&nbsp;LA.1-L10........PA.7-L16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;简单起见,可仅连PA.0-L9<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PB.0-L1&nbsp;PB.1-L2.....PB.7-L8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;简单起见,可仅连PB.0-L1<br />实际连接情&nbsp;况:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.fosu.edu.cn/fas/shiyan/Dcsf0083.jpg"><br />有关本实验涉及的书本知识点<br />&nbsp;&nbsp;&nbsp;课本&nbsp;<br />8155的基本知识复习<br />1、8155芯片介绍:<br />Intel&nbsp;8155芯片内包含有256个字节RAM,2个8位、1个6位的可编程并行I/O口和1个14位定时器/计数器。8155可直接与MCS-51单片机连接不需要增加任何硬件逻辑。由于8155既有RAM又具有I/O口,因而是MCS-51单片机系统中最常用的外围接口芯片之一,8155的引脚及内部结构如下图:<br /><img src="http://www.fosu.edu.cn/fas/shiyan/Image4.jpg"><br /> <br /> <OL><li>引脚说明:&nbsp;</li></OL>[BLOCKQUOTE]<br />8155共有40个引脚,采用双列直插式封装。各引脚功能如下:<br />AD7~AD0:地址数据总路线。单片机和8155之间的地址、数据、命令、状态信息都是通过它传送的。<br />/CE:片先信号线,低电平有效<br />/RD:存储器读信号线,低电平有效。<br />/WR:存储器写信号线,低电平有效、<br />ALE:地址及片选信号锁存线,高电平有效,其后沿将地址及片选信号锁存到器件中。[/BLOCKQUOTE]<br />IO//M:I/O接口与存储器选择依赖线,高电平表示选择I/O接口,低电平选择存储器。<br />PA7~PA0:A口输入/输出线。<br />PB7~PB0:B口输入/输出线。<br />PC5~PC0:C口输入/输出或控制信号线。用作控制信号线时,其功能如下:<br />PC0:A&nbsp;INTR(A口中断信号线)。<br />PC1:A&nbsp;BF(A口缓冲器满信号线)。<br />PC2:/ASTB(A口选通线)。<br />PC3:B&nbsp;INTR(B口中断信号线)。<br />PC4:B&nbsp;BF(B口缓冲器满信号线)。<br />PC5:/BSTB(B口选通线)。<br />TIMER&nbsp;IN:定时器/计时器输入端。<br />/TIMER&nbsp;OUT:定时器/计数器输出端。<br />RESET:复位信号线。<br />VCC:+5V电源。<br />VSS:地。<br />8155内部结构包括两个8位并行输入/输出端口,一个6位并行输入/输出端口,256个字节的静态随机存取存储器RAM,一个地址锁存器,一个14位的定时器/计数器以及控制逻辑电路,各部件和存储器地址的选择由IO//M信号决定。<br />当IO//M=0(低电平)时,表示AD7~AD0输入的是存储器地址,寻址范围为00H~FF。<br />当IO//M=1(高电平)时,表示AD7~AD0输入的是I/O接口地址,其编码如下表所示。其中A7~A3可经译码器进行译码,产生片选信号/CE,内部寄存器和口地址由A2~A0给出。<table class=ubb cellspacing=0><TR><td class=ubb><br />AD7~AD0</td><td class=ubb><br />寄存器</td></TR><TR><td class=ubb><br />A7&nbsp;A6&nbsp;A5&nbsp;A4&nbsp;A3&nbsp;A2&nbsp;A1&nbsp;A0</td></TR><TR><td class=ubb><br />X&nbsp;X&nbsp;X&nbsp;X&nbsp;X&nbsp;0&nbsp;0&nbsp;0&nbsp;</td><td class=ubb><br />命令/状态寄存器(命令状态口)</td></TR><TR><td class=ubb><br />X&nbsp;X&nbsp;X&nbsp;X&nbsp;X&nbsp;0&nbsp;0&nbsp;1</td><td class=ubb><br />A口</td></TR><TR><td class=ubb><br />X&nbsp;X&nbsp;X&nbsp;X&nbsp;X&nbsp;0&nbsp;1&nbsp;0</td><td class=ubb><br />B口</td></TR><TR><td class=ubb><br />X&nbsp;X&nbsp;X&nbsp;X&nbsp;X&nbsp;0&nbsp;1&nbsp;1</td><td class=ubb><br />C口</td></TR><TR><td class=ubb><br />X&nbsp;X&nbsp;X&nbsp;X&nbsp;X&nbsp;1&nbsp;0&nbsp;0</td><td class=ubb><br />定时器低8位</td></TR><TR><td class=ubb><br />X&nbsp;X&nbsp;X&nbsp;X&nbsp;X&nbsp;1&nbsp;0&nbsp;1</td><td class=ubb><br />定时器高6位和2位计数方式位</td></TR></table><br /> <br /> <br />7&nbsp;6&nbsp;5&nbsp;4&nbsp;3&nbsp;2&nbsp;1&nbsp;0<br /> <br /> <br />PA:0-A口输入&nbsp;1-A口输出<br />PB:0-B口输入&nbsp;1-B口输出<br />PC2、PC1:<br />00=ALT1:A口,B口基本输入输出,C口输入<br />01=ALT2:A口,B口基本输入输出,C口输出<br />10=ALT3:A口选通输入输出,B口基本输入输出<br />PC0:AINTR,PC1:ABF,PC2:/ASTB,PC3-PC5输出<br />11=ALE4:A口,B口选通输入输出[BLOCKQUOTE]<br />PC0:AINTR,PC1:ABF,PC2:/ASTB,PC3:BINTR,PC4:BBF[BLOCKQUOTE][BLOCKQUOTE]<br />PC5:/BSTB[/BLOCKQUOTE][/BLOCKQUOTE][/BLOCKQUOTE]<br />IEA:1-允许A口中断;0-禁止A口中断<br />IEB:1-允许B口中断;0-禁止B口中断<br />TM2、TM1:<br />00:空操作,不影响计数操作<br />01:停止定时器计数<br />10:若定时器正在计数,计数长度减速为0停止计数<br />11:启动,置方式和长度后立即启动,若正在运行表示&nbsp;置新的方式和定时器长度,计数结束后,按新的方式和长度计数。<br />B、工作方式:<br />在8155的逻辑部件中,设置有一个控制命令寄存器和一个状态标志寄存器。8155的工作方式由CPU写入控制命令寄存器中的控制字来确定。控制命令寄存器只能写入不能读出,8位控制命令寄存器的低4位用来设置A口、B口和C口的工作方式。第4、5位用来确定A口、B口以选通过输入输出方式工作时是否允许中断请求。第6、7位用来设置定时器/计数器的操作。工作方式控制字的格式如上图所示:<br />8155的A口、B口&nbsp;可工作于基本I/O方式或选通方式,C口&nbsp;可作为输入输出口线,也可作为A口、B口&nbsp;选通方式工作时的状态控制信号线,其工作情况与8255方式0,方式1时大致相同,控制信号的含义也基本一样。<br />另外,在8155中还设置有一个状态标志寄存器,用来存放A口和B口的状态标志,状态标志寄存器的地址与命令寄存器地址相同,CPU只能读出,不能写入。状态标志寄存器的格式如下图所示,所以CPU可以直接查询。<table class=ubb cellspacing=0><TR><td class=ubb><br />D7</td><td class=ubb><br />D6</td><td class=ubb><br />D5</td><td class=ubb><br />D4</td><td class=ubb><br />D3</td><td class=ubb><br />D2</td><td class=ubb><br />D1</td><td class=ubb><br />D0</td></TR><TR><td class=ubb><br />X</td><td class=ubb><br />TMER</td><td class=ubb><br />INTEB</td><td class=ubb><br />BBF</td><td class=ubb><br />INTRB</td><td class=ubb><br />INTEA</td><td class=ubb><br />ABF</td><td class=ubb><br />INTR</td></TR></table><br /> <br />INTR:中断请求&nbsp;INTE:端口中断允许<br />BF:缓冲器满标志&nbsp;TIMER:定时中断<br />C、定时器/计数器<br />在8155中还设置有一个14位的定时器/计数器,可用来定时或对外部事件计数,CPU可通过程序选择计数长度和计方式。计数长度和计数方式由输入给计数寄存器计数控制字来确定,计数寄存器的格式如下:<br />TL(04H)<br />D7&nbsp;D0<br /> <table class=ubb cellspacing=0><TR><td class=ubb><br />T7</td><td class=ubb><br />T6</td><td class=ubb><br />T5</td><td class=ubb><br />T4</td><td class=ubb><br />T3</td><td class=ubb><br />T2</td><td class=ubb><br />T1</td><td class=ubb><br />T0</td></TR></table><br /> <br />TH(05H)<br />D7&nbsp;D0<br /> <table class=ubb cellspacing=0><TR><td class=ubb><br />M2</td><td class=ubb><br />M1</td><td class=ubb><br />T13</td><td class=ubb><br />T12</td><td class=ubb><br />T11</td><td class=ubb><br />T10</td><td class=ubb><br />T9</td><td class=ubb><br />T8</td></TR></table><br />复习要点:<br />要实现对8155的A口输出,要实现如下条件:<OL><li>CE=0&nbsp;(底电平),IO/M&nbsp;=1&nbsp;,写入8155的状态寄存器&nbsp;01H&nbsp;</li></OL>[BLOCKQUOTE]<br />2&nbsp;CE=0&nbsp;IO/M=1&nbsp;写入8155的A口&nbsp;0FFH<br />3&nbsp;CE=0&nbsp;IO/M=1&nbsp;写入8155的A口&nbsp;00H[/BLOCKQUOTE]<br />实验电路图:<br />T2.JPG<br /><img src="http://www.fosu.edu.cn/fas/shiyan/Image6.jpg"><br />T3JPG<br /><img src="http://www.fosu.edu.cn/fas/shiyan/Image5.jpg"><br />T9.JPG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(上图的74LS32或门电路,74HC138是译码器,当E3为高电平,E1,E2为低电平时选中译码)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.fosu.edu.cn/fas/shiyan/T9.jpg"><br /> <br />实验程序:<br />实验内容1:&nbsp;参考以下程序,根据原理图,分析过程。<br />ORG&nbsp;00H<br />SJMP&nbsp;STAR<br />ORG&nbsp;30H<br />STAR:MOV&nbsp;DPTR,#0900H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;选中8155的命令寄存器<br />MOV&nbsp;A,#01H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br />MOVx&nbsp;@DPTR,A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;命令寄存器设为01H=000000001B&nbsp;D0=1A口输出,D1=0B口输入。&nbsp;<br />MOV&nbsp;DPTR,#0901H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br />LOOP:&nbsp;MOV&nbsp;A,#0FFH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;A口输出0FFH<br />MOVX,@DPTR,A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br />MOV&nbsp;A,#00H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;A口输出○○H<br />MOVX,@DPTR,A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br />SJMP&nbsp;LOOP<br />END<br /> <br />实验内容2参考程序:<br />ORG&nbsp;00H<br />SJMP&nbsp;STAR<br />ORG&nbsp;30H<br />STAR:&nbsp;MOV&nbsp;DPTR,#0900H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;命令寄存器设为01H=000000001B&nbsp;D0=1A口输出,D1=0B口输入。<br />MOV&nbsp;A,#01H<br />MOV&nbsp;@DPTR,A&nbsp;<br />LOOP:&nbsp;MOV&nbsp;DPTR,#0902H<br />MOVX&nbsp;A,@DPTR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;读B口数据到A<br />MOV&nbsp;DPTR&nbsp;,#0901H<br />MOVX&nbsp;@DPTR,A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;将A口输出到A口<br />SJMP&nbsp;LOOP<br />END<br />思考题:如果要用B口做输出口,如何编制程序?<br />实验报告要求:<OL><OL><li>画出8155的连接电路(实验指导书P38页第一个图)&nbsp;<li>写出程序及每个语句的作用。&nbsp;</li></OL></OL>
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路输出. 所以我一直不理解!!!<br />大家不防讨论一下.程序是上海交大的一博士写的(没原程序),我一直搞不明白这里.
tyw 发表于 2007-9-9 18:58 | 显示全部楼层

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

不过这不是一个好的设计,CPU累,编程的人累,俺也看着累,不到万不得已不要走此下策.那个博士不咋地.哈哈
 楼主| andyding 发表于 2007-9-16 11:24 | 显示全部楼层

谢谢各位!

谢谢各位大侠!我知道了,也搞定了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

76

主题

788

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部