发布时间 : 星期二 文章红外光通信装置-电赛报告更新完毕开始阅读37859a241fd9ad51f01dc281e53a580216fc50a4
----------------------------*/ voidIapEraseSector(WORD addr) {
IAP_CONTR = ENABLE_IAP; //Open IAP function, and set wait time
IAP_CMD = CMD_ERASE; //Set ISP/IAP/EEPROM ERASE command
IAP_ADDRL = addr; //Set ISP/IAP/EEPROM address low
IAP_ADDRH = addr>> 8; //Set ISP/IAP/EEPROM address high
IAP_TRIG = 0x5a; //Send trigger command1 (0x5a)
IAP_TRIG = 0xa5; //Send trigger command2 (0xa5)
_nop_(); //MCU will hold here until ISP/IAP/EEPROM operation complete
IapIdle(); }
void Delay100us() //@30.000MHz {
unsigned char i, j;
i = 3; j = 232; do {
while (--j); } while (--i); }
/*---------------------------- 擦除eeprom
----------------------------*/ voidEraseeeprom() {
uinti;
double a; a=0;
for(i = 0; i<90; i++) {
a = 512+a;
IapEraseSector(a); //Erase current sector }
21
}
/***********************************************sendmess**************************************/
/**********************************************************************************************/
/***************************************发送红外数据**************************/
void send(uchar date) {
uchari;
/*************发送验证信息*************/ TR0=0;
TH0 = 0xF1;
TL0 = 0x5A; //装入初值设置波延时为1.5ms D1 = 1; //发送1.5ms的高电平 TR0 = 1; //启动定时器0 while(!TF0); //等待 TF0 = 0;
TH0 = 0xEC; TL0 = 0x78;
D1 = 0; //发送2ms的低电平 while(!TF0); //等待 TF0 = 0;
/**************发送数据****************/ for(i=0;i<8;i++) {
TL0 = 0x1E; //设置定时初值 0.5MS TH0 = 0xFB; //设置定时初值 TR0=1; D1=1;
while(!TF0); TF0=0;
if(date&0x01) {
22
TL0 = 0x3C; //设置定时初值 1MS 发1 TH0 = 0xF6; //设置定时初值 } else {
TL0 = 0x24; //设置定时初值 0.6MS 发0
TH0 = 0xFA; //设置定时初值 TH0 = 0xFD; //0为窄的低电平,持续时间 0.6ms
}
D1=0;
while(!TF0); //等待 TF0 = 0; date=date>>1; }
TL0 = 0x1E; //设置定时初值 0.5MS TH0 = 0xFB; //设置定时初值 TR0=1; D1=1;
while(!TF0); TF0=0; D1=0;
/************************************结尾**************************/
TH0 = 0x0EC; //延时2ms TL0 = 0x078; TR0=1;
while(!TF0); TF0=0; TR0=0; }
voidsendtem(uchar date) {
uchari;
/*************发送验证信息*************/ TR0=0;
TH0 = 0xF1;
TL0 = 0x5A; //装入初值设置波延时为1.5ms D1 = 1; //发送1.5ms的高电平 TR0 = 1; //启动定时器0 while(!TF0); //等待 TF0 = 0;
TH0 = 0xE2; TL0 = 0xB4;
D1 = 0; //发送3ms的低电平
23
while(!TF0); //等待 TF0 = 0;
/**************发送数据****************/ for(i=0;i<8;i++) {
TL0 = 0x1E; //设置定时初值 0.5MS TH0 = 0xFB; //设置定时初值 TR0=1; D1=1;
while(!TF0); TF0=0;
if(date&0x01) {
TL0 = 0x3C; //设置定时初值 1MS 发1 TH0 = 0xF6; //设置定时初值 } else {
TL0 = 0x24; //设置定时初值 0.6MS 发0
TH0 = 0xFA; //设置定时初值 TH0 = 0xFD; 为窄的低电平,持续时间 0.6ms
}
D1=0;
while(!TF0); //等待 TF0 = 0; date=date>>1; }
TL0 = 0x1E; //设置定时初值 0.5MS TH0 = 0xFB; //设置定时初值 TR0=1; D1=1;
while(!TF0); TF0=0; D1=0;
/************************************结尾**************************/
TH0 = 0x0EC; //延时2ms TL0 = 0x078; TR0=1;
while(!TF0);
24
//0