步進(jìn)電機(jī)脈沖控制板DXP SCH PCB資料.rar
(353.87 KB, 售價(jià): 5 E幣)
51單片機(jī)C語言控制程序,帶掉電記憶功能.rar
(24.59 KB, 售價(jià): 5 E幣)
PLC控制步進(jìn)電機(jī)脈沖信號(hào)發(fā)生器原理圖及例程.doc
(993.5 KB, 售價(jià): 2 E幣)
產(chǎn)品使用手冊(cè).doc
(934 KB, 售價(jià): 1 E幣)
使用芯片:STC15F104E
晶振:33MHZ
編譯環(huán)境:Keil
*********************************************************************/
/********************************************************************/
#include "reg52.h"
#include <intrins.H>
#define uchar unsigned char //宏定義字符型變量
#define uint unsigned int //宏定義整型變量
/********************************************************************
寄存器設(shè)置
*********************************************************************/
sfr IAP_DATA =0xc2; //數(shù)據(jù)寄存器
sfr IAP_ADDRH =0xc3; //地址寄存器
sfr IAP_ADDRL =0xc4; //地址寄存器
sfr IAP_CMD =0xc5; //命令寄存器
sfr IAP_TRIG =0xc6; //觸發(fā)寄存器
sfr IAP_CONTR =0xc7; //擦除寄存器
/********************************************************************
命令定義
*********************************************************************/
#define CMD_IDLE 0 //EEPROM無操作
#define CMD_READ 1 //讀取字節(jié)
#define CMD_PROGRAM 2 //寫入字節(jié)
#define CMD_ERASE 3 //擦除字節(jié)
/********************************************************************
編程周期由晶振決定
*********************************************************************/
//#define ENABLE_IAP 0X80 //編程周期由晶振決定(如果<30MHZ選用此項(xiàng))
//#define ENABLE_IAP 0X81 //編程周期由晶振決定(如果<24MHZ選用此項(xiàng))
//#define ENABLE_IAP 0X82 //編程周期由晶振決定(如果<20MHZ選用此項(xiàng))
#define ENABLE_IAP 0X83 //編程周期由晶振決定(如果<12MHZ選用此項(xiàng))
//#define ENABLE_IAP 0X84 //編程周期由晶振決定(如果<6MHZ選用此項(xiàng))
//#define ENABLE_IAP 0X85 //編程周期由晶振決定(如果<3MHZ選用此項(xiàng))
//#define ENABLE_IAP 0X86 //編程周期由晶振決定(如果<2MHZ選用此項(xiàng))
//#define ENABLE_IAP 0X87 //編程周期由晶振決定(如果<1MHZ選用此項(xiàng))
#define IAP_ADDRESS 0X0000 //內(nèi)部EEPROM地址
/********************************************************************
定義繼輸入輸出
*********************************************************************/
sbit JIA=P3^1; //
sbit JIAN=P3^0; //
sbit EN=P3^2; //
sbit P35=P3^5; //
bit write=0;
/********************************************************************
初始定義
*********************************************************************/
uint tcnt1; //脈沖計(jì)數(shù)
uint t1;
bit write;
uchar sudu;
/********************************************************************
延時(shí)100MS函數(shù)
*********************************************************************/
void Delay100ms()
{
uchar i, j, k;
_nop_();
i = 5;
j = 144;
k = 71;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
/********************************************************************
操作函數(shù)
*********************************************************************/
void IapIdle()
{
IAP_CONTR=0;
IAP_CMD=0;
IAP_TRIG=0;
IAP_ADDRH=0X80;
IAP_ADDRL=0;
}
/********************************************************************
讀取一個(gè)字節(jié)函數(shù)
*********************************************************************/
uchar IapReadByte(uint addr)
{
uchar dat;
IAP_CONTR=ENABLE_IAP;
IAP_CMD=CMD_READ;
IAP_ADDRL=addr;
IAP_ADDRH=addr>>8;
IAP_TRIG=0X5A;
IAP_TRIG=0XA5;
_nop_();
_nop_();
_nop_();
dat=IAP_DATA;
IapIdle();
return dat;
}
/********************************************************************
寫入一個(gè)字節(jié)函數(shù)
*********************************************************************/
void IapProgramByte(uint addr,uchar dat)
{
IAP_CONTR=ENABLE_IAP;
IAP_CMD=CMD_PROGRAM;
IAP_ADDRL=addr;
IAP_ADDRH=addr>>8;
IAP_DATA=dat;
IAP_TRIG=0X5A;
IAP_TRIG=0XA5;
_nop_();
_nop_();
_nop_();
IapIdle();
}
/********************************************************************
擦除一個(gè)字節(jié)函數(shù)
*********************************************************************/
void IapEraseSector(uint addr)
{
IAP_CONTR=ENABLE_IAP;
IAP_CMD=CMD_ERASE;
IAP_ADDRL=addr;
IAP_ADDRH=addr>>8;
IAP_TRIG=0X5A;
IAP_TRIG=0XA5;
_nop_();
_nop_();
_nop_();
IapIdle();
}
/********************************************************************
按鍵判斷函數(shù)
*********************************************************************/
void KEY()
{
if(JIA==0){Delay100ms();if(JIA==0){Delay100ms();sudu++;write=1;if(sudu>=30)sudu=30;while(!JIA);Delay100ms();}}
if(JIAN==0){Delay100ms();if(JIAN==0){Delay100ms();sudu--;write=1;if(sudu<=1)sudu=1;while(!JIAN);Delay100ms();}}
if(EN==0)TR0=1;else TR0=0;
switch(sudu)
{
case 1: t1=1;break;//2K
case 2: t1=2;break;//1.6k
case 3: t1=3;break;//1.33k
case 4: t1=4;break;//2K
case 5: t1=5;break;//1.6k
case 6: t1=6;break;//1.33k
case 7: t1=7;break;//1.14k
case 8: t1=8;break;//1k
case 9: t1=9;break;// 880
case 10: t1=10;break;// 800
case 11: t1=12;break;// 660
case 12: t1=14;break;// 580
case 13: t1=16;break;// 500
case 14: t1=18;break;// 450
case 15: t1=20;break;// 400
case 16: t1=22;break;// 360
case 17: t1=23;break;// 350
case 18: t1=26;break;// 300
case 19: t1=30;break;// 260
case 20: t1=33;break;// 240
case 21: t1=37;break;// 220
case 22: t1=41;break;// 200
case 23: t1=50;break;// 160
case 24: t1=60;break;// 135
case 25: t1=65;break;// 125
case 26: t1=75;break;// 110
case 27: t1=80;break;// 100
case 28: t1=95;break;// 84
case 29: t1=120;break;//60
case 30: t1=150;break;//50
case 31: t1=300;break;//30
case 32: t1=1000;break;//8
case 33: t1=10000;break;//1
case 34: t1=20000;break;//1
case 35: t1=30000;break;//1
case 36: t1=40000;break;//1
case 37: t1=60000;break;//1
default:break;
}
}
/********************************************************************
定時(shí)中斷服務(wù)函數(shù)
*********************************************************************/
void t0(void) interrupt 1 using 0 //定時(shí)中斷服務(wù)函數(shù)
{
tcnt1++;
if(tcnt1>=t1)
{
tcnt1=0;
P35=!P35;
}
}
/********************************************************************
主函數(shù)
*********************************************************************/
void main()
{
uchar Q;
TMOD=0x02; //定時(shí)器工作在方式2
TH0=0x06; //對(duì)TH0 TL0 賦值
TL0=0x06;
TR0=0; //關(guān)定時(shí)
ET0=1; //開定時(shí)器
EA=1; //開總中斷
P35=0;//脈沖輸出腳
Q=IapReadByte(0);
sudu=Q;
while(1)
{
KEY();
if(write==1)
{
write=0;
IapEraseSector(0); //擦除扇區(qū)
IapProgramByte(0,sudu); //寫入數(shù)據(jù)
……………………
…………限于本文篇幅 余下代碼請(qǐng)下載附件…………
| 歡迎光臨 ELEOK (http://m.afoofa.cn/) | Powered by Discuz! X5.0 |