?? x5045.c
字號:
#include <AT89x051.H>
#include <intrins.H>
#include <stdio.h>
//引腳定義,可以自行定義使用
#define CS P3_7
#define SO P1_3
#define SI P1_5
#define SCK P3_0
void RESWDI(void);
void WIPCHK(void);
unsigned char INPUTByte(void);
void OUTByte(unsigned char Byte);
unsigned char ReadReg(void);
void WriteReg(unsigned char Byte);
void WriteByte(unsigned char Byte, unsigned char ADD);
unsigned char ReadByte(unsigned char ADD);
char code dx516[3] _at_ 0x003b;
void main(void)
{
unsigned char Temp;
CS = 0;
SCK = 1;
SI = 1;
SO = 1;
WriteByte(0x00,0x00);
Temp = ReadByte(0x00);
WriteByte(0x00,0x01);
Temp = ReadByte(0x01);
WriteByte(0x20,0x02);
Temp = ReadByte(0x02);
WriteByte(0x00,0x03);
Temp = ReadByte(0x03);
WriteByte(0x00,0x04);
Temp = ReadByte(0x04);
WriteByte(0x00,0x05);
Temp = ReadByte(0x05);
WriteByte(0x0F,0x06);
Temp = ReadByte(0x06);
WriteByte(0xA0,0x07);
Temp = ReadByte(0x07);
WriteByte(0x01,0x08);
Temp = ReadByte(0x08);
WriteByte(0x01,0x09);
Temp = ReadByte(0x09);
EA = 1; //允許CPU中斷
ET0 = 1; //定時器0中斷打開
TMOD = 0x1; //設定時器0為模式1,16位模式
TH0 = 0xB1;
TL0 = 0xE1; //設定時值為20000us(20ms)調整
TR0 = 1; //開始定時
while(1);
}
//定時中斷
void KeyAndDis_Time0(void) interrupt 1
{
// unsigned char data Temp, TempV, TempN;
TR0 = 0;
TH0 = 0xB2;
TL0 = 0x06; //設定時值(己調整)
RESWDI(); //喂狗
TR0 = 1;
}
//---------------------------------
//x5045子程序
//---------------------------------
void RESWDI(void) //復位看門狗(喂狗)
{
CS = 0;
CS = 1;
}
void WIPCHK(void) //檢查WIP位,判斷是否寫入完成
{
unsigned char Temp;
unsigned int TempCyc;
for(TempCyc=0;TempCyc<0xFFFF;TempCyc++)
{
Temp = ReadReg(); //讀狀態寄存器
Temp = Temp&0x01;
if (!Temp)
TempCyc = 0xFFFE;
}
}
void OUTByte(unsigned char Byte) //輸出一個定節
{
unsigned char TempCyc;
for(TempCyc=0;TempCyc<8;TempCyc++)
{
SCK = 0;
SI = Byte & 0x80;
Byte = Byte<<1; //右移 -+
SCK = 1;
}
// SI=0; //使SI處于確定的狀態
}
unsigned char INPUTByte(void) //輸入一個字節
{
unsigned char Temp=0, TempCyc;
SCK=1;
for(TempCyc=0;TempCyc<8;TempCyc++)
{
SO=1;
SCK = 0;
if (SO)
Temp = Temp|0x01; //SO為1,則最低位為1
if(TempCyc<7)
Temp = Temp<<1; //右移
SCK = 1;
}
return Temp;
}
unsigned char ReadReg(void) //向地址寫入數據這里同樣不做先導字處理,只能寫00-FFH
{
unsigned char Temp;
SCK=0;
CS=0;
OUTByte(0x05); //發送05H讀狀態寄存器命令字
Temp = INPUTByte(); //讀狀態寄存器值
CS=1;
SCK=1;
return Temp;
}
void WriteReg(unsigned char Byte) //向地址寫入數據這里同樣不做先導字處理,只能寫00-FFH
{
SCK=0;
CS=0;
OUTByte(0X06);
CS=1;
CS=0;
OUTByte(0x01); //發送01H
OUTByte(Byte); //發送
CS=1;
SCK=1;
WIPCHK(); //判斷是否寫入
}
unsigned char ReadByte(unsigned char ADD) //讀地址中的數據這里不做先導字處理,只能讀00-FFH
{
unsigned char Temp;
SCK=0;
CS=0;
OUTByte(0x3); //發送讀指令03H 如要支持000-FFF則要把高位地址左移3位再為03H相或
OUTByte(ADD); //發送低位地址
Temp = INPUTByte();
CS=1;
SCK=1;
return Temp;
}
void WriteByte(unsigned char Byte, unsigned char ADD) //向地址寫入數據這里同樣不做先導字處理,只能寫00-FFH
{
SCK=0;
CS=0;
OUTByte(0X06);
CS=1;
CS=0;
OUTByte(0x2); //發送寫指令02H 如要支持000-FFF則要把高位地址左移2位再為02H相或
OUTByte(ADD); //發送低位地址
OUTByte(Byte); //發送數據
CS=1;
SCK=1;
WIPCHK(); //判斷是否寫入
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -