STC12C5A60S2单片机设计的20路NPN输入20路晶体管输出二维码扫码控制电路及程序分享
下图为二维码扫码器
【声明】此程序仅用于学习与参考!
*********************************************************************/
#include "hedder\\STC12C5A60S2.h"
#include"hedder\\DODI.h"
#include <intrins.h>
#defineuchar unsigned char
#defineuintunsigned 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;//接收缓冲区
bit write=0;
uchar k=100;
bit qcbz=0;
uchar xdata tmz1;//接收缓冲区
//uchartmz2;//接收缓冲区
uchar y;
/********************************************************************
函数声明
*********************************************************************/
union union_temp16
{
uint un_temp16;
uchar un_temp8;
}
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=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
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=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
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=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
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=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
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=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
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=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
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=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
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=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
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=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
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=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
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=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
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=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
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=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
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=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
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=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
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=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
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=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
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=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
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=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
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=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
tmz1=receBuf;
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 = 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);
}
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=SBUF; //把接受的数据存储到BUT数组中
if(r>=8)
{
flag_zx=1;
}
}
if(flag_zx==1)
{
flag_zx=0;
if((receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1))
{
OUT1=0;delay(k);delay(k);OUT1=1;clear_receBuf();r=0;
}
else if((receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1))
{
OUT2=0;delay(k);delay(k);OUT2=1;clear_receBuf();r=0;
}
else if((receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1))
{
OUT3=0;delay(k);delay(k);OUT3=1;clear_receBuf();r=0;
}
else if((receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1))
{
OUT4=0;delay(k);delay(k);OUT4=1;clear_receBuf();r=0;
}
else if((receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1))
{
OUT5=0;delay(k);delay(k);OUT5=1;clear_receBuf();r=0;
}
else if((receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1))
{
OUT6=0;delay(k);delay(k);OUT6=1;clear_receBuf();r=0;
}
else if((receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1))
{
OUT7=0;delay(k);delay(k);OUT7=1;clear_receBuf();r=0;
}
else if((receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1))
{
OUT8=0;delay(k);delay(k);OUT8=1;;clear_receBuf();r=0;
}
else if((receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1))
{
OUT9=0;delay(k);delay(k);OUT9=1;clear_receBuf();r=0;
}
else if((receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1))
{
OUT10=0;delay(k);delay(k);OUT10=1;clear_receBuf();r=0;
}
else if((receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1))
{
OUT11=0;delay(k);delay(k);OUT11=1;clear_receBuf();r=0;
}
else if((receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1))
{
OUT12=0;delay(k);delay(k);OUT12=1;clear_receBuf();r=0;
}
else if((receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1))
{
OUT13=0;delay(k);delay(k);OUT13=1;clear_receBuf();r=0;
}
else if((receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1))
{
OUT14=0;delay(k);delay(k);OUT14=1;clear_receBuf();r=0;
}
else if((receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1))
{
OUT15=0;delay(k);delay(k);OUT15=1;clear_receBuf();r=0;
}
else if((receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1))
{
OUT16=0;delay(k);delay(k);OUT16=1;clear_receBuf();r=0;
}
else if((receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1))
{
OUT17=0;delay(k);delay(k);OUT17=1;clear_receBuf();r=0;
}
else if((receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1))
{
OUT18=0;delay(k);delay(k);OUT18=1;clear_receBuf();r=0;
}
else if((receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1))
{
OUT19=0;delay(k);delay(k);OUT19=1;clear_receBuf();r=0;
}
else if((receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1)&&(receBuf==tmz1))
{
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; //设置目标单元地址的高8 位地址
IAP_ADDRL = my_unTemp16.un_temp8; //设置目标单元地址的低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; //设置目标单元地址的高8 位地址
IAP_ADDRL = my_unTemp16.un_temp8; //设置目标单元地址的低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; //设置目标单元地址的高8 位地址
IAP_ADDRL = my_unTemp16.un_temp8; //设置目标单元地址的低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;
}
/********************************************************************
结束
*********************************************************************/
感谢分享 !
STC12C5A60S2系列是STC 第一代 1T 8051;
STC15W4K32S4系列是 STC 第二代 1T 8051;
STC8H8K64U系列是 STC 第三代 1T 8051;
STC32是32位8051 {:4_165:}
页:
[1]