作者icetofux (豆腐)
看板Electronics
标题Re: [问题] 我想用C51模拟串列式输出
时间Fri Dec 8 22:54:07 2006
※ 引述《icetofux (豆腐)》之铭言:
: 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 ;回到主程式
处理完资料输出後,接着问题就很简单了,我还需要一个clock output来让接收端
读取资料,依照硬体设计者的想法,传送资料主要是靠一个data output及一个clock
output来处理,当clock为上升缘时,则接收data output放出的资料,大致上像是这
样:
┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐
clock ─┘ └─┘ └─┘ └─┘ └─┘ └─┘ └─┘ └─┘ └──
0 0 1 1 0 0 1 1
data ┌───────┐ ┌───────┐
────────┘ └───────┘ └─
上面靠着大家的帮
忙,已经把data output(PORT2.1)架构描绘出来了,clock output基本上也不难,
若要产生方波,只需要重复对clock output做clr->delay->sebt->delay重复动作即
可,假设我的clock output为PORT2.0,程式大致上是:
CLOCK: CLR P2.0
CALL DELAY
SEBT P2.0
CALL DELAY
JMP CLOCK
即可产生从负缘开始,时间长2*DELAY的方波,然而程式整合上却发现了一点小问题:
程式的执行是由上往下执行的,我要如何让两个完全不同动作的程式片段同时执行呢?
先呼叫CLOCK程式段的话,如果不结束CLOCK就不会向下执行DATA OUTPUT程式段,如果
结束了CLOCK,资料又因为没有CLOCK而没办法被後端应用线路读入,请问有办法让两个
程式段"同时"进行吗?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.167.85.215