|
发表于 2008-7-7 00:08:39
|
显示全部楼层
大侠,有空能帮我看看这个2262发送和接受的程序么,都接到一个AVR m16上的
#include "iom16v.h"
#include "macros.h"
#define setD0 (PORTB |=0b10000000)
#define clrD0 (PORTB &=0b01111111)
#define setD1 (PORTD |=0b00000100)
#define clrD1 (PORTD &=0b11111011)
#define setD2 (PORTD |=0b00000010)
#define clrD2 (PORTD &=0b11111101)
#define setD3 (PORTD |=0b00000001)
#define clrD3 (PORTD &=0b11111110)
#define D0 PINB &=(1<<5)
#define D1 PINB &=(1<<4)
#define D2 PINB &=(1<<3)
#define D3 PINB &=(1<<2)
int table[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
int scan[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
char data=0;
void PORT_init()
{
PORTA=0xff;
DDRA=0xff;
PORTB=0x00;
DDRB=0x81;
PORTC=0x00;
DDRC=0xff;
PORTD=0xf0;
DDRD=0x0f;
clrD0;
clrD1;
clrD2;
clrD3;
}
void timer0_init()
{SREG=0x80;
TIMSK|=(1<<TOIE0);//開TO溢出中斷;
TCCR0=0x07; //外部T0腳,上升沿驅動;
TCNT0=0xff;//初值
}
void INT1_init()
{SREG=0x80; /*使能全局中断*/
MCUCR=0x03;
MCUCR|=((1<<ISC11)|(1<<ISC10)); /*上升沿触发方式*/
GICR|=(1<<INT1);
}
#pragma interrupt_handler timer0_ovf:10
void timer0_ovf()
{int delay=1000000;/*
int i;
for(i=0;i<8;i++)
{
table=(~table);
}
*/
table[2]=~table[2];
receive();
TCNT0=0xff; //定時器重新賦初值
}
#pragma interrupt_handler int1:3
void int1()
{
table[1]=~table[1];
send();
GICR|=(1<<INT1);
GICR|=(1<<INT0);
GICR|=(1<<INT2);
}
void send()
{
setD0;
setD1;
setD2;
setD3;
}
void receive()
{int i,delay;
data=0;
if(D3) data++;
data<<1;
if(D2) data++;
data<<1;
if(D1) data++;
data<<1;
if(D0) data++;
if (data!=0)
{
table[3]=~table[3];
delay=1000000000;
while(delay--);
}
}
void main()
{
int i,delay=10000000;
PORT_init();
timer0_init();
INT1_init();
// while(delay--)
// delay=100000000;
// while(delay--)
while(1)
{for(i=0;i<8;i++)
{ delay=1000;
PORTA=scan;
PORTC=table;
while(delay--);
}
}
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|