一个简单的遥控器程序:
#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;
if(key1==0)
{
delay(20);
if(key1==0)
{
P60=0; //LED闪烁
delay(100);
P60=1;
data1=0x463F6B1A; //发送的数据
data2=0x020016DD; //发送的数据
P50=1; //报头
delay(5);
P50=0;
delay(1);
P50=1;
delay(1);
for(i=0;i<32;i++) //发送64位数据,P50为TX
{
PORT5|=data1;
data1>>=1;
delay(1);
}
for(i=0;i<32;i++)
{
PORT5|=data2;
data2>>=1;
delay(1);
}
P50=0;
}
}
}
void main()
{
init();
while(1)
{
keyscan();
delay(200);
}
}
void _intcall interrupt(void) @ int
{
// Write your code (inline assembly or C) here
//restore ACC
_asm
{
reti //tell Compiler to recover common registers here
SWAP 0X1F ;restore A
SWAPA 0X1F
}
}
void _intcall interrupt_l(void) @ 0x08:low_int 0
{
_asm
{
//save A --> 0x1F
MOV 0X1F,A ;backup A to 0x1F
}
}
出现的问题是:用示波器检测P50脚,报头是对的,可是后面的发送数据一直是高电平,真的不懂怎么回事了,希望能得到回复,谢谢!
|