一、想要在学习的时候随机生成一个数据发送给接收机,生成的数据不能重复且生成后不变,类似滚动码,有哪些方法?
二、程序问题:下面的程序运行结果是64位数据的前56位正常,最后8位却全为0。我定义4个unsigned int变量用来发送,结果是编译时出现警告,说unsigned short转unsigned int溢出,示波器测到的结果是每次发的数据只有前8位,定义8个unsigned char变量后每次发送8位结果又正常,感觉是编译器有问题,可是又不知道怎么改,请大家指导指导,感激不尽!
#include "EM78P153K.H"
#define DISI() _asm{disi}
#define ENI() _asm{eni}
#define SLEP() _asm{slep}
#define NOP() _asm{nop}
#define WDTC() _asm{wdtc}
#define uchar unsigned char
#define uint unsigned int
#define key1 P65
#define key2 P64
#define key3 P63
#define key4 P61
unsigned long int data1;
unsigned long int data2;
void init()
{
P5CR=0; //P5口全为输出
P6CR=0X3A; //P61、63、64、65为输入,其他为输出
PORT5=0; //PORT5全0
PORT6=0XFF; //PORT6全1
WDTCR=0; //WDT控制寄存器,禁止WDT,P60作I/O口
IMR=0; //中断屏蔽寄存器,禁止全部中断
DISI(); //关总中断
}
void delay(uint z) //ms级延时
{
uint x,y;
for(x=z;x>0;x--)
for(y=120;y>0;y--);
}
void keyscan()
{
uchar i,j;
if(key1==0)
{
delay(20);
if(key1==0)
{
P60=0; //LED闪烁
delay(200);
P60=1;
for(j=0;j<6;j++) //发送6次
{
data1=0x38D6FC62; //将发送的数据
data2=0xBB680040;
P50=1; //报头
delay(9);
P50=0;
delay(1);
P50=1;
delay(1);
for(i=0;i<32;i++) //发送64位数据,P50作TX
{
P50=0;
PORT5|=data1;
data1>>=1;
delay(1);
}
for(i=0;i<32;i++)
{
P50=0;
PORT5|=data2;
data2>>=1;
delay(1);
}
}
//发送另一个64位数据
P50=0;
delay(9);
for(j=0;j<6;j++)
{
data1=0x38D6FC62;
data2=0xF0920040;
P50=1;
delay(9);
P50=0;
delay(1);
P50=1;
delay(1);
for(i=0;i<32;i++)
{
P50=0;
PORT5|=data1;
data1>>=1;
delay(1);
}
for(i=0;i<32;i++)
{
P50=0;
PORT5|=data2;
data2>>=1;
delay(1);
}
}
}
P50=0;
}
}
void main()
{
init();
while(1)
{
keyscan();
delay(200);
}
}
|