-
点亮流水灯只能用延时函数吗?
本人用delay函数可以成功完成流水灯,但是用for却失败了,问了C语言老师,他也不清楚,请问该如何修改呢?谢谢。/*成功*/。 #include
#include #define uint unsigned int #define uchar unsigned char uchar temp; void delay(); void main() { temp=0xfe; P1=temp; while(1) { temp=_crol_(temp,1); delay(); P1=temp; } } void delay() { uint x,y; for(x=1000;x>0;x--) for(y=200;y>0;y--); } /*失败*/ #include #include sbit p1_1=P1^0; #define uchar unsigned char//宏定义 #define uint2 unsigned int uchar temp;//字符型,要8位的,uchar是8位的 unsigned int a; void delay(uint2); void main() { temp=0xfe; p1_1=temp; while(1) { temp=_crol_(temp,1); uint2 x,y; a=50000; p1_1=temp; while(a--); for(x=130;x>0;x--) for(y=452;y>0;y--); a=50000; p1_1=temp; while(a--); for(x=130;x>0;x--) for(y=452;y>0;y--); } } 27210浏览量 13回复量 关注量 -
CPSW driver for ethercat sos
我在ti的AM5728上移植igh ethercat主站,内核版本是4.19.94-rt,移植完成后只接一个从站,发现dc抖动大约140us,怀疑和网络驱动有关。 因此想把ti的cpsw网络驱动改造成主站独占的,但是改造完成后发现无法建立通信,麻烦会的大 神或者之前改造过的大 神帮帮忙,万分感激!
10752浏览量 0回复量 关注量 -
DS18B20 请各位大佬帮忙看一下哪里不正确,
void delay_us(uint count)//进入一次该函数需要11.95us { while(count--); //执行一次cout-- 需要6.5us } //即delay_us(2)的延时时间为6.5*2+11.95 void delay_ms(uint y) { uint x; for(;y>0;y--) { for(x=110;x>0;x--); } } uchar DS18B20Init(void) //send reset and initialization command { uchar i=0; DS=0; delay_us(82);//复位,至少延时480us,挂在总线上的DS18B20将被复位 DS=1;//释放总线, i=0; while(DS)//延时等待82us { delay_ms(1); i++; if(i>5) { return 0;//初始化失败 } } return 1;//初始化成功 } void writebyte(uchar byte) //write a byte to ds18b20 { uchar j; for(j=0;j<8;j++) { DS=0;//每次写入一个数据之前需要把总线拉低 _nop_();//15us内要释放总线,产生写时序 DS=byte&0x01;//写入字节从最低位开始 delay_us(10);//延时不少于60us,不可以大于120us DS=1;//释放总线,准备下一次数据写入 byte>>=1; } } uchar readbyte(void) //读字节 { uchar i,j,byte; for(i=0;i<8;i++) { DS=0; _nop_(); _nop_();//延时至少1us,产生读时序 DS=1; delay_us(1);//释放总线 j=DS;//数据采集, delay_us(10);//延时不少于60us byte=(j<<7)|(byte>>1); delay_us(6); } return byte; } void main() { int i,temp; uchar L,H; while(1) { DS18B20Init();//初始化 delay_ms(1); writebyte(0xcc); // address all drivers on bus,发送跳跃ROM指令 writebyte(0x44); // initiates a single temperature conversion,发送温度转换指令 DS18B20Init();//主机和DS18B20做任何通讯前需要对其初始化 delay_ms(1); writebyte(0xcc);//发送跳跃ROM writebyte(0xbe);//读取DS18B20暂存器值 L=readbyte();//读低俗暂存器的值 H=readbyte();//读高速暂存器的值 i=H; i<<=8;//H移到高8位 i|=L;//L写入i的低字节 if(i<0) { i=i-1; temp=~i; } else { temp=i; } i=temp*0.0625*10000 ;//浮点型数据转换 Display(i); } }
1021浏览量 3回复量 关注量 -
新手51单片机流水灯程序问题请教
[color=#333333][backcolor=rgb(255, 255, 255)][font=微软雅黑][size=16px]#include
[/size][/font][/backcolor][/color] [color=#333333][backcolor=rgb(255, 255, 255)][font=微软雅黑][size=16px]#include [/size][/font][/backcolor][/color] [color=#333333][backcolor=rgb(255, 255, 255)][font=微软雅黑][size=16px]void delay(void) [/size][/font][/backcolor][/color] [color=#333333][backcolor=rgb(255, 255, 255)][font=微软雅黑][size=16px] {[/size][/font][/backcolor][/color] [color=#333333][backcolor=rgb(255, 255, 255)][font=微软雅黑][size=16px] unsigned int i,j,k; [/size][/font][/backcolor][/color] [color=#333333][backcolor=rgb(255, 255, 255)][font=微软雅黑][size=16px] for(i=20;i>0;i--) [/size][/font][/backcolor][/color] [color=#333333][backcolor=rgb(255, 255, 255)][font=微软雅黑][size=16px] for(j=20;j>0;j--)[/size][/font][/backcolor][/color] [color=#333333][backcolor=rgb(255, 255, 255)][font=微软雅黑][size=16px] for(k=248;k>0;k--);[/size][/font][/backcolor][/color] [color=#333333][backcolor=rgb(255, 255, 255)][font=微软雅黑][size=16px] }[/size][/font][/backcolor][/color] [color=#333333][backcolor=rgb(255, 255, 255)][font=微软雅黑][size=16px] void main() [/size][/font][/backcolor][/color] [color=#333333][backcolor=rgb(255, 255, 255)][font=微软雅黑][size=16px] {[/size][/font][/backcolor][/color] [color=#333333][backcolor=rgb(255, 255, 255)][font=微软雅黑][size=16px] int temp;[/size][/font][/backcolor][/color] [color=#333333][backcolor=rgb(255, 255, 255)][font=微软雅黑][size=16px] temp=0x01;[/size][/font][/backcolor][/color] [color=#333333][backcolor=rgb(255, 255, 255)][font=微软雅黑][size=16px] while(1)[/size][/font][/backcolor][/color] [color=#333333][backcolor=rgb(255, 255, 255)][font=微软雅黑][size=16px] [/size][/font][/backcolor][/color] [color=#333333][backcolor=rgb(255, 255, 255)][font=微软雅黑][size=16px] {[/size][/font][/backcolor][/color] [color=#333333][backcolor=rgb(255, 255, 255)][font=微软雅黑][size=16px] [/size][/font][/backcolor][/color] [color=#333333][backcolor=rgb(255, 255, 255)][font=微软雅黑][size=16px] P1=~temp;[/size][/font][/backcolor][/color] [color=#333333][backcolor=rgb(255, 255, 255)][font=微软雅黑][size=16px] delay();[/size][/font][/backcolor][/color] [color=#333333][backcolor=rgb(255, 255, 255)][font=微软雅黑][size=16px] P1=0xff;[/size][/font][/backcolor][/color] [color=#333333][backcolor=rgb(255, 255, 255)][font=微软雅黑][size=16px] temp=temp<<1;[/size][/font][/backcolor][/color] [color=#333333][backcolor=rgb(255, 255, 255)][font=微软雅黑][size=16px] if (temp==0x00)[/size][/font][/backcolor][/color] [color=#333333][backcolor=rgb(255, 255, 255)][font=微软雅黑][size=16px] temp=0x01;[/size][/font][/backcolor][/color] [color=#333333][backcolor=rgb(255, 255, 255)][font=微软雅黑][size=16px] }[/size][/font][/backcolor][/color] [color=#333333][backcolor=rgb(255, 255, 255)][font=微软雅黑][size=16px] [/size][/font][/backcolor][/color] [color=#333333][backcolor=rgb(255, 255, 255)][font=微软雅黑][size=16px] }[/size][/font][/backcolor][/color] [color=#333333][backcolor=rgb(255, 255, 255)][font=微软雅黑][size=16px]想要用[/size][/font][/backcolor][/color][color=rgb(65, 131, 196)][backcolor=rgb(255, 255, 255)][font=微软雅黑][size=16px]单片机[/size][/font][/backcolor][/color][color=#333333][backcolor=rgb(255, 255, 255)][font=微软雅黑][size=16px]左位移[/size][/font][/backcolor][/color][color=rgb(210, 34, 34)][backcolor=rgb(255, 255, 255)][font=微软雅黑][size=16px]指令[/size][/font][/backcolor][/color][color=#333333][backcolor=rgb(255, 255, 255)][font=微软雅黑][size=16px]实现流水灯,程序正确,调试也显示正确,在[/size][/font][/backcolor][/color][color=rgb(65, 131, 196)][backcolor=rgb(255, 255, 255)][font=微软雅黑][size=16px]单片[/size][/font][/backcolor][/color][color=#333333][backcolor=rgb(255, 255, 255)][font=微软雅黑][size=16px]机上运行了一遍也是可以实现,问题在于,当第八个[/size][/font][/backcolor][/color][color=rgb(65, 131, 196)][backcolor=rgb(255, 255, 255)][font=微软雅黑][size=16px]LED[/size][/font][/backcolor][/color][color=#333333][backcolor=rgb(255, 255, 255)][font=微软雅黑][size=16px]熄灭后,要等很长时间后第一个LED才会重新亮起,[/size][/font][/backcolor][/color] 1238浏览量 8回复量 关注量 -
M0A21是什么系列啊?
[attach]1542080[/attach] BSP for M0A21 Series MCU 但是在单片机列表没找到这个系列,这应该是M0内核的, 但是具体是哪个系列呢。
806浏览量 5回复量 关注量