本文目录一览:
- 1、单片机串口发送数据用c语言编写,放在主函数里就没问题,单提出来写成子函数,发送数据就不完整?
- 2、单片机程序:外部RAM与内部RAM数据传送程序(汇编、和C语言)
- 3、单片机C语言数组传送,
- 4、单片机C语言函数参数传递问题
- 5、大神,最近在网上看了很多您的回答,想问下您52单片机无线传输,数据接收储存转发C语言怎么编写啊?
单片机串口发送数据用c语言编写,放在主函数里就没问题,单提出来写成子函数,发送数据就不完整?
put_char(LEN1);数据长度
put_string(table1);数据
这两条语句编译能通过吗?后面的汉字不加//,这就不是注释。
单片机程序:外部RAM与内部RAM数据传送程序(汇编、和C语言)
#includeat89x51.h
#includeabsacc.h
void main(void) //C
{
unsigned char var;
var=XBYTE[0x2000];
XBYTE[0x2000]=var;
while(1);
}
org 00h ;汇编
sjmp main
org 40h
main:mov dptr,#2000h
movx a,@dptr
movx @dptr,a
sjmp $
end
我写的两个都是用在51上的
51加#includeat89x51.h
52加#includeat89x52.h
汇编不变。
单片机C语言数组传送,
加按键抬起检测就可以了
if(temp!=0xf0)
{
temp=P3;
while(temp!=0x0f)//按键不抬起,一直读P3
{
temp=P3;
temp=temp0x0f;
}
switch(temp)
{
case 0xee:..........
我觉得还可以更简单 while(P3!=0xfe);
单片机C语言函数参数传递问题
因为str的定义为unsigned char型数组,作为变量的str是指向这个数组首地址的指针,所以主程序引用str时是告诉子程序传入数组首地址;对于子程序必须知道这是一个数组首指针,用
unsigned char *修饰传入的参数或写成unsigned char str[]均是可以的。
大神,最近在网上看了很多您的回答,想问下您52单片机无线传输,数据接收储存转发C语言怎么编写啊?
#include REGX52.h
#define uchar unsigned char
uchar data IRcode[4]; //定义一个4字节的数组用来存储代码
uchar CodeTemp; //编码字节缓存变量
uchar i,j,k; //延时用的循环变量
sbit IRsignal=P3^2; //HS0038接收头OUT端直接连P3.2(INT0)
/**************************延时0.9ms子程序**********************/
void Delay0_9ms(void)
{uchar j,k;
for(j=18;j0;j--)
for(k=20;k0;k--) ;
}
/***************************延时1ms子程序**********************/
void Delay1ms(void)
{uchar i,j;
for(i=2;i0;i--)
for(j=230;j0;j--) ;
}
/***************************延时4.5ms子程序**********************/
void Delay4_5ms(void)
{uchar i,j;
for(i=10;i0;i--)
for(j=225;j0;j--) ;
}
/**************************** 延时子程序 ************************/
void Delay(void)
{uchar i,j,k;
for(i=200;i0;i--)
for(j=200;j0;j--)
for(k=3;k0;k--) ;
}
/************************中断0解码服务子程序**********************/
void int0(void) interrupt 0 using 2
{
EA=0;
for(k=0;k10;k++)
{Delay0_9ms();
if (IRsignal==1) //如果0.9ms后IRsignal=1,说明不是引导码
{k=10;break;}
else if(k==9) //如果持续了10×0.9ms=9ms的低电平,说明是引导码
{while(IRsignal==0);
Delay4_5ms(); //跳过持续4.5ms的高电平
for(i=0;i4;i++) //分别读取4个字节
{for(j=1;j=8;j++) //每个字节8个bit的判断
{ while(IRsignal==0); //等待上升沿
Delay0_9ms(); //从上升沿那一时刻开始延时0.9ms,再判断IRsignal
if(IRsignal==1) //如果IRsignal是"1",则向右移入一位"1"
{Delay1ms();
CodeTemp=CodeTemp|0x80;
if(j8) CodeTemp=CodeTemp1;
}
else
if(j8)CodeTemp=CodeTemp1;//如果IRsignal是"0",则向右移一位,自动补"0"
}
IRcode[i]=CodeTemp;
CodeTemp=0;
}
for(i=0;i4;i++) //通过串口将代码发出
{
SBUF=IRcode[i];
while(!TI); //等待一个字节发送完毕
TI=0;
}
Delay();
}
}
EA=1;
}
/***********************串口初始化程序*********************/
void initUart(void)
{
TMOD|=0x20;
SCON=0x50;
PCON|=0x80;
TH1=0xff; //57600bps @ 11.0592MHz
TL1=0xff;
TR1=1;
}
/**************************主程序*************************/
void main()
{ initUart();
IT0=1; //INT0为负边沿触发, (1:负边沿触发,0:低电平触发)
EX0=1; //外部中断INT0开, (1:开, 0:关 )
EA=1; //开所有中断
CodeTemp=0; //初始化红外编码字节缓存变量
Delay();
while(1);
}