sbit p1_0=p1^o//管脚定义,可能是光耦三极管,错把字母o当成数字0
void main()
{
unsigned char i,j
SCON=0x00//串口工作方式0,允许接收
j=0x01//要从串口发送的数据
for()//死循环,相当于while(1)
{
p1_0=0
SBUF=j//j送到SBUF,从串口发送
while(!TI) { }//等待发送完成
p1_0=0TI=0//TI软件清0
for ( i=0i<=254i++) { }//延时
j=j*2//左移一位,即led灯往左轮流亮
if (j= =0x00) j=0x01//一轮左移完成,从头再次左移,循环左移
}
}
可以使用位 *** 作指令,使用并行口来模拟串行口,达到向“串入并出寄存器”输入数据的目的。发送ACC到4094的子程序如下:
SEND_ACC:
MOV R2, #8
S_LOOP:
RRC A A中的最低位移动到C
MOV P3.3, C 移动到D口
NOP
CLR P3.4 P3.4输出一个脉冲
NOP
NOP
SETB P3.4
DJNZ R2, S_LOOP
RET
完
#include <reg51.h>#include <intrins.h>
sbit DAT=P1^2
sbit CLK=P1^1
sbit STB=P1^0
void Delay500ms()
void OUT_4094(unsigned char n)
void main()
{
unsigned char i
for(i=0i++)
{
OUT_4094(i)
Delay500ms()
}
}
void Delay500ms() //@12.000MHz
{
unsigned char i, j, k
_nop_()
i = 4
j = 205
k = 187
do
{
do
{
while (--k)
} while (--j)
} while (--i)
}
void OUT_4094(unsigned char n)
{
unsigned char i
DAT=0
CLK=0
STB=0
for(i=0i<8++i)
{
CLK=0
DAT=(n>>(8-i-1))&0x01
_nop_()
CLK=1
CLK=0
}
STB=1
_nop_()
DAT=0
CLK=0
STB=0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)