- 打卡等级:初来乍到
- 打卡总天数:1
- 最近打卡:2025-03-17 16:39:04
中级会员
- 积分
- 253
|
下图为二维码扫码器
【声明】此程序仅用于学习与参考!
*********************************************************************/
#include "hedder\\STC12C5A60S2.h"
#include"hedder\\DODI.h"
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
/*
sfr IAP_DATA = 0xC2;
sfr IAP_ADDRH = 0xC3;
sfr IAP_ADDRL = 0xC4;
sfr IAP_CMD = 0xC5;
sfr IAP_TRIG = 0xC6;
sfr IAP_CONTR = 0xC7;
sfr P4 = 0xC0;
sbit IN1=P2^0;
sbit IN2=P2^1;
sbit IN3=P2^2;
sbit IN4=P2^3;
sbit OUT1=P0^0;
sbit OUT2=P0^1;
sbit OUT3=P0^2;
sbit OUT4=P0^3;
sbit OUT10=P0^7;
*/
bit bz1=0;
bit bz2=0;
bit bz3=0;
bit bz4=0;
bit bz5=0;
bit bz6=0;
bit bz7=0;
bit bz8=0;
bit bz9=0;
bit bz10=0;
bit bz11=0;
bit bz12=0;
bit bz13=0;
bit bz14=0;
bit bz15=0;
bit bz16=0;
bit bz17=0;
bit bz18=0;
bit bz19=0;
bit bz20=0;
uchar scdt;
//定义Flash 操作等待时间及允许IAP/ISP/EEPROM 操作的常数
//#define ENABLE_ISP 0x80 //系统工作时钟<30MHz 时,对IAP_CONTR 寄存器设置此值
//#define ENABLE_ISP 0x81 //系统工作时钟<24MHz 时,对IAP_CONTR 寄存器设置此值
#define ENABLE_ISP 0x82 //系统工作时钟<20MHz 时,对IAP_CONTR 寄存器设置此值
//#define ENABLE_ISP 0x83 //系统工作时钟<12MHz 时,对IAP_CONTR 寄存器设置此值
//#define ENABLE_ISP 0x84 //系统工作时钟<6MHz 时,对IAP_CONTR 寄存器设置此值
//#define ENABLE_ISP 0x85 //系统工作时钟<3MHz 时,对IAP_CONTR 寄存器设置此值
//#define ENABLE_ISP 0x86 //系统工作时钟<2MHz 时,对IAP_CONTR 寄存器设置此值
//#define ENABLE_ISP 0x87 //系统工作时钟<1MHz 时,对IAP_CONTR 寄存器设置此值
uchar dat;
uchar add;
uchar t,r,ii;
bit flag_zx=0;
uchar receBuf[16];//接收缓冲区
bit write=0;
uchar k=100;
bit qcbz=0;
uchar xdata tmz1[160];//接收缓冲区
//uchar tmz2[64];//接收缓冲区
uchar y;
/********************************************************************
函数声明
*********************************************************************/
union union_temp16
{
uint un_temp16;
uchar un_temp8[2];
}
my_unTemp16;
uchar Byte_Read(uint add); //读一字节,调用前需打开IAP 功能
void Byte_Program(uint add, uchar ch); //字节编程,调用前需打开IAP 功能
void Sector_Erase(uint add); //擦除扇区
void IAP_Disable();
/********************************************************************
串口初始化
*********************************************************************/
void init(void)
{
TMOD = 0x20; //定时器1产生波特率
SCON = 0x50; //方式2,8位数据,波特率可变
PCON = 0x00; //不倍增波特率
AUXR = 0x00; //1T工作方式,不使用波特率发生器
IP = 0x00; //优先级默认
TH1 = TL1 = 0xfd; //波特率 9600
TR1 = 1; //启动定时器产生波特率
EA = 1; ES = 1; //开总中断,开串口中断
}
/*****************清空发送缓冲区*************************/
void clear_receBuf()
{
uchar i;
for(i=0;i<8;i++)
{
receBuf=0;
}
}
/********************************************************************
延时函数
*********************************************************************/
void delay(uchar t)
{
uchar i,j;
for(i=0;i<t;i++)
{
for(j=130;j>0;j--);
{ ;
}
}
}
void KEY()
{
if((IN1==0)&&(bz1==0)){delay(k);if(IN1==0)
{
r=0;
bz1=1;qcbz=1;
}}
if((bz1==1)&&(IN1==1)){delay(k);if(IN1==1)
{
tmz1[0]=receBuf[0];
tmz1[1]=receBuf[1];
tmz1[2]=receBuf[2];
tmz1[3]=receBuf[3];
tmz1[4]=receBuf[4];
tmz1[5]=receBuf[5];
tmz1[6]=receBuf[6];
tmz1[7]=receBuf[7];
write=1;bz1=0;qcbz=0;r=0;
}}
if((IN2==0)&&(bz2==0)){delay(k);if(IN2==0){r=0;bz2=1;qcbz=1;}}
if((bz2==1)&&(IN2==1)){delay(k);if(IN2==1)
{
tmz1[8]=receBuf[0];
tmz1[9]=receBuf[1];
tmz1[10]=receBuf[2];
tmz1[11]=receBuf[3];
tmz1[12]=receBuf[4];
tmz1[13]=receBuf[5];
tmz1[14]=receBuf[6];
tmz1[15]=receBuf[7];
write=1;bz2=0;qcbz=0;r=0;
}}
if((IN3==0)&&(bz3==0)){delay(k);if(IN3==0){r=0;bz3=1;qcbz=1;}}
if((bz3==1)&&(IN3==1)){delay(k);if(IN3==1)
{
tmz1[16]=receBuf[0];
tmz1[17]=receBuf[1];
tmz1[18]=receBuf[2];
tmz1[19]=receBuf[3];
tmz1[20]=receBuf[4];
tmz1[21]=receBuf[5];
tmz1[22]=receBuf[6];
tmz1[23]=receBuf[7];
write=1;bz3=0;qcbz=0;r=0;
}}
if((IN4==0)&&(bz4==0)){delay(k);if(IN4==0){r=0;bz4=1;qcbz=1;}}
if((bz4==1)&&(IN4==1)){delay(k);if(IN4==1)
{
tmz1[24]=receBuf[0];
tmz1[25]=receBuf[1];
tmz1[26]=receBuf[2];
tmz1[27]=receBuf[3];
tmz1[28]=receBuf[4];
tmz1[29]=receBuf[5];
tmz1[30]=receBuf[6];
tmz1[31]=receBuf[7];
write=1;bz4=0;qcbz=0;r=0;
}}
if((IN5==0)&&(bz5==0)){delay(k);if(IN5==0){r=0;bz5=1;qcbz=1;}}
if((bz5==1)&&(IN5==1)){delay(k);if(IN5==1)
{
tmz1[32]=receBuf[0];
tmz1[33]=receBuf[1];
tmz1[34]=receBuf[2];
tmz1[35]=receBuf[3];
tmz1[36]=receBuf[4];
tmz1[37]=receBuf[5];
tmz1[38]=receBuf[6];
tmz1[39]=receBuf[7];
write=1;bz5=0;qcbz=0;r=0;
}}
if((IN6==0)&&(bz6==0)){delay(k);if(IN6==0){r=0;bz6=1;qcbz=1;}}
if((bz6==1)&&(IN6==1)){delay(k);if(IN6==1)
{
tmz1[40]=receBuf[0];
tmz1[41]=receBuf[1];
tmz1[42]=receBuf[2];
tmz1[43]=receBuf[3];
tmz1[44]=receBuf[4];
tmz1[45]=receBuf[5];
tmz1[46]=receBuf[6];
tmz1[47]=receBuf[7];
write=1;bz6=0;qcbz=0;r=0;
}}
if((IN7==0)&&(bz7==0)){delay(k);if(IN7==0){r=0;bz7=1;qcbz=1;}}
if((bz7==1)&&(IN7==1)){delay(k);if(IN7==1)
{
tmz1[48]=receBuf[0];
tmz1[49]=receBuf[1];
tmz1[50]=receBuf[2];
tmz1[51]=receBuf[3];
tmz1[52]=receBuf[4];
tmz1[53]=receBuf[5];
tmz1[54]=receBuf[6];
tmz1[55]=receBuf[7];
write=1;bz7=0;qcbz=0;r=0;
}}
if((IN8==0)&&(bz8==0)){delay(k);if(IN8==0){r=0;bz8=1;qcbz=1;}}
if((bz8==1)&&(IN8==1)){delay(k);if(IN8==1)
{
tmz1[56]=receBuf[0];
tmz1[57]=receBuf[1];
tmz1[58]=receBuf[2];
tmz1[59]=receBuf[3];
tmz1[60]=receBuf[4];
tmz1[61]=receBuf[5];
tmz1[62]=receBuf[6];
tmz1[63]=receBuf[7];
write=1;bz8=0;qcbz=0;r=0;
}}
if((IN9==0)&&(bz9==0)){delay(k);if(IN9==0){r=0;bz9=1;qcbz=1;}}
if((bz9==1)&&(IN9==1)){delay(k);if(IN9==1)
{
tmz1[64]=receBuf[0];
tmz1[65]=receBuf[1];
tmz1[66]=receBuf[2];
tmz1[67]=receBuf[3];
tmz1[68]=receBuf[4];
tmz1[69]=receBuf[5];
tmz1[70]=receBuf[6];
tmz1[71]=receBuf[7];
write=1;bz9=0;qcbz=0;r=0;
}}
if((IN10==0)&&(bz10==0)){delay(k);if(IN10==0){r=0;bz10=1;qcbz=1;}}
if((bz10==1)&&(IN10==1)){delay(k);if(IN10==1)
{
tmz1[72]=receBuf[0];
tmz1[73]=receBuf[1];
tmz1[74]=receBuf[2];
tmz1[75]=receBuf[3];
tmz1[76]=receBuf[4];
tmz1[77]=receBuf[5];
tmz1[78]=receBuf[6];
tmz1[79]=receBuf[7];
write=1;bz10=0;qcbz=0;r=0;
}}
if((IN11==0)&&(bz11==0)){delay(k);if(IN11==0){r=0;bz11=1;qcbz=1;}}
if((bz11==1)&&(IN11==1)){delay(k);if(IN11==1)
{
tmz1[80]=receBuf[0];
tmz1[81]=receBuf[1];
tmz1[82]=receBuf[2];
tmz1[83]=receBuf[3];
tmz1[84]=receBuf[4];
tmz1[85]=receBuf[5];
tmz1[86]=receBuf[6];
tmz1[87]=receBuf[7];
write=1;bz11=0;qcbz=0;r=0;
}}
if((IN12==0)&&(bz12==0)){delay(k);if(IN12==0){r=0;bz12=1;qcbz=1;}}
if((bz12==1)&&(IN12==1)){delay(k);if(IN12==1)
{
tmz1[88]=receBuf[0];
tmz1[89]=receBuf[1];
tmz1[90]=receBuf[2];
tmz1[91]=receBuf[3];
tmz1[92]=receBuf[4];
tmz1[93]=receBuf[5];
tmz1[94]=receBuf[6];
tmz1[95]=receBuf[7];
write=1;bz12=0;qcbz=0;r=0;
}}
if((IN13==0)&&(bz13==0)){delay(k);if(IN13==0){r=0;bz13=1;qcbz=1;}}
if((bz13==1)&&(IN13==1)){delay(k);if(IN13==1)
{
tmz1[96]=receBuf[0];
tmz1[97]=receBuf[1];
tmz1[98]=receBuf[2];
tmz1[99]=receBuf[3];
tmz1[100]=receBuf[4];
tmz1[101]=receBuf[5];
tmz1[102]=receBuf[6];
tmz1[103]=receBuf[7];
write=1;bz13=0;qcbz=0;r=0;
}}
if((IN14==0)&&(bz14==0)){delay(k);if(IN14==0){r=0;bz14=1;qcbz=1;}}
if((bz14==1)&&(IN14==1)){delay(k);if(IN14==1)
{
tmz1[104]=receBuf[0];
tmz1[105]=receBuf[1];
tmz1[106]=receBuf[2];
tmz1[107]=receBuf[3];
tmz1[108]=receBuf[4];
tmz1[109]=receBuf[5];
tmz1[110]=receBuf[6];
tmz1[111]=receBuf[7];
write=1;bz14=0;qcbz=0;r=0;
}}
if((IN15==0)&&(bz15==0)){delay(k);if(IN15==0){r=0;bz15=1;qcbz=1;}}
if((bz15==1)&&(IN15==1)){delay(k);if(IN15==1)
{
tmz1[112]=receBuf[0];
tmz1[113]=receBuf[1];
tmz1[114]=receBuf[2];
tmz1[115]=receBuf[3];
tmz1[116]=receBuf[4];
tmz1[117]=receBuf[5];
tmz1[118]=receBuf[6];
tmz1[119]=receBuf[7];
write=1;bz15=0;qcbz=0;r=0;
}}
if((IN16==0)&&(bz16==0)){delay(k);if(IN16==0){r=0;bz16=1;qcbz=1;}}
if((bz16==1)&&(IN16==1)){delay(k);if(IN16==1)
{
tmz1[120]=receBuf[0];
tmz1[121]=receBuf[1];
tmz1[122]=receBuf[2];
tmz1[123]=receBuf[3];
tmz1[124]=receBuf[4];
tmz1[125]=receBuf[5];
tmz1[126]=receBuf[6];
tmz1[127]=receBuf[7];
write=1;bz16=0;qcbz=0;r=0;
}}
if((IN17==0)&&(bz17==0)){delay(k);if(IN17==0){r=0;bz17=1;qcbz=1;}}
if((bz17==1)&&(IN17==1)){delay(k);if(IN17==1)
{
tmz1[128]=receBuf[0];
tmz1[129]=receBuf[1];
tmz1[130]=receBuf[2];
tmz1[131]=receBuf[3];
tmz1[132]=receBuf[4];
tmz1[133]=receBuf[5];
tmz1[134]=receBuf[6];
tmz1[135]=receBuf[7];
write=1;bz17=0;qcbz=0;r=0;
}}
if((IN18==0)&&(bz18==0)){delay(k);if(IN18==0){r=0;bz18=1;qcbz=1;}}
if((bz18==1)&&(IN18==1)){delay(k);if(IN18==1)
{
tmz1[136]=receBuf[0];
tmz1[137]=receBuf[1];
tmz1[138]=receBuf[2];
tmz1[139]=receBuf[3];
tmz1[140]=receBuf[4];
tmz1[141]=receBuf[5];
tmz1[142]=receBuf[6];
tmz1[143]=receBuf[7];
write=1;bz18=0;qcbz=0;r=0;
}}
if((IN19==0)&&(bz19==0)){delay(k);if(IN19==0){r=0;bz19=1;qcbz=1;}}
if((bz19==1)&&(IN19==1)){delay(k);if(IN19==1)
{
tmz1[144]=receBuf[0];
tmz1[145]=receBuf[1];
tmz1[146]=receBuf[2];
tmz1[147]=receBuf[3];
tmz1[148]=receBuf[4];
tmz1[149]=receBuf[5];
tmz1[150]=receBuf[6];
tmz1[151]=receBuf[7];
write=1;bz19=0;qcbz=0;r=0;
}}
if((IN20==0)&&(bz20==0)){delay(k);if(IN20==0){r=0;bz20=1;qcbz=1;}}
if((bz20==1)&&(IN20==1)){delay(k);if(IN20==1)
{
tmz1[152]=receBuf[0];
tmz1[153]=receBuf[1];
tmz1[154]=receBuf[2];
tmz1[155]=receBuf[3];
tmz1[156]=receBuf[4];
tmz1[157]=receBuf[5];
tmz1[158]=receBuf[6];
tmz1[159]=receBuf[7];
write=1;bz20=0;qcbz=0;r=0;
}}
}
/********************************************************************
主函数
*********************************************************************/
void main()
{
delay(k);
P4SW|=0x70;//配置P4.4为IO口
P4M0&=0x00;
P4M1&=0x00;
for (y=0; y<160; y++)
{
tmz1[y] = Byte_Read(y);
}
init(); //串口初始化
while(1)
{
KEY();
if(write==1)
{
write=0;
Sector_Erase(0);
for (y=0; y<160; y++)
{
Byte_Program(y, tmz1[y]);
}
qcbz=0;clear_receBuf();r=0;
}
if((r!=0)&&(qcbz==0)){delay(k);delay(k);delay(k);clear_receBuf();r=0;}
}
}
/********************************************************************
串口一 发送接收中断函数
*********************************************************************/
void uart_isr() interrupt 4
{
if(RI) //如果有接收
{
RI=0; //接收标志清零
receBuf[r++&0x0F]=SBUF; //把接受的数据存储到BUT数组中
if(r>=8)
{
flag_zx=1;
}
}
if(flag_zx==1)
{
flag_zx=0;
if((receBuf[0]==tmz1[0])&&(receBuf[1]==tmz1[1])&&(receBuf[2]==tmz1[2])&&(receBuf[3]==tmz1[3])&&(receBuf[4]==tmz1[4])&&(receBuf[5]==tmz1[5])&&(receBuf[6]==tmz1[6])&&(receBuf[7]==tmz1[7]))
{
OUT1=0;delay(k);delay(k);OUT1=1;clear_receBuf();r=0;
}
else if((receBuf[0]==tmz1[8])&&(receBuf[1]==tmz1[9])&&(receBuf[2]==tmz1[10])&&(receBuf[3]==tmz1[11])&&(receBuf[4]==tmz1[12])&&(receBuf[5]==tmz1[13])&&(receBuf[6]==tmz1[14])&&(receBuf[7]==tmz1[15]))
{
OUT2=0;delay(k);delay(k);OUT2=1;clear_receBuf();r=0;
}
else if((receBuf[0]==tmz1[16])&&(receBuf[1]==tmz1[17])&&(receBuf[2]==tmz1[18])&&(receBuf[3]==tmz1[19])&&(receBuf[4]==tmz1[20])&&(receBuf[5]==tmz1[21])&&(receBuf[6]==tmz1[22])&&(receBuf[7]==tmz1[23]))
{
OUT3=0;delay(k);delay(k);OUT3=1;clear_receBuf();r=0;
}
else if((receBuf[0]==tmz1[24])&&(receBuf[1]==tmz1[25])&&(receBuf[2]==tmz1[26])&&(receBuf[3]==tmz1[27])&&(receBuf[4]==tmz1[28])&&(receBuf[5]==tmz1[29])&&(receBuf[6]==tmz1[30])&&(receBuf[7]==tmz1[31]))
{
OUT4=0;delay(k);delay(k);OUT4=1;clear_receBuf();r=0;
}
else if((receBuf[0]==tmz1[32])&&(receBuf[1]==tmz1[33])&&(receBuf[2]==tmz1[34])&&(receBuf[3]==tmz1[35])&&(receBuf[4]==tmz1[36])&&(receBuf[5]==tmz1[37])&&(receBuf[6]==tmz1[38])&&(receBuf[7]==tmz1[39]))
{
OUT5=0;delay(k);delay(k);OUT5=1;clear_receBuf();r=0;
}
else if((receBuf[0]==tmz1[40])&&(receBuf[1]==tmz1[41])&&(receBuf[2]==tmz1[42])&&(receBuf[3]==tmz1[43])&&(receBuf[4]==tmz1[44])&&(receBuf[5]==tmz1[45])&&(receBuf[6]==tmz1[46])&&(receBuf[7]==tmz1[47]))
{
OUT6=0;delay(k);delay(k);OUT6=1;clear_receBuf();r=0;
}
else if((receBuf[0]==tmz1[48])&&(receBuf[1]==tmz1[49])&&(receBuf[2]==tmz1[50])&&(receBuf[3]==tmz1[51])&&(receBuf[4]==tmz1[52])&&(receBuf[5]==tmz1[53])&&(receBuf[6]==tmz1[54])&&(receBuf[7]==tmz1[55]))
{
OUT7=0;delay(k);delay(k);OUT7=1;clear_receBuf();r=0;
}
else if((receBuf[0]==tmz1[56])&&(receBuf[1]==tmz1[57])&&(receBuf[2]==tmz1[58])&&(receBuf[3]==tmz1[59])&&(receBuf[4]==tmz1[60])&&(receBuf[5]==tmz1[61])&&(receBuf[6]==tmz1[62])&&(receBuf[7]==tmz1[63]))
{
OUT8=0;delay(k);delay(k);OUT8=1;;clear_receBuf();r=0;
}
else if((receBuf[0]==tmz1[64])&&(receBuf[1]==tmz1[65])&&(receBuf[2]==tmz1[66])&&(receBuf[3]==tmz1[67])&&(receBuf[4]==tmz1[68])&&(receBuf[5]==tmz1[69])&&(receBuf[6]==tmz1[70])&&(receBuf[7]==tmz1[71]))
{
OUT9=0;delay(k);delay(k);OUT9=1;clear_receBuf();r=0;
}
else if((receBuf[0]==tmz1[72])&&(receBuf[1]==tmz1[73])&&(receBuf[2]==tmz1[74])&&(receBuf[3]==tmz1[75])&&(receBuf[4]==tmz1[76])&&(receBuf[5]==tmz1[77])&&(receBuf[6]==tmz1[78])&&(receBuf[7]==tmz1[79]))
{
OUT10=0;delay(k);delay(k);OUT10=1;clear_receBuf();r=0;
}
else if((receBuf[0]==tmz1[80])&&(receBuf[1]==tmz1[81])&&(receBuf[2]==tmz1[82])&&(receBuf[3]==tmz1[83])&&(receBuf[4]==tmz1[84])&&(receBuf[5]==tmz1[85])&&(receBuf[6]==tmz1[86])&&(receBuf[7]==tmz1[87]))
{
OUT11=0;delay(k);delay(k);OUT11=1;clear_receBuf();r=0;
}
else if((receBuf[0]==tmz1[88])&&(receBuf[1]==tmz1[89])&&(receBuf[2]==tmz1[90])&&(receBuf[3]==tmz1[91])&&(receBuf[4]==tmz1[92])&&(receBuf[5]==tmz1[93])&&(receBuf[6]==tmz1[94])&&(receBuf[7]==tmz1[95]))
{
OUT12=0;delay(k);delay(k);OUT12=1;clear_receBuf();r=0;
}
else if((receBuf[0]==tmz1[96])&&(receBuf[1]==tmz1[97])&&(receBuf[2]==tmz1[98])&&(receBuf[3]==tmz1[99])&&(receBuf[4]==tmz1[100])&&(receBuf[5]==tmz1[101])&&(receBuf[6]==tmz1[102])&&(receBuf[7]==tmz1[103]))
{
OUT13=0;delay(k);delay(k);OUT13=1;clear_receBuf();r=0;
}
else if((receBuf[0]==tmz1[104])&&(receBuf[1]==tmz1[105])&&(receBuf[2]==tmz1[106])&&(receBuf[3]==tmz1[107])&&(receBuf[4]==tmz1[108])&&(receBuf[5]==tmz1[109])&&(receBuf[6]==tmz1[110])&&(receBuf[7]==tmz1[111]))
{
OUT14=0;delay(k);delay(k);OUT14=1;clear_receBuf();r=0;
}
else if((receBuf[0]==tmz1[112])&&(receBuf[1]==tmz1[113])&&(receBuf[2]==tmz1[114])&&(receBuf[3]==tmz1[115])&&(receBuf[4]==tmz1[116])&&(receBuf[5]==tmz1[117])&&(receBuf[6]==tmz1[118])&&(receBuf[7]==tmz1[119]))
{
OUT15=0;delay(k);delay(k);OUT15=1;clear_receBuf();r=0;
}
else if((receBuf[0]==tmz1[120])&&(receBuf[1]==tmz1[121])&&(receBuf[2]==tmz1[122])&&(receBuf[3]==tmz1[123])&&(receBuf[4]==tmz1[124])&&(receBuf[5]==tmz1[125])&&(receBuf[6]==tmz1[126])&&(receBuf[7]==tmz1[127]))
{
OUT16=0;delay(k);delay(k);OUT16=1;clear_receBuf();r=0;
}
else if((receBuf[0]==tmz1[128])&&(receBuf[1]==tmz1[129])&&(receBuf[2]==tmz1[130])&&(receBuf[3]==tmz1[131])&&(receBuf[4]==tmz1[132])&&(receBuf[5]==tmz1[133])&&(receBuf[6]==tmz1[134])&&(receBuf[7]==tmz1[135]))
{
OUT17=0;delay(k);delay(k);OUT17=1;clear_receBuf();r=0;
}
else if((receBuf[0]==tmz1[136])&&(receBuf[1]==tmz1[137])&&(receBuf[2]==tmz1[138])&&(receBuf[3]==tmz1[139])&&(receBuf[4]==tmz1[140])&&(receBuf[5]==tmz1[141])&&(receBuf[6]==tmz1[142])&&(receBuf[7]==tmz1[143]))
{
OUT18=0;delay(k);delay(k);OUT18=1;clear_receBuf();r=0;
}
else if((receBuf[0]==tmz1[144])&&(receBuf[1]==tmz1[145])&&(receBuf[2]==tmz1[146])&&(receBuf[3]==tmz1[147])&&(receBuf[4]==tmz1[148])&&(receBuf[5]==tmz1[149])&&(receBuf[6]==tmz1[150])&&(receBuf[7]==tmz1[151]))
{
OUT19=0;delay(k);delay(k);OUT19=1;clear_receBuf();r=0;
}
else if((receBuf[0]==tmz1[152])&&(receBuf[1]==tmz1[153])&&(receBuf[2]==tmz1[154])&&(receBuf[3]==tmz1[155])&&(receBuf[4]==tmz1[156])&&(receBuf[5]==tmz1[157])&&(receBuf[6]==tmz1[158])&&(receBuf[7]==tmz1[159]))
{
OUT20=0;delay(k);delay(k);OUT20=1;clear_receBuf();r=0;
}
if(qcbz==0){clear_receBuf();r=0;}
} }
/********************************************************************
结束主函数
*********************************************************************/
//读一字节,调用前需打开IAP 功能,入口:DPTR = 字节地址,返回:A = 读出字节
uchar Byte_Read(uint add)
{
IAP_DATA = 0x00;
IAP_CONTR = ENABLE_ISP; //打开IAP 功能, 设置Flash 操作等待时间
IAP_CMD = 0x01; //IAP/ISP/EEPROM 字节读命令
my_unTemp16.un_temp16 = add;
IAP_ADDRH = my_unTemp16.un_temp8[0]; //设置目标单元地址的高8 位地址
IAP_ADDRL = my_unTemp16.un_temp8[1]; //设置目标单元地址的低8 位地址
//EA = 0;
IAP_TRIG = 0x5A; //先送 5Ah,再送A5h 到ISP/IAP 触发寄存器,每次都需如此
IAP_TRIG = 0xA5; //送完A5h 后,ISP/IAP 命令立即被触发起动
_nop_();
//EA = 1;
IAP_Disable(); //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,
//一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关
return (IAP_DATA);
}
//字节编程,调用前需打开IAP 功能,入口:DPTR = 字节地址, A= 须编程字节的数据
void Byte_Program(uint add, uchar ch)
{
IAP_CONTR = ENABLE_ISP; //打开 IAP 功能, 设置Flash 操作等待时间
IAP_CMD = 0x02; //IAP/ISP/EEPROM 字节编程命令
my_unTemp16.un_temp16 = add;
IAP_ADDRH = my_unTemp16.un_temp8[0]; //设置目标单元地址的高8 位地址
IAP_ADDRL = my_unTemp16.un_temp8[1]; //设置目标单元地址的低8 位地址
IAP_DATA = ch; //要编程的数据先送进IAP_DATA 寄存器
//EA = 0;
IAP_TRIG = 0x5A; //先送 5Ah,再送A5h 到ISP/IAP 触发寄存器,每次都需如此
IAP_TRIG = 0xA5; //送完A5h 后,ISP/IAP 命令立即被触发起动
_nop_();
//EA = 1;
IAP_Disable(); //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,
//一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关
}
//擦除扇区, 入口:DPTR = 扇区地址
void Sector_Erase(uint add)
{
IAP_CONTR = ENABLE_ISP; //打开IAP 功能, 设置Flash 操作等待时间
IAP_CMD = 0x03; //IAP/ISP/EEPROM 扇区擦除命令
my_unTemp16.un_temp16 = add;
IAP_ADDRH = my_unTemp16.un_temp8[0]; //设置目标单元地址的高8 位地址
IAP_ADDRL = my_unTemp16.un_temp8[1]; //设置目标单元地址的低8 位地址
//EA = 0;
IAP_TRIG = 0x5A; //先送 5Ah,再送A5h 到ISP/IAP 触发寄存器,每次都需如此
IAP_TRIG = 0xA5; //送完A5h 后,ISP/IAP 命令立即被触发起动
_nop_();
//EA = 1;
IAP_Disable(); //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,
//一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关
}
void IAP_Disable()
{
//关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,
//一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关
IAP_CONTR = 0; //关闭IAP 功能
IAP_CMD = 0; //清命令寄存器,使命令寄存器无命令,此句可不用
IAP_TRIG = 0; //清命令触发寄存器,使命令触发寄存器无触发,此句可不用
IAP_ADDRH = 0;
IAP_ADDRL = 0;
}
/********************************************************************
结束
*********************************************************************/
|
|