作者icetofux (豆腐)
看板Electronics
标题[问题] 我想用C51模拟串列式输出
时间Thu Dec 7 23:45:43 2006
我想用C51系列单晶片模拟资料串列式输出,买了一本书来看,并且大致上有了流程的草稿
,不过因为不是很确定某些细节能否依照自己的想法处理,书上也没有提供太多资料可参
考,所以想请大家帮我看看是否可行?
想要做到的功能:
先从PORT1(PORT1.0~PORT1.7)读入8-BIT的数值,接着经过运算处理,再从PORT2.1从8-BIT
数值的最低位元依序丢出。
我的想法是:
先读入8-BIT的数值,接着把此数值与0000 0001做AND,以保留最後一个BIT,接着把这个
BIT从PORT2.1丢出,然後对从PORT1读入的数值做右旋,并且重复AND及丢出的动作。
这是我的想像流程:
假设读入数值是 01010101
AND 00000001
得到 00000001(1-BIT的数值:1)
丢到PORT2.1 00000001(PORT2.1输出1)
右旋读入数值 10101010
AND 00000001
得到 00000000(1-BIT的数值:0)
丢到PORT2.1 00000000(PORT2.1输出0)
.
.
.
重复8次相同动作就可以把8-BIT的数值转换成1-BIT数值依序输出了。
读入数值并且存入暂存器中书上有很详尽的说明,所以我就省略了,假设读入的8-BIT数值
我存放在暂存器R1,我的推测的写法是:
MOV R0,#8 ;R0为右旋8次用的计数暂存器
MOV A,R1 ;R1是从PORT1读入的数值
LOOP: MOV R2,A ;将目前右旋结束後的值(8-BIT)保留於R2
ANL A,
#00000001 ;把A中的值与00000001做AND并丢回A
CALL CHECK ;进入CHECK副程式
MOV A,R2 ;将刚刚右旋结束的值(8-BIT)读回A
RR A ;右旋A中的值
DJNZ R0,LOOP ;计数暂存器R0的值-1如果不是0(还没转8次)回到LOOP
.
.
.
CHECK: JZ LOW ;如果暂存器A为0跳至LOW
JNZ HIGH ;如果暂存器A不为0(是1)跳至HIGH
HIGH: SEBT P2.1 ;让PORT2.1为1
LOW: CLR P2.1 ;让PORT2.1为0
RET ;回到主程式
但是有个地方我有点疑问,就是书上有介绍把8-BIT的数值丢入PORT2可以让8个LED依照数
值发光或不发光,但是像我这样把1-BIT的数值指定丢到PORT2中的2.1会被接受吗?另外
对晶片而言0000 0001或是0000 0000这两种资料,究竟是8-BIT还是1-BIT呢?
-
文有点长,谢谢你耐心的看完,仔细想想还真讽刺,以前专科上实习课总认为一辈子不会
用到这东西所以用得过且过的心态在上课,没想到事隔多年忽然需要用到,不但掏钱买了
本书,还只花了一周就把一学期的实习内容给硬看完,人生真是难以预料XD
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.230.83.74
1F:→ gpentacene:为何不直接用RS232串列输出脚(P3.x),你自己写,还要 12/08 06:44
2F:→ gpentacene:自己定义通讯协定。 12/08 06:45
3F:→ icetofux:因为硬体线路别人已经规划好了,板子也洗出来了, 12/08 08:35
4F:→ icetofux:所以我只能依照他的硬体设计下去写XD 12/08 08:37
5F:推 luckyBF:可以用MOV PORT2.1,ACC.0 的样子!! 12/08 11:11
6F:→ luckyBF:这样就只会定一只脚的bit为0或1了 12/08 11:12
7F:→ luckyBF:我之前写也是自己定协定~其实不难写XD 12/08 11:12
8F:→ icetofux:其实我不太了解什麽是协定,我只知道接收端有2个, 12/08 12:37
9F:→ icetofux:一个是DATA INPUT另一个是CLOCK 12/08 12:37
10F:→ icetofux:我卡在DATA INPUT的地方 12/08 12:38
11F:推 luckyBF:所以用我的方法看看!!我记得是可以没问题才是 12/08 12:39
12F:→ icetofux:我先来找找看您所提供的方法相关资料,谢谢~ 12/08 12:38
13F:推 luckyBF:ok~~看mov指令就行了XD~~不然的话!!就是用回文里的SETB 12/08 12:41
※ 编辑: icetofux 来自: 203.67.181.135 (12/08 17:09)
14F:→ icetofux:抱歉我找不到你说的方法 12/08 17:09
15F:→ icetofux:所以改用第2种方法:直接对PORT2.1做CLR或是SEBT 12/08 17:10
16F:→ icetofux:像这样子应该就可以避开输出资料是8-BIT的问题了对吗? 12/08 17:11
17F:推 luckyBF:是的!! 12/08 21:47